Luca Orlandi
Luca Orlandi

Reputation: 3

How can i convert a Pyc file to Exe?

I need to obfuscate my Python code, I know the best way would be to convert it to a C file but I can't do that.

According to this article, although not 100% effective, I can "obfuscate" the code using:

python -OO -m py_compile <filename.py>

Doing this generates a PYC file, I tried to convert it to Exe using the Pyinstaller doing this:

pyinstaller --onefile filename.pyc

but it doesn't work, how can I then convert the obfuscated Pyc file to Exe? Is there any other way to obfuscate the code and then convert it to Exe without converting it to C language?

Upvotes: -4

Views: 1462

Answers (2)

qfcy
qfcy

Reputation: 145

In addition to pyarmor, there is another tool for obfuscation: pyc-zipper
Firstly: use pip to install it:

pip install pyc-zipper

The pyc-zipper tool can be used by two ways, either by hooking pyinstaller or by command-line calls, and the most convenient one is to hook the pyinstaller library.

1.Hook PyInstaller

The feature of Hooking PyInstaller utilizes the .spec file generated automatically by PyInstaller itself.
After calling pyinstaller file.py, a file named file.spec will be generated, which is generally a Python file.
You only need to add the following at the beginning of file.spec:

from pyc_zipper import hook_pyinstaller
hook_pyinstaller()

Additionally, you can customize your own parameters, such as:

hook_pyinstaller(comp_module="lzma", no_obfuscation=False,
                 obfuscate_global=True, obfuscate_lineno=True,
                 obfuscate_filename=True, obfuscate_code_name=True,
                 obfuscate_bytecode=True, obfuscate_argname=False)

Among these parameters, comp_module is a string representing the name of the compression module, defaulting to None.
Finally, run:

pyinstaller file.spec

Note that you cannot use pyinstaller file.py there, as it will generate a new spec file that will overwrite file.spec.
If you see output information from pyc-zipper while running PyInstaller, such as:

3545 INFO: Building PYZ because PYZ-00.toc is non existent
3545 INFO: Building PYZ (ZlibArchive) E:\Git-repositories\Github-publish\build\file\PYZ-00.pyz
3919 INFO: Building PYZ (ZlibArchive) E:\Git-repositories\Github-publish\build\file\PYZ-00.pyz completed successfully.
3926 INFO: checking PKG
3927 INFO: Building PKG because PKG-00.toc is non existent
3927 INFO: Building PKG (CArchive) PKG-00.pkg
pyc-zipper: processing ('pyiboot01_bootstrap', 'D:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\PyInstaller\\loader\\pyiboot01_bootstrap.py') in _load_code
Obfuscating code '<module>'
Obfuscating code 'NullWriter'
Obfuscating code 'write'
Obfuscating code 'flush'
Obfuscating code 'isatty'
Obfuscating code '_frozen_name'
Obfuscating code 'PyInstallerImportError'
Obfuscating code '__init__'
Obfuscating code 'PyInstallerCDLL'
Obfuscating code '__init__'
Obfuscating code 'PyInstallerPyDLL'
Obfuscating code '__init__'
Obfuscating code 'PyInstallerWinDLL'
Obfuscating code '__init__'
Obfuscating code 'PyInstallerOleDLL'
Obfuscating code '__init__'
pyc-zipper: processing ('file', 'E:\\Git-repositories\\Github-publish\\file.py') in _load_code
Obfuscating code '<module>'

Then the obfuscation is successful.

2.Directly call in command-line

pyc-zipper [options] [file1 file2 ...]

The available options are:

pyc-zipper [-h] [--obfuscate] [--obfuscate-global]
                [--obfuscate-lineno] [--obfuscate-filename]
                [--obfuscate-code-name] [--obfuscate-bytecode]
                [--obfuscate-argname] [--unpack] [--version]
                [--compress-module COMPRESS_MODULE] [--no-obfuscation]
                [file1 [file2 ...]]

For example, use a pyc file:

pyc-zipper --obfuscate app.pyc --compress-module lzma

The obfuscated pyc file will use lzma module to decompress itself, like EXE packing.
If a py file is used, pyc-zipper will generate a pyc file (app.pyc in this example):

pyc-zipper --no-obfuscation app.py --compress-module zlib

Additionally, if your terminal prompts that the pyc-zipper command cannot be found, especially on Windows, you can use python -m pyc_zipper as an alternative.

For the detailed documentation and how it works, you could refer to the README file in pyc-zipper · GitHub.

Note: I'm the developer of pyc-zipper.

Upvotes: 1

Nicholas Obert
Nicholas Obert

Reputation: 1628

From How to Obfuscate Python Scripts With PyArmor:

Install PyArmor:

pip install pyarmor

Obfuscate script.py with PyArmor:

pyarmor obfuscate script.py

The original script.py file:

def main():
    print("Hello World")


if __name__ == '__main__':
    main()

After obfuscation:

from pytransform import pyarmor_runtime
pyarmor_runtime()
__pyarmor__(__name__, __file__, b'\x50\x59\x41\x52\x4d\x4f\x52\x00\x00\x03\x0a\x00\x6f\x0d\x0d\x0a\x09\x33\xe0\x02\x00\x00\x00\x00\x01\x00\x00\x00\x40\x00\x00\x00\xb2\x17\x00\x00\x00\x00\x00\x18\x4a\x9d\x70\x63\x25\x3b\xaf\x0e\x31\x3b\x1a\x3a\x18\x32\xa5\x92\x00\x00\x00\x00\x00\x00\x00\x00\x86\x7e\x95\xbd\xc0\x82\x5f\x72\xa1\xc3\x6d\x58\x28\xe2\x51\xd2\xee\x48\xee\x96\x83\x57\x9a\xf9\x45\x75\x6a\xe2\x4d\x35\xbd\xfb\xf0\xb4\xbe\xf4\xf3\x5a\x9e\x4c\x88\xd7\x42\x83\x60\x12\xa9\xbb\x4f\xb3\x18\xb5\x43\x0f\x1e\x72\xd1\xde\xd3\xc1\xde\x6c\x32\x38\x78\x51\xb0\x25\x1f\x11\x5d\x64\xd3\xf2\x81\x68\x3e\xe0\x6d\xc6\xcf\x6b\x9a\x27\x92\xad\xee\x97\xbf\xc6\x58\x2c\x5d\x7a\x21\xee\x65\xd8\x0c\xb0\x59\x04\xb8\x92\x29\x85\x61\x4c\x61\xe9\xc1\x0b\x98\x85\xe3\x41\x45\x34\xf1\xe8\xe2\x1a\xad\x88\x24\xb9\xca\xdc\x02\xbb\x63\x6d\x63\xca\x66\x32\x9a\x40\x12\x2a\xa6\xf7\x22\xbe\xea\x72\xab\x2c\x2f\x20\xbc\x77\xaa\xdb\x07\x9a\xf1\xff\x3e\x8f\xea\xa8\xa5\x7b\xe8\xa8\x85\x0c\x8e\x1a\xc4\xb2\x9b\xc8\x2d\xcd\xf6\xa4\xae\x8f\xcf\x76\xb7\x56\xb4\xe2\xcf\xaa\xd1\xeb\xfd\x29\xed\x77\x09\xc1\xb2\xc9\xd3\xce\x97\x60\x59\x22\xa3\xfa\x2c\x6e\x0a\xc1\x61\x87\x39\x96\x7e\x66\xc9\x79\x86\x42\x1b\xe4\x93\x83\x59\x42\xd9\x14\xba\x3e\x03\x08\xaf\x0a\x1d\xad\x91\x86\xf8\x2f\x5c\x5a\x1e\xd7\x74\x12\x9e\x08\xf4\x4e\xa0\xb2\x13\x8c\xce\x00\x97\x1d\x3d\xa5\x56\xe3\xe3\x28\x05\x1d\x0d\x1d\xc0\x85\x3b\xfe\xad\x81\x51\x6f\x1e\x81\xdc\x76\xdb\x5c\x4b\xa2\xf6\xe9\xbb\x11\x12\x47\xcd\x9f\xb3\x05\x73\xf8\xec\x36\xd5\xc9\x29\x54\x8d\x61\xb4\xaa\xec\x2c\xfa\x13\xdc\xed\xf9\xe7\x15\x08\xfa\xcd\x94\x02\x06\x8a\x43\xfc\xc2\x2f\xb4\x75\xeb\xe9\xa5\x85\x45\x99\xe0\xe8\xb5\x86\x3c\x54\x5e\x1f\x08\xaa\x19\x3a\xe3\x9e\xfd\x0e\x22\xaa\xe0\x0b\x52\xae\x1e\xd0\xf6\x52\xd3\x30\x06\xe0\x2e\x9b\x50\x90\x76\x96\xbf\xa2\xe1\x5a\x3f\x8d\x2f\xcb\xce\xab\x4a\xa1\x6e\x89\x91\xcc\xa6\x56\xf1\x65\xd2\xdc\xa9\xd9\x80\x6e\x82\x30\x5e\x6e\x7d\x82\x13\xfd\xe6\x5a\xb2\xcd\x4c\xab\xaa\x63\x79\x1d\x20\x8a\x8e\xd1\xea\x58\x05\xa5\xdc\x93\x65\x64\x74\xa6\x58\x40\x90\xa8\x7e\xd1\x7f\xcd\x40\xc1\x39\x0e\xf0\xa6\xd5\x7f\x00\xff\xd1\x37\x93\x0c\x10\x18\x18\xe8\xa1\x15\x42\x4f\x12\x4c\xcc\x9b\x58\x90\x95\x0e\xf3\xc4\x09\x76\x68\x7d\x77\x6e\xd4\xae\x5c\x5c\x95\x28\x01\x51\x9b\xeb\x08\x04\x6f\x3c\x48\xb5\x33\x92\xbf\xaa\xb0\x88\xcd\x76\x9f\x2b\x5a\x7b\xfe\xa2\x27\x92\x56\xed\xe9\xe2\x4b\x15\x3f\x47\x51\x82\x1b\x87\x1e\xcd\x6b\xfa\xc8\xb3\xa9\xce\xd6\x89\x7c\x98\x90\x95\xdf\x4c\xad\x4c\x9f\x3d\x7b\x27\x44\x53\x32\x5b\x9c\x5c\xad\x9b\xb2\x05\x33\xd9\xde\x54\x03\xb2\x25\xdc\x5e\xcd\x53\x3f\x39\xbb\x1a\x39\x5b\x13\x18\x49\x38\x0b\x1d\xd2\x8b\x78\x6a\xa0\x07\x12\x0f\x44\x71\xa4\xd5\x38\x29\xe0\x0e\x6d\xc5\x72\x15\xe3\xab\x89\x7c\x37\x1b\xb5\xb3\x87\x7c\xd2\x5d\xdc\xfc\xe5\x9d\xe6\xec\x9e\xb1\x39\xe1\x41\x99\x25\xe8\xb9\xd2\x92\x54\x24\x31\x4d\x1b\xa2\xc9\x91\xde\xac\x2a\xa5\x0d\xb8\x56\x69\x65\x29\xa1\xf5\xf8\x0d\x10\x3f\x26\x8c\x49\x00\x72\x27\xbb\x4b\x66\x9f\x8f\x31\x31\x0e\xb5\xa8\x40\xa9\xe0\xef\x80\x50\xec\xdd\xe9\x79\x10\x7f\x98\x29\xc5\xe2\x84\x98\xc7\x4f\xc0\xe7\x11\xae\xb9\x2f\xe0\x39\x91\xce\x8f\xaa\xb4\x5a\x0f\x53\x78\x8f\xbc\x7e\x0c\x81\x5d\x32\x0b\xcc\x0b\x9d\xcd\x8d\x88\xe2\xff\x62\x23\xbb\x45\x92\xd2\x6b\xc0\x2b\x60\xf7\x63\x94\xbf\x3c\xc6\x72\x88\x0f\x92\xbd\xce\xc2\xcb\x4c\x8b\x99\x8d\x8b\x60\xe6\x38\x7b\x1a\xd7\x67\xbf\x31\x68\x49\x92\x08\xfb\xdd\x89\xde\x05\x88\x7f\x54\x76\xba\x96\x60\x2b\x07\xf6\xc3\xaa\xa9\x71\xf3\x05\xd8\xb9\x22\xbc\x6e\x6e\xa7\x81\x8a\x2e\x9d\x70\xa0\x16\x90\xc9\x51\x05\x8f\x5d\xec\xb8\x7e\x9b\xef\x32\x35\xca\x98\xd4\x2f\xde\x0b\xc7\x00\x6e\xb8\x34\xf3\xed\xa0\x1b\xfc\x66\x03\x45\x4d\xa4\xa4\x31\xe8\x9d\x23\x38\x08\x26\xcd\x6d\x33\x1e\xcb\xd0\x9a\xc4\xca\x4e\xbc\x11\x71\xfc\xdc\xcb\x5f\x61\x06\xf9\xfd\xe6\x22\xdb\x89\xc0\x43\x14\x63\x36\xc3\x70\x63\xb7\x57\x15\x73\x0c\xa6\x5a\xc5\x86\x84\x80\x98\xc9\x1f\x56\x2b\x2e\xf3\x2d\x35\x70\xed\x4e\x01\xef\x03\x71\x66\xaa\x49\xdf\xcc\xa9\x53\x85\x35\x37\x40\x64\x25\x34\xb8\x27\xb9\x86\x3a\x50\xfe\x40\x4b\xfe\x89\x3e\xa5\x5a\xc5\xc0\xb5\x1d\x2a\x40\xd1\x3a\x27\x12\x4a\x98\xcb\xaf\xb4\xdc\xce\xde\xf7\xf8\x22\xa9\x98\x38\x32\x58\xf3\xc3\xe8\x20\x4d\x48\x2c\xfe\x4f\x24\x79\xd0\x67\xec\xaa\x96\xee\xf8\x5c\x27\xef\x09\x26\xe1\xd6\x95\x5f\x20\xfb\xda\x31\x01\x32\xf1\xb5\x5d\x8e\x51\x38\x67\x96\x5b\x0e\x7d\x55\xe6\xfa\xc5\x83\x92\x1e\x64\xb5\x5e\xbb\x2c\xad\xb3\xb3\x98\x8d\x15\xc6\xd3\xe4\x35\xd8\x43\x40\x45\x28\x30\xf6\x18\x23\x90\x1f\xaf\xa3\xac\xda\xdd\xf3\x4a\xca\x87\x4b\x36\x17\x45\x42\xad\x93\xed\x5f\x63\xd3\x3c\x7e\x64\x7d\xb8\xfb\x90\x43\xc1\xc0\x69\x2e\x9a\xdc\x26\xd5\xa9\x7f\x03\x44\xe6\xba\x51\x1f\x89\x75\xe6\xec\x9a\xee\x98\x9b\x55\x94\xf4\xd0\x73\xaf\x5b\x58\x97\xf5\x3f\xa9\xf9\x7a\x26\x16\x89\xd6\x3a\x54\x9c\x5c\x43\xaf\xdb\x00\x5e\x30\x59\x69\x6d\x60\x76\x77\xbd\xe0\x86\x78\xf3\xf6\xf9\x32\xfb\x5d\xf6\xf2\x09\x3f\x48\xf6\x51\xde\x1a\x88\x01\x89\x5e\x02\x9f\x48\xac\x27\xf2\xf5\x70\x1f\xd1\x2c\x3a\x48\x61\xd3\x22\xe2\xbf\x85\xb8\x63\x48\x72\xce\x50\x66\x80\x3e\x44\x8d\xbc\x15\x02\x2b\x7a\x1b\x76\xbd\x46\xca\x4f\xc6\x5d\x52\x02\x0c\xab\x67\x8a\xe8\x1b\xdd\x14\x93\x4d\x47\xf6\x03\xc3\xa1\xd1\x76\x01\xc6\x88\x06\xa1\x2e\xd2\x5e\x07\xde\x31\x30\x2f\xe5\xf1\xf2\xf6\x25\x88\x86\x38\xdc\x19\x1f\x55\x19\xad\x93\x06\x43\x48\x89\x67\xba\xfa\x2d\x19\xfe\x90\xb1\xff\x41\xb4\xf6\x65\x88\xd3\xb7\x7e\x96\x02\x7d\xa4\x83\xc3\x67\xb6\xed\x66\xa5\x98\x1f\xcf\xc2\xa3\xb4\xc5\x62\xfb\x14\x7e\xdc\x47\x33\x9d\x5f\x56\x6d\x29\xd1\xec\xa3\x05\xe9\x4f\x97\x00\x20\xea\x0b\xd1\x9d\x18\x14\x32\x24\xa5\x3b\xd1\x7b\x2c\xfe\xc0\xa3\x07\xc3\x04\xbd\xb0\x1b\x24\x4e\xbb\xc5\x30\x43\x2d\xc0\x59\x30\x0d\x8f\x2f\xb0\x4c\x30\xd3\x81\xe0\x79\xf9\x0f\x83\x72\x40\xa9\xba\x31\xd2\xa0\x86\x8e\x89\xff\x60\x5d\xec\x8a\xf7\x76\xe1\x14\x33\x9b\x6a\x12\xb6\xc2\xb7\xc1\xd2\x49\xd0\xd5\x11\x12\xe1\x53\x05\xfc\x62\x13\xaa\x33\x73\xd9\x87\x13\x56\xb2\xfe\x68\xed\x37\x9e\x8c\x9d\xa6\x00\x80\xbb\x31\xca\x42\xcf\xb9\x3d\x6d\x9d\x97\x7c\xb3\x83\x87\x2b\x1a\xba\x93\x4b\x42\xc6\x96\xe4\xbd\x83\xab\x72\xf4\xc3\x3f\xa9\x64\x7a\x16\x83\x75\x70\x8e\xe6\x0b\x60\xa5\xe2\xd4\xc5\x1a\xb4\x39\x5b\xb3\x77\x5b\xcd\x96\x74\x5a\xde\x1a\xdd\x59\x8b\x8a\xe9\xd9\xb5\xfe\xec\x53\x1a\xc0\x9d\x70\x67\x7a\xf9\x3e\xfb\xea\xbb\x7e\xeb\xe7\xb6\x9c\x5b\x21\x65\x42\xe9\x4b\x58\x84\x1c\x62\xe0\xd1\x15\x34\xab\x93\x91\xd8\xad\xaa\x74\x58\x17\xcb\x50\x00\x71\xd0\x92\x27\xe7\x12\xaa\xd2\xd0\x24\x39\xa6\xa1\xf8\xd8\x3d\x0e\x49\x86\x26\xb6\x67\xf6\x07\xf3\xaf\x95\x49\xee\xc1\x2a\x78\xbc\xd3\xa1\x39\x90\x9f\x2e\x79\xcc\x7e\x7d\x6a\xb6\x1b\x26\x9b\x54\x1c\x10\xfa\x02\xc6\x07\x0a\xc3\x15\xce\x16\xf5\x36\x38\x39\xf9\xf0\xe3\xaf\x38\x90\xf7\xe4\xf5\xcc\x16\x12\xb1\xaf\xf4\x80\x5c\xd8\xc2\x12\x71\xd2\x56\x8c\x24\x0d\x41\xbb\x04\xcd\xdb\xa9\x1d\x81\x1c\x92\xd5\x34\x5f\xc9\x8d\xcc\xc3\x12\xef\x19\xe5\x48\x44\x24\xa5\x57\xce\x0d\xa9\x72\xfb\xc3\x6c\x1b\xdb\xdf\x4e\x63\x54\xdf\xc5\x49\x95\x24\xf9\xca\x9c\x58\x61\x03\xff\x4d\xce\x29\x0d\x9b\xc2\x99\x73\xe1\xf6\xfd\xde\x52\x17\x07\x08\xe8\x82\x75\xce\x6f\xa9\x38\xdc\xbf\xa6\x64\x0c\x5c\xd2\x5c\x6d\x1c\x4c\x3b\xb7\x3e\x45\x7d\x34\x9f\x54\x8a\xbc\x7e\xa8\x7d\x66\x3d\xc8\x06\xbb\x2d\x5b\x73\x70\x6d\x94\xa0\xa6\xe8\x67\x00\x3d\x0e\xdb\x0d\xad\xa2\x2e\x8b\xc5\x6d\xc1\xcf\x59\x3b\x3a\x8a\x68\xec\xca\xf5\x70\x13\x05\xb9\xbb\xaa\x2a\x4c\xe7\x95\x6a\xe3\xc2\xb7\x21\xac\x84\x22\x94\xc3\xfb\x49\x87\x24\x19\xeb\x1b\xf6\x54\x4e\x8f\x82\x91\x18\x74\xc3\x18\x6e\xbf\xfd\x22\xb2\xf0\x53\x63\x18\x7d\x25\xfe\x97\x06\x4c\x56\x84\x8a\x56\x44\x0b\x44\xd1\x35\x8a\xad\x4a\x85\xc6\x6d\x85\x47\x28\x30\xb0\xb0\x41\x97\xec\x77\x98\xa3\x0f\xeb\xdf\x5c\x7e\xe1\x67\x3b\xf1\x39\x6c\x34\x38\xa2\x34\x43\x14\x3a\xa0\xcc\x7f\x6c\xee\x2c\x87\xa9\xdc\x22\xaa\x4d\x48\xb9\xbb\x9a\x81\x54\x04\x1f\xc6\x0d\x30\x96\xdd\x3d\xf2\xce\xde\x30\x94\xd5\xfa\xd2\x19\x7f\x7a\x25\x70\xff\x68\xc3\xbe\x05\x21\x29\x7d\xe2\x85\x90\xa8\x14\xd9\x27\xd4\x34\x19\xa2\x19\x87\xe7\xf4\xde\xbb\x14\x11\xca\xdc\x3d\x55\xc3\xdc\x9e\x31\xae\x6f\xef\x84\xe2\xbe\x8a\xfb\x8f\x21\x27\xcd\x99\xfa\x9f\xda\xa5\xe4\x81\xb7\xd1\x79\xed\x61\x58\x5d\x31\x7f\x19\x7e\x3f\xec\xe6\xbf\x64\x42\x81\x32\xe5\xac\x74\x9c\x8d\x69\xe4\xb1\x2c\x3b\x77\x4d\xe4\x6a\xd5\x4c\xa9\xd7\x66\x4a\x93\x94\x48\xfa\x25\x73\x75\x52\xc2\xfa\xd0\xed\x43\x43\x3b\x9d\x9c\x62\x3f\x7e\xfc\xa3\xff\xda\x79\xc0\x67\x0e\xf7\xc9\x8b\x0c\x73\xca\xf4\x72\xe8\x14\xcb\xa8\x80\x38\xa1\xeb\xce\xa0\x67\xd1\x57\x88\x7e\x6e\xc8\x35\x1f\xc5\x81\x3f\x79\x76\xfd\x90\xbb\x0e\x5d\xb3\x83\x2f\x34\x6c\xbf\x00\x14\xf5\xa9\x9a\x5b\x73\x66\xec\xe5\xca\xab\x77\x0a\xa0\x9d\xce\x98\x8a\x0e\x17\x5f\x9e\xf7\xfe\xdb\xee\x88\xb6\xd3\x54\x76\xa0\xbb\xa4\x9a\xd7\x94\x27\x11\x8c\x03\x71\x84\x00\xa6\xad\xa7\x3c\xbb\x13\x9a\x1d\x29\x8c\x1b\xe5\x81\x79\x85\xe8\xdc\xfb\x9f\xef\x63\xb9\x72\xd9\x54\x87\x4a\x04\x31\xa5\x16\x4c\xb4\x64\xc9\x03\xc5\x08\x18\x6e\x41\x74\xac\xfb\x6f\xca\x64\xcf\x27\xc5\xb1\x7e\x40\xb8\x5c\xce\xa2\xc5\xea\x46\x64\x2e\x0b\xce\xd9\xda\xfc\xf0\x89\x20\xdf\x85\x80\xa4\xe5\x37\xd0\xb3\x0e\x89\xab\x34\x64\xad\x3a\x6c\xca\xa2\x88\xbd\xd3\x79\xe1\x38\xee\x3b\xaf\x34\x21\x75\x8e\xc0\xf8\xd3\x63\xb6\x63\x6b\xb2\x39\x4f\x13\xad\x01\xd3\x1f\xbe\x38\x74\xa6\xf0\x83\x83\x6e\x67\x9e\x4a\xe4\xfd\x8f\x3a\x71\x1b\x63\x25\xe9\xc4\x1a\x47\x1b\xe6\xff\xad\xd4\x7f\xa5\xdb\xd3\x57\xc3\xe8\xf6\x2e\x34\x3b\x55\x5a\xeb\x72\x65\xad\xc2\x75\x28\x64\x68\x71\xa5\x6e\x5a\xf1\x82\x85\x68\x3d\x70\x19\xd0\x8c\xcf\x36\x7d\x11\x42\x10\x0c\x94\x43\x2d\xf2\x45\x72\x4d\x32\xac\xea\x9a\x4f\x6d\xb0\x0d\xf1\xfb\xf0\xf9\xe4\xb5\x97\xb9\x9a\x52\x10\x8c\xa6\x27\x65\xd0\x23\xde\x93\x04\x35\xc0\xb4\xb1\x20\xc7\x2c\xc2\xc7\xfc\xb7\x27\xce\x67\x0b\xc4\xaa\xf5\xd6\x2e\x99\x1e\x8b\x69\xb5\x5c\x44\xfe\xa5\x66\xfe\x1a\xb4\x12\xbc\x1e\x98\xa5\x7f\x2c\x96\x45\x10\x0b\xc8\x79\x98\x34\x5b\x2e\x94\xb9\x15\x0f\x18\x9b\xe7\x27\xb6\xb8\x8e\xbb\x06\x09\x81\xeb\x65\x25\x03\xb4\x41\x7a\x81\x84\x92\xee\xdb\x18\x44\x2e\xa8\xe1\x13\xce\xcf\xa3\xe6\xca\x7b\xf7\xf3\xab\x1b\xc3\xe3\x8e\x13\x8e\x29\xb0\x50\x2e\x68\x3e\x90\x97\x31\x3b\x0f\x02\x94\xdc\x97\xde\xa2\x7b\x74\xcf\x1b\x9c\x5f\xe0\xdc\xf7\xfb\x06\x34\x32\x9a\x56\x0d\xb5\x1a\x6d\x2b\x4e\xfc\x9c\xc7\x06\x9d\x2c\x29\xbb\x0c\x87\x93\xe7\xe7\x38\x49\x3f\xa2\x9a\x0a\x39\x5b\x7a\xb1\xdf\x03\xea\x9b\x84\x72\xe8\x3c\x72\xa1\xba\x4d\xbe\x29\x7d\x4d\x22\x58\xca\x84\xfa\x3a\x2c\x26\xc2\x60\x6a\xae\xce\xaa\x1e\xe5\x5e\x90\xc0\x72\x31\x00\xd7\x13\x37\x45\x9f\x1a\xdb\xf1\xf8\xe2\xf7\x9d\x4b\xe0\x7c\x66\x0f\x20\x57\xa3\xff\xd2\xa2\x72\x14\x5a\x14\x2a\xaf\xc5\x20\xad\x10\x40\xc2\x3f\x6b\xfc\xd9\x6a\xd2\x28\x7e\x73\xd8\xb8\x24\xb5\x7c\xaf\xcc\x2c\x1e\x84\xac\x5d\x65\x39\x1d\x33\x1c\x47\x05\x73\x54\x5f\x8a\xd8\x93\x56\xd4\x67\x2a\xee\x2c\x1b\x7f\xf4\x1d\x8b\x10\xa1\x30\xea\x50\x12\x0e\x13\x3f\x51\xf6\x4c\xff\xc5\xc4\x28\xb6\xb6\xe4\xb7\x6c\x53\xd4\xe4\xb9\x8a\xa9\xa3\x47\xa7\x1e\x41\x66\xe5\x7d\x3d\x1a\xae\xaa\x02\x4a\x78\x33\xd5\x69\x55\xeb\x4a\x16\x78\x0d\x8f\x14\xe8\xe9\x5f\x78\xec\x6b\x7c\xe6\x76\xe6\x0a\x15\x21\xae\x28\x06\x87\x67\xf4\x23\x0a\xeb\x87\x01\x0e\xee\x39\x00\x64\xc4\xbe\x32\x34\xdf\x75\xf9\x4c\xac\xd5\x85\x75\x6d\x35\x2c\xfa\x93\x02\xfc\x83\x05\x72\x1d\x4c\x5d\xb4\xab\x35\x3e\xc6\x3d\x44\xbe\x43\xde\x1f\x08\x81\xf9\xfb\x46\x6c\x38\xa9\xd8\x96\x36\x64\xc8\x49\x63\x7f\xcc\x3f\x4b\xd8\xf1\xb3\xc1\x0c\xe8\xd4\xd0\x82\xb6\x2b\x53\x88\x7f\xc6\x39\x56\xac\xe1\x9d\xc7\xfa\x66\x61\xf9\x0d\x95\x13\x1f\x71\x7c\x1e\x3f\xd5\x7c\x22\x08\xc2\x2e\x42\xe7\x2d\x59\x6d\xe0\x42\x4a\x0f\xdd\x00\xfa\x5c\x5a\x8c\xa9\x4d\x08\x18\xd9\x5d\x0b\x90\x5c\x53\x96\x1b\xc5\x33\x77\x9d\x54\x4b\x65\xda\x6c\xde\x76\x8f\x45\x52\xf2\xef\x26\x64\x3c\x7f\xc0\x12\x7e\x4c\x56\x35\x01\x3e\x82\x2f\x62\x88\xf7\xaf\xdc\x6c\x4d\x33\x51\x57\x72\x31\xc4\xa6\x02\x23\x9e\x60\x83\x70\x97\x1c\xed\x4f\x96\x8f\xac\x72\xdb\x57\xa2\x9a\x22\x51\x09\x82\x24\x34\x05\x82\x63\x4a\xba\x08\x48\x73\xb9\xcb\xaf\xf2\xea\xf6\x4a\x9b\x20\x00\x4e\xc1\x45\x6f\x06\x83\x17\x5c\x9b\x7a\x07\xf1\x1a\xfa\x15\x88\x0e\xee\x4a\xd9\x35\xec\xaa\x9e\x7c\x91\x2d\x24\x63\xa9\x05\x2e\x92\xb1\xb0\xb9\x9b\x49\xa9\xe2\xc1\x6c\xcc\x2c\x0a\x05\xf8\x32\xc4\xb4\x95\x19\x10\x25\xef\x06\x44\x2a\xc8\xed\x26\x12\x74\xf3\x2d\xb7\xcf\x48\xd4\xb5\x77\x42\x7d\xcf\x6e\xc7\x3d\xcd\xe6\xa7\xbe\x3a\x6a\xad\x87\xa7\x22\x36\x96\x14\x1b\x4a\x02\x09\x81\x60\x3c\xdf\x70\xb1\xfa\xc3\x36\x44\x06\x1b\x8f\x8b\x7b\xf7\x82\xe7\xb5\x60\x07\x31\xa1\xd6\x54\x81\x9d\x24\x37\x6e\xc8\x48\xa6\xe2\xde\x48\x1e\x1f\x27\xb9\xd3\xd3\xd1\x39\x66\x72\xf5\x7b\x07\x33\x5d\x0b\x9b\xf1\xab\x3f\x7f\x32\x35\xd2\xd4\x52\xcb\x68\x2d\x3c\xec\x51\x88\xee\x5c\x45\x11\x1a\xa4\x17\x0b\x34\x9b\xcf\x03\x86\xae\xb4\xde\x02\x94\xb7\xd8\x15\x64\x99\xdc\xb3\xfe\x30\x50\x09\x6d\x9d\x32\x34\xf8\x9d\x1e\x4a\x59\x15\x4f\x37\xb0\x23\xad\xd1\x26\x64\x9d\x6c\xa4\x76\x50\x04\x3a\x08\xe0\x62\x35\x51\x17\x29\xc5\xcf\xdd\xa2\x83\xcc\xbb\xd3\x86\x59\xa1\x50\x1d\x95\x1b\xe8\x4e\x88\x15\xf2\xc5\x86\x8a\xee\xf9\x1a\xe2\x28\x99\xb7\x19\xad\x4d\x35\xa6\x2d\xf9\xf6\x37\x78\x94\x26\x7b\x9e\x68\xfe\x49\xa0\x39\x24\xe3\x86\x6b\x0d\x76\xe4\x23\xc3\xdb\x78\x0e\x41\xb3\x3b\xe2\xd1\x91\x45\xe9\xdd\x6f\xb8\xdd\x8e\x6a\x05\x83\x4d\x01\xc2\xbb\xd8\x29\x2b\x4f\x6c\x2d\xa9\xb6\x39\x26\x77\xcd\x62\x2b\xe0\xf1\xd2\xa5\xaf\x78\x98\x15\x22\x0a\xb9\xa7\x92\x65\xad\x1b\x29\x62\x30\x8a\xa2\x5c\xe8\x98\xc9\xf7\x2f\xc5\x37\x6b\xf3\xc4\xa2\xbc\x76\x60\x38\xe7\x28\x46\x98\xac\xc5\x49\xec\x2a\xdb\x6a\x2c\x35\xaf\xc2\x27\x99\x2d\xfd\x1e\x86\x84\xcb\xb6\x91\x81\x1c\xa9\xd9\x74\xf0\xd0\x38\x72\x23\xd8\x2f\xb2\xca\xb2\x91\x5c\x5b\x8a\x19\xb3\x5e\xe1\x22\x90\xd4\xa2\x9c\x16\xdd\x4b\x92\x79\xac\xb0\xd2\x6d\x01\xd4\x97\xe8\x02\x71\x87\xff\xf4\x16\xf7\x37\x89\x89\x1f\x32\xa6\x70\xb9\xc7\x58\xf6\x02\x99\x86\x65\x49\x0e\x4d\x7f\xfb\xce\x83\x6f\xa7\x35\xf4\x34\x71\x0e\xee\xff\xa4\xc7\xdb\x14\x38\x4e\xa6\x4a\x27\x3e\x8d\x37\x9e\x04\x4d\xf1\x2a\x15\x16\x59\x4f\x04\x96\xe0\xca\xc4\x54\xe7\xbf\x27\x8b\xa6\x47\xf4\xe0\xb0\x51\x51\xaf\x48\xd0\xd0\x9f\x1b\xec\xa2\x99\x80\x07\x7d\xe9\xe4\x40\x70\x08\xda\x91\x87\x84\xf7\x1c\x22\x13\xea\xe0\xab\xa0\x39\x63\xe8\x6e\x46\xe8\x74\x65\x84\xa8\xe7\x7e\x1c\x2e\x12\x71\xb6\xa5\x07\x7a\xfa\xb6\x1f\x1d\x50\x12\x76\xb6\x14\xaf\x0f\x6a\x53\xce\xc7\xd7\x01\x38\x7d\x81\x7e\xd3\x35\xfb\x1e\x40\x68\xe4\x6b\x40\xcd\x2e\x54\x18\xcd\x63\xc4\x30\x24\x4c\x71\x3e\x2d\xe5\x6a\x0f\x14\xed\x24\x2a\x85\x5f\xaf\x55\xae\xa7\x9a\x2d\x58\x14\xdf\xad\xc0\xe3\xa4\xaf\x1b\xfa\x80\x8c\x84\x68\x36\x32\xe9\x18\xd1\x61\x43\xbc\xc5\xd1\x08\xa8\x91\x29\x42\x58\x0e\xf4\x94\x27\xd3\xcf\x80\xee\xc6\x67\xaf\xa5\xde\x01\x1d\x66\xbf\x01\xe3\xe4\xbf\xcf\x28\xa7\x21\xda\x79\xb5\x18\x46\xe3\x48\x11\x1e\x2c\xfe\xb0\xce\x79\xee\x86\x65\x6b\x55\x71\x34\xf5\x23\x07\x55\xd1\x84\x57\xa2\xe9\xfe\x0b\xa2\xaa\x86\x52\x9b\x61\x1b\x8e\x90\xa7\xee\x0e\x28\x37\xe8\x10\x5e\x17\x8c\x92\xf4\xc9\x90\xb5\xea\xe3\x42\xaa\x99\x6c\x19\x10\x7f\x94\x28\xa1\xce\xa6\x1f\xe1\xd4\x25\x49\x02\xf0\xf6\xa1\xbb\xe5\x2f\x7c\xfa\x36\x8c\x2b\xb0\xd0\x75\x2c\x6c\x2c\xcd\x65\x89\x9e\x37\xcb\xbc\x83\xc4\x7a\xbe\x8f\xb6\x39\xa5\x94\x13\x71\x1c\x80\x65\x41\x0e\x09\x4f\xdd\x2c\x44\x47\x37\xc5\x5a\x4c\x53\xcc\x2e\x18\x66\xbf\x74\x09\xb8\x26\x07\xea\x5c\xf1\x1b\xd6\x59\xda\x50\x4e\xed\xa4\xb3\x93\xd2\x78\x77\x69\x98\xb0\xee\x8b\xcf\xbb\x48\x5c\x64\x55\x67\x80\x2b\x1c\x46\xb2\x52\xa7\x7d\x14\xd9\x48\x0d\x52\xad\x99\xd2\x06\x52\x7c\xf0\x89\xd7\x5f\xdd\xca\x4a\x90\xbf\x45\x7f\xe1\x11\xc5\xd6\xef\xbe\x8a\xbb\xa2\x69\xf8\x77\x14\x61\xa6\x9d\x34\x69\x29\x42\xa0\x87\x90\x7c\xd9\xdf\x4b\x56\x39\xca\x2c\x8a\x2e\xa9\x39\x3b\xcb\x9c\x5e\x01\xdf\x67\xa4\x27\xa9\xba\xb5\x8a\x97\x35\x5d\xd1\x4a\x3f\x9f\x07\x0f\x5a\xeb\x11\x89\xd2\xae\x59\xc2\x74\x04\x7e\xf4\xa1\x29\x0b\x08\x80\xf2\x8d\x85\x0b\x32\x18\xaa\x24\xbb\x47\x1a\x0e\xc8\xea\xf7\x53\xdf\x6d\x1b\xab\xdc\xf0\xb4\x53\xb9\xa1\xf1\x82\xc6\x61\x6b\xb1\xed\xfc\xe6\xdb\x57\x95\x6b\x56\xd9\x80\x6c\xf0\xcf\x0b\x04\x4f\x1b\x76\xe6\x9c\x19\x72\x0d\xea\x45\x6f\x68\x8c\x78\x82\x6a\x72\x6e\xd8\xca\x79\xb3\x6a\x60\x99\xb6\xb4\x47\x7e\x54\xab\x95\xc2\x60\x15\xcb\x26\x53\xbe\x7c\xc6\x69\xc7\x20\xdc\x58\xa8\x60\x19\xf5\x8d\xcf\x14\x05\x3f\x30\x5b\x53\x83\x09\x3b\x62\xa8\x1f\xa0\x71\x7e\x3e\xab\x63\x80\x9f\xb7\xa3\x4f\xdc\x0d\x70\xc9\xbb\x9a\xff\x39\x7e\x2f\x53\x33\xec\xc1\x0a\x96\xa1\x13\x2d\xfa\x4b\xb9\xa9\xa4\xeb\xaa\x6d\xfe\x1d\xcd\xa5\x4e\x3f\x83\xf1\x9c\xa7\x29\x21\x89\xeb\x80\xad\xdb\x16\x8e\xf4\x53\xf5\xab\xdc\xb9\x01\x56\xa0\x58\x02\xc3\xa8\xdb\x1a\x37\xf8\x2d\x71\x78\xd4\x28\x8d\x18\xaf\xb4\xa2\xf9\x80\x8d\x18\x3b\x72\x34\x62\xb8\xbe\xcc\x24\x79\xd4\x8c\x32\x57\x0e\x4e\x91\xba\xe0\x05\xc2\x4e\xf9\xc6\x37\x97\x31\x1b\x89\x62\xb2\xb4\xca\xbc\x83\xe2\x02\xc0\xb1\x60\x03\x59\xa7\xc5\x21\x92\x5c\xe0\x56\xb3\x89\x4d\x91\xf5\x68\x5c\x9d\x8d\x71\x56\xa6\x77\x70\x8f\x25\x40\xf1\x89\x1e\x4c\xa2\xbe\xc2\xb5\xbd\xf4\xb8\xb2\x06\xc4\xaf\x7d\x15\x7c\xcf\x63\xfc\x52\xf5\x85\x7c\x1f\x4c\x87\x13\x70\x7f\x6b\x47\x2a\x63\x7c\x24\x41\x12\x6c\xec\x3e\x1f\xa0\x4a\x3f\x29\x03\xd9\x58\x86\x5a\x44\x82\x46\xd9\x6b\xa4\xa1\xd3\x55\x11\x64\xf8\x08\x8b\x1f\xb9\x3b\x98\x7b\x6c\xd3\xeb\x3e\x8b\xec\x52\x60\xe6\x08\xd9\xff\x14\x1a\x07\x2d\x49\x07\xe7\x95\x23\xfb\x68\x81\xc0\x63\x8c\xc9\xe7\xad\xe6\x63\xef\x18\x9a\xb8\xb6\x27\xc9\x59\x35\x36\xda\xc0\x49\x9a\x1c\x40\x5b\x44\x00\x02\xbe\x50\x71\x23\x9e\xa5\x97\xe4\xc9\x41\xdb\x85\xbe\x8c\x33\xa2\x45\xd1\xa5\xc1\x25\x9d\x0f\x13\x00\xb4\x1d\x71\xaa\x03\xba\x31\x1f\x50\x40\xb1\xe4\x2a\x96\x04\xdf\x35\xf0\xa5\x56\x09\x3f\x6a\x9d\x5d\x58\xcd\xd4\x1b\x6e\x47\x15\xce\x4a\x51\xbb\x97\xdc\x8a\xe1\x87\xb2\xba\x6f\x9b\xb8\x76\x06\xf0\xc7\x7b\x10\x80\xf2\x67\x4a\xd3\xc8\x08\xb1\x0b\x34\x51\x2a\xa7\xec\x24\x0e\xed\x4c\x51\x0a\x99\xa3\x4d\xbe\xb6\x77\xed\xec\x14\xc3\xc9\xff\x63\x24\xcf\x44\xf0\x7c\x4a\xe3\xc4\x5a\x90\x89\x23\xed\x3c\x26\x25\x33\xbb\xb0\x30\xfd\x0d\x2c\x25\xe7\x44\x57\x35\xa4\x34\x7b\x28\xfa\x2e\x8a\x2a\x2a\x52\x85\x22\x80\xb4\xce\x33\xe6\x42\x51\x02\x1f\x26\x7d\x2c\x2f\x28\x03\xbf\x6c\x5a\x39\x31\xae\xd5\x3d\x66\xef\x10\x86\xed\xfd\xe8\xf6\x41\x38\xe8\xd3\x4f\x68\xe2\x7d\x34\x44\xa7\xca\xc6\x49\xdc\xcf\xed\xb0\xc1\x81\xf4\x50\xa5\x1f\x7d\x14\x94\xdf\xcc\xc5\xa7\x79\x0b\xf6\x3a\x03\x65\x88\x22\x50\x94\xbd\xb6\x8b\x6b\xd6\xcd\xda\xd9\xe6\x17\x40\x5b\xa5\x7e\xc1\x0e\x1f\x69\x25\x13\x57\xcf\xd3\x3d\xe6\x2a\x36\x42\x45\x72\x90\x7d\x0e\x10\x2f\xcc\x22\xad\xf4\xc8\x6e\x44\x9c\xd1\xd8\x5c\x24\x6f\x81\xcd\x00\x3a\xbe\x6f\x64\xe9\x9d\x2a\x86\xf5\x7c\x15\xc1\xcc\x38\x96\x9f\xb3\xc0\xa0\x4f\x23\x14\x1a\x8e\x03\x5f\xc9\xae\x15\xdd\xbc\x2a\xcc\x57\x67\x93\xbc\xb3\xd2\x2b\xae\x9c\x52\x60\x9c\x0a\x90\x4c\x28\xd5\x17\x5d\x29\x6e\x67\xda\x38\xad\xbb\x5c\xbe\x1b\x02\x1d\x6d\x3f\x0f\xb3\x8a\x1c\x71\x3d\x28\xfc\xe4\x19\x99\x08\xfa\xd3\xe6\xbe\x4b\x32\x38\x56\x93\xbd\x86\xd3\x73\xab\xc3\x83\x62\xe7\xd7\xcf\x84\x4c\x19\x6a\x11\x6f\xcd\x23\x53\x43\x5b\xd9\xc6\xab\xa5\x2f\x07\xf2\xb0\xe3\xaa\xd0\xed\xe0\x8e\xc9\x0b\xdb\x60\x29\x10\xfa\x8f\xc7\xbc\x17\x3f\x1f\x55\x6d\x8c\x79\xe5\xa2\x54\xc7\x9a\x07\x00\xc2\xf7\x19\xa9\xa0\x78\x74\xed\x67\xb3\x88\xa6\x88\x79\x71\x90\x25\x03\xf8\xa3\xb9\x7f\x4e\x83\x44\x8f\x06\x2c\x96\x6d\xd3\xa5\xf9\xa0\x46\x3b\x2b\x8e\x2d\xf5\x93\xbb\xe9\x88\x04\xeb\x08\xa3\xe3\xdf\x24\xb8\x45\xda\x87\xcc\x04\x07\xd1\x5e\xdc\x49\xc8\xaa\x25\x53\x05\x4f\xf8\xf4\x60\xb5\x9b\xd3\x81\x94\xd6\xd0\xcb\x56\x58\xc6\x4f\x10\x4e\xc5\x9c\x9a\xa6\x57\x29\xd3\x86\xec\xbf\x5d\x15\x74\xe7\x95\xcb\x44\x7d\xb3\x01\xed\x3d\x5e\xd5\xf2\xb8\x64\xeb\xc8\x46\xdb\x2c\x10\xfe\xc9\x40\xce\x90\x30\x76\x81\x2e\x7b\xa1\x36\x7b\x94\x2a\xf5\xaf\x4c\x1f\x28\x29\xc8\x72\xbd\x9d\xd8\x1b\x9c\x79\x13\x95\x4a\xa9\xb2\xb2\xbb\xda\xc0\x25\xa4\xb6\x42\x50\xf1\x2b\x58\xbb\xbd\x4c\x0a\x61\x8a\xe8\x49\x00\xab\xa6\xb4\xa8\xfe\x7b\xaa\x03\x25\xb4\xa0\x70\x44\x2a\x46\xc9\x0e\xbe\xcd\xc7\x4e\x01\xc9\x30\x4f\x96\xae\x73\x03\xc3\x60\xb3\x1d\xc3\x19\x0f\xf2\x82\xc2\xb2\x42\x0f\x8b\x11\xa6\x80\xbf\xf7\x2c\xfb\xa5\x96\xc6\xea\x91\xc3\x46\xe1\x33\x33\x1e\xa0\x70\x5b\xad\xd6\x8e\xe3\xb0\xc1\xa9\x6b\xbf\x28\x93\x94\x10\x3f\x90\x23\x14\xee\x6f\x56\x74\x8e\xf1\xb4\xfb\xbd\x33\x51\x9d\x08\xd3\x3e\x58\x15\x17\x91\xf1\x19\xac\x7e\x8b\x70\x4b\x52\x3d\x89\x55\x73\x54\x43\x72\x99\x66\x83\x85\x13\x58\xe0\xce\x24\x65\x6b\x9b\x27\x2b\x4e\xf5\x01\x39\x86\x58\xf0\x46\x6d\x44\xdd\xbc\x18\xf1\xce\xbc\x9b\x20\x31\x52\x95\xe3\x7e\x52\x48\xf9\xfb\x19\x04\x74\x63\x8c\xc8\x38\x40\x43\x31\x0f\x10\xd4\xa3\x48\x9c\x19\xf7\xf5\x9a\x75\xb6\x2b\xcd\x49\x3e\x28\x2f\x3b\xf9\xd5\x18\xee\x8b\x78\x3d\xde\x21\x42\x69\x29\x48\x85\x72\x6f\x1d\x8b\xd6\xa1\xc0\xe9\x30\x4c\x23\x58\xc5\x50\x1d\xf6\xac\x14\x7f\xb4\x41\xff\xa7\x73\xa5\xcc\x3a\xe0\x17\xaf\x98\xf4\x0c\xb7\x46\x66\x15\xe5\x43\x89\x0f\x8c\x1a\xbe\xd1\x96\x61\xc7\x89\x81\xbe\xcf\xf7\x2b\xf0\x8b\x22\x74\xe3\x50\x1c\x75\xdb\xd6\x04\x78\x96\x77\x77\x0b\x43\x73\x95\xf4\x0f\x54\xaf\x2f\x3b\xc9\xb7\x61\xd4\x97\x19\x8d\x23\x50\x9a\x86\x63\xca\x9f\xf7\xe5\x94\xe5\x59\x26\x6c\x16\xcc\x40\x3a\xde\x09\xc4\x1b\x3c\x50\x68\xa1\x27\x45\x88\xc8\xfd\x7a\x67\x49\x98\x8e\x24\xe7\xba\x5a\xe6\x77\xdc\x7b\x69\xd8\x92\xa8\x4e\x25\xa6\x9c\x95\xe5\xaf\x67\x5b\x87\x67\x92\xae\xc9\xc3\x74\x84\x09\x3b\x45\x3f\x72\xf1\x79\x5d\xe1\x8e\xec\x40\x15\x11\xb6\x7e\x7c\x9d\x98\x6b\xd9\x9e\x1e\xf0\xea\x18\x2c\x25\xb5\x7d\xaa\x1d\xca\x04\xec\xfc\xd5\x04\x24\x60\x1c\x45\x3c\x67\x6e\x5c\x7e\x1d\x66\xa9\xc5\xc9\xa1\xb9\x3d\xf1\x71\x28\xcd\x13\xc4\x8e\x0f\x81\x9c\x44\x88\xcc\x31\xa3\xf6\x03\xfb\x33\x9f\x9e\xf3\xa2\x95\x89\xb0\xbe\x5a\x9b\xbe\xfc\x62\x0f\xeb\x69\x81\xea\xd9\xe1\x3c\x9f\x1e\xea\xeb\x8d\xc3\x4f\xd3\x8c\x0e\x89\x32\x3e\x99\x2a\xe1\x0f\x9f\xed\xa1\xe0\xfd\x40\x83\x7f\x40\x07\x49\xc0\x58\x3f\xd2\xf6\xe3\x91\x4e\x62\x90\xbe\xce\xa5\xab\x15\x51\x53\x54\xc7\xc4\xbd\x2c\x92\x57\xc0\x6b\xa9\x7f\x15\x5d\xa1\x09\x9d\xb2\x4f\xf6\xd9\xa2\xeb\xcd\xd5\x62\x6f\x84\x89\xe3\xa4\x9c\x5a\xd9\xdd\x2e\xfc\xde\xb5\xa5\x18\x83\x9e\x86\x44\xf7\x06\x03\x9a\xb8\x12\xf6\xe9\xf5\x87\x81\x30\xa9\x2d\x1d\xc1\x35\x7e\x5a\xf7\x34\x93\x71\xf8\x39\x4c\xd4\x90\x07\xda\x2c\x7b\x3f\x98\xfd\x75\x51\x64\x09\xb8\x52\x65\x7f\x06\x91\x53\x38\xa3\x31\xae\x0a\x25\x7a\x34\xd8\xab\x7b\x3d\x72\x04\x04\x6e\x1b\x2b\x59\x11\xa8\x1c\xd0\x98\xa9\x09\x0a\x3d\x95\xc3\x02\xc6\xb0\x00\x35\x9c\x0d\xb1\xc9\xc2\x1f\x66\xfd\xc4\x2a\xb2\xcb\x45\x96\x9c\x09\x5b\x2e\x4d\xb5\x9f\xa6\x8a\x97\xf6\x07\xb0\x80\x73\xa2\x7f\x43\x30\xd4\xe3\x31\x96\xc6\x0c\xf3\xaf\xba\x4c\xc8\x65\xec\x72\x90\x9b\x12\x0a\xe2\xb8\x10\x3f\xf9\xbc\xcc\x35\xd4\xde\x70\xa3\x99\x2f\x16\x51\x11\x00\x2f\x48\x4d\x55\x69\xa7\xbf\x92\xe7\x75\x7a\x9f\xda\xda\xee\x0b\xc2\x5b\x6e\x03\xb1\x7b\x2e\xd5\x56\xa7\x00\x44\x89\xb0\x24\xcf\x70\x39\x76\x42\x84\x5c\x83\x20\xac\x01\x97\xe7\x08\x14\x1b\x98\x65\xae\xbe\xfc\x1e\x7b\x96\x54\x65\xc7\x6d\xe5\x55\xdd\x38\x5d\xd0\x12\xf5\xdb\x0c\x49\xc1\xe6\x02\x0e\xbd\xf4\x17\x3c\x69\x0d\x78\x0e\x24\x6d\x65\xa2\xc2\x13\x9f\x21\x44\xf7\x41\x8f\x87\x83\xfe\xcb\x59\x73\x22\xaf\x39\xd9\xaf\x89\xfb\xec\x6b\xc4\xe8\x84\x41\xdb\xe8\xa2\x62\xe6\xbd\x05\xb3\x53\x5c\xce\xcb\xd8\x71\xfd\xdc\x69\xf7\x8e\xc4\xa1\xe9\x0a\xd3\x2a\xf9\x74\xe9\x61\xc9\x8a\xe2\x7d\x86\xc2\x84\x8f\x9e\x52\x29\x99\x1c\xe7\x94\x1a\xdc\x70\x45\xa3\x3f\xa1\xa5\xea\xbf\x55\x3f\x5f\x17\x1b\xc0\xd1\x1d\xe8\xe1\x6e\xc4\x19\xd4\x68\xe6\xb6\xc5\xca\x61\xb4\x6c\x0a\xe8\xea\xb4\xe6\xcf\xb7\xd2\x2d\xd3\xa0\x26\xd5\x45\x46\x52\x14\xeb\xaa\x2b\x97\x97\xa8\xbd\x50\xc3\x32\x01\x1a\x15\x5e\xaa\x99\x8e\x50\xfb\x8f\xe7\x11\xa8\x5b\x16\x1d\xb1\xe3\x99\x32\x53\x03\x31\x7e\x69\xfc\x32\xb8\x6d\xc1\xbb\x00\xf3\x6a\x3a\x05\x86\xec\xfe\xac\x46\x2c\xc4\x99\x78\x5f\xb3\x0f\xce\x54\x6f\x8a\x6e\x73\x5f\x45\xb4\x77\x86\xfa\xae\x82\x1e\x80\x8c\x61\x4f\x63\x43\x55\x64\x64\x2f\x43\xa4\xc9\x8a\x0c\x32\xac\x20\xea\x1e\xc4\x48\x0f\xd9\xec\xad\x4f\x6a\x4d\x5e\xc3\x9b\x98\x09\xf4\x5a\xac\xd5\x79\xea\xc5\x44\xc4\xd8\xa5\xc5\xb0\x92\x75\xad\x32\x07\x6e\x98\x11\x8d\x4b\x3c\x91\x6e\x76\xcc\xdb\xab\xc8\x15\xa5\x7d\x85\x57\x87\x2c\xea\x2a\x4b\x51\x9a\x2c\x7a\x98\x4f\x02\x3b\xf6\xb4\xb5\x79\x0c\xb5\xc1\xc4\x84\x7c\x88\xb1\xe9\x02\xcb\x8d\xfa\x60\xeb\x55\x31\x2e\xa8\xe7\xa3\xf9\x6c\x32\x5f\x48\xb8\x46\x6b\xe2\x1c\xc0\xe9\xb5\xb1\xb9\x6c\x44\x37\xd9\xb6\xec\x1d\x47\x56\x67\x1d\x57\x17\xd6\x87\x70\x74\xae\x61\x24\x7a\x93\x2f\x5e\x8f\x07\xc7\x9a\x42\x2a\xf4\x52\x44\x29\x7b\xfb\xc3\x0a\x9c\x17\x00\xe9\xc6\xea\xd0\xe3\x46\xf0\x6f\x7a\x6b\x51\xd5\x18\x0d\x5a\xa5\x87\x26\x5b\x92\xba\xe9\x34\x2c\x34\x97\xd9\x9f\x48\x3c\xeb\x18\xa1\xc1\xf7\xdc\xfb\x18\xe9\xc7\xb5\x4c\xae\x54\x6b\x4f\x94\x81\xd2\xb5\x49\xbd\x1f\x23\xb7\xa5\xb1\x70\x34\xb2\xb5\x34\x67\x70\xa6\x67\xca\x7c\x24\xaf\x5d\x14\x30\x2a\xe2\x49\x25\x31\xc0\x71\x18\xf6\xd9\x51\xde\xd0\x63\x45\xdc\x2b\xc6\x71\x14\xeb\x89\x3a\x81\xfd\xb7\x0b\xec\xfd\x77\x21\x8b\xe6\x5e\x70\xb8\xf2\x10\x73\x44\x71\xc5\x16\x1c\x47\x1c\x9d\xf4\x9d\x2e\x53\xe4\x7d\xed\x54\xb4\xd2\x7c\x1b\x9b\x98\x27\x73\x4d\x42\xbb\x70\xaa\x92\x4e\xce\x4f\xa7\x04\x6f\x5b\x31\xe6\x0a\xfc\xb2\x80\xfc\xaa\x3e\x12\xd9\xf0\x46\x86\x75\x48\x84\xeb\x3a\x88\xd8\x8c\x78\x5e\x5f\xef\x3d\x79\xc1', 2)

If you want to also obfuscate the strings, you can specify the --mix-str option:

pyarmor obfuscate --mix-str script.py

In order to package your Python application, you need pyinstaller:

pip install pyinstaller

Then run:

pyarmor pack script.py

In the dist folder, you will find the obfuscated bundled application to distribute.

Upvotes: 1

Related Questions