From 266e90241120d4f86ffa9c3177f516658fc7c3c9 Mon Sep 17 00:00:00 2001 From: Diavolo Date: Thu, 25 May 2023 22:56:38 +0200 Subject: [PATCH] init --- .clang-format | 12 + .gitattributes | 1 + .github/dependabot.yml | 7 + .github/workflows/build.yml | 52 + .gitignore | 150 + .gitmodules | 24 + LICENSE | 674 ++ README.md | 27 + deps/GSL | 1 + deps/discord-rpc | 1 + deps/extra/udis86/libudis86/itab.c | 5946 +++++++++++++++++ deps/extra/udis86/libudis86/itab.h | 939 +++ deps/libtomcrypt | 1 + deps/libtommath | 1 + deps/minhook | 1 + deps/premake/discord-rpc.lua | 39 + deps/premake/gsl.lua | 19 + deps/premake/libtomcrypt.lua | 64 + deps/premake/libtommath.lua | 52 + deps/premake/minhook.lua | 31 + deps/premake/minizip.lua | 43 + deps/premake/rapidjson.lua | 19 + deps/premake/udis86.lua | 37 + deps/premake/zlib.lua | 39 + deps/rapidjson | 1 + deps/udis86 | 1 + deps/zlib | 1 + generate.bat | 4 + premake5.lua | 331 + src/client/component/asset_restrict.cpp | 49 + src/client/component/assets/assets.cpp | 60 + .../component/assets/localize_entry.cpp | 26 + .../component/assets/localize_entry.hpp | 5 + src/client/component/assets/map_ents.cpp | 30 + src/client/component/assets/map_ents.hpp | 5 + src/client/component/assets/raw_file.cpp | 181 + src/client/component/assets/raw_file.hpp | 5 + src/client/component/auth.cpp | 84 + src/client/component/auth.hpp | 5 + src/client/component/botlib/l_precomp.cpp | 254 + src/client/component/botlib/l_precomp.hpp | 6 + src/client/component/botlib/l_script.cpp | 204 + src/client/component/botlib/l_script.hpp | 70 + src/client/component/branding.cpp | 123 + src/client/component/ceg.cpp | 38 + src/client/component/command.cpp | 152 + src/client/component/command.hpp | 40 + src/client/component/console.cpp | 71 + src/client/component/debug.cpp | 129 + src/client/component/discord.cpp | 77 + src/client/component/dvar.cpp | 172 + src/client/component/dvar.hpp | 13 + src/client/component/dvar_patches.cpp | 68 + src/client/component/filesystem.cpp | 82 + src/client/component/filesystem.hpp | 21 + src/client/component/game_log.cpp | 115 + src/client/component/game_log.hpp | 5 + src/client/component/game_module.cpp | 110 + src/client/component/game_module.hpp | 6 + src/client/component/gsc/extension.cpp | 126 + src/client/component/gsc/extension.hpp | 7 + src/client/component/gsc/loading.cpp | 88 + src/client/component/gsc/string.cpp | 83 + src/client/component/images.cpp | 16 + src/client/component/lean.cpp | 73 + src/client/component/network.cpp | 83 + src/client/component/network.hpp | 5 + src/client/component/no_border.cpp | 43 + src/client/component/patches.cpp | 103 + src/client/component/player_movement.cpp | 180 + src/client/component/scheduler.cpp | 163 + src/client/component/scheduler.hpp | 33 + src/client/component/steam_patches.cpp | 47 + src/client/component/steam_proxy.cpp | 197 + src/client/component/ultra_wide.cpp | 74 + src/client/component/weapons.cpp | 48 + src/client/component/zone.cpp | 25 + src/client/game/dvars.cpp | 30 + src/client/game/dvars.hpp | 27 + .../game/engine/fast_critical_section.cpp | 34 + .../game/engine/fast_critical_section.hpp | 21 + src/client/game/engine/large_local.cpp | 87 + src/client/game/engine/large_local.hpp | 22 + .../game/engine/scoped_critical_section.cpp | 63 + .../game/engine/scoped_critical_section.hpp | 21 + src/client/game/game.cpp | 119 + src/client/game/game.hpp | 54 + src/client/game/structs.hpp | 926 +++ src/client/game/symbols.hpp | 259 + src/client/loader/binary_loader.cpp | 27 + src/client/loader/binary_loader.hpp | 5 + src/client/loader/component_interface.hpp | 19 + src/client/loader/component_loader.cpp | 100 + src/client/loader/component_loader.hpp | 50 + src/client/loader/loader.cpp | 190 + src/client/loader/loader.hpp | 25 + src/client/loader/tls.cpp | 34 + src/client/loader/tls.hpp | 5 + src/client/main.cpp | 150 + src/client/resource.hpp | 8 + src/client/resource.rc | 117 + src/client/resources/icon.ico | Bin 0 -> 204862 bytes src/client/resources/icon.png | Bin 0 -> 23340 bytes src/client/std_include.cpp | 27 + src/client/std_include.hpp | 47 + src/client/steam/interface.cpp | 117 + src/client/steam/interface.hpp | 82 + src/client/steam/interfaces/apps.cpp | 37 + src/client/steam/interfaces/apps.hpp | 26 + src/client/steam/interfaces/friends.cpp | 130 + src/client/steam/interfaces/friends.hpp | 62 + src/client/steam/interfaces/game_server.cpp | 74 + src/client/steam/interfaces/game_server.hpp | 43 + .../interfaces/master_server_updater.cpp | 51 + .../interfaces/master_server_updater.hpp | 32 + src/client/steam/interfaces/matchmaking.cpp | 184 + src/client/steam/interfaces/matchmaking.hpp | 94 + .../steam/interfaces/matchmaking_servers.cpp | 72 + .../steam/interfaces/matchmaking_servers.hpp | 43 + src/client/steam/interfaces/networking.cpp | 112 + src/client/steam/interfaces/networking.hpp | 55 + .../steam/interfaces/remote_storage.cpp | 33 + .../steam/interfaces/remote_storage.hpp | 17 + src/client/steam/interfaces/user.cpp | 126 + src/client/steam/interfaces/user.hpp | 61 + src/client/steam/interfaces/user_stats.cpp | 178 + src/client/steam/interfaces/user_stats.hpp | 89 + src/client/steam/interfaces/utils.cpp | 65 + src/client/steam/interfaces/utils.hpp | 36 + src/client/steam/steam.cpp | 209 + src/client/steam/steam.hpp | 122 + src/common/utils/binary_resource.cpp | 64 + src/common/utils/binary_resource.hpp | 18 + src/common/utils/compression.cpp | 138 + src/common/utils/compression.hpp | 21 + src/common/utils/concurrency.hpp | 36 + src/common/utils/cryptography.cpp | 556 ++ src/common/utils/cryptography.hpp | 113 + src/common/utils/flags.cpp | 47 + src/common/utils/flags.hpp | 13 + src/common/utils/hook.cpp | 218 + src/common/utils/hook.hpp | 168 + src/common/utils/info_string.cpp | 52 + src/common/utils/info_string.hpp | 22 + src/common/utils/io.cpp | 111 + src/common/utils/io.hpp | 22 + src/common/utils/memory.cpp | 132 + src/common/utils/memory.hpp | 60 + src/common/utils/nt.cpp | 260 + src/common/utils/nt.hpp | 113 + src/common/utils/signature.cpp | 191 + src/common/utils/signature.hpp | 62 + src/common/utils/smbios.cpp | 83 + src/common/utils/smbios.hpp | 7 + src/common/utils/string.cpp | 129 + src/common/utils/string.hpp | 48 + src/common/utils/thread.cpp | 105 + src/common/utils/thread.hpp | 21 + src/runner/debugger.cpp | 82 + src/runner/debugger.hpp | 14 + src/runner/resource.rc | 100 + src/runner/runner.cpp | 22 + src/tlsdll/dllmain.cpp | 4 + src/tlsdll/resource.rc | 93 + tools/premake5.exe | Bin 0 -> 1568256 bytes 165 files changed, 19860 insertions(+) create mode 100644 .clang-format create mode 100644 .gitattributes create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/build.yml create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 LICENSE create mode 100644 README.md create mode 160000 deps/GSL create mode 160000 deps/discord-rpc create mode 100644 deps/extra/udis86/libudis86/itab.c create mode 100644 deps/extra/udis86/libudis86/itab.h create mode 160000 deps/libtomcrypt create mode 160000 deps/libtommath create mode 160000 deps/minhook create mode 100644 deps/premake/discord-rpc.lua create mode 100644 deps/premake/gsl.lua create mode 100644 deps/premake/libtomcrypt.lua create mode 100644 deps/premake/libtommath.lua create mode 100644 deps/premake/minhook.lua create mode 100644 deps/premake/minizip.lua create mode 100644 deps/premake/rapidjson.lua create mode 100644 deps/premake/udis86.lua create mode 100644 deps/premake/zlib.lua create mode 160000 deps/rapidjson create mode 160000 deps/udis86 create mode 160000 deps/zlib create mode 100644 generate.bat create mode 100644 premake5.lua create mode 100644 src/client/component/asset_restrict.cpp create mode 100644 src/client/component/assets/assets.cpp create mode 100644 src/client/component/assets/localize_entry.cpp create mode 100644 src/client/component/assets/localize_entry.hpp create mode 100644 src/client/component/assets/map_ents.cpp create mode 100644 src/client/component/assets/map_ents.hpp create mode 100644 src/client/component/assets/raw_file.cpp create mode 100644 src/client/component/assets/raw_file.hpp create mode 100644 src/client/component/auth.cpp create mode 100644 src/client/component/auth.hpp create mode 100644 src/client/component/botlib/l_precomp.cpp create mode 100644 src/client/component/botlib/l_precomp.hpp create mode 100644 src/client/component/botlib/l_script.cpp create mode 100644 src/client/component/botlib/l_script.hpp create mode 100644 src/client/component/branding.cpp create mode 100644 src/client/component/ceg.cpp create mode 100644 src/client/component/command.cpp create mode 100644 src/client/component/command.hpp create mode 100644 src/client/component/console.cpp create mode 100644 src/client/component/debug.cpp create mode 100644 src/client/component/discord.cpp create mode 100644 src/client/component/dvar.cpp create mode 100644 src/client/component/dvar.hpp create mode 100644 src/client/component/dvar_patches.cpp create mode 100644 src/client/component/filesystem.cpp create mode 100644 src/client/component/filesystem.hpp create mode 100644 src/client/component/game_log.cpp create mode 100644 src/client/component/game_log.hpp create mode 100644 src/client/component/game_module.cpp create mode 100644 src/client/component/game_module.hpp create mode 100644 src/client/component/gsc/extension.cpp create mode 100644 src/client/component/gsc/extension.hpp create mode 100644 src/client/component/gsc/loading.cpp create mode 100644 src/client/component/gsc/string.cpp create mode 100644 src/client/component/images.cpp create mode 100644 src/client/component/lean.cpp create mode 100644 src/client/component/network.cpp create mode 100644 src/client/component/network.hpp create mode 100644 src/client/component/no_border.cpp create mode 100644 src/client/component/patches.cpp create mode 100644 src/client/component/player_movement.cpp create mode 100644 src/client/component/scheduler.cpp create mode 100644 src/client/component/scheduler.hpp create mode 100644 src/client/component/steam_patches.cpp create mode 100644 src/client/component/steam_proxy.cpp create mode 100644 src/client/component/ultra_wide.cpp create mode 100644 src/client/component/weapons.cpp create mode 100644 src/client/component/zone.cpp create mode 100644 src/client/game/dvars.cpp create mode 100644 src/client/game/dvars.hpp create mode 100644 src/client/game/engine/fast_critical_section.cpp create mode 100644 src/client/game/engine/fast_critical_section.hpp create mode 100644 src/client/game/engine/large_local.cpp create mode 100644 src/client/game/engine/large_local.hpp create mode 100644 src/client/game/engine/scoped_critical_section.cpp create mode 100644 src/client/game/engine/scoped_critical_section.hpp create mode 100644 src/client/game/game.cpp create mode 100644 src/client/game/game.hpp create mode 100644 src/client/game/structs.hpp create mode 100644 src/client/game/symbols.hpp create mode 100644 src/client/loader/binary_loader.cpp create mode 100644 src/client/loader/binary_loader.hpp create mode 100644 src/client/loader/component_interface.hpp create mode 100644 src/client/loader/component_loader.cpp create mode 100644 src/client/loader/component_loader.hpp create mode 100644 src/client/loader/loader.cpp create mode 100644 src/client/loader/loader.hpp create mode 100644 src/client/loader/tls.cpp create mode 100644 src/client/loader/tls.hpp create mode 100644 src/client/main.cpp create mode 100644 src/client/resource.hpp create mode 100644 src/client/resource.rc create mode 100644 src/client/resources/icon.ico create mode 100644 src/client/resources/icon.png create mode 100644 src/client/std_include.cpp create mode 100644 src/client/std_include.hpp create mode 100644 src/client/steam/interface.cpp create mode 100644 src/client/steam/interface.hpp create mode 100644 src/client/steam/interfaces/apps.cpp create mode 100644 src/client/steam/interfaces/apps.hpp create mode 100644 src/client/steam/interfaces/friends.cpp create mode 100644 src/client/steam/interfaces/friends.hpp create mode 100644 src/client/steam/interfaces/game_server.cpp create mode 100644 src/client/steam/interfaces/game_server.hpp create mode 100644 src/client/steam/interfaces/master_server_updater.cpp create mode 100644 src/client/steam/interfaces/master_server_updater.hpp create mode 100644 src/client/steam/interfaces/matchmaking.cpp create mode 100644 src/client/steam/interfaces/matchmaking.hpp create mode 100644 src/client/steam/interfaces/matchmaking_servers.cpp create mode 100644 src/client/steam/interfaces/matchmaking_servers.hpp create mode 100644 src/client/steam/interfaces/networking.cpp create mode 100644 src/client/steam/interfaces/networking.hpp create mode 100644 src/client/steam/interfaces/remote_storage.cpp create mode 100644 src/client/steam/interfaces/remote_storage.hpp create mode 100644 src/client/steam/interfaces/user.cpp create mode 100644 src/client/steam/interfaces/user.hpp create mode 100644 src/client/steam/interfaces/user_stats.cpp create mode 100644 src/client/steam/interfaces/user_stats.hpp create mode 100644 src/client/steam/interfaces/utils.cpp create mode 100644 src/client/steam/interfaces/utils.hpp create mode 100644 src/client/steam/steam.cpp create mode 100644 src/client/steam/steam.hpp create mode 100644 src/common/utils/binary_resource.cpp create mode 100644 src/common/utils/binary_resource.hpp create mode 100644 src/common/utils/compression.cpp create mode 100644 src/common/utils/compression.hpp create mode 100644 src/common/utils/concurrency.hpp create mode 100644 src/common/utils/cryptography.cpp create mode 100644 src/common/utils/cryptography.hpp create mode 100644 src/common/utils/flags.cpp create mode 100644 src/common/utils/flags.hpp create mode 100644 src/common/utils/hook.cpp create mode 100644 src/common/utils/hook.hpp create mode 100644 src/common/utils/info_string.cpp create mode 100644 src/common/utils/info_string.hpp create mode 100644 src/common/utils/io.cpp create mode 100644 src/common/utils/io.hpp create mode 100644 src/common/utils/memory.cpp create mode 100644 src/common/utils/memory.hpp create mode 100644 src/common/utils/nt.cpp create mode 100644 src/common/utils/nt.hpp create mode 100644 src/common/utils/signature.cpp create mode 100644 src/common/utils/signature.hpp create mode 100644 src/common/utils/smbios.cpp create mode 100644 src/common/utils/smbios.hpp create mode 100644 src/common/utils/string.cpp create mode 100644 src/common/utils/string.hpp create mode 100644 src/common/utils/thread.cpp create mode 100644 src/common/utils/thread.hpp create mode 100644 src/runner/debugger.cpp create mode 100644 src/runner/debugger.hpp create mode 100644 src/runner/resource.rc create mode 100644 src/runner/runner.cpp create mode 100644 src/tlsdll/dllmain.cpp create mode 100644 src/tlsdll/resource.rc create mode 100644 tools/premake5.exe diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..eea3a0b --- /dev/null +++ b/.clang-format @@ -0,0 +1,12 @@ + +--- +Language: Cpp +BasedOnStyle: LLVM +DerivePointerAlignment: false +PointerAlignment: Left +SortIncludes: false + +# Regroup causes unnecessary noise due to clang-format bug. +IncludeBlocks: Preserve + +--- diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..28cee3f --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.html linguist-detectable=false diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..f1cef93 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +version: 2 +updates: +- package-ecosystem: gitsubmodule + directory: "/" + schedule: + interval: daily + open-pull-requests-limit: 10 \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..f5fdb76 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,52 @@ +name: Build + +on: + push: + branches: + - "*" + pull_request: + branches: + - "*" + types: [opened, synchronize, reopened] + +concurrency: + group: ${{ github.ref }} + cancel-in-progress: true + +jobs: + build: + name: Build binaries + runs-on: windows-2022 + strategy: + matrix: + configuration: + - Debug + - Release + steps: + - name: Check out files + uses: actions/checkout@v3.5.2 + with: + submodules: true + fetch-depth: 0 + # NOTE - If LFS ever starts getting used during builds, switch this to true! + lfs: false + + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.3.1 + + - name: Generate project files + run: tools/premake5 vs2022 + + - name: Set up problem matching + uses: ammaraskar/msvc-problem-matcher@master + + - name: Build ${{matrix.configuration}} binaries + run: msbuild /m /v:minimal /p:Configuration=${{matrix.configuration}} /p:Platform=Win32 build/iw4-sp.sln + + - name: Upload ${{matrix.configuration}} binaries + uses: actions/upload-artifact@v3.1.2 + with: + name: ${{matrix.configuration}} binaries + path: | + build/bin/Win32/${{matrix.configuration}}/iw4-sp.exe + build/bin/Win32/${{matrix.configuration}}/iw4-sp.pdb diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5be63f0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,150 @@ +### Windows + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Shortcuts +*.lnk + +### OSX + +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear on external disk +.Spotlight-V100 +.Trashes + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Visual Studio + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +build + +# Visual Studio 2015 cache/options directory +.vs/ + +#Visual Studio Code +.vscode/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +### IDA +*.id0 +*.id1 +*.id2 +*.nam +*.til + +### Custom user files +# User scripts +user*.bat diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..1cd37f2 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,24 @@ +[submodule "deps/GSL"] + path = deps/GSL + url = https://github.com/microsoft/GSL.git +[submodule "deps/udis86"] + path = deps/udis86 + url = https://github.com/vmt/udis86.git +[submodule "deps/minhook"] + path = deps/minhook + url = https://github.com/TsudaKageyu/minhook.git +[submodule "deps/zlib"] + path = deps/zlib + url = https://github.com/madler/zlib.git +[submodule "deps/rapidjson"] + path = deps/rapidjson + url = https://github.com/Tencent/rapidjson.git +[submodule "deps/discord-rpc"] + path = deps/discord-rpc + url = https://github.com/discord/discord-rpc.git +[submodule "deps/libtommath"] + path = deps/libtommath + url = https://github.com/libtom/libtommath.git +[submodule "deps/libtomcrypt"] + path = deps/libtomcrypt + url = https://github.com/libtom/libtomcrypt.git diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..576cdf8 --- /dev/null +++ b/README.md @@ -0,0 +1,27 @@ +[![build](https://github.com/alterware/iw4-sp/workflows/Build/badge.svg)](https://github.com/alterware/iw4-sp/actions) + +# IW4: SP Client + +This is a client modification for IW4 (Singleplayer) 159 +**NOTE**: You must legally own Call of Duty®: Modern Warfare® 2 (2009) to run this mod. Cracked/Pirated versions of the game are **NOT** supported. + +## How to compile + +- Run `premake5 vs2022` or use the delivered `generate.bat`. +- Build via solution file in `build\iw4-sp.sln`. + +## Premake arguments + +| Argument | Description | +|:----------------------------|:-----------------------------------------------| +| `--copy-to=PATH` | Optional, copy the exe to a custom folder after build. | + +## Command line arguments + +| Argument | Description | +|:------------------------|:-----------------------------------------------| +| `-nosteam` | Disable Steam integration. | + +## Disclaimer + +This software has been created purely for the purposes of academic research. It is not intended to be used to attack other systems. Project maintainers are not responsible or liable for misuse of the software. Use responsibly. diff --git a/deps/GSL b/deps/GSL new file mode 160000 index 0000000..303d964 --- /dev/null +++ b/deps/GSL @@ -0,0 +1 @@ +Subproject commit 303d964a241cb2f2a058fe0baa14013eb9afa116 diff --git a/deps/discord-rpc b/deps/discord-rpc new file mode 160000 index 0000000..963aa9f --- /dev/null +++ b/deps/discord-rpc @@ -0,0 +1 @@ +Subproject commit 963aa9f3e5ce81a4682c6ca3d136cddda614db33 diff --git a/deps/extra/udis86/libudis86/itab.c b/deps/extra/udis86/libudis86/itab.c new file mode 100644 index 0000000..953f3e5 --- /dev/null +++ b/deps/extra/udis86/libudis86/itab.c @@ -0,0 +1,5946 @@ +/* itab.c -- generated by udis86:scripts/ud_itab.py, do no edit */ +#include "decode.h" + +#define GROUP(n) (0x8000 | (n)) +#define INVALID 0 + + +const uint16_t ud_itab__0[] = { + /* 0 */ 15, 16, 17, 18, + /* 4 */ 19, 20, GROUP(1), GROUP(2), + /* 8 */ 964, 965, 966, 967, + /* c */ 968, 969, GROUP(3), GROUP(4), + /* 10 */ 5, 6, 7, 8, + /* 14 */ 9, 10, GROUP(284), GROUP(285), + /* 18 */ 1336, 1337, 1338, 1339, + /* 1c */ 1340, 1341, GROUP(286), GROUP(287), + /* 20 */ 49, 50, 51, 52, + /* 24 */ 53, 54, INVALID, GROUP(288), + /* 28 */ 1407, 1408, 1409, 1410, + /* 2c */ 1411, 1412, INVALID, GROUP(289), + /* 30 */ 1487, 1488, 1489, 1490, + /* 34 */ 1491, 1492, INVALID, GROUP(290), + /* 38 */ 100, 101, 102, 103, + /* 3c */ 104, 105, INVALID, GROUP(291), + /* 40 */ 699, 700, 701, 702, + /* 44 */ 703, 704, 705, 706, + /* 48 */ 175, 176, 177, 178, + /* 4c */ 179, 180, 181, 182, + /* 50 */ 1246, 1247, 1248, 1249, + /* 54 */ 1250, 1251, 1252, 1253, + /* 58 */ 1101, 1102, 1103, 1104, + /* 5c */ 1105, 1106, 1107, 1108, + /* 60 */ GROUP(292), GROUP(295), GROUP(298), GROUP(299), + /* 64 */ INVALID, INVALID, INVALID, INVALID, + /* 68 */ 1254, 697, 1256, 698, + /* 6c */ 709, GROUP(300), 982, GROUP(301), + /* 70 */ 726, 728, 730, 732, + /* 74 */ 734, 736, 738, 740, + /* 78 */ 742, 744, 746, 748, + /* 7c */ 750, 752, 754, 756, + /* 80 */ GROUP(302), GROUP(303), GROUP(304), GROUP(313), + /* 84 */ 1433, 1434, 1475, 1476, + /* 88 */ 828, 829, 830, 831, + /* 8c */ 832, 770, 833, GROUP(314), + /* 90 */ 1477, 1478, 1479, 1480, + /* 94 */ 1481, 1482, 1483, 1484, + /* 98 */ GROUP(315), GROUP(316), GROUP(317), 1470, + /* 9c */ GROUP(318), GROUP(322), 1310, 766, + /* a0 */ 834, 835, 836, 837, + /* a4 */ 922, GROUP(326), 114, GROUP(327), + /* a8 */ 1435, 1436, 1402, GROUP(328), + /* ac */ 790, GROUP(329), 1346, GROUP(330), + /* b0 */ 838, 839, 840, 841, + /* b4 */ 842, 843, 844, 845, + /* b8 */ 846, 847, 848, 849, + /* bc */ 850, 851, 852, 853, + /* c0 */ GROUP(331), GROUP(332), 1301, 1302, + /* c4 */ GROUP(333), GROUP(403), GROUP(405), GROUP(406), + /* c8 */ 200, 776, 1303, 1304, + /* cc */ 713, 714, GROUP(407), GROUP(408), + /* d0 */ GROUP(409), GROUP(410), GROUP(411), GROUP(412), + /* d4 */ GROUP(413), GROUP(414), GROUP(415), 1486, + /* d8 */ GROUP(416), GROUP(419), GROUP(422), GROUP(425), + /* dc */ GROUP(428), GROUP(431), GROUP(434), GROUP(437), + /* e0 */ 794, 795, 796, GROUP(440), + /* e4 */ 690, 691, 978, 979, + /* e8 */ 72, 763, GROUP(441), 765, + /* ec */ 692, 693, 980, 981, + /* f0 */ 789, 712, 1299, 1300, + /* f4 */ 687, 83, GROUP(442), GROUP(443), + /* f8 */ 77, 1395, 81, 1398, + /* fc */ 78, 1396, GROUP(444), GROUP(445), +}; + +static const uint16_t ud_itab__1[] = { + /* 0 */ 1240, INVALID, +}; + +static const uint16_t ud_itab__2[] = { + /* 0 */ 1096, INVALID, +}; + +static const uint16_t ud_itab__3[] = { + /* 0 */ 1241, INVALID, +}; + +static const uint16_t ud_itab__4[] = { + /* 0 */ GROUP(5), GROUP(6), 767, 797, + /* 4 */ INVALID, 1426, 82, 1431, + /* 8 */ 716, 1471, INVALID, 1444, + /* c */ INVALID, GROUP(27), 430, GROUP(28), + /* 10 */ GROUP(29), GROUP(30), GROUP(31), GROUP(34), + /* 14 */ GROUP(35), GROUP(36), GROUP(37), GROUP(40), + /* 18 */ GROUP(41), 955, 956, 957, + /* 1c */ 958, 959, 960, 961, + /* 20 */ 854, 855, 856, 857, + /* 24 */ INVALID, INVALID, INVALID, INVALID, + /* 28 */ GROUP(42), GROUP(43), GROUP(44), GROUP(45), + /* 2c */ GROUP(46), GROUP(47), GROUP(48), GROUP(49), + /* 30 */ 1472, 1297, 1295, 1296, + /* 34 */ GROUP(50), GROUP(52), INVALID, 1514, + /* 38 */ GROUP(54), INVALID, GROUP(116), INVALID, + /* 3c */ INVALID, INVALID, INVALID, INVALID, + /* 40 */ 84, 85, 86, 87, + /* 44 */ 88, 89, 90, 91, + /* 48 */ 92, 93, 94, 95, + /* 4c */ 96, 97, 98, 99, + /* 50 */ GROUP(143), GROUP(144), GROUP(145), GROUP(146), + /* 54 */ GROUP(147), GROUP(148), GROUP(149), GROUP(150), + /* 58 */ GROUP(151), GROUP(152), GROUP(153), GROUP(154), + /* 5c */ GROUP(155), GROUP(156), GROUP(157), GROUP(158), + /* 60 */ GROUP(159), GROUP(160), GROUP(161), GROUP(162), + /* 64 */ GROUP(163), GROUP(164), GROUP(165), GROUP(166), + /* 68 */ GROUP(167), GROUP(168), GROUP(169), GROUP(170), + /* 6c */ GROUP(171), GROUP(172), GROUP(173), GROUP(176), + /* 70 */ GROUP(177), GROUP(178), GROUP(182), GROUP(186), + /* 74 */ GROUP(191), GROUP(192), GROUP(193), 199, + /* 78 */ GROUP(194), GROUP(195), INVALID, INVALID, + /* 7c */ GROUP(196), GROUP(197), GROUP(198), GROUP(201), + /* 80 */ 727, 729, 731, 733, + /* 84 */ 735, 737, 739, 741, + /* 88 */ 743, 745, 747, 749, + /* 8c */ 751, 753, 755, 757, + /* 90 */ 1350, 1351, 1352, 1353, + /* 94 */ 1354, 1355, 1356, 1357, + /* 98 */ 1358, 1359, 1360, 1361, + /* 9c */ 1362, 1363, 1364, 1365, + /* a0 */ 1245, 1100, 131, 1670, + /* a4 */ 1375, 1376, GROUP(202), GROUP(207), + /* a8 */ 1244, 1099, 1305, 1675, + /* ac */ 1377, 1378, GROUP(215), 694, + /* b0 */ 122, 123, 775, 1673, + /* b4 */ 772, 773, 940, 941, + /* b8 */ GROUP(221), INVALID, GROUP(222), 1671, + /* bc */ 1659, 1660, 930, 931, + /* c0 */ 1473, 1474, GROUP(223), 904, + /* c4 */ GROUP(224), GROUP(225), GROUP(226), GROUP(227), + /* c8 */ 1661, 1662, 1663, 1664, + /* cc */ 1665, 1666, 1667, 1668, + /* d0 */ GROUP(236), GROUP(237), GROUP(238), GROUP(239), + /* d4 */ GROUP(240), GROUP(241), GROUP(242), GROUP(243), + /* d8 */ GROUP(244), GROUP(245), GROUP(246), GROUP(247), + /* dc */ GROUP(248), GROUP(249), GROUP(250), GROUP(251), + /* e0 */ GROUP(252), GROUP(253), GROUP(254), GROUP(255), + /* e4 */ GROUP(256), GROUP(257), GROUP(258), GROUP(259), + /* e8 */ GROUP(260), GROUP(261), GROUP(262), GROUP(263), + /* ec */ GROUP(264), GROUP(265), GROUP(266), GROUP(267), + /* f0 */ GROUP(268), GROUP(269), GROUP(270), GROUP(271), + /* f4 */ GROUP(272), GROUP(273), GROUP(274), GROUP(275), + /* f8 */ GROUP(277), GROUP(278), GROUP(279), GROUP(280), + /* fc */ GROUP(281), GROUP(282), GROUP(283), INVALID, +}; + +static const uint16_t ud_itab__5[] = { + /* 0 */ 1384, 1406, 786, 798, + /* 4 */ 1453, 1454, INVALID, INVALID, +}; + +static const uint16_t ud_itab__6[] = { + /* 0 */ GROUP(7), GROUP(8), +}; + +static const uint16_t ud_itab__7[] = { + /* 0 */ 1374, 1383, 785, 774, + /* 4 */ 1385, INVALID, 787, 719, +}; + +static const uint16_t ud_itab__8[] = { + /* 0 */ GROUP(9), GROUP(14), GROUP(15), GROUP(16), + /* 4 */ 1386, INVALID, 788, GROUP(25), +}; + +static const uint16_t ud_itab__9[] = { + /* 0 */ INVALID, GROUP(10), GROUP(11), GROUP(12), + /* 4 */ GROUP(13), INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__10[] = { + /* 0 */ INVALID, 1455, INVALID, +}; + +static const uint16_t ud_itab__11[] = { + /* 0 */ INVALID, 1461, INVALID, +}; + +static const uint16_t ud_itab__12[] = { + /* 0 */ INVALID, 1462, INVALID, +}; + +static const uint16_t ud_itab__13[] = { + /* 0 */ INVALID, 1463, INVALID, +}; + +static const uint16_t ud_itab__14[] = { + /* 0 */ 824, 952, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__15[] = { + /* 0 */ 1485, 1508, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__16[] = { + /* 0 */ GROUP(17), GROUP(18), GROUP(19), GROUP(20), + /* 4 */ GROUP(21), GROUP(22), GROUP(23), GROUP(24), +}; + +static const uint16_t ud_itab__17[] = { + /* 0 */ 1466, INVALID, INVALID, +}; + +static const uint16_t ud_itab__18[] = { + /* 0 */ 1467, INVALID, INVALID, +}; + +static const uint16_t ud_itab__19[] = { + /* 0 */ 1468, INVALID, INVALID, +}; + +static const uint16_t ud_itab__20[] = { + /* 0 */ 1469, INVALID, INVALID, +}; + +static const uint16_t ud_itab__21[] = { + /* 0 */ 1397, INVALID, INVALID, +}; + +static const uint16_t ud_itab__22[] = { + /* 0 */ 80, INVALID, INVALID, +}; + +static const uint16_t ud_itab__23[] = { + /* 0 */ 1399, INVALID, INVALID, +}; + +static const uint16_t ud_itab__24[] = { + /* 0 */ 720, INVALID, INVALID, +}; + +static const uint16_t ud_itab__25[] = { + /* 0 */ 1425, GROUP(26), INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__26[] = { + /* 0 */ 1298, INVALID, INVALID, +}; + +static const uint16_t ud_itab__27[] = { + /* 0 */ 1119, 1120, 1121, 1122, + /* 4 */ 1123, 1124, 1125, 1126, +}; + +static const uint16_t ud_itab__28[] = { + /* 0 */ INVALID, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, + /* 8 */ INVALID, INVALID, INVALID, INVALID, + /* c */ 1216, 1217, INVALID, INVALID, + /* 10 */ INVALID, INVALID, INVALID, INVALID, + /* 14 */ INVALID, INVALID, INVALID, INVALID, + /* 18 */ INVALID, INVALID, INVALID, INVALID, + /* 1c */ 1218, 1219, INVALID, INVALID, + /* 20 */ INVALID, INVALID, INVALID, INVALID, + /* 24 */ INVALID, INVALID, INVALID, INVALID, + /* 28 */ INVALID, INVALID, INVALID, INVALID, + /* 2c */ INVALID, INVALID, INVALID, INVALID, + /* 30 */ INVALID, INVALID, INVALID, INVALID, + /* 34 */ INVALID, INVALID, INVALID, INVALID, + /* 38 */ INVALID, INVALID, INVALID, INVALID, + /* 3c */ INVALID, INVALID, INVALID, INVALID, + /* 40 */ INVALID, INVALID, INVALID, INVALID, + /* 44 */ INVALID, INVALID, INVALID, INVALID, + /* 48 */ INVALID, INVALID, INVALID, INVALID, + /* 4c */ INVALID, INVALID, INVALID, INVALID, + /* 50 */ INVALID, INVALID, INVALID, INVALID, + /* 54 */ INVALID, INVALID, INVALID, INVALID, + /* 58 */ INVALID, INVALID, INVALID, INVALID, + /* 5c */ INVALID, INVALID, INVALID, INVALID, + /* 60 */ INVALID, INVALID, INVALID, INVALID, + /* 64 */ INVALID, INVALID, INVALID, INVALID, + /* 68 */ INVALID, INVALID, INVALID, INVALID, + /* 6c */ INVALID, INVALID, INVALID, INVALID, + /* 70 */ INVALID, INVALID, INVALID, INVALID, + /* 74 */ INVALID, INVALID, INVALID, INVALID, + /* 78 */ INVALID, INVALID, INVALID, INVALID, + /* 7c */ INVALID, INVALID, INVALID, INVALID, + /* 80 */ INVALID, INVALID, INVALID, INVALID, + /* 84 */ INVALID, INVALID, INVALID, INVALID, + /* 88 */ INVALID, INVALID, 1220, INVALID, + /* 8c */ INVALID, INVALID, 1221, INVALID, + /* 90 */ 1222, INVALID, INVALID, INVALID, + /* 94 */ 1223, INVALID, 1224, 1225, + /* 98 */ INVALID, INVALID, 1226, INVALID, + /* 9c */ INVALID, INVALID, 1227, INVALID, + /* a0 */ 1228, INVALID, INVALID, INVALID, + /* a4 */ 1229, INVALID, 1230, 1231, + /* a8 */ INVALID, INVALID, 1232, INVALID, + /* ac */ INVALID, INVALID, 1233, INVALID, + /* b0 */ 1234, INVALID, INVALID, INVALID, + /* b4 */ 1235, INVALID, 1236, 1237, + /* b8 */ INVALID, INVALID, INVALID, 1238, + /* bc */ INVALID, INVALID, INVALID, 1239, + /* c0 */ INVALID, INVALID, INVALID, INVALID, + /* c4 */ INVALID, INVALID, INVALID, INVALID, + /* c8 */ INVALID, INVALID, INVALID, INVALID, + /* cc */ INVALID, INVALID, INVALID, INVALID, + /* d0 */ INVALID, INVALID, INVALID, INVALID, + /* d4 */ INVALID, INVALID, INVALID, INVALID, + /* d8 */ INVALID, INVALID, INVALID, INVALID, + /* dc */ INVALID, INVALID, INVALID, INVALID, + /* e0 */ INVALID, INVALID, INVALID, INVALID, + /* e4 */ INVALID, INVALID, INVALID, INVALID, + /* e8 */ INVALID, INVALID, INVALID, INVALID, + /* ec */ INVALID, INVALID, INVALID, INVALID, + /* f0 */ INVALID, INVALID, INVALID, INVALID, + /* f4 */ INVALID, INVALID, INVALID, INVALID, + /* f8 */ INVALID, INVALID, INVALID, INVALID, + /* fc */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__29[] = { + /* 0 */ 936, 925, 928, 932, +}; + +static const uint16_t ud_itab__30[] = { + /* 0 */ 938, 926, 929, 934, +}; + +static const uint16_t ud_itab__31[] = { + /* 0 */ GROUP(32), GROUP(33), +}; + +static const uint16_t ud_itab__32[] = { + /* 0 */ 892, 1563, 1571, 888, +}; + +static const uint16_t ud_itab__33[] = { + /* 0 */ 896, 1561, 1569, INVALID, +}; + +static const uint16_t ud_itab__34[] = { + /* 0 */ 894, INVALID, INVALID, 890, +}; + +static const uint16_t ud_itab__35[] = { + /* 0 */ 1449, INVALID, INVALID, 1451, +}; + +static const uint16_t ud_itab__36[] = { + /* 0 */ 1447, INVALID, INVALID, 1445, +}; + +static const uint16_t ud_itab__37[] = { + /* 0 */ GROUP(38), GROUP(39), +}; + +static const uint16_t ud_itab__38[] = { + /* 0 */ 882, INVALID, 1567, 878, +}; + +static const uint16_t ud_itab__39[] = { + /* 0 */ 886, INVALID, 1565, INVALID, +}; + +static const uint16_t ud_itab__40[] = { + /* 0 */ 884, INVALID, INVALID, 880, +}; + +static const uint16_t ud_itab__41[] = { + /* 0 */ 1127, 1128, 1129, 1130, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__42[] = { + /* 0 */ 862, INVALID, INVALID, 858, +}; + +static const uint16_t ud_itab__43[] = { + /* 0 */ 864, INVALID, INVALID, 860, +}; + +static const uint16_t ud_itab__44[] = { + /* 0 */ 141, 152, 154, 142, +}; + +static const uint16_t ud_itab__45[] = { + /* 0 */ 907, INVALID, INVALID, 905, +}; + +static const uint16_t ud_itab__46[] = { + /* 0 */ 165, 166, 168, 162, +}; + +static const uint16_t ud_itab__47[] = { + /* 0 */ 147, 148, 158, 138, +}; + +static const uint16_t ud_itab__48[] = { + /* 0 */ 1442, INVALID, INVALID, 1440, +}; + +static const uint16_t ud_itab__49[] = { + /* 0 */ 129, INVALID, INVALID, 127, +}; + +static const uint16_t ud_itab__50[] = { + /* 0 */ 1427, GROUP(51), +}; + +static const uint16_t ud_itab__51[] = { + /* 0 */ INVALID, 1428, INVALID, +}; + +static const uint16_t ud_itab__52[] = { + /* 0 */ 1429, GROUP(53), +}; + +static const uint16_t ud_itab__53[] = { + /* 0 */ INVALID, 1430, INVALID, +}; + +static const uint16_t ud_itab__54[] = { + /* 0 */ GROUP(67), GROUP(68), GROUP(63), GROUP(64), + /* 4 */ GROUP(65), GROUP(66), GROUP(86), GROUP(90), + /* 8 */ GROUP(69), GROUP(70), GROUP(71), GROUP(72), + /* c */ INVALID, INVALID, INVALID, INVALID, + /* 10 */ GROUP(73), INVALID, INVALID, INVALID, + /* 14 */ GROUP(75), GROUP(76), INVALID, GROUP(77), + /* 18 */ INVALID, INVALID, INVALID, INVALID, + /* 1c */ GROUP(78), GROUP(79), GROUP(80), INVALID, + /* 20 */ GROUP(81), GROUP(82), GROUP(83), GROUP(84), + /* 24 */ GROUP(85), GROUP(108), INVALID, INVALID, + /* 28 */ GROUP(87), GROUP(88), GROUP(89), GROUP(74), + /* 2c */ INVALID, INVALID, INVALID, INVALID, + /* 30 */ GROUP(91), GROUP(92), GROUP(93), GROUP(94), + /* 34 */ GROUP(95), GROUP(96), INVALID, GROUP(97), + /* 38 */ GROUP(98), GROUP(99), GROUP(100), GROUP(101), + /* 3c */ GROUP(102), GROUP(103), GROUP(104), GROUP(105), + /* 40 */ GROUP(106), GROUP(107), INVALID, INVALID, + /* 44 */ INVALID, INVALID, INVALID, INVALID, + /* 48 */ INVALID, INVALID, INVALID, INVALID, + /* 4c */ INVALID, INVALID, INVALID, INVALID, + /* 50 */ INVALID, INVALID, INVALID, INVALID, + /* 54 */ INVALID, INVALID, INVALID, INVALID, + /* 58 */ INVALID, INVALID, INVALID, INVALID, + /* 5c */ INVALID, INVALID, INVALID, INVALID, + /* 60 */ INVALID, INVALID, INVALID, INVALID, + /* 64 */ INVALID, INVALID, INVALID, INVALID, + /* 68 */ INVALID, INVALID, INVALID, INVALID, + /* 6c */ INVALID, INVALID, INVALID, INVALID, + /* 70 */ INVALID, INVALID, INVALID, INVALID, + /* 74 */ INVALID, INVALID, INVALID, INVALID, + /* 78 */ INVALID, INVALID, INVALID, INVALID, + /* 7c */ INVALID, INVALID, INVALID, INVALID, + /* 80 */ GROUP(55), GROUP(59), INVALID, INVALID, + /* 84 */ INVALID, INVALID, INVALID, INVALID, + /* 88 */ INVALID, INVALID, INVALID, INVALID, + /* 8c */ INVALID, INVALID, INVALID, INVALID, + /* 90 */ INVALID, INVALID, INVALID, INVALID, + /* 94 */ INVALID, INVALID, INVALID, INVALID, + /* 98 */ INVALID, INVALID, INVALID, INVALID, + /* 9c */ INVALID, INVALID, INVALID, INVALID, + /* a0 */ INVALID, INVALID, INVALID, INVALID, + /* a4 */ INVALID, INVALID, INVALID, INVALID, + /* a8 */ INVALID, INVALID, INVALID, INVALID, + /* ac */ INVALID, INVALID, INVALID, INVALID, + /* b0 */ INVALID, INVALID, INVALID, INVALID, + /* b4 */ INVALID, INVALID, INVALID, INVALID, + /* b8 */ INVALID, INVALID, INVALID, INVALID, + /* bc */ INVALID, INVALID, INVALID, INVALID, + /* c0 */ INVALID, INVALID, INVALID, INVALID, + /* c4 */ INVALID, INVALID, INVALID, INVALID, + /* c8 */ INVALID, INVALID, INVALID, INVALID, + /* cc */ INVALID, INVALID, INVALID, INVALID, + /* d0 */ INVALID, INVALID, INVALID, INVALID, + /* d4 */ INVALID, INVALID, INVALID, INVALID, + /* d8 */ INVALID, INVALID, INVALID, GROUP(109), + /* dc */ GROUP(110), GROUP(111), GROUP(112), GROUP(113), + /* e0 */ INVALID, INVALID, INVALID, INVALID, + /* e4 */ INVALID, INVALID, INVALID, INVALID, + /* e8 */ INVALID, INVALID, INVALID, INVALID, + /* ec */ INVALID, INVALID, INVALID, INVALID, + /* f0 */ GROUP(114), GROUP(115), INVALID, INVALID, + /* f4 */ INVALID, INVALID, INVALID, INVALID, + /* f8 */ INVALID, INVALID, INVALID, INVALID, + /* fc */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__55[] = { + /* 0 */ INVALID, INVALID, INVALID, GROUP(56), +}; + +static const uint16_t ud_itab__56[] = { + /* 0 */ GROUP(57), GROUP(58), +}; + +static const uint16_t ud_itab__57[] = { + /* 0 */ INVALID, 717, INVALID, +}; + +static const uint16_t ud_itab__58[] = { + /* 0 */ INVALID, 718, INVALID, +}; + +static const uint16_t ud_itab__59[] = { + /* 0 */ INVALID, INVALID, INVALID, GROUP(60), +}; + +static const uint16_t ud_itab__60[] = { + /* 0 */ GROUP(61), GROUP(62), +}; + +static const uint16_t ud_itab__61[] = { + /* 0 */ INVALID, 721, INVALID, +}; + +static const uint16_t ud_itab__62[] = { + /* 0 */ INVALID, 722, INVALID, +}; + +static const uint16_t ud_itab__63[] = { + /* 0 */ 1588, INVALID, INVALID, 1589, +}; + +static const uint16_t ud_itab__64[] = { + /* 0 */ 1591, INVALID, INVALID, 1592, +}; + +static const uint16_t ud_itab__65[] = { + /* 0 */ 1594, INVALID, INVALID, 1595, +}; + +static const uint16_t ud_itab__66[] = { + /* 0 */ 1597, INVALID, INVALID, 1598, +}; + +static const uint16_t ud_itab__67[] = { + /* 0 */ 1582, INVALID, INVALID, 1583, +}; + +static const uint16_t ud_itab__68[] = { + /* 0 */ 1585, INVALID, INVALID, 1586, +}; + +static const uint16_t ud_itab__69[] = { + /* 0 */ 1606, INVALID, INVALID, 1607, +}; + +static const uint16_t ud_itab__70[] = { + /* 0 */ 1612, INVALID, INVALID, 1613, +}; + +static const uint16_t ud_itab__71[] = { + /* 0 */ 1609, INVALID, INVALID, 1610, +}; + +static const uint16_t ud_itab__72[] = { + /* 0 */ 1615, INVALID, INVALID, 1616, +}; + +static const uint16_t ud_itab__73[] = { + /* 0 */ INVALID, INVALID, INVALID, 1621, +}; + +static const uint16_t ud_itab__74[] = { + /* 0 */ INVALID, INVALID, INVALID, 1683, +}; + +static const uint16_t ud_itab__75[] = { + /* 0 */ INVALID, INVALID, INVALID, 1657, +}; + +static const uint16_t ud_itab__76[] = { + /* 0 */ INVALID, INVALID, INVALID, 1656, +}; + +static const uint16_t ud_itab__77[] = { + /* 0 */ INVALID, INVALID, INVALID, 1711, +}; + +static const uint16_t ud_itab__78[] = { + /* 0 */ 1573, INVALID, INVALID, 1574, +}; + +static const uint16_t ud_itab__79[] = { + /* 0 */ 1576, INVALID, INVALID, 1577, +}; + +static const uint16_t ud_itab__80[] = { + /* 0 */ 1579, INVALID, INVALID, 1580, +}; + +static const uint16_t ud_itab__81[] = { + /* 0 */ INVALID, INVALID, INVALID, 1685, +}; + +static const uint16_t ud_itab__82[] = { + /* 0 */ INVALID, INVALID, INVALID, 1687, +}; + +static const uint16_t ud_itab__83[] = { + /* 0 */ INVALID, INVALID, INVALID, 1689, +}; + +static const uint16_t ud_itab__84[] = { + /* 0 */ INVALID, INVALID, INVALID, 1691, +}; + +static const uint16_t ud_itab__85[] = { + /* 0 */ INVALID, INVALID, INVALID, 1693, +}; + +static const uint16_t ud_itab__86[] = { + /* 0 */ 1600, INVALID, INVALID, 1601, +}; + +static const uint16_t ud_itab__87[] = { + /* 0 */ INVALID, INVALID, INVALID, 1622, +}; + +static const uint16_t ud_itab__88[] = { + /* 0 */ INVALID, INVALID, INVALID, 1708, +}; + +static const uint16_t ud_itab__89[] = { + /* 0 */ INVALID, INVALID, INVALID, 1681, +}; + +static const uint16_t ud_itab__90[] = { + /* 0 */ 1603, INVALID, INVALID, 1604, +}; + +static const uint16_t ud_itab__91[] = { + /* 0 */ INVALID, INVALID, INVALID, 1696, +}; + +static const uint16_t ud_itab__92[] = { + /* 0 */ INVALID, INVALID, INVALID, 1698, +}; + +static const uint16_t ud_itab__93[] = { + /* 0 */ INVALID, INVALID, INVALID, 1700, +}; + +static const uint16_t ud_itab__94[] = { + /* 0 */ INVALID, INVALID, INVALID, 1702, +}; + +static const uint16_t ud_itab__95[] = { + /* 0 */ INVALID, INVALID, INVALID, 1704, +}; + +static const uint16_t ud_itab__96[] = { + /* 0 */ INVALID, INVALID, INVALID, 1706, +}; + +static const uint16_t ud_itab__97[] = { + /* 0 */ INVALID, INVALID, INVALID, 1717, +}; + +static const uint16_t ud_itab__98[] = { + /* 0 */ INVALID, INVALID, INVALID, 1624, +}; + +static const uint16_t ud_itab__99[] = { + /* 0 */ INVALID, INVALID, INVALID, 1626, +}; + +static const uint16_t ud_itab__100[] = { + /* 0 */ INVALID, INVALID, INVALID, 1628, +}; + +static const uint16_t ud_itab__101[] = { + /* 0 */ INVALID, INVALID, INVALID, 1630, +}; + +static const uint16_t ud_itab__102[] = { + /* 0 */ INVALID, INVALID, INVALID, 1632, +}; + +static const uint16_t ud_itab__103[] = { + /* 0 */ INVALID, INVALID, INVALID, 1634, +}; + +static const uint16_t ud_itab__104[] = { + /* 0 */ INVALID, INVALID, INVALID, 1638, +}; + +static const uint16_t ud_itab__105[] = { + /* 0 */ INVALID, INVALID, INVALID, 1636, +}; + +static const uint16_t ud_itab__106[] = { + /* 0 */ INVALID, INVALID, INVALID, 1640, +}; + +static const uint16_t ud_itab__107[] = { + /* 0 */ INVALID, INVALID, INVALID, 1642, +}; + +static const uint16_t ud_itab__108[] = { + /* 0 */ INVALID, INVALID, INVALID, 1695, +}; + +static const uint16_t ud_itab__109[] = { + /* 0 */ INVALID, INVALID, INVALID, 45, +}; + +static const uint16_t ud_itab__110[] = { + /* 0 */ INVALID, INVALID, INVALID, 41, +}; + +static const uint16_t ud_itab__111[] = { + /* 0 */ INVALID, INVALID, INVALID, 43, +}; + +static const uint16_t ud_itab__112[] = { + /* 0 */ INVALID, INVALID, INVALID, 37, +}; + +static const uint16_t ud_itab__113[] = { + /* 0 */ INVALID, INVALID, INVALID, 39, +}; + +static const uint16_t ud_itab__114[] = { + /* 0 */ 1723, 1725, INVALID, INVALID, +}; + +static const uint16_t ud_itab__115[] = { + /* 0 */ 1724, 1726, INVALID, INVALID, +}; + +static const uint16_t ud_itab__116[] = { + /* 0 */ INVALID, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, + /* 8 */ GROUP(117), GROUP(118), GROUP(119), GROUP(120), + /* c */ GROUP(121), GROUP(122), GROUP(123), GROUP(124), + /* 10 */ INVALID, INVALID, INVALID, INVALID, + /* 14 */ GROUP(125), GROUP(126), GROUP(127), GROUP(129), + /* 18 */ INVALID, INVALID, INVALID, INVALID, + /* 1c */ INVALID, INVALID, INVALID, INVALID, + /* 20 */ GROUP(130), GROUP(131), GROUP(132), INVALID, + /* 24 */ INVALID, INVALID, INVALID, INVALID, + /* 28 */ INVALID, INVALID, INVALID, INVALID, + /* 2c */ INVALID, INVALID, INVALID, INVALID, + /* 30 */ INVALID, INVALID, INVALID, INVALID, + /* 34 */ INVALID, INVALID, INVALID, INVALID, + /* 38 */ INVALID, INVALID, INVALID, INVALID, + /* 3c */ INVALID, INVALID, INVALID, INVALID, + /* 40 */ GROUP(134), GROUP(135), GROUP(136), INVALID, + /* 44 */ GROUP(137), INVALID, INVALID, INVALID, + /* 48 */ INVALID, INVALID, INVALID, INVALID, + /* 4c */ INVALID, INVALID, INVALID, INVALID, + /* 50 */ INVALID, INVALID, INVALID, INVALID, + /* 54 */ INVALID, INVALID, INVALID, INVALID, + /* 58 */ INVALID, INVALID, INVALID, INVALID, + /* 5c */ INVALID, INVALID, INVALID, INVALID, + /* 60 */ GROUP(139), GROUP(140), GROUP(141), GROUP(142), + /* 64 */ INVALID, INVALID, INVALID, INVALID, + /* 68 */ INVALID, INVALID, INVALID, INVALID, + /* 6c */ INVALID, INVALID, INVALID, INVALID, + /* 70 */ INVALID, INVALID, INVALID, INVALID, + /* 74 */ INVALID, INVALID, INVALID, INVALID, + /* 78 */ INVALID, INVALID, INVALID, INVALID, + /* 7c */ INVALID, INVALID, INVALID, INVALID, + /* 80 */ INVALID, INVALID, INVALID, INVALID, + /* 84 */ INVALID, INVALID, INVALID, INVALID, + /* 88 */ INVALID, INVALID, INVALID, INVALID, + /* 8c */ INVALID, INVALID, INVALID, INVALID, + /* 90 */ INVALID, INVALID, INVALID, INVALID, + /* 94 */ INVALID, INVALID, INVALID, INVALID, + /* 98 */ INVALID, INVALID, INVALID, INVALID, + /* 9c */ INVALID, INVALID, INVALID, INVALID, + /* a0 */ INVALID, INVALID, INVALID, INVALID, + /* a4 */ INVALID, INVALID, INVALID, INVALID, + /* a8 */ INVALID, INVALID, INVALID, INVALID, + /* ac */ INVALID, INVALID, INVALID, INVALID, + /* b0 */ INVALID, INVALID, INVALID, INVALID, + /* b4 */ INVALID, INVALID, INVALID, INVALID, + /* b8 */ INVALID, INVALID, INVALID, INVALID, + /* bc */ INVALID, INVALID, INVALID, INVALID, + /* c0 */ INVALID, INVALID, INVALID, INVALID, + /* c4 */ INVALID, INVALID, INVALID, INVALID, + /* c8 */ INVALID, INVALID, INVALID, INVALID, + /* cc */ INVALID, INVALID, INVALID, INVALID, + /* d0 */ INVALID, INVALID, INVALID, INVALID, + /* d4 */ INVALID, INVALID, INVALID, INVALID, + /* d8 */ INVALID, INVALID, INVALID, INVALID, + /* dc */ INVALID, INVALID, INVALID, GROUP(138), + /* e0 */ INVALID, INVALID, INVALID, INVALID, + /* e4 */ INVALID, INVALID, INVALID, INVALID, + /* e8 */ INVALID, INVALID, INVALID, INVALID, + /* ec */ INVALID, INVALID, INVALID, INVALID, + /* f0 */ INVALID, INVALID, INVALID, INVALID, + /* f4 */ INVALID, INVALID, INVALID, INVALID, + /* f8 */ INVALID, INVALID, INVALID, INVALID, + /* fc */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__117[] = { + /* 0 */ INVALID, INVALID, INVALID, 1644, +}; + +static const uint16_t ud_itab__118[] = { + /* 0 */ INVALID, INVALID, INVALID, 1646, +}; + +static const uint16_t ud_itab__119[] = { + /* 0 */ INVALID, INVALID, INVALID, 1648, +}; + +static const uint16_t ud_itab__120[] = { + /* 0 */ INVALID, INVALID, INVALID, 1650, +}; + +static const uint16_t ud_itab__121[] = { + /* 0 */ INVALID, INVALID, INVALID, 1654, +}; + +static const uint16_t ud_itab__122[] = { + /* 0 */ INVALID, INVALID, INVALID, 1652, +}; + +static const uint16_t ud_itab__123[] = { + /* 0 */ INVALID, INVALID, INVALID, 1677, +}; + +static const uint16_t ud_itab__124[] = { + /* 0 */ 1618, INVALID, INVALID, 1619, +}; + +static const uint16_t ud_itab__125[] = { + /* 0 */ INVALID, INVALID, INVALID, 1045, +}; + +static const uint16_t ud_itab__126[] = { + /* 0 */ INVALID, INVALID, INVALID, 1056, +}; + +static const uint16_t ud_itab__127[] = { + /* 0 */ INVALID, INVALID, INVALID, GROUP(128), +}; + +static const uint16_t ud_itab__128[] = { + /* 0 */ 1047, 1049, 1051, +}; + +static const uint16_t ud_itab__129[] = { + /* 0 */ INVALID, INVALID, INVALID, 201, +}; + +static const uint16_t ud_itab__130[] = { + /* 0 */ INVALID, INVALID, INVALID, 1058, +}; + +static const uint16_t ud_itab__131[] = { + /* 0 */ INVALID, INVALID, INVALID, 1557, +}; + +static const uint16_t ud_itab__132[] = { + /* 0 */ INVALID, INVALID, INVALID, GROUP(133), +}; + +static const uint16_t ud_itab__133[] = { + /* 0 */ 1062, 1063, 1064, +}; + +static const uint16_t ud_itab__134[] = { + /* 0 */ INVALID, INVALID, INVALID, 197, +}; + +static const uint16_t ud_itab__135[] = { + /* 0 */ INVALID, INVALID, INVALID, 195, +}; + +static const uint16_t ud_itab__136[] = { + /* 0 */ INVALID, INVALID, INVALID, 1679, +}; + +static const uint16_t ud_itab__137[] = { + /* 0 */ INVALID, INVALID, INVALID, 1512, +}; + +static const uint16_t ud_itab__138[] = { + /* 0 */ INVALID, INVALID, INVALID, 47, +}; + +static const uint16_t ud_itab__139[] = { + /* 0 */ INVALID, INVALID, INVALID, 1715, +}; + +static const uint16_t ud_itab__140[] = { + /* 0 */ INVALID, INVALID, INVALID, 1713, +}; + +static const uint16_t ud_itab__141[] = { + /* 0 */ INVALID, INVALID, INVALID, 1721, +}; + +static const uint16_t ud_itab__142[] = { + /* 0 */ INVALID, INVALID, INVALID, 1719, +}; + +static const uint16_t ud_itab__143[] = { + /* 0 */ 900, INVALID, INVALID, 898, +}; + +static const uint16_t ud_itab__144[] = { + /* 0 */ 1387, 1391, 1393, 1389, +}; + +static const uint16_t ud_itab__145[] = { + /* 0 */ 1306, INVALID, 1308, INVALID, +}; + +static const uint16_t ud_itab__146[] = { + /* 0 */ 1291, INVALID, 1293, INVALID, +}; + +static const uint16_t ud_itab__147[] = { + /* 0 */ 61, INVALID, INVALID, 59, +}; + +static const uint16_t ud_itab__148[] = { + /* 0 */ 65, INVALID, INVALID, 63, +}; + +static const uint16_t ud_itab__149[] = { + /* 0 */ 976, INVALID, INVALID, 974, +}; + +static const uint16_t ud_itab__150[] = { + /* 0 */ 1499, INVALID, INVALID, 1497, +}; + +static const uint16_t ud_itab__151[] = { + /* 0 */ 27, 29, 31, 25, +}; + +static const uint16_t ud_itab__152[] = { + /* 0 */ 946, 948, 950, 944, +}; + +static const uint16_t ud_itab__153[] = { + /* 0 */ 145, 150, 156, 139, +}; + +static const uint16_t ud_itab__154[] = { + /* 0 */ 134, INVALID, 163, 143, +}; + +static const uint16_t ud_itab__155[] = { + /* 0 */ 1419, 1421, 1423, 1417, +}; + +static const uint16_t ud_itab__156[] = { + /* 0 */ 818, 820, 822, 816, +}; + +static const uint16_t ud_itab__157[] = { + /* 0 */ 189, 191, 193, 187, +}; + +static const uint16_t ud_itab__158[] = { + /* 0 */ 802, 804, 806, 800, +}; + +static const uint16_t ud_itab__159[] = { + /* 0 */ 1209, INVALID, INVALID, 1207, +}; + +static const uint16_t ud_itab__160[] = { + /* 0 */ 1212, INVALID, INVALID, 1210, +}; + +static const uint16_t ud_itab__161[] = { + /* 0 */ 1215, INVALID, INVALID, 1213, +}; + +static const uint16_t ud_itab__162[] = { + /* 0 */ 987, INVALID, INVALID, 985, +}; + +static const uint16_t ud_itab__163[] = { + /* 0 */ 1038, INVALID, INVALID, 1036, +}; + +static const uint16_t ud_itab__164[] = { + /* 0 */ 1041, INVALID, INVALID, 1039, +}; + +static const uint16_t ud_itab__165[] = { + /* 0 */ 1044, INVALID, INVALID, 1042, +}; + +static const uint16_t ud_itab__166[] = { + /* 0 */ 993, INVALID, INVALID, 991, +}; + +static const uint16_t ud_itab__167[] = { + /* 0 */ 1200, INVALID, INVALID, 1198, +}; + +static const uint16_t ud_itab__168[] = { + /* 0 */ 1203, INVALID, INVALID, 1201, +}; + +static const uint16_t ud_itab__169[] = { + /* 0 */ 1206, INVALID, INVALID, 1204, +}; + +static const uint16_t ud_itab__170[] = { + /* 0 */ 990, INVALID, INVALID, 988, +}; + +static const uint16_t ud_itab__171[] = { + /* 0 */ INVALID, INVALID, INVALID, 1547, +}; + +static const uint16_t ud_itab__172[] = { + /* 0 */ INVALID, INVALID, INVALID, 1545, +}; + +static const uint16_t ud_itab__173[] = { + /* 0 */ GROUP(174), INVALID, INVALID, GROUP(175), +}; + +static const uint16_t ud_itab__174[] = { + /* 0 */ 866, 867, 910, +}; + +static const uint16_t ud_itab__175[] = { + /* 0 */ 868, 870, 911, +}; + +static const uint16_t ud_itab__176[] = { + /* 0 */ 920, INVALID, 1522, 1517, +}; + +static const uint16_t ud_itab__177[] = { + /* 0 */ 1134, 1537, 1535, 1539, +}; + +static const uint16_t ud_itab__178[] = { + /* 0 */ INVALID, INVALID, GROUP(179), INVALID, + /* 4 */ GROUP(180), INVALID, GROUP(181), INVALID, +}; + +static const uint16_t ud_itab__179[] = { + /* 0 */ 1159, INVALID, INVALID, 1163, +}; + +static const uint16_t ud_itab__180[] = { + /* 0 */ 1152, INVALID, INVALID, 1150, +}; + +static const uint16_t ud_itab__181[] = { + /* 0 */ 1138, INVALID, INVALID, 1137, +}; + +static const uint16_t ud_itab__182[] = { + /* 0 */ INVALID, INVALID, GROUP(183), INVALID, + /* 4 */ GROUP(184), INVALID, GROUP(185), INVALID, +}; + +static const uint16_t ud_itab__183[] = { + /* 0 */ 1165, INVALID, INVALID, 1169, +}; + +static const uint16_t ud_itab__184[] = { + /* 0 */ 1153, INVALID, INVALID, 1157, +}; + +static const uint16_t ud_itab__185[] = { + /* 0 */ 1142, INVALID, INVALID, 1141, +}; + +static const uint16_t ud_itab__186[] = { + /* 0 */ INVALID, INVALID, GROUP(187), GROUP(188), + /* 4 */ INVALID, INVALID, GROUP(189), GROUP(190), +}; + +static const uint16_t ud_itab__187[] = { + /* 0 */ 1171, INVALID, INVALID, 1175, +}; + +static const uint16_t ud_itab__188[] = { + /* 0 */ INVALID, INVALID, INVALID, 1543, +}; + +static const uint16_t ud_itab__189[] = { + /* 0 */ 1146, INVALID, INVALID, 1145, +}; + +static const uint16_t ud_itab__190[] = { + /* 0 */ INVALID, INVALID, INVALID, 1541, +}; + +static const uint16_t ud_itab__191[] = { + /* 0 */ 1027, INVALID, INVALID, 1028, +}; + +static const uint16_t ud_itab__192[] = { + /* 0 */ 1030, INVALID, INVALID, 1031, +}; + +static const uint16_t ud_itab__193[] = { + /* 0 */ 1033, INVALID, INVALID, 1034, +}; + +static const uint16_t ud_itab__194[] = { + /* 0 */ INVALID, 1464, INVALID, +}; + +static const uint16_t ud_itab__195[] = { + /* 0 */ INVALID, 1465, INVALID, +}; + +static const uint16_t ud_itab__196[] = { + /* 0 */ INVALID, 1551, INVALID, 1549, +}; + +static const uint16_t ud_itab__197[] = { + /* 0 */ INVALID, 1555, INVALID, 1553, +}; + +static const uint16_t ud_itab__198[] = { + /* 0 */ GROUP(199), INVALID, 916, GROUP(200), +}; + +static const uint16_t ud_itab__199[] = { + /* 0 */ 872, 873, 913, +}; + +static const uint16_t ud_itab__200[] = { + /* 0 */ 874, 876, 914, +}; + +static const uint16_t ud_itab__201[] = { + /* 0 */ 921, INVALID, 1524, 1515, +}; + +static const uint16_t ud_itab__202[] = { + /* 0 */ INVALID, GROUP(203), +}; + +static const uint16_t ud_itab__203[] = { + /* 0 */ GROUP(204), GROUP(205), GROUP(206), INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__204[] = { + /* 0 */ 825, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__205[] = { + /* 0 */ 1509, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__206[] = { + /* 0 */ 1510, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__207[] = { + /* 0 */ INVALID, GROUP(208), +}; + +static const uint16_t ud_itab__208[] = { + /* 0 */ GROUP(209), GROUP(210), GROUP(211), GROUP(212), + /* 4 */ GROUP(213), GROUP(214), INVALID, INVALID, +}; + +static const uint16_t ud_itab__209[] = { + /* 0 */ 1511, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__210[] = { + /* 0 */ 1501, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__211[] = { + /* 0 */ 1502, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__212[] = { + /* 0 */ 1503, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__213[] = { + /* 0 */ 1504, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__214[] = { + /* 0 */ 1505, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__215[] = { + /* 0 */ GROUP(216), GROUP(217), +}; + +static const uint16_t ud_itab__216[] = { + /* 0 */ 683, 682, 768, 1400, + /* 4 */ 1507, 1506, INVALID, 79, +}; + +static const uint16_t ud_itab__217[] = { + /* 0 */ INVALID, INVALID, INVALID, INVALID, + /* 4 */ INVALID, GROUP(218), GROUP(219), GROUP(220), +}; + +static const uint16_t ud_itab__218[] = { + /* 0 */ 777, 778, 779, 780, + /* 4 */ 781, 782, 783, 784, +}; + +static const uint16_t ud_itab__219[] = { + /* 0 */ 808, 809, 810, 811, + /* 4 */ 812, 813, 814, 815, +}; + +static const uint16_t ud_itab__220[] = { + /* 0 */ 1366, 1367, 1368, 1369, + /* 4 */ 1370, 1371, 1372, 1373, +}; + +static const uint16_t ud_itab__221[] = { + /* 0 */ INVALID, INVALID, 1710, INVALID, +}; + +static const uint16_t ud_itab__222[] = { + /* 0 */ INVALID, INVALID, INVALID, INVALID, + /* 4 */ 1669, 1676, 1674, 1672, +}; + +static const uint16_t ud_itab__223[] = { + /* 0 */ 112, 117, 120, 110, +}; + +static const uint16_t ud_itab__224[] = { + /* 0 */ 1059, INVALID, INVALID, 1060, +}; + +static const uint16_t ud_itab__225[] = { + /* 0 */ 1055, INVALID, INVALID, 1053, +}; + +static const uint16_t ud_itab__226[] = { + /* 0 */ 1381, INVALID, INVALID, 1379, +}; + +static const uint16_t ud_itab__227[] = { + /* 0 */ GROUP(228), GROUP(235), +}; + +static const uint16_t ud_itab__228[] = { + /* 0 */ INVALID, GROUP(229), INVALID, INVALID, + /* 4 */ INVALID, INVALID, GROUP(230), GROUP(234), +}; + +static const uint16_t ud_itab__229[] = { + /* 0 */ 124, 125, 126, +}; + +static const uint16_t ud_itab__230[] = { + /* 0 */ GROUP(231), INVALID, GROUP(232), GROUP(233), +}; + +static const uint16_t ud_itab__231[] = { + /* 0 */ INVALID, 1459, INVALID, +}; + +static const uint16_t ud_itab__232[] = { + /* 0 */ INVALID, 1458, INVALID, +}; + +static const uint16_t ud_itab__233[] = { + /* 0 */ INVALID, 1457, INVALID, +}; + +static const uint16_t ud_itab__234[] = { + /* 0 */ INVALID, 1460, INVALID, +}; + +static const uint16_t ud_itab__235[] = { + /* 0 */ INVALID, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, 1456, INVALID, +}; + +static const uint16_t ud_itab__236[] = { + /* 0 */ INVALID, 35, INVALID, 33, +}; + +static const uint16_t ud_itab__237[] = { + /* 0 */ 1160, INVALID, INVALID, 1161, +}; + +static const uint16_t ud_itab__238[] = { + /* 0 */ 1166, INVALID, INVALID, 1167, +}; + +static const uint16_t ud_itab__239[] = { + /* 0 */ 1172, INVALID, INVALID, 1173, +}; + +static const uint16_t ud_itab__240[] = { + /* 0 */ 1527, INVALID, INVALID, 1528, +}; + +static const uint16_t ud_itab__241[] = { + /* 0 */ 1093, INVALID, INVALID, 1094, +}; + +static const uint16_t ud_itab__242[] = { + /* 0 */ INVALID, 1521, 1526, 918, +}; + +static const uint16_t ud_itab__243[] = { + /* 0 */ 1086, INVALID, INVALID, 1084, +}; + +static const uint16_t ud_itab__244[] = { + /* 0 */ 1192, INVALID, INVALID, 1193, +}; + +static const uint16_t ud_itab__245[] = { + /* 0 */ 1195, INVALID, INVALID, 1196, +}; + +static const uint16_t ud_itab__246[] = { + /* 0 */ 1083, INVALID, INVALID, 1081, +}; + +static const uint16_t ud_itab__247[] = { + /* 0 */ 1017, INVALID, INVALID, 1015, +}; + +static const uint16_t ud_itab__248[] = { + /* 0 */ 1009, INVALID, INVALID, 1010, +}; + +static const uint16_t ud_itab__249[] = { + /* 0 */ 1012, INVALID, INVALID, 1013, +}; + +static const uint16_t ud_itab__250[] = { + /* 0 */ 1075, INVALID, INVALID, 1076, +}; + +static const uint16_t ud_itab__251[] = { + /* 0 */ 1020, INVALID, INVALID, 1018, +}; + +static const uint16_t ud_itab__252[] = { + /* 0 */ 1023, INVALID, INVALID, 1021, +}; + +static const uint16_t ud_itab__253[] = { + /* 0 */ 1147, INVALID, INVALID, 1148, +}; + +static const uint16_t ud_itab__254[] = { + /* 0 */ 1156, INVALID, INVALID, 1154, +}; + +static const uint16_t ud_itab__255[] = { + /* 0 */ 1026, INVALID, INVALID, 1024, +}; + +static const uint16_t ud_itab__256[] = { + /* 0 */ 1087, INVALID, INVALID, 1088, +}; + +static const uint16_t ud_itab__257[] = { + /* 0 */ 1092, INVALID, INVALID, 1090, +}; + +static const uint16_t ud_itab__258[] = { + /* 0 */ INVALID, 136, 132, 160, +}; + +static const uint16_t ud_itab__259[] = { + /* 0 */ 909, INVALID, INVALID, 902, +}; + +static const uint16_t ud_itab__260[] = { + /* 0 */ 1186, INVALID, INVALID, 1187, +}; + +static const uint16_t ud_itab__261[] = { + /* 0 */ 1189, INVALID, INVALID, 1190, +}; + +static const uint16_t ud_itab__262[] = { + /* 0 */ 1080, INVALID, INVALID, 1078, +}; + +static const uint16_t ud_itab__263[] = { + /* 0 */ 1118, INVALID, INVALID, 1116, +}; + +static const uint16_t ud_itab__264[] = { + /* 0 */ 1003, INVALID, INVALID, 1004, +}; + +static const uint16_t ud_itab__265[] = { + /* 0 */ 1006, INVALID, INVALID, 1007, +}; + +static const uint16_t ud_itab__266[] = { + /* 0 */ 1074, INVALID, INVALID, 1072, +}; + +static const uint16_t ud_itab__267[] = { + /* 0 */ 1266, INVALID, INVALID, 1264, +}; + +static const uint16_t ud_itab__268[] = { + /* 0 */ INVALID, 1559, INVALID, INVALID, +}; + +static const uint16_t ud_itab__269[] = { + /* 0 */ 1136, INVALID, INVALID, 1135, +}; + +static const uint16_t ud_itab__270[] = { + /* 0 */ 1140, INVALID, INVALID, 1139, +}; + +static const uint16_t ud_itab__271[] = { + /* 0 */ 1144, INVALID, INVALID, 1143, +}; + +static const uint16_t ud_itab__272[] = { + /* 0 */ 1533, INVALID, INVALID, 1534, +}; + +static const uint16_t ud_itab__273[] = { + /* 0 */ 1069, INVALID, INVALID, 1070, +}; + +static const uint16_t ud_itab__274[] = { + /* 0 */ 1133, INVALID, INVALID, 1131, +}; + +static const uint16_t ud_itab__275[] = { + /* 0 */ INVALID, GROUP(276), +}; + +static const uint16_t ud_itab__276[] = { + /* 0 */ 799, INVALID, INVALID, 1519, +}; + +static const uint16_t ud_itab__277[] = { + /* 0 */ 1179, INVALID, INVALID, 1177, +}; + +static const uint16_t ud_itab__278[] = { + /* 0 */ 1182, INVALID, INVALID, 1180, +}; + +static const uint16_t ud_itab__279[] = { + /* 0 */ 1183, INVALID, INVALID, 1184, +}; + +static const uint16_t ud_itab__280[] = { + /* 0 */ 1532, INVALID, INVALID, 1530, +}; + +static const uint16_t ud_itab__281[] = { + /* 0 */ 996, INVALID, INVALID, 994, +}; + +static const uint16_t ud_itab__282[] = { + /* 0 */ 997, INVALID, INVALID, 998, +}; + +static const uint16_t ud_itab__283[] = { + /* 0 */ 1000, INVALID, INVALID, 1001, +}; + +static const uint16_t ud_itab__284[] = { + /* 0 */ 1242, INVALID, +}; + +static const uint16_t ud_itab__285[] = { + /* 0 */ 1097, INVALID, +}; + +static const uint16_t ud_itab__286[] = { + /* 0 */ 1243, INVALID, +}; + +static const uint16_t ud_itab__287[] = { + /* 0 */ 1098, INVALID, +}; + +static const uint16_t ud_itab__288[] = { + /* 0 */ 173, INVALID, +}; + +static const uint16_t ud_itab__289[] = { + /* 0 */ 174, INVALID, +}; + +static const uint16_t ud_itab__290[] = { + /* 0 */ 1, INVALID, +}; + +static const uint16_t ud_itab__291[] = { + /* 0 */ 4, INVALID, +}; + +static const uint16_t ud_itab__292[] = { + /* 0 */ GROUP(293), GROUP(294), INVALID, +}; + +static const uint16_t ud_itab__293[] = { + /* 0 */ 1257, INVALID, +}; + +static const uint16_t ud_itab__294[] = { + /* 0 */ 1258, INVALID, +}; + +static const uint16_t ud_itab__295[] = { + /* 0 */ GROUP(296), GROUP(297), INVALID, +}; + +static const uint16_t ud_itab__296[] = { + /* 0 */ 1110, INVALID, +}; + +static const uint16_t ud_itab__297[] = { + /* 0 */ 1111, INVALID, +}; + +static const uint16_t ud_itab__298[] = { + /* 0 */ 1658, INVALID, +}; + +static const uint16_t ud_itab__299[] = { + /* 0 */ 67, 68, +}; + +static const uint16_t ud_itab__300[] = { + /* 0 */ 710, 711, INVALID, +}; + +static const uint16_t ud_itab__301[] = { + /* 0 */ 983, 984, INVALID, +}; + +static const uint16_t ud_itab__302[] = { + /* 0 */ 21, 970, 11, 1342, + /* 4 */ 55, 1413, 1493, 106, +}; + +static const uint16_t ud_itab__303[] = { + /* 0 */ 23, 971, 13, 1343, + /* 4 */ 57, 1414, 1494, 108, +}; + +static const uint16_t ud_itab__304[] = { + /* 0 */ GROUP(305), GROUP(306), GROUP(307), GROUP(308), + /* 4 */ GROUP(309), GROUP(310), GROUP(311), GROUP(312), +}; + +static const uint16_t ud_itab__305[] = { + /* 0 */ 22, INVALID, +}; + +static const uint16_t ud_itab__306[] = { + /* 0 */ 972, INVALID, +}; + +static const uint16_t ud_itab__307[] = { + /* 0 */ 12, INVALID, +}; + +static const uint16_t ud_itab__308[] = { + /* 0 */ 1344, INVALID, +}; + +static const uint16_t ud_itab__309[] = { + /* 0 */ 56, INVALID, +}; + +static const uint16_t ud_itab__310[] = { + /* 0 */ 1415, INVALID, +}; + +static const uint16_t ud_itab__311[] = { + /* 0 */ 1495, INVALID, +}; + +static const uint16_t ud_itab__312[] = { + /* 0 */ 107, INVALID, +}; + +static const uint16_t ud_itab__313[] = { + /* 0 */ 24, 973, 14, 1345, + /* 4 */ 58, 1416, 1496, 109, +}; + +static const uint16_t ud_itab__314[] = { + /* 0 */ 1109, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__315[] = { + /* 0 */ 74, 75, 76, +}; + +static const uint16_t ud_itab__316[] = { + /* 0 */ 170, 171, 172, +}; + +static const uint16_t ud_itab__317[] = { + /* 0 */ 73, INVALID, +}; + +static const uint16_t ud_itab__318[] = { + /* 0 */ GROUP(319), GROUP(320), GROUP(321), +}; + +static const uint16_t ud_itab__319[] = { + /* 0 */ 1259, 1260, +}; + +static const uint16_t ud_itab__320[] = { + /* 0 */ 1261, 1262, +}; + +static const uint16_t ud_itab__321[] = { + /* 0 */ INVALID, 1263, +}; + +static const uint16_t ud_itab__322[] = { + /* 0 */ GROUP(323), GROUP(324), GROUP(325), +}; + +static const uint16_t ud_itab__323[] = { + /* 0 */ 1112, INVALID, +}; + +static const uint16_t ud_itab__324[] = { + /* 0 */ 1113, 1114, +}; + +static const uint16_t ud_itab__325[] = { + /* 0 */ INVALID, 1115, +}; + +static const uint16_t ud_itab__326[] = { + /* 0 */ 923, 924, 927, +}; + +static const uint16_t ud_itab__327[] = { + /* 0 */ 115, 116, 119, +}; + +static const uint16_t ud_itab__328[] = { + /* 0 */ 1403, 1404, 1405, +}; + +static const uint16_t ud_itab__329[] = { + /* 0 */ 791, 792, 793, +}; + +static const uint16_t ud_itab__330[] = { + /* 0 */ 1347, 1348, 1349, +}; + +static const uint16_t ud_itab__331[] = { + /* 0 */ 1279, 1286, 1267, 1275, + /* 4 */ 1327, 1334, 1318, 1313, +}; + +static const uint16_t ud_itab__332[] = { + /* 0 */ 1284, 1287, 1268, 1274, + /* 4 */ 1323, 1330, 1319, 1315, +}; + +static const uint16_t ud_itab__333[] = { + /* 0 */ GROUP(334), GROUP(335), INVALID, INVALID, + /* 4 */ INVALID, GROUP(341), GROUP(357), GROUP(369), + /* 8 */ INVALID, GROUP(394), INVALID, INVALID, + /* c */ INVALID, GROUP(399), INVALID, INVALID, +}; + +static const uint16_t ud_itab__334[] = { + /* 0 */ 771, INVALID, +}; + +static const uint16_t ud_itab__335[] = { + /* 0 */ INVALID, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, + /* 8 */ INVALID, INVALID, INVALID, INVALID, + /* c */ INVALID, INVALID, INVALID, INVALID, + /* 10 */ 937, 939, GROUP(336), 895, + /* 14 */ 1450, 1448, GROUP(337), 885, + /* 18 */ INVALID, INVALID, INVALID, INVALID, + /* 1c */ INVALID, INVALID, INVALID, INVALID, + /* 20 */ INVALID, INVALID, INVALID, INVALID, + /* 24 */ INVALID, INVALID, INVALID, INVALID, + /* 28 */ 863, 865, INVALID, 908, + /* 2c */ INVALID, INVALID, 1443, 130, + /* 30 */ INVALID, INVALID, INVALID, INVALID, + /* 34 */ INVALID, INVALID, INVALID, INVALID, + /* 38 */ INVALID, INVALID, INVALID, INVALID, + /* 3c */ INVALID, INVALID, INVALID, INVALID, + /* 40 */ INVALID, INVALID, INVALID, INVALID, + /* 44 */ INVALID, INVALID, INVALID, INVALID, + /* 48 */ INVALID, INVALID, INVALID, INVALID, + /* 4c */ INVALID, INVALID, INVALID, INVALID, + /* 50 */ 901, 1388, 1307, 1292, + /* 54 */ 62, 66, 977, 1500, + /* 58 */ 28, 947, 146, 135, + /* 5c */ 1420, 819, 190, 803, + /* 60 */ INVALID, INVALID, INVALID, INVALID, + /* 64 */ INVALID, INVALID, INVALID, INVALID, + /* 68 */ INVALID, INVALID, INVALID, INVALID, + /* 6c */ INVALID, INVALID, INVALID, INVALID, + /* 70 */ INVALID, INVALID, INVALID, INVALID, + /* 74 */ INVALID, INVALID, INVALID, GROUP(340), + /* 78 */ INVALID, INVALID, INVALID, INVALID, + /* 7c */ INVALID, INVALID, INVALID, INVALID, + /* 80 */ INVALID, INVALID, INVALID, INVALID, + /* 84 */ INVALID, INVALID, INVALID, INVALID, + /* 88 */ INVALID, INVALID, INVALID, INVALID, + /* 8c */ INVALID, INVALID, INVALID, INVALID, + /* 90 */ INVALID, INVALID, INVALID, INVALID, + /* 94 */ INVALID, INVALID, INVALID, INVALID, + /* 98 */ INVALID, INVALID, INVALID, INVALID, + /* 9c */ INVALID, INVALID, INVALID, INVALID, + /* a0 */ INVALID, INVALID, INVALID, INVALID, + /* a4 */ INVALID, INVALID, INVALID, INVALID, + /* a8 */ INVALID, INVALID, INVALID, INVALID, + /* ac */ INVALID, INVALID, GROUP(338), INVALID, + /* b0 */ INVALID, INVALID, INVALID, INVALID, + /* b4 */ INVALID, INVALID, INVALID, INVALID, + /* b8 */ INVALID, INVALID, INVALID, INVALID, + /* bc */ INVALID, INVALID, INVALID, INVALID, + /* c0 */ INVALID, INVALID, 113, INVALID, + /* c4 */ INVALID, INVALID, 1382, INVALID, + /* c8 */ INVALID, INVALID, INVALID, INVALID, + /* cc */ INVALID, INVALID, INVALID, INVALID, + /* d0 */ INVALID, INVALID, INVALID, INVALID, + /* d4 */ INVALID, INVALID, INVALID, INVALID, + /* d8 */ INVALID, INVALID, INVALID, INVALID, + /* dc */ INVALID, INVALID, INVALID, INVALID, + /* e0 */ INVALID, INVALID, INVALID, INVALID, + /* e4 */ INVALID, INVALID, INVALID, INVALID, + /* e8 */ INVALID, INVALID, INVALID, INVALID, + /* ec */ INVALID, INVALID, INVALID, INVALID, + /* f0 */ INVALID, INVALID, INVALID, INVALID, + /* f4 */ INVALID, INVALID, INVALID, INVALID, + /* f8 */ INVALID, INVALID, INVALID, INVALID, + /* fc */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__336[] = { + /* 0 */ 893, 897, +}; + +static const uint16_t ud_itab__337[] = { + /* 0 */ 883, 887, +}; + +static const uint16_t ud_itab__338[] = { + /* 0 */ GROUP(339), INVALID, +}; + +static const uint16_t ud_itab__339[] = { + /* 0 */ INVALID, INVALID, INVALID, 1401, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__340[] = { + /* 0 */ 1742, 1743, +}; + +static const uint16_t ud_itab__341[] = { + /* 0 */ INVALID, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, + /* 8 */ INVALID, INVALID, INVALID, INVALID, + /* c */ INVALID, INVALID, INVALID, INVALID, + /* 10 */ 933, 935, GROUP(342), 891, + /* 14 */ 1452, 1446, GROUP(343), 881, + /* 18 */ INVALID, INVALID, INVALID, INVALID, + /* 1c */ INVALID, INVALID, INVALID, INVALID, + /* 20 */ INVALID, INVALID, INVALID, INVALID, + /* 24 */ INVALID, INVALID, INVALID, INVALID, + /* 28 */ 859, 861, INVALID, 906, + /* 2c */ INVALID, INVALID, 1441, 128, + /* 30 */ INVALID, INVALID, INVALID, INVALID, + /* 34 */ INVALID, INVALID, INVALID, INVALID, + /* 38 */ INVALID, INVALID, INVALID, INVALID, + /* 3c */ INVALID, INVALID, INVALID, INVALID, + /* 40 */ INVALID, INVALID, INVALID, INVALID, + /* 44 */ INVALID, INVALID, INVALID, INVALID, + /* 48 */ INVALID, INVALID, INVALID, INVALID, + /* 4c */ INVALID, INVALID, INVALID, INVALID, + /* 50 */ 899, 1390, INVALID, INVALID, + /* 54 */ 60, 64, 975, 1498, + /* 58 */ 26, 945, 140, 144, + /* 5c */ 1418, 817, 188, 801, + /* 60 */ 1208, 1211, 1214, 986, + /* 64 */ 1037, 1040, 1043, 992, + /* 68 */ 1199, 1202, 1205, 989, + /* 6c */ 1548, 1546, GROUP(344), 1518, + /* 70 */ 1540, GROUP(345), GROUP(347), GROUP(349), + /* 74 */ 1029, 1032, 1035, INVALID, + /* 78 */ INVALID, INVALID, INVALID, INVALID, + /* 7c */ 1550, 1554, GROUP(351), 1516, + /* 80 */ INVALID, INVALID, INVALID, INVALID, + /* 84 */ INVALID, INVALID, INVALID, INVALID, + /* 88 */ INVALID, INVALID, INVALID, INVALID, + /* 8c */ INVALID, INVALID, INVALID, INVALID, + /* 90 */ INVALID, INVALID, INVALID, INVALID, + /* 94 */ INVALID, INVALID, INVALID, INVALID, + /* 98 */ INVALID, INVALID, INVALID, INVALID, + /* 9c */ INVALID, INVALID, INVALID, INVALID, + /* a0 */ INVALID, INVALID, INVALID, INVALID, + /* a4 */ INVALID, INVALID, INVALID, INVALID, + /* a8 */ INVALID, INVALID, INVALID, INVALID, + /* ac */ INVALID, INVALID, INVALID, INVALID, + /* b0 */ INVALID, INVALID, INVALID, INVALID, + /* b4 */ INVALID, INVALID, INVALID, INVALID, + /* b8 */ INVALID, INVALID, INVALID, INVALID, + /* bc */ INVALID, INVALID, INVALID, INVALID, + /* c0 */ INVALID, INVALID, 111, INVALID, + /* c4 */ 1061, 1054, 1380, INVALID, + /* c8 */ INVALID, INVALID, INVALID, INVALID, + /* cc */ INVALID, INVALID, INVALID, INVALID, + /* d0 */ 34, 1162, 1168, 1174, + /* d4 */ 1529, 1095, 919, GROUP(352), + /* d8 */ 1194, 1197, 1082, 1016, + /* dc */ 1011, 1014, 1077, 1019, + /* e0 */ 1022, 1149, 1155, 1025, + /* e4 */ 1089, 1091, 161, 903, + /* e8 */ 1188, 1191, 1079, 1117, + /* ec */ 1005, 1008, 1073, 1265, + /* f0 */ INVALID, GROUP(353), GROUP(354), GROUP(355), + /* f4 */ INVALID, 1071, 1132, GROUP(356), + /* f8 */ 1178, 1181, 1185, 1531, + /* fc */ 995, 999, 1002, INVALID, +}; + +static const uint16_t ud_itab__342[] = { + /* 0 */ 889, INVALID, +}; + +static const uint16_t ud_itab__343[] = { + /* 0 */ 879, INVALID, +}; + +static const uint16_t ud_itab__344[] = { + /* 0 */ 869, 871, 912, +}; + +static const uint16_t ud_itab__345[] = { + /* 0 */ INVALID, INVALID, 1164, INVALID, + /* 4 */ 1151, INVALID, GROUP(346), INVALID, +}; + +static const uint16_t ud_itab__346[] = { + /* 0 */ 1756, INVALID, +}; + +static const uint16_t ud_itab__347[] = { + /* 0 */ INVALID, INVALID, 1170, INVALID, + /* 4 */ 1158, INVALID, GROUP(348), INVALID, +}; + +static const uint16_t ud_itab__348[] = { + /* 0 */ 1758, INVALID, +}; + +static const uint16_t ud_itab__349[] = { + /* 0 */ INVALID, INVALID, 1176, 1544, + /* 4 */ INVALID, INVALID, GROUP(350), 1542, +}; + +static const uint16_t ud_itab__350[] = { + /* 0 */ 1760, INVALID, +}; + +static const uint16_t ud_itab__351[] = { + /* 0 */ 875, 877, 915, +}; + +static const uint16_t ud_itab__352[] = { + /* 0 */ 1085, INVALID, +}; + +static const uint16_t ud_itab__353[] = { + /* 0 */ 1755, INVALID, +}; + +static const uint16_t ud_itab__354[] = { + /* 0 */ 1757, INVALID, +}; + +static const uint16_t ud_itab__355[] = { + /* 0 */ 1759, INVALID, +}; + +static const uint16_t ud_itab__356[] = { + /* 0 */ INVALID, 1520, +}; + +static const uint16_t ud_itab__357[] = { + /* 0 */ 1584, 1587, 1590, 1593, + /* 4 */ 1596, 1599, 1602, 1605, + /* 8 */ 1608, 1614, 1611, 1617, + /* c */ GROUP(358), GROUP(359), GROUP(360), GROUP(361), + /* 10 */ INVALID, INVALID, INVALID, INVALID, + /* 14 */ INVALID, INVALID, INVALID, 1712, + /* 18 */ GROUP(362), GROUP(363), INVALID, INVALID, + /* 1c */ 1575, 1578, 1581, INVALID, + /* 20 */ 1686, 1688, 1690, 1692, + /* 24 */ 1694, INVALID, INVALID, INVALID, + /* 28 */ 1623, 1709, 1682, 1684, + /* 2c */ GROUP(365), GROUP(366), GROUP(367), GROUP(368), + /* 30 */ 1697, 1699, 1701, 1703, + /* 34 */ 1705, 1707, INVALID, 1718, + /* 38 */ 1625, 1627, 1629, 1631, + /* 3c */ 1633, 1635, 1639, 1637, + /* 40 */ 1641, 1643, INVALID, INVALID, + /* 44 */ INVALID, INVALID, INVALID, INVALID, + /* 48 */ INVALID, INVALID, INVALID, INVALID, + /* 4c */ INVALID, INVALID, INVALID, INVALID, + /* 50 */ INVALID, INVALID, INVALID, INVALID, + /* 54 */ INVALID, INVALID, INVALID, INVALID, + /* 58 */ INVALID, INVALID, INVALID, INVALID, + /* 5c */ INVALID, INVALID, INVALID, INVALID, + /* 60 */ INVALID, INVALID, INVALID, INVALID, + /* 64 */ INVALID, INVALID, INVALID, INVALID, + /* 68 */ INVALID, INVALID, INVALID, INVALID, + /* 6c */ INVALID, INVALID, INVALID, INVALID, + /* 70 */ INVALID, INVALID, INVALID, INVALID, + /* 74 */ INVALID, INVALID, INVALID, INVALID, + /* 78 */ INVALID, INVALID, INVALID, INVALID, + /* 7c */ INVALID, INVALID, INVALID, INVALID, + /* 80 */ INVALID, INVALID, INVALID, INVALID, + /* 84 */ INVALID, INVALID, INVALID, INVALID, + /* 88 */ INVALID, INVALID, INVALID, INVALID, + /* 8c */ INVALID, INVALID, INVALID, INVALID, + /* 90 */ INVALID, INVALID, INVALID, INVALID, + /* 94 */ INVALID, INVALID, INVALID, INVALID, + /* 98 */ INVALID, INVALID, INVALID, INVALID, + /* 9c */ INVALID, INVALID, INVALID, INVALID, + /* a0 */ INVALID, INVALID, INVALID, INVALID, + /* a4 */ INVALID, INVALID, INVALID, INVALID, + /* a8 */ INVALID, INVALID, INVALID, INVALID, + /* ac */ INVALID, INVALID, INVALID, INVALID, + /* b0 */ INVALID, INVALID, INVALID, INVALID, + /* b4 */ INVALID, INVALID, INVALID, INVALID, + /* b8 */ INVALID, INVALID, INVALID, INVALID, + /* bc */ INVALID, INVALID, INVALID, INVALID, + /* c0 */ INVALID, INVALID, INVALID, INVALID, + /* c4 */ INVALID, INVALID, INVALID, INVALID, + /* c8 */ INVALID, INVALID, INVALID, INVALID, + /* cc */ INVALID, INVALID, INVALID, INVALID, + /* d0 */ INVALID, INVALID, INVALID, INVALID, + /* d4 */ INVALID, INVALID, INVALID, INVALID, + /* d8 */ INVALID, INVALID, INVALID, 46, + /* dc */ 42, 44, 38, 40, + /* e0 */ INVALID, INVALID, INVALID, INVALID, + /* e4 */ INVALID, INVALID, INVALID, INVALID, + /* e8 */ INVALID, INVALID, INVALID, INVALID, + /* ec */ INVALID, INVALID, INVALID, INVALID, + /* f0 */ INVALID, INVALID, INVALID, INVALID, + /* f4 */ INVALID, INVALID, INVALID, INVALID, + /* f8 */ INVALID, INVALID, INVALID, INVALID, + /* fc */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__358[] = { + /* 0 */ 1737, INVALID, +}; + +static const uint16_t ud_itab__359[] = { + /* 0 */ 1735, INVALID, +}; + +static const uint16_t ud_itab__360[] = { + /* 0 */ 1740, INVALID, +}; + +static const uint16_t ud_itab__361[] = { + /* 0 */ 1741, INVALID, +}; + +static const uint16_t ud_itab__362[] = { + /* 0 */ 1727, INVALID, +}; + +static const uint16_t ud_itab__363[] = { + /* 0 */ GROUP(364), INVALID, +}; + +static const uint16_t ud_itab__364[] = { + /* 0 */ INVALID, 1728, +}; + +static const uint16_t ud_itab__365[] = { + /* 0 */ 1731, INVALID, +}; + +static const uint16_t ud_itab__366[] = { + /* 0 */ 1733, INVALID, +}; + +static const uint16_t ud_itab__367[] = { + /* 0 */ 1732, INVALID, +}; + +static const uint16_t ud_itab__368[] = { + /* 0 */ 1734, INVALID, +}; + +static const uint16_t ud_itab__369[] = { + /* 0 */ INVALID, INVALID, INVALID, INVALID, + /* 4 */ GROUP(370), GROUP(371), GROUP(372), INVALID, + /* 8 */ 1645, 1647, 1649, 1651, + /* c */ 1655, 1653, 1678, 1620, + /* 10 */ INVALID, INVALID, INVALID, INVALID, + /* 14 */ GROUP(374), 1057, GROUP(375), 202, + /* 18 */ GROUP(379), GROUP(381), INVALID, INVALID, + /* 1c */ INVALID, INVALID, INVALID, INVALID, + /* 20 */ GROUP(383), 1558, GROUP(385), INVALID, + /* 24 */ INVALID, INVALID, INVALID, INVALID, + /* 28 */ INVALID, INVALID, INVALID, INVALID, + /* 2c */ INVALID, INVALID, INVALID, INVALID, + /* 30 */ INVALID, INVALID, INVALID, INVALID, + /* 34 */ INVALID, INVALID, INVALID, INVALID, + /* 38 */ INVALID, INVALID, INVALID, INVALID, + /* 3c */ INVALID, INVALID, INVALID, INVALID, + /* 40 */ 198, 196, 1680, INVALID, + /* 44 */ 1513, INVALID, INVALID, INVALID, + /* 48 */ INVALID, INVALID, GROUP(391), GROUP(392), + /* 4c */ GROUP(393), INVALID, INVALID, INVALID, + /* 50 */ INVALID, INVALID, INVALID, INVALID, + /* 54 */ INVALID, INVALID, INVALID, INVALID, + /* 58 */ INVALID, INVALID, INVALID, INVALID, + /* 5c */ INVALID, INVALID, INVALID, INVALID, + /* 60 */ 1716, 1714, 1722, 1720, + /* 64 */ INVALID, INVALID, INVALID, INVALID, + /* 68 */ INVALID, INVALID, INVALID, INVALID, + /* 6c */ INVALID, INVALID, INVALID, INVALID, + /* 70 */ INVALID, INVALID, INVALID, INVALID, + /* 74 */ INVALID, INVALID, INVALID, INVALID, + /* 78 */ INVALID, INVALID, INVALID, INVALID, + /* 7c */ INVALID, INVALID, INVALID, INVALID, + /* 80 */ INVALID, INVALID, INVALID, INVALID, + /* 84 */ INVALID, INVALID, INVALID, INVALID, + /* 88 */ INVALID, INVALID, INVALID, INVALID, + /* 8c */ INVALID, INVALID, INVALID, INVALID, + /* 90 */ INVALID, INVALID, INVALID, INVALID, + /* 94 */ INVALID, INVALID, INVALID, INVALID, + /* 98 */ INVALID, INVALID, INVALID, INVALID, + /* 9c */ INVALID, INVALID, INVALID, INVALID, + /* a0 */ INVALID, INVALID, INVALID, INVALID, + /* a4 */ INVALID, INVALID, INVALID, INVALID, + /* a8 */ INVALID, INVALID, INVALID, INVALID, + /* ac */ INVALID, INVALID, INVALID, INVALID, + /* b0 */ INVALID, INVALID, INVALID, INVALID, + /* b4 */ INVALID, INVALID, INVALID, INVALID, + /* b8 */ INVALID, INVALID, INVALID, INVALID, + /* bc */ INVALID, INVALID, INVALID, INVALID, + /* c0 */ INVALID, INVALID, INVALID, INVALID, + /* c4 */ INVALID, INVALID, INVALID, INVALID, + /* c8 */ INVALID, INVALID, INVALID, INVALID, + /* cc */ INVALID, INVALID, INVALID, INVALID, + /* d0 */ INVALID, INVALID, INVALID, INVALID, + /* d4 */ INVALID, INVALID, INVALID, INVALID, + /* d8 */ INVALID, INVALID, INVALID, INVALID, + /* dc */ INVALID, INVALID, INVALID, 48, + /* e0 */ INVALID, INVALID, INVALID, INVALID, + /* e4 */ INVALID, INVALID, INVALID, INVALID, + /* e8 */ INVALID, INVALID, INVALID, INVALID, + /* ec */ INVALID, INVALID, INVALID, INVALID, + /* f0 */ INVALID, INVALID, INVALID, INVALID, + /* f4 */ INVALID, INVALID, INVALID, INVALID, + /* f8 */ INVALID, INVALID, INVALID, INVALID, + /* fc */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__370[] = { + /* 0 */ 1738, INVALID, +}; + +static const uint16_t ud_itab__371[] = { + /* 0 */ 1736, INVALID, +}; + +static const uint16_t ud_itab__372[] = { + /* 0 */ GROUP(373), INVALID, +}; + +static const uint16_t ud_itab__373[] = { + /* 0 */ INVALID, 1739, +}; + +static const uint16_t ud_itab__374[] = { + /* 0 */ 1046, INVALID, +}; + +static const uint16_t ud_itab__375[] = { + /* 0 */ GROUP(376), GROUP(377), GROUP(378), +}; + +static const uint16_t ud_itab__376[] = { + /* 0 */ 1048, INVALID, +}; + +static const uint16_t ud_itab__377[] = { + /* 0 */ 1050, INVALID, +}; + +static const uint16_t ud_itab__378[] = { + /* 0 */ INVALID, 1052, +}; + +static const uint16_t ud_itab__379[] = { + /* 0 */ GROUP(380), INVALID, +}; + +static const uint16_t ud_itab__380[] = { + /* 0 */ INVALID, 1730, +}; + +static const uint16_t ud_itab__381[] = { + /* 0 */ GROUP(382), INVALID, +}; + +static const uint16_t ud_itab__382[] = { + /* 0 */ INVALID, 1729, +}; + +static const uint16_t ud_itab__383[] = { + /* 0 */ GROUP(384), INVALID, +}; + +static const uint16_t ud_itab__384[] = { + /* 0 */ 1065, INVALID, +}; + +static const uint16_t ud_itab__385[] = { + /* 0 */ GROUP(386), GROUP(388), +}; + +static const uint16_t ud_itab__386[] = { + /* 0 */ GROUP(387), INVALID, +}; + +static const uint16_t ud_itab__387[] = { + /* 0 */ 1066, INVALID, +}; + +static const uint16_t ud_itab__388[] = { + /* 0 */ GROUP(389), GROUP(390), +}; + +static const uint16_t ud_itab__389[] = { + /* 0 */ 1067, INVALID, +}; + +static const uint16_t ud_itab__390[] = { + /* 0 */ 1068, INVALID, +}; + +static const uint16_t ud_itab__391[] = { + /* 0 */ 1745, INVALID, +}; + +static const uint16_t ud_itab__392[] = { + /* 0 */ 1744, INVALID, +}; + +static const uint16_t ud_itab__393[] = { + /* 0 */ 1754, INVALID, +}; + +static const uint16_t ud_itab__394[] = { + /* 0 */ INVALID, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, + /* 8 */ INVALID, INVALID, INVALID, INVALID, + /* c */ INVALID, INVALID, INVALID, INVALID, + /* 10 */ GROUP(395), GROUP(396), GROUP(397), INVALID, + /* 14 */ INVALID, INVALID, GROUP(398), INVALID, + /* 18 */ INVALID, INVALID, INVALID, INVALID, + /* 1c */ INVALID, INVALID, INVALID, INVALID, + /* 20 */ INVALID, INVALID, INVALID, INVALID, + /* 24 */ INVALID, INVALID, INVALID, INVALID, + /* 28 */ INVALID, INVALID, 155, INVALID, + /* 2c */ 169, 159, INVALID, INVALID, + /* 30 */ INVALID, INVALID, INVALID, INVALID, + /* 34 */ INVALID, INVALID, INVALID, INVALID, + /* 38 */ INVALID, INVALID, INVALID, INVALID, + /* 3c */ INVALID, INVALID, INVALID, INVALID, + /* 40 */ INVALID, INVALID, INVALID, INVALID, + /* 44 */ INVALID, INVALID, INVALID, INVALID, + /* 48 */ INVALID, INVALID, INVALID, INVALID, + /* 4c */ INVALID, INVALID, INVALID, INVALID, + /* 50 */ INVALID, 1394, 1309, 1294, + /* 54 */ INVALID, INVALID, INVALID, INVALID, + /* 58 */ 32, 951, 157, 164, + /* 5c */ 1424, 823, 194, 807, + /* 60 */ INVALID, INVALID, INVALID, INVALID, + /* 64 */ INVALID, INVALID, INVALID, INVALID, + /* 68 */ INVALID, INVALID, INVALID, INVALID, + /* 6c */ INVALID, INVALID, INVALID, 1523, + /* 70 */ 1536, INVALID, INVALID, INVALID, + /* 74 */ INVALID, INVALID, INVALID, INVALID, + /* 78 */ INVALID, INVALID, INVALID, INVALID, + /* 7c */ INVALID, INVALID, 917, 1525, + /* 80 */ INVALID, INVALID, INVALID, INVALID, + /* 84 */ INVALID, INVALID, INVALID, INVALID, + /* 88 */ INVALID, INVALID, INVALID, INVALID, + /* 8c */ INVALID, INVALID, INVALID, INVALID, + /* 90 */ INVALID, INVALID, INVALID, INVALID, + /* 94 */ INVALID, INVALID, INVALID, INVALID, + /* 98 */ INVALID, INVALID, INVALID, INVALID, + /* 9c */ INVALID, INVALID, INVALID, INVALID, + /* a0 */ INVALID, INVALID, INVALID, INVALID, + /* a4 */ INVALID, INVALID, INVALID, INVALID, + /* a8 */ INVALID, INVALID, INVALID, INVALID, + /* ac */ INVALID, INVALID, INVALID, INVALID, + /* b0 */ INVALID, INVALID, INVALID, INVALID, + /* b4 */ INVALID, INVALID, INVALID, INVALID, + /* b8 */ INVALID, INVALID, INVALID, INVALID, + /* bc */ INVALID, INVALID, INVALID, INVALID, + /* c0 */ INVALID, INVALID, 121, INVALID, + /* c4 */ INVALID, INVALID, INVALID, INVALID, + /* c8 */ INVALID, INVALID, INVALID, INVALID, + /* cc */ INVALID, INVALID, INVALID, INVALID, + /* d0 */ INVALID, INVALID, INVALID, INVALID, + /* d4 */ INVALID, INVALID, INVALID, INVALID, + /* d8 */ INVALID, INVALID, INVALID, INVALID, + /* dc */ INVALID, INVALID, INVALID, INVALID, + /* e0 */ INVALID, INVALID, INVALID, INVALID, + /* e4 */ INVALID, INVALID, 133, INVALID, + /* e8 */ INVALID, INVALID, INVALID, INVALID, + /* ec */ INVALID, INVALID, INVALID, INVALID, + /* f0 */ INVALID, INVALID, INVALID, INVALID, + /* f4 */ INVALID, INVALID, INVALID, INVALID, + /* f8 */ INVALID, INVALID, INVALID, INVALID, + /* fc */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__395[] = { + /* 0 */ 1751, 1750, +}; + +static const uint16_t ud_itab__396[] = { + /* 0 */ 1753, 1752, +}; + +static const uint16_t ud_itab__397[] = { + /* 0 */ 1572, 1570, +}; + +static const uint16_t ud_itab__398[] = { + /* 0 */ 1568, 1566, +}; + +static const uint16_t ud_itab__399[] = { + /* 0 */ INVALID, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, + /* 8 */ INVALID, INVALID, INVALID, INVALID, + /* c */ INVALID, INVALID, INVALID, INVALID, + /* 10 */ GROUP(402), GROUP(400), GROUP(401), INVALID, + /* 14 */ INVALID, INVALID, INVALID, INVALID, + /* 18 */ INVALID, INVALID, INVALID, INVALID, + /* 1c */ INVALID, INVALID, INVALID, INVALID, + /* 20 */ INVALID, INVALID, INVALID, INVALID, + /* 24 */ INVALID, INVALID, INVALID, INVALID, + /* 28 */ INVALID, INVALID, 153, INVALID, + /* 2c */ 167, 149, INVALID, INVALID, + /* 30 */ INVALID, INVALID, INVALID, INVALID, + /* 34 */ INVALID, INVALID, INVALID, INVALID, + /* 38 */ INVALID, INVALID, INVALID, INVALID, + /* 3c */ INVALID, INVALID, INVALID, INVALID, + /* 40 */ INVALID, INVALID, INVALID, INVALID, + /* 44 */ INVALID, INVALID, INVALID, INVALID, + /* 48 */ INVALID, INVALID, INVALID, INVALID, + /* 4c */ INVALID, INVALID, INVALID, INVALID, + /* 50 */ INVALID, 1392, INVALID, INVALID, + /* 54 */ INVALID, INVALID, INVALID, INVALID, + /* 58 */ 30, 949, 151, INVALID, + /* 5c */ 1422, 821, 192, 805, + /* 60 */ INVALID, INVALID, INVALID, INVALID, + /* 64 */ INVALID, INVALID, INVALID, INVALID, + /* 68 */ INVALID, INVALID, INVALID, INVALID, + /* 6c */ INVALID, INVALID, INVALID, INVALID, + /* 70 */ 1538, INVALID, INVALID, INVALID, + /* 74 */ INVALID, INVALID, INVALID, INVALID, + /* 78 */ INVALID, INVALID, INVALID, INVALID, + /* 7c */ 1552, 1556, INVALID, INVALID, + /* 80 */ INVALID, INVALID, INVALID, INVALID, + /* 84 */ INVALID, INVALID, INVALID, INVALID, + /* 88 */ INVALID, INVALID, INVALID, INVALID, + /* 8c */ INVALID, INVALID, INVALID, INVALID, + /* 90 */ INVALID, INVALID, INVALID, INVALID, + /* 94 */ INVALID, INVALID, INVALID, INVALID, + /* 98 */ INVALID, INVALID, INVALID, INVALID, + /* 9c */ INVALID, INVALID, INVALID, INVALID, + /* a0 */ INVALID, INVALID, INVALID, INVALID, + /* a4 */ INVALID, INVALID, INVALID, INVALID, + /* a8 */ INVALID, INVALID, INVALID, INVALID, + /* ac */ INVALID, INVALID, INVALID, INVALID, + /* b0 */ INVALID, INVALID, INVALID, INVALID, + /* b4 */ INVALID, INVALID, INVALID, INVALID, + /* b8 */ INVALID, INVALID, INVALID, INVALID, + /* bc */ INVALID, INVALID, INVALID, INVALID, + /* c0 */ INVALID, INVALID, 118, INVALID, + /* c4 */ INVALID, INVALID, INVALID, INVALID, + /* c8 */ INVALID, INVALID, INVALID, INVALID, + /* cc */ INVALID, INVALID, INVALID, INVALID, + /* d0 */ 36, INVALID, INVALID, INVALID, + /* d4 */ INVALID, INVALID, INVALID, INVALID, + /* d8 */ INVALID, INVALID, INVALID, INVALID, + /* dc */ INVALID, INVALID, INVALID, INVALID, + /* e0 */ INVALID, INVALID, INVALID, INVALID, + /* e4 */ INVALID, INVALID, 137, INVALID, + /* e8 */ INVALID, INVALID, INVALID, INVALID, + /* ec */ INVALID, INVALID, INVALID, INVALID, + /* f0 */ 1560, INVALID, INVALID, INVALID, + /* f4 */ INVALID, INVALID, INVALID, INVALID, + /* f8 */ INVALID, INVALID, INVALID, INVALID, + /* fc */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__400[] = { + /* 0 */ 1749, 1748, +}; + +static const uint16_t ud_itab__401[] = { + /* 0 */ 1564, 1562, +}; + +static const uint16_t ud_itab__402[] = { + /* 0 */ 1747, 1746, +}; + +static const uint16_t ud_itab__403[] = { + /* 0 */ GROUP(404), GROUP(335), INVALID, INVALID, + /* 4 */ INVALID, GROUP(341), GROUP(357), GROUP(369), + /* 8 */ INVALID, GROUP(394), INVALID, INVALID, + /* c */ INVALID, GROUP(399), INVALID, INVALID, +}; + +static const uint16_t ud_itab__404[] = { + /* 0 */ 769, INVALID, +}; + +static const uint16_t ud_itab__405[] = { + /* 0 */ 826, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__406[] = { + /* 0 */ 827, INVALID, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__407[] = { + /* 0 */ 715, INVALID, +}; + +static const uint16_t ud_itab__408[] = { + /* 0 */ 723, 724, 725, +}; + +static const uint16_t ud_itab__409[] = { + /* 0 */ 1280, 1285, 1269, 1273, + /* 4 */ 1326, 1333, 1320, 1314, +}; + +static const uint16_t ud_itab__410[] = { + /* 0 */ 1281, 1288, 1272, 1276, + /* 4 */ 1325, 1332, 1329, 1312, +}; + +static const uint16_t ud_itab__411[] = { + /* 0 */ 1282, 1289, 1270, 1277, + /* 4 */ 1324, 1331, 1321, 1316, +}; + +static const uint16_t ud_itab__412[] = { + /* 0 */ 1283, 1290, 1271, 1278, + /* 4 */ 1328, 1335, 1322, 1317, +}; + +static const uint16_t ud_itab__413[] = { + /* 0 */ 3, INVALID, +}; + +static const uint16_t ud_itab__414[] = { + /* 0 */ 2, INVALID, +}; + +static const uint16_t ud_itab__415[] = { + /* 0 */ 1311, INVALID, +}; + +static const uint16_t ud_itab__416[] = { + /* 0 */ GROUP(417), GROUP(418), +}; + +static const uint16_t ud_itab__417[] = { + /* 0 */ 206, 503, 307, 357, + /* 4 */ 587, 630, 387, 413, +}; + +static const uint16_t ud_itab__418[] = { + /* 0 */ 215, 216, 217, 218, + /* 4 */ 219, 220, 221, 222, + /* 8 */ 504, 505, 506, 507, + /* c */ 508, 509, 510, 511, + /* 10 */ 309, 310, 311, 312, + /* 14 */ 313, 314, 315, 316, + /* 18 */ 359, 360, 361, 362, + /* 1c */ 363, 364, 365, 366, + /* 20 */ 589, 590, 591, 592, + /* 24 */ 593, 594, 595, 596, + /* 28 */ 614, 615, 616, 617, + /* 2c */ 618, 619, 620, 621, + /* 30 */ 388, 389, 390, 391, + /* 34 */ 392, 393, 394, 395, + /* 38 */ 414, 415, 416, 417, + /* 3c */ 418, 419, 420, 421, +}; + +static const uint16_t ud_itab__419[] = { + /* 0 */ GROUP(420), GROUP(421), +}; + +static const uint16_t ud_itab__420[] = { + /* 0 */ 476, INVALID, 573, 540, + /* 4 */ 493, 492, 584, 583, +}; + +static const uint16_t ud_itab__421[] = { + /* 0 */ 477, 478, 479, 480, + /* 4 */ 481, 482, 483, 484, + /* 8 */ 658, 659, 660, 661, + /* c */ 662, 663, 664, 665, + /* 10 */ 522, INVALID, INVALID, INVALID, + /* 14 */ INVALID, INVALID, INVALID, INVALID, + /* 18 */ 549, 550, 551, 552, + /* 1c */ 553, 554, 555, 556, + /* 20 */ 233, 204, INVALID, INVALID, + /* 24 */ 639, 657, INVALID, INVALID, + /* 28 */ 485, 486, 487, 488, + /* 2c */ 489, 490, 491, INVALID, + /* 30 */ 203, 685, 529, 526, + /* 34 */ 684, 528, 377, 454, + /* 38 */ 527, 686, 537, 536, + /* 3c */ 530, 534, 535, 376, +}; + +static const uint16_t ud_itab__422[] = { + /* 0 */ GROUP(423), GROUP(424), +}; + +static const uint16_t ud_itab__423[] = { + /* 0 */ 456, 520, 448, 450, + /* 4 */ 462, 464, 460, 458, +}; + +static const uint16_t ud_itab__424[] = { + /* 0 */ 235, 236, 237, 238, + /* 4 */ 239, 240, 241, 242, + /* 8 */ 243, 244, 245, 246, + /* c */ 247, 248, 249, 250, + /* 10 */ 251, 252, 253, 254, + /* 14 */ 255, 256, 257, 258, + /* 18 */ 259, 260, 261, 262, + /* 1c */ 263, 264, 265, 266, + /* 20 */ INVALID, INVALID, INVALID, INVALID, + /* 24 */ INVALID, INVALID, INVALID, INVALID, + /* 28 */ INVALID, 656, INVALID, INVALID, + /* 2c */ INVALID, INVALID, INVALID, INVALID, + /* 30 */ INVALID, INVALID, INVALID, INVALID, + /* 34 */ INVALID, INVALID, INVALID, INVALID, + /* 38 */ INVALID, INVALID, INVALID, INVALID, + /* 3c */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__425[] = { + /* 0 */ GROUP(426), GROUP(427), +}; + +static const uint16_t ud_itab__426[] = { + /* 0 */ 453, 471, 467, 470, + /* 4 */ INVALID, 474, INVALID, 538, +}; + +static const uint16_t ud_itab__427[] = { + /* 0 */ 267, 268, 269, 270, + /* 4 */ 271, 272, 273, 274, + /* 8 */ 275, 276, 277, 278, + /* c */ 279, 280, 281, 282, + /* 10 */ 283, 284, 285, 286, + /* 14 */ 287, 288, 289, 290, + /* 18 */ 291, 292, 293, 294, + /* 1c */ 295, 296, 297, 298, + /* 20 */ 524, 523, 234, 455, + /* 24 */ 525, 532, INVALID, INVALID, + /* 28 */ 299, 300, 301, 302, + /* 2c */ 303, 304, 305, 306, + /* 30 */ 333, 334, 335, 336, + /* 34 */ 337, 338, 339, 340, + /* 38 */ INVALID, INVALID, INVALID, INVALID, + /* 3c */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__428[] = { + /* 0 */ GROUP(429), GROUP(430), +}; + +static const uint16_t ud_itab__429[] = { + /* 0 */ 205, 494, 308, 358, + /* 4 */ 588, 613, 378, 404, +}; + +static const uint16_t ud_itab__430[] = { + /* 0 */ 207, 208, 209, 210, + /* 4 */ 211, 212, 213, 214, + /* 8 */ 495, 496, 497, 498, + /* c */ 499, 500, 501, 502, + /* 10 */ 317, 318, 319, 320, + /* 14 */ 321, 322, 323, 324, + /* 18 */ 325, 326, 327, 328, + /* 1c */ 329, 330, 331, 332, + /* 20 */ 622, 623, 624, 625, + /* 24 */ 626, 627, 628, 629, + /* 28 */ 597, 598, 599, 600, + /* 2c */ 601, 602, 603, 604, + /* 30 */ 405, 406, 407, 408, + /* 34 */ 409, 410, 411, 412, + /* 38 */ 379, 380, 381, 382, + /* 3c */ 383, 384, 385, 386, +}; + +static const uint16_t ud_itab__431[] = { + /* 0 */ GROUP(432), GROUP(433), +}; + +static const uint16_t ud_itab__432[] = { + /* 0 */ 475, 472, 574, 539, + /* 4 */ 531, INVALID, 533, 585, +}; + +static const uint16_t ud_itab__433[] = { + /* 0 */ 431, 432, 433, 434, + /* 4 */ 435, 436, 437, 438, + /* 8 */ 666, 667, 668, 669, + /* c */ 670, 671, 672, 673, + /* 10 */ 575, 576, 577, 578, + /* 14 */ 579, 580, 581, 582, + /* 18 */ 541, 542, 543, 544, + /* 1c */ 545, 546, 547, 548, + /* 20 */ 640, 641, 642, 643, + /* 24 */ 644, 645, 646, 647, + /* 28 */ 648, 649, 650, 651, + /* 2c */ 652, 653, 654, 655, + /* 30 */ INVALID, INVALID, INVALID, INVALID, + /* 34 */ INVALID, INVALID, INVALID, INVALID, + /* 38 */ INVALID, INVALID, INVALID, INVALID, + /* 3c */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__434[] = { + /* 0 */ GROUP(435), GROUP(436), +}; + +static const uint16_t ud_itab__435[] = { + /* 0 */ 457, 521, 447, 449, + /* 4 */ 463, 465, 461, 459, +}; + +static const uint16_t ud_itab__436[] = { + /* 0 */ 223, 224, 225, 226, + /* 4 */ 227, 228, 229, 230, + /* 8 */ 512, 513, 514, 515, + /* c */ 516, 517, 518, 519, + /* 10 */ 367, 368, 369, 370, + /* 14 */ 371, 372, 373, 374, + /* 18 */ INVALID, 375, INVALID, INVALID, + /* 1c */ INVALID, INVALID, INVALID, INVALID, + /* 20 */ 631, 632, 633, 634, + /* 24 */ 635, 636, 637, 638, + /* 28 */ 605, 606, 607, 608, + /* 2c */ 609, 610, 611, 612, + /* 30 */ 422, 423, 424, 425, + /* 34 */ 426, 427, 428, 429, + /* 38 */ 396, 397, 398, 399, + /* 3c */ 400, 401, 402, 403, +}; + +static const uint16_t ud_itab__437[] = { + /* 0 */ GROUP(438), GROUP(439), +}; + +static const uint16_t ud_itab__438[] = { + /* 0 */ 451, 473, 466, 468, + /* 4 */ 231, 452, 232, 469, +}; + +static const uint16_t ud_itab__439[] = { + /* 0 */ 439, 440, 441, 442, + /* 4 */ 443, 444, 445, 446, + /* 8 */ 674, 675, 676, 677, + /* c */ 678, 679, 680, 681, + /* 10 */ 557, 558, 559, 560, + /* 14 */ 561, 562, 563, 564, + /* 18 */ 565, 566, 567, 568, + /* 1c */ 569, 570, 571, 572, + /* 20 */ 586, INVALID, INVALID, INVALID, + /* 24 */ INVALID, INVALID, INVALID, INVALID, + /* 28 */ 341, 342, 343, 344, + /* 2c */ 345, 346, 347, 348, + /* 30 */ 349, 350, 351, 352, + /* 34 */ 353, 354, 355, 356, + /* 38 */ INVALID, INVALID, INVALID, INVALID, + /* 3c */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__440[] = { + /* 0 */ 758, 759, 760, +}; + +static const uint16_t ud_itab__441[] = { + /* 0 */ 764, INVALID, +}; + +static const uint16_t ud_itab__442[] = { + /* 0 */ 1432, 1437, 962, 953, + /* 4 */ 942, 695, 186, 689, +}; + +static const uint16_t ud_itab__443[] = { + /* 0 */ 1438, 1439, 963, 954, + /* 4 */ 943, 696, 185, 688, +}; + +static const uint16_t ud_itab__444[] = { + /* 0 */ 708, 183, INVALID, INVALID, + /* 4 */ INVALID, INVALID, INVALID, INVALID, +}; + +static const uint16_t ud_itab__445[] = { + /* 0 */ 707, 184, GROUP(446), 71, + /* 4 */ 761, 762, 1255, INVALID, +}; + +static const uint16_t ud_itab__446[] = { + /* 0 */ 69, 70, +}; + + +struct ud_lookup_table_list_entry ud_lookup_table_list[] = { + /* 000 */ { ud_itab__0, UD_TAB__OPC_TABLE, "opctbl" }, + /* 001 */ { ud_itab__1, UD_TAB__OPC_MODE, "/m" }, + /* 002 */ { ud_itab__2, UD_TAB__OPC_MODE, "/m" }, + /* 003 */ { ud_itab__3, UD_TAB__OPC_MODE, "/m" }, + /* 004 */ { ud_itab__4, UD_TAB__OPC_TABLE, "opctbl" }, + /* 005 */ { ud_itab__5, UD_TAB__OPC_REG, "/reg" }, + /* 006 */ { ud_itab__6, UD_TAB__OPC_MOD, "/mod" }, + /* 007 */ { ud_itab__7, UD_TAB__OPC_REG, "/reg" }, + /* 008 */ { ud_itab__8, UD_TAB__OPC_REG, "/reg" }, + /* 009 */ { ud_itab__9, UD_TAB__OPC_RM, "/rm" }, + /* 010 */ { ud_itab__10, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 011 */ { ud_itab__11, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 012 */ { ud_itab__12, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 013 */ { ud_itab__13, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 014 */ { ud_itab__14, UD_TAB__OPC_RM, "/rm" }, + /* 015 */ { ud_itab__15, UD_TAB__OPC_RM, "/rm" }, + /* 016 */ { ud_itab__16, UD_TAB__OPC_RM, "/rm" }, + /* 017 */ { ud_itab__17, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 018 */ { ud_itab__18, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 019 */ { ud_itab__19, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 020 */ { ud_itab__20, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 021 */ { ud_itab__21, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 022 */ { ud_itab__22, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 023 */ { ud_itab__23, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 024 */ { ud_itab__24, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 025 */ { ud_itab__25, UD_TAB__OPC_RM, "/rm" }, + /* 026 */ { ud_itab__26, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 027 */ { ud_itab__27, UD_TAB__OPC_REG, "/reg" }, + /* 028 */ { ud_itab__28, UD_TAB__OPC_3DNOW, "/3dnow" }, + /* 029 */ { ud_itab__29, UD_TAB__OPC_SSE, "/sse" }, + /* 030 */ { ud_itab__30, UD_TAB__OPC_SSE, "/sse" }, + /* 031 */ { ud_itab__31, UD_TAB__OPC_MOD, "/mod" }, + /* 032 */ { ud_itab__32, UD_TAB__OPC_SSE, "/sse" }, + /* 033 */ { ud_itab__33, UD_TAB__OPC_SSE, "/sse" }, + /* 034 */ { ud_itab__34, UD_TAB__OPC_SSE, "/sse" }, + /* 035 */ { ud_itab__35, UD_TAB__OPC_SSE, "/sse" }, + /* 036 */ { ud_itab__36, UD_TAB__OPC_SSE, "/sse" }, + /* 037 */ { ud_itab__37, UD_TAB__OPC_MOD, "/mod" }, + /* 038 */ { ud_itab__38, UD_TAB__OPC_SSE, "/sse" }, + /* 039 */ { ud_itab__39, UD_TAB__OPC_SSE, "/sse" }, + /* 040 */ { ud_itab__40, UD_TAB__OPC_SSE, "/sse" }, + /* 041 */ { ud_itab__41, UD_TAB__OPC_REG, "/reg" }, + /* 042 */ { ud_itab__42, UD_TAB__OPC_SSE, "/sse" }, + /* 043 */ { ud_itab__43, UD_TAB__OPC_SSE, "/sse" }, + /* 044 */ { ud_itab__44, UD_TAB__OPC_SSE, "/sse" }, + /* 045 */ { ud_itab__45, UD_TAB__OPC_SSE, "/sse" }, + /* 046 */ { ud_itab__46, UD_TAB__OPC_SSE, "/sse" }, + /* 047 */ { ud_itab__47, UD_TAB__OPC_SSE, "/sse" }, + /* 048 */ { ud_itab__48, UD_TAB__OPC_SSE, "/sse" }, + /* 049 */ { ud_itab__49, UD_TAB__OPC_SSE, "/sse" }, + /* 050 */ { ud_itab__50, UD_TAB__OPC_MODE, "/m" }, + /* 051 */ { ud_itab__51, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 052 */ { ud_itab__52, UD_TAB__OPC_MODE, "/m" }, + /* 053 */ { ud_itab__53, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 054 */ { ud_itab__54, UD_TAB__OPC_TABLE, "opctbl" }, + /* 055 */ { ud_itab__55, UD_TAB__OPC_SSE, "/sse" }, + /* 056 */ { ud_itab__56, UD_TAB__OPC_MODE, "/m" }, + /* 057 */ { ud_itab__57, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 058 */ { ud_itab__58, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 059 */ { ud_itab__59, UD_TAB__OPC_SSE, "/sse" }, + /* 060 */ { ud_itab__60, UD_TAB__OPC_MODE, "/m" }, + /* 061 */ { ud_itab__61, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 062 */ { ud_itab__62, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 063 */ { ud_itab__63, UD_TAB__OPC_SSE, "/sse" }, + /* 064 */ { ud_itab__64, UD_TAB__OPC_SSE, "/sse" }, + /* 065 */ { ud_itab__65, UD_TAB__OPC_SSE, "/sse" }, + /* 066 */ { ud_itab__66, UD_TAB__OPC_SSE, "/sse" }, + /* 067 */ { ud_itab__67, UD_TAB__OPC_SSE, "/sse" }, + /* 068 */ { ud_itab__68, UD_TAB__OPC_SSE, "/sse" }, + /* 069 */ { ud_itab__69, UD_TAB__OPC_SSE, "/sse" }, + /* 070 */ { ud_itab__70, UD_TAB__OPC_SSE, "/sse" }, + /* 071 */ { ud_itab__71, UD_TAB__OPC_SSE, "/sse" }, + /* 072 */ { ud_itab__72, UD_TAB__OPC_SSE, "/sse" }, + /* 073 */ { ud_itab__73, UD_TAB__OPC_SSE, "/sse" }, + /* 074 */ { ud_itab__74, UD_TAB__OPC_SSE, "/sse" }, + /* 075 */ { ud_itab__75, UD_TAB__OPC_SSE, "/sse" }, + /* 076 */ { ud_itab__76, UD_TAB__OPC_SSE, "/sse" }, + /* 077 */ { ud_itab__77, UD_TAB__OPC_SSE, "/sse" }, + /* 078 */ { ud_itab__78, UD_TAB__OPC_SSE, "/sse" }, + /* 079 */ { ud_itab__79, UD_TAB__OPC_SSE, "/sse" }, + /* 080 */ { ud_itab__80, UD_TAB__OPC_SSE, "/sse" }, + /* 081 */ { ud_itab__81, UD_TAB__OPC_SSE, "/sse" }, + /* 082 */ { ud_itab__82, UD_TAB__OPC_SSE, "/sse" }, + /* 083 */ { ud_itab__83, UD_TAB__OPC_SSE, "/sse" }, + /* 084 */ { ud_itab__84, UD_TAB__OPC_SSE, "/sse" }, + /* 085 */ { ud_itab__85, UD_TAB__OPC_SSE, "/sse" }, + /* 086 */ { ud_itab__86, UD_TAB__OPC_SSE, "/sse" }, + /* 087 */ { ud_itab__87, UD_TAB__OPC_SSE, "/sse" }, + /* 088 */ { ud_itab__88, UD_TAB__OPC_SSE, "/sse" }, + /* 089 */ { ud_itab__89, UD_TAB__OPC_SSE, "/sse" }, + /* 090 */ { ud_itab__90, UD_TAB__OPC_SSE, "/sse" }, + /* 091 */ { ud_itab__91, UD_TAB__OPC_SSE, "/sse" }, + /* 092 */ { ud_itab__92, UD_TAB__OPC_SSE, "/sse" }, + /* 093 */ { ud_itab__93, UD_TAB__OPC_SSE, "/sse" }, + /* 094 */ { ud_itab__94, UD_TAB__OPC_SSE, "/sse" }, + /* 095 */ { ud_itab__95, UD_TAB__OPC_SSE, "/sse" }, + /* 096 */ { ud_itab__96, UD_TAB__OPC_SSE, "/sse" }, + /* 097 */ { ud_itab__97, UD_TAB__OPC_SSE, "/sse" }, + /* 098 */ { ud_itab__98, UD_TAB__OPC_SSE, "/sse" }, + /* 099 */ { ud_itab__99, UD_TAB__OPC_SSE, "/sse" }, + /* 100 */ { ud_itab__100, UD_TAB__OPC_SSE, "/sse" }, + /* 101 */ { ud_itab__101, UD_TAB__OPC_SSE, "/sse" }, + /* 102 */ { ud_itab__102, UD_TAB__OPC_SSE, "/sse" }, + /* 103 */ { ud_itab__103, UD_TAB__OPC_SSE, "/sse" }, + /* 104 */ { ud_itab__104, UD_TAB__OPC_SSE, "/sse" }, + /* 105 */ { ud_itab__105, UD_TAB__OPC_SSE, "/sse" }, + /* 106 */ { ud_itab__106, UD_TAB__OPC_SSE, "/sse" }, + /* 107 */ { ud_itab__107, UD_TAB__OPC_SSE, "/sse" }, + /* 108 */ { ud_itab__108, UD_TAB__OPC_SSE, "/sse" }, + /* 109 */ { ud_itab__109, UD_TAB__OPC_SSE, "/sse" }, + /* 110 */ { ud_itab__110, UD_TAB__OPC_SSE, "/sse" }, + /* 111 */ { ud_itab__111, UD_TAB__OPC_SSE, "/sse" }, + /* 112 */ { ud_itab__112, UD_TAB__OPC_SSE, "/sse" }, + /* 113 */ { ud_itab__113, UD_TAB__OPC_SSE, "/sse" }, + /* 114 */ { ud_itab__114, UD_TAB__OPC_SSE, "/sse" }, + /* 115 */ { ud_itab__115, UD_TAB__OPC_SSE, "/sse" }, + /* 116 */ { ud_itab__116, UD_TAB__OPC_TABLE, "opctbl" }, + /* 117 */ { ud_itab__117, UD_TAB__OPC_SSE, "/sse" }, + /* 118 */ { ud_itab__118, UD_TAB__OPC_SSE, "/sse" }, + /* 119 */ { ud_itab__119, UD_TAB__OPC_SSE, "/sse" }, + /* 120 */ { ud_itab__120, UD_TAB__OPC_SSE, "/sse" }, + /* 121 */ { ud_itab__121, UD_TAB__OPC_SSE, "/sse" }, + /* 122 */ { ud_itab__122, UD_TAB__OPC_SSE, "/sse" }, + /* 123 */ { ud_itab__123, UD_TAB__OPC_SSE, "/sse" }, + /* 124 */ { ud_itab__124, UD_TAB__OPC_SSE, "/sse" }, + /* 125 */ { ud_itab__125, UD_TAB__OPC_SSE, "/sse" }, + /* 126 */ { ud_itab__126, UD_TAB__OPC_SSE, "/sse" }, + /* 127 */ { ud_itab__127, UD_TAB__OPC_SSE, "/sse" }, + /* 128 */ { ud_itab__128, UD_TAB__OPC_OSIZE, "/o" }, + /* 129 */ { ud_itab__129, UD_TAB__OPC_SSE, "/sse" }, + /* 130 */ { ud_itab__130, UD_TAB__OPC_SSE, "/sse" }, + /* 131 */ { ud_itab__131, UD_TAB__OPC_SSE, "/sse" }, + /* 132 */ { ud_itab__132, UD_TAB__OPC_SSE, "/sse" }, + /* 133 */ { ud_itab__133, UD_TAB__OPC_OSIZE, "/o" }, + /* 134 */ { ud_itab__134, UD_TAB__OPC_SSE, "/sse" }, + /* 135 */ { ud_itab__135, UD_TAB__OPC_SSE, "/sse" }, + /* 136 */ { ud_itab__136, UD_TAB__OPC_SSE, "/sse" }, + /* 137 */ { ud_itab__137, UD_TAB__OPC_SSE, "/sse" }, + /* 138 */ { ud_itab__138, UD_TAB__OPC_SSE, "/sse" }, + /* 139 */ { ud_itab__139, UD_TAB__OPC_SSE, "/sse" }, + /* 140 */ { ud_itab__140, UD_TAB__OPC_SSE, "/sse" }, + /* 141 */ { ud_itab__141, UD_TAB__OPC_SSE, "/sse" }, + /* 142 */ { ud_itab__142, UD_TAB__OPC_SSE, "/sse" }, + /* 143 */ { ud_itab__143, UD_TAB__OPC_SSE, "/sse" }, + /* 144 */ { ud_itab__144, UD_TAB__OPC_SSE, "/sse" }, + /* 145 */ { ud_itab__145, UD_TAB__OPC_SSE, "/sse" }, + /* 146 */ { ud_itab__146, UD_TAB__OPC_SSE, "/sse" }, + /* 147 */ { ud_itab__147, UD_TAB__OPC_SSE, "/sse" }, + /* 148 */ { ud_itab__148, UD_TAB__OPC_SSE, "/sse" }, + /* 149 */ { ud_itab__149, UD_TAB__OPC_SSE, "/sse" }, + /* 150 */ { ud_itab__150, UD_TAB__OPC_SSE, "/sse" }, + /* 151 */ { ud_itab__151, UD_TAB__OPC_SSE, "/sse" }, + /* 152 */ { ud_itab__152, UD_TAB__OPC_SSE, "/sse" }, + /* 153 */ { ud_itab__153, UD_TAB__OPC_SSE, "/sse" }, + /* 154 */ { ud_itab__154, UD_TAB__OPC_SSE, "/sse" }, + /* 155 */ { ud_itab__155, UD_TAB__OPC_SSE, "/sse" }, + /* 156 */ { ud_itab__156, UD_TAB__OPC_SSE, "/sse" }, + /* 157 */ { ud_itab__157, UD_TAB__OPC_SSE, "/sse" }, + /* 158 */ { ud_itab__158, UD_TAB__OPC_SSE, "/sse" }, + /* 159 */ { ud_itab__159, UD_TAB__OPC_SSE, "/sse" }, + /* 160 */ { ud_itab__160, UD_TAB__OPC_SSE, "/sse" }, + /* 161 */ { ud_itab__161, UD_TAB__OPC_SSE, "/sse" }, + /* 162 */ { ud_itab__162, UD_TAB__OPC_SSE, "/sse" }, + /* 163 */ { ud_itab__163, UD_TAB__OPC_SSE, "/sse" }, + /* 164 */ { ud_itab__164, UD_TAB__OPC_SSE, "/sse" }, + /* 165 */ { ud_itab__165, UD_TAB__OPC_SSE, "/sse" }, + /* 166 */ { ud_itab__166, UD_TAB__OPC_SSE, "/sse" }, + /* 167 */ { ud_itab__167, UD_TAB__OPC_SSE, "/sse" }, + /* 168 */ { ud_itab__168, UD_TAB__OPC_SSE, "/sse" }, + /* 169 */ { ud_itab__169, UD_TAB__OPC_SSE, "/sse" }, + /* 170 */ { ud_itab__170, UD_TAB__OPC_SSE, "/sse" }, + /* 171 */ { ud_itab__171, UD_TAB__OPC_SSE, "/sse" }, + /* 172 */ { ud_itab__172, UD_TAB__OPC_SSE, "/sse" }, + /* 173 */ { ud_itab__173, UD_TAB__OPC_SSE, "/sse" }, + /* 174 */ { ud_itab__174, UD_TAB__OPC_OSIZE, "/o" }, + /* 175 */ { ud_itab__175, UD_TAB__OPC_OSIZE, "/o" }, + /* 176 */ { ud_itab__176, UD_TAB__OPC_SSE, "/sse" }, + /* 177 */ { ud_itab__177, UD_TAB__OPC_SSE, "/sse" }, + /* 178 */ { ud_itab__178, UD_TAB__OPC_REG, "/reg" }, + /* 179 */ { ud_itab__179, UD_TAB__OPC_SSE, "/sse" }, + /* 180 */ { ud_itab__180, UD_TAB__OPC_SSE, "/sse" }, + /* 181 */ { ud_itab__181, UD_TAB__OPC_SSE, "/sse" }, + /* 182 */ { ud_itab__182, UD_TAB__OPC_REG, "/reg" }, + /* 183 */ { ud_itab__183, UD_TAB__OPC_SSE, "/sse" }, + /* 184 */ { ud_itab__184, UD_TAB__OPC_SSE, "/sse" }, + /* 185 */ { ud_itab__185, UD_TAB__OPC_SSE, "/sse" }, + /* 186 */ { ud_itab__186, UD_TAB__OPC_REG, "/reg" }, + /* 187 */ { ud_itab__187, UD_TAB__OPC_SSE, "/sse" }, + /* 188 */ { ud_itab__188, UD_TAB__OPC_SSE, "/sse" }, + /* 189 */ { ud_itab__189, UD_TAB__OPC_SSE, "/sse" }, + /* 190 */ { ud_itab__190, UD_TAB__OPC_SSE, "/sse" }, + /* 191 */ { ud_itab__191, UD_TAB__OPC_SSE, "/sse" }, + /* 192 */ { ud_itab__192, UD_TAB__OPC_SSE, "/sse" }, + /* 193 */ { ud_itab__193, UD_TAB__OPC_SSE, "/sse" }, + /* 194 */ { ud_itab__194, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 195 */ { ud_itab__195, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 196 */ { ud_itab__196, UD_TAB__OPC_SSE, "/sse" }, + /* 197 */ { ud_itab__197, UD_TAB__OPC_SSE, "/sse" }, + /* 198 */ { ud_itab__198, UD_TAB__OPC_SSE, "/sse" }, + /* 199 */ { ud_itab__199, UD_TAB__OPC_OSIZE, "/o" }, + /* 200 */ { ud_itab__200, UD_TAB__OPC_OSIZE, "/o" }, + /* 201 */ { ud_itab__201, UD_TAB__OPC_SSE, "/sse" }, + /* 202 */ { ud_itab__202, UD_TAB__OPC_MOD, "/mod" }, + /* 203 */ { ud_itab__203, UD_TAB__OPC_REG, "/reg" }, + /* 204 */ { ud_itab__204, UD_TAB__OPC_RM, "/rm" }, + /* 205 */ { ud_itab__205, UD_TAB__OPC_RM, "/rm" }, + /* 206 */ { ud_itab__206, UD_TAB__OPC_RM, "/rm" }, + /* 207 */ { ud_itab__207, UD_TAB__OPC_MOD, "/mod" }, + /* 208 */ { ud_itab__208, UD_TAB__OPC_REG, "/reg" }, + /* 209 */ { ud_itab__209, UD_TAB__OPC_RM, "/rm" }, + /* 210 */ { ud_itab__210, UD_TAB__OPC_RM, "/rm" }, + /* 211 */ { ud_itab__211, UD_TAB__OPC_RM, "/rm" }, + /* 212 */ { ud_itab__212, UD_TAB__OPC_RM, "/rm" }, + /* 213 */ { ud_itab__213, UD_TAB__OPC_RM, "/rm" }, + /* 214 */ { ud_itab__214, UD_TAB__OPC_RM, "/rm" }, + /* 215 */ { ud_itab__215, UD_TAB__OPC_MOD, "/mod" }, + /* 216 */ { ud_itab__216, UD_TAB__OPC_REG, "/reg" }, + /* 217 */ { ud_itab__217, UD_TAB__OPC_REG, "/reg" }, + /* 218 */ { ud_itab__218, UD_TAB__OPC_RM, "/rm" }, + /* 219 */ { ud_itab__219, UD_TAB__OPC_RM, "/rm" }, + /* 220 */ { ud_itab__220, UD_TAB__OPC_RM, "/rm" }, + /* 221 */ { ud_itab__221, UD_TAB__OPC_SSE, "/sse" }, + /* 222 */ { ud_itab__222, UD_TAB__OPC_REG, "/reg" }, + /* 223 */ { ud_itab__223, UD_TAB__OPC_SSE, "/sse" }, + /* 224 */ { ud_itab__224, UD_TAB__OPC_SSE, "/sse" }, + /* 225 */ { ud_itab__225, UD_TAB__OPC_SSE, "/sse" }, + /* 226 */ { ud_itab__226, UD_TAB__OPC_SSE, "/sse" }, + /* 227 */ { ud_itab__227, UD_TAB__OPC_MOD, "/mod" }, + /* 228 */ { ud_itab__228, UD_TAB__OPC_REG, "/reg" }, + /* 229 */ { ud_itab__229, UD_TAB__OPC_OSIZE, "/o" }, + /* 230 */ { ud_itab__230, UD_TAB__OPC_SSE, "/sse" }, + /* 231 */ { ud_itab__231, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 232 */ { ud_itab__232, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 233 */ { ud_itab__233, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 234 */ { ud_itab__234, UD_TAB__OPC_VENDOR, "/vendor" }, + /* 235 */ { ud_itab__235, UD_TAB__OPC_REG, "/reg" }, + /* 236 */ { ud_itab__236, UD_TAB__OPC_SSE, "/sse" }, + /* 237 */ { ud_itab__237, UD_TAB__OPC_SSE, "/sse" }, + /* 238 */ { ud_itab__238, UD_TAB__OPC_SSE, "/sse" }, + /* 239 */ { ud_itab__239, UD_TAB__OPC_SSE, "/sse" }, + /* 240 */ { ud_itab__240, UD_TAB__OPC_SSE, "/sse" }, + /* 241 */ { ud_itab__241, UD_TAB__OPC_SSE, "/sse" }, + /* 242 */ { ud_itab__242, UD_TAB__OPC_SSE, "/sse" }, + /* 243 */ { ud_itab__243, UD_TAB__OPC_SSE, "/sse" }, + /* 244 */ { ud_itab__244, UD_TAB__OPC_SSE, "/sse" }, + /* 245 */ { ud_itab__245, UD_TAB__OPC_SSE, "/sse" }, + /* 246 */ { ud_itab__246, UD_TAB__OPC_SSE, "/sse" }, + /* 247 */ { ud_itab__247, UD_TAB__OPC_SSE, "/sse" }, + /* 248 */ { ud_itab__248, UD_TAB__OPC_SSE, "/sse" }, + /* 249 */ { ud_itab__249, UD_TAB__OPC_SSE, "/sse" }, + /* 250 */ { ud_itab__250, UD_TAB__OPC_SSE, "/sse" }, + /* 251 */ { ud_itab__251, UD_TAB__OPC_SSE, "/sse" }, + /* 252 */ { ud_itab__252, UD_TAB__OPC_SSE, "/sse" }, + /* 253 */ { ud_itab__253, UD_TAB__OPC_SSE, "/sse" }, + /* 254 */ { ud_itab__254, UD_TAB__OPC_SSE, "/sse" }, + /* 255 */ { ud_itab__255, UD_TAB__OPC_SSE, "/sse" }, + /* 256 */ { ud_itab__256, UD_TAB__OPC_SSE, "/sse" }, + /* 257 */ { ud_itab__257, UD_TAB__OPC_SSE, "/sse" }, + /* 258 */ { ud_itab__258, UD_TAB__OPC_SSE, "/sse" }, + /* 259 */ { ud_itab__259, UD_TAB__OPC_SSE, "/sse" }, + /* 260 */ { ud_itab__260, UD_TAB__OPC_SSE, "/sse" }, + /* 261 */ { ud_itab__261, UD_TAB__OPC_SSE, "/sse" }, + /* 262 */ { ud_itab__262, UD_TAB__OPC_SSE, "/sse" }, + /* 263 */ { ud_itab__263, UD_TAB__OPC_SSE, "/sse" }, + /* 264 */ { ud_itab__264, UD_TAB__OPC_SSE, "/sse" }, + /* 265 */ { ud_itab__265, UD_TAB__OPC_SSE, "/sse" }, + /* 266 */ { ud_itab__266, UD_TAB__OPC_SSE, "/sse" }, + /* 267 */ { ud_itab__267, UD_TAB__OPC_SSE, "/sse" }, + /* 268 */ { ud_itab__268, UD_TAB__OPC_SSE, "/sse" }, + /* 269 */ { ud_itab__269, UD_TAB__OPC_SSE, "/sse" }, + /* 270 */ { ud_itab__270, UD_TAB__OPC_SSE, "/sse" }, + /* 271 */ { ud_itab__271, UD_TAB__OPC_SSE, "/sse" }, + /* 272 */ { ud_itab__272, UD_TAB__OPC_SSE, "/sse" }, + /* 273 */ { ud_itab__273, UD_TAB__OPC_SSE, "/sse" }, + /* 274 */ { ud_itab__274, UD_TAB__OPC_SSE, "/sse" }, + /* 275 */ { ud_itab__275, UD_TAB__OPC_MOD, "/mod" }, + /* 276 */ { ud_itab__276, UD_TAB__OPC_SSE, "/sse" }, + /* 277 */ { ud_itab__277, UD_TAB__OPC_SSE, "/sse" }, + /* 278 */ { ud_itab__278, UD_TAB__OPC_SSE, "/sse" }, + /* 279 */ { ud_itab__279, UD_TAB__OPC_SSE, "/sse" }, + /* 280 */ { ud_itab__280, UD_TAB__OPC_SSE, "/sse" }, + /* 281 */ { ud_itab__281, UD_TAB__OPC_SSE, "/sse" }, + /* 282 */ { ud_itab__282, UD_TAB__OPC_SSE, "/sse" }, + /* 283 */ { ud_itab__283, UD_TAB__OPC_SSE, "/sse" }, + /* 284 */ { ud_itab__284, UD_TAB__OPC_MODE, "/m" }, + /* 285 */ { ud_itab__285, UD_TAB__OPC_MODE, "/m" }, + /* 286 */ { ud_itab__286, UD_TAB__OPC_MODE, "/m" }, + /* 287 */ { ud_itab__287, UD_TAB__OPC_MODE, "/m" }, + /* 288 */ { ud_itab__288, UD_TAB__OPC_MODE, "/m" }, + /* 289 */ { ud_itab__289, UD_TAB__OPC_MODE, "/m" }, + /* 290 */ { ud_itab__290, UD_TAB__OPC_MODE, "/m" }, + /* 291 */ { ud_itab__291, UD_TAB__OPC_MODE, "/m" }, + /* 292 */ { ud_itab__292, UD_TAB__OPC_OSIZE, "/o" }, + /* 293 */ { ud_itab__293, UD_TAB__OPC_MODE, "/m" }, + /* 294 */ { ud_itab__294, UD_TAB__OPC_MODE, "/m" }, + /* 295 */ { ud_itab__295, UD_TAB__OPC_OSIZE, "/o" }, + /* 296 */ { ud_itab__296, UD_TAB__OPC_MODE, "/m" }, + /* 297 */ { ud_itab__297, UD_TAB__OPC_MODE, "/m" }, + /* 298 */ { ud_itab__298, UD_TAB__OPC_MODE, "/m" }, + /* 299 */ { ud_itab__299, UD_TAB__OPC_MODE, "/m" }, + /* 300 */ { ud_itab__300, UD_TAB__OPC_OSIZE, "/o" }, + /* 301 */ { ud_itab__301, UD_TAB__OPC_OSIZE, "/o" }, + /* 302 */ { ud_itab__302, UD_TAB__OPC_REG, "/reg" }, + /* 303 */ { ud_itab__303, UD_TAB__OPC_REG, "/reg" }, + /* 304 */ { ud_itab__304, UD_TAB__OPC_REG, "/reg" }, + /* 305 */ { ud_itab__305, UD_TAB__OPC_MODE, "/m" }, + /* 306 */ { ud_itab__306, UD_TAB__OPC_MODE, "/m" }, + /* 307 */ { ud_itab__307, UD_TAB__OPC_MODE, "/m" }, + /* 308 */ { ud_itab__308, UD_TAB__OPC_MODE, "/m" }, + /* 309 */ { ud_itab__309, UD_TAB__OPC_MODE, "/m" }, + /* 310 */ { ud_itab__310, UD_TAB__OPC_MODE, "/m" }, + /* 311 */ { ud_itab__311, UD_TAB__OPC_MODE, "/m" }, + /* 312 */ { ud_itab__312, UD_TAB__OPC_MODE, "/m" }, + /* 313 */ { ud_itab__313, UD_TAB__OPC_REG, "/reg" }, + /* 314 */ { ud_itab__314, UD_TAB__OPC_REG, "/reg" }, + /* 315 */ { ud_itab__315, UD_TAB__OPC_OSIZE, "/o" }, + /* 316 */ { ud_itab__316, UD_TAB__OPC_OSIZE, "/o" }, + /* 317 */ { ud_itab__317, UD_TAB__OPC_MODE, "/m" }, + /* 318 */ { ud_itab__318, UD_TAB__OPC_OSIZE, "/o" }, + /* 319 */ { ud_itab__319, UD_TAB__OPC_MODE, "/m" }, + /* 320 */ { ud_itab__320, UD_TAB__OPC_MODE, "/m" }, + /* 321 */ { ud_itab__321, UD_TAB__OPC_MODE, "/m" }, + /* 322 */ { ud_itab__322, UD_TAB__OPC_OSIZE, "/o" }, + /* 323 */ { ud_itab__323, UD_TAB__OPC_MODE, "/m" }, + /* 324 */ { ud_itab__324, UD_TAB__OPC_MODE, "/m" }, + /* 325 */ { ud_itab__325, UD_TAB__OPC_MODE, "/m" }, + /* 326 */ { ud_itab__326, UD_TAB__OPC_OSIZE, "/o" }, + /* 327 */ { ud_itab__327, UD_TAB__OPC_OSIZE, "/o" }, + /* 328 */ { ud_itab__328, UD_TAB__OPC_OSIZE, "/o" }, + /* 329 */ { ud_itab__329, UD_TAB__OPC_OSIZE, "/o" }, + /* 330 */ { ud_itab__330, UD_TAB__OPC_OSIZE, "/o" }, + /* 331 */ { ud_itab__331, UD_TAB__OPC_REG, "/reg" }, + /* 332 */ { ud_itab__332, UD_TAB__OPC_REG, "/reg" }, + /* 333 */ { ud_itab__333, UD_TAB__OPC_VEX, "/vex" }, + /* 334 */ { ud_itab__334, UD_TAB__OPC_MODE, "/m" }, + /* 335 */ { ud_itab__335, UD_TAB__OPC_TABLE, "opctbl" }, + /* 336 */ { ud_itab__336, UD_TAB__OPC_MOD, "/mod" }, + /* 337 */ { ud_itab__337, UD_TAB__OPC_MOD, "/mod" }, + /* 338 */ { ud_itab__338, UD_TAB__OPC_MOD, "/mod" }, + /* 339 */ { ud_itab__339, UD_TAB__OPC_REG, "/reg" }, + /* 340 */ { ud_itab__340, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 341 */ { ud_itab__341, UD_TAB__OPC_TABLE, "opctbl" }, + /* 342 */ { ud_itab__342, UD_TAB__OPC_MOD, "/mod" }, + /* 343 */ { ud_itab__343, UD_TAB__OPC_MOD, "/mod" }, + /* 344 */ { ud_itab__344, UD_TAB__OPC_OSIZE, "/o" }, + /* 345 */ { ud_itab__345, UD_TAB__OPC_REG, "/reg" }, + /* 346 */ { ud_itab__346, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 347 */ { ud_itab__347, UD_TAB__OPC_REG, "/reg" }, + /* 348 */ { ud_itab__348, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 349 */ { ud_itab__349, UD_TAB__OPC_REG, "/reg" }, + /* 350 */ { ud_itab__350, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 351 */ { ud_itab__351, UD_TAB__OPC_OSIZE, "/o" }, + /* 352 */ { ud_itab__352, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 353 */ { ud_itab__353, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 354 */ { ud_itab__354, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 355 */ { ud_itab__355, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 356 */ { ud_itab__356, UD_TAB__OPC_MOD, "/mod" }, + /* 357 */ { ud_itab__357, UD_TAB__OPC_TABLE, "opctbl" }, + /* 358 */ { ud_itab__358, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 359 */ { ud_itab__359, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 360 */ { ud_itab__360, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 361 */ { ud_itab__361, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 362 */ { ud_itab__362, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 363 */ { ud_itab__363, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 364 */ { ud_itab__364, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 365 */ { ud_itab__365, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 366 */ { ud_itab__366, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 367 */ { ud_itab__367, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 368 */ { ud_itab__368, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 369 */ { ud_itab__369, UD_TAB__OPC_TABLE, "opctbl" }, + /* 370 */ { ud_itab__370, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 371 */ { ud_itab__371, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 372 */ { ud_itab__372, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 373 */ { ud_itab__373, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 374 */ { ud_itab__374, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 375 */ { ud_itab__375, UD_TAB__OPC_OSIZE, "/o" }, + /* 376 */ { ud_itab__376, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 377 */ { ud_itab__377, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 378 */ { ud_itab__378, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 379 */ { ud_itab__379, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 380 */ { ud_itab__380, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 381 */ { ud_itab__381, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 382 */ { ud_itab__382, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 383 */ { ud_itab__383, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 384 */ { ud_itab__384, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 385 */ { ud_itab__385, UD_TAB__OPC_MODE, "/m" }, + /* 386 */ { ud_itab__386, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 387 */ { ud_itab__387, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 388 */ { ud_itab__388, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 389 */ { ud_itab__389, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 390 */ { ud_itab__390, UD_TAB__OPC_VEX_L, "/vexl" }, + /* 391 */ { ud_itab__391, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 392 */ { ud_itab__392, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 393 */ { ud_itab__393, UD_TAB__OPC_VEX_W, "/vexw" }, + /* 394 */ { ud_itab__394, UD_TAB__OPC_TABLE, "opctbl" }, + /* 395 */ { ud_itab__395, UD_TAB__OPC_MOD, "/mod" }, + /* 396 */ { ud_itab__396, UD_TAB__OPC_MOD, "/mod" }, + /* 397 */ { ud_itab__397, UD_TAB__OPC_MOD, "/mod" }, + /* 398 */ { ud_itab__398, UD_TAB__OPC_MOD, "/mod" }, + /* 399 */ { ud_itab__399, UD_TAB__OPC_TABLE, "opctbl" }, + /* 400 */ { ud_itab__400, UD_TAB__OPC_MOD, "/mod" }, + /* 401 */ { ud_itab__401, UD_TAB__OPC_MOD, "/mod" }, + /* 402 */ { ud_itab__402, UD_TAB__OPC_MOD, "/mod" }, + /* 403 */ { ud_itab__403, UD_TAB__OPC_VEX, "/vex" }, + /* 404 */ { ud_itab__404, UD_TAB__OPC_MODE, "/m" }, + /* 405 */ { ud_itab__405, UD_TAB__OPC_REG, "/reg" }, + /* 406 */ { ud_itab__406, UD_TAB__OPC_REG, "/reg" }, + /* 407 */ { ud_itab__407, UD_TAB__OPC_MODE, "/m" }, + /* 408 */ { ud_itab__408, UD_TAB__OPC_OSIZE, "/o" }, + /* 409 */ { ud_itab__409, UD_TAB__OPC_REG, "/reg" }, + /* 410 */ { ud_itab__410, UD_TAB__OPC_REG, "/reg" }, + /* 411 */ { ud_itab__411, UD_TAB__OPC_REG, "/reg" }, + /* 412 */ { ud_itab__412, UD_TAB__OPC_REG, "/reg" }, + /* 413 */ { ud_itab__413, UD_TAB__OPC_MODE, "/m" }, + /* 414 */ { ud_itab__414, UD_TAB__OPC_MODE, "/m" }, + /* 415 */ { ud_itab__415, UD_TAB__OPC_MODE, "/m" }, + /* 416 */ { ud_itab__416, UD_TAB__OPC_MOD, "/mod" }, + /* 417 */ { ud_itab__417, UD_TAB__OPC_REG, "/reg" }, + /* 418 */ { ud_itab__418, UD_TAB__OPC_X87, "/x87" }, + /* 419 */ { ud_itab__419, UD_TAB__OPC_MOD, "/mod" }, + /* 420 */ { ud_itab__420, UD_TAB__OPC_REG, "/reg" }, + /* 421 */ { ud_itab__421, UD_TAB__OPC_X87, "/x87" }, + /* 422 */ { ud_itab__422, UD_TAB__OPC_MOD, "/mod" }, + /* 423 */ { ud_itab__423, UD_TAB__OPC_REG, "/reg" }, + /* 424 */ { ud_itab__424, UD_TAB__OPC_X87, "/x87" }, + /* 425 */ { ud_itab__425, UD_TAB__OPC_MOD, "/mod" }, + /* 426 */ { ud_itab__426, UD_TAB__OPC_REG, "/reg" }, + /* 427 */ { ud_itab__427, UD_TAB__OPC_X87, "/x87" }, + /* 428 */ { ud_itab__428, UD_TAB__OPC_MOD, "/mod" }, + /* 429 */ { ud_itab__429, UD_TAB__OPC_REG, "/reg" }, + /* 430 */ { ud_itab__430, UD_TAB__OPC_X87, "/x87" }, + /* 431 */ { ud_itab__431, UD_TAB__OPC_MOD, "/mod" }, + /* 432 */ { ud_itab__432, UD_TAB__OPC_REG, "/reg" }, + /* 433 */ { ud_itab__433, UD_TAB__OPC_X87, "/x87" }, + /* 434 */ { ud_itab__434, UD_TAB__OPC_MOD, "/mod" }, + /* 435 */ { ud_itab__435, UD_TAB__OPC_REG, "/reg" }, + /* 436 */ { ud_itab__436, UD_TAB__OPC_X87, "/x87" }, + /* 437 */ { ud_itab__437, UD_TAB__OPC_MOD, "/mod" }, + /* 438 */ { ud_itab__438, UD_TAB__OPC_REG, "/reg" }, + /* 439 */ { ud_itab__439, UD_TAB__OPC_X87, "/x87" }, + /* 440 */ { ud_itab__440, UD_TAB__OPC_ASIZE, "/a" }, + /* 441 */ { ud_itab__441, UD_TAB__OPC_MODE, "/m" }, + /* 442 */ { ud_itab__442, UD_TAB__OPC_REG, "/reg" }, + /* 443 */ { ud_itab__443, UD_TAB__OPC_REG, "/reg" }, + /* 444 */ { ud_itab__444, UD_TAB__OPC_REG, "/reg" }, + /* 445 */ { ud_itab__445, UD_TAB__OPC_REG, "/reg" }, + /* 446 */ { ud_itab__446, UD_TAB__OPC_MODE, "/m" }, +}; + +/* itab entry operand definitions (for readability) */ +#define O_AL { OP_AL, SZ_B } +#define O_AX { OP_AX, SZ_W } +#define O_Av { OP_A, SZ_V } +#define O_C { OP_C, SZ_NA } +#define O_CL { OP_CL, SZ_B } +#define O_CS { OP_CS, SZ_NA } +#define O_CX { OP_CX, SZ_W } +#define O_D { OP_D, SZ_NA } +#define O_DL { OP_DL, SZ_B } +#define O_DS { OP_DS, SZ_NA } +#define O_DX { OP_DX, SZ_W } +#define O_E { OP_E, SZ_NA } +#define O_ES { OP_ES, SZ_NA } +#define O_Eb { OP_E, SZ_B } +#define O_Ed { OP_E, SZ_D } +#define O_Eq { OP_E, SZ_Q } +#define O_Ev { OP_E, SZ_V } +#define O_Ew { OP_E, SZ_W } +#define O_Ey { OP_E, SZ_Y } +#define O_Ez { OP_E, SZ_Z } +#define O_FS { OP_FS, SZ_NA } +#define O_Fv { OP_F, SZ_V } +#define O_G { OP_G, SZ_NA } +#define O_GS { OP_GS, SZ_NA } +#define O_Gb { OP_G, SZ_B } +#define O_Gd { OP_G, SZ_D } +#define O_Gq { OP_G, SZ_Q } +#define O_Gv { OP_G, SZ_V } +#define O_Gw { OP_G, SZ_W } +#define O_Gy { OP_G, SZ_Y } +#define O_Gz { OP_G, SZ_Z } +#define O_H { OP_H, SZ_X } +#define O_Hqq { OP_H, SZ_QQ } +#define O_Hx { OP_H, SZ_X } +#define O_I1 { OP_I1, SZ_NA } +#define O_I3 { OP_I3, SZ_NA } +#define O_Ib { OP_I, SZ_B } +#define O_Iv { OP_I, SZ_V } +#define O_Iw { OP_I, SZ_W } +#define O_Iz { OP_I, SZ_Z } +#define O_Jb { OP_J, SZ_B } +#define O_Jv { OP_J, SZ_V } +#define O_Jz { OP_J, SZ_Z } +#define O_L { OP_L, SZ_O } +#define O_Lx { OP_L, SZ_X } +#define O_M { OP_M, SZ_NA } +#define O_Mb { OP_M, SZ_B } +#define O_MbRd { OP_MR, SZ_BD } +#define O_MbRv { OP_MR, SZ_BV } +#define O_Md { OP_M, SZ_D } +#define O_MdRy { OP_MR, SZ_DY } +#define O_MdU { OP_MU, SZ_DO } +#define O_Mdq { OP_M, SZ_DQ } +#define O_Mo { OP_M, SZ_O } +#define O_Mq { OP_M, SZ_Q } +#define O_MqU { OP_MU, SZ_QO } +#define O_Ms { OP_M, SZ_W } +#define O_Mt { OP_M, SZ_T } +#define O_Mv { OP_M, SZ_V } +#define O_Mw { OP_M, SZ_W } +#define O_MwRd { OP_MR, SZ_WD } +#define O_MwRv { OP_MR, SZ_WV } +#define O_MwRy { OP_MR, SZ_WY } +#define O_MwU { OP_MU, SZ_WO } +#define O_N { OP_N, SZ_Q } +#define O_NONE { OP_NONE, SZ_NA } +#define O_Ob { OP_O, SZ_B } +#define O_Ov { OP_O, SZ_V } +#define O_Ow { OP_O, SZ_W } +#define O_P { OP_P, SZ_Q } +#define O_Q { OP_Q, SZ_Q } +#define O_R { OP_R, SZ_RDQ } +#define O_R0b { OP_R0, SZ_B } +#define O_R0v { OP_R0, SZ_V } +#define O_R0w { OP_R0, SZ_W } +#define O_R0y { OP_R0, SZ_Y } +#define O_R0z { OP_R0, SZ_Z } +#define O_R1b { OP_R1, SZ_B } +#define O_R1v { OP_R1, SZ_V } +#define O_R1w { OP_R1, SZ_W } +#define O_R1y { OP_R1, SZ_Y } +#define O_R1z { OP_R1, SZ_Z } +#define O_R2b { OP_R2, SZ_B } +#define O_R2v { OP_R2, SZ_V } +#define O_R2w { OP_R2, SZ_W } +#define O_R2y { OP_R2, SZ_Y } +#define O_R2z { OP_R2, SZ_Z } +#define O_R3b { OP_R3, SZ_B } +#define O_R3v { OP_R3, SZ_V } +#define O_R3w { OP_R3, SZ_W } +#define O_R3y { OP_R3, SZ_Y } +#define O_R3z { OP_R3, SZ_Z } +#define O_R4b { OP_R4, SZ_B } +#define O_R4v { OP_R4, SZ_V } +#define O_R4w { OP_R4, SZ_W } +#define O_R4y { OP_R4, SZ_Y } +#define O_R4z { OP_R4, SZ_Z } +#define O_R5b { OP_R5, SZ_B } +#define O_R5v { OP_R5, SZ_V } +#define O_R5w { OP_R5, SZ_W } +#define O_R5y { OP_R5, SZ_Y } +#define O_R5z { OP_R5, SZ_Z } +#define O_R6b { OP_R6, SZ_B } +#define O_R6v { OP_R6, SZ_V } +#define O_R6w { OP_R6, SZ_W } +#define O_R6y { OP_R6, SZ_Y } +#define O_R6z { OP_R6, SZ_Z } +#define O_R7b { OP_R7, SZ_B } +#define O_R7v { OP_R7, SZ_V } +#define O_R7w { OP_R7, SZ_W } +#define O_R7y { OP_R7, SZ_Y } +#define O_R7z { OP_R7, SZ_Z } +#define O_S { OP_S, SZ_W } +#define O_SS { OP_SS, SZ_NA } +#define O_ST0 { OP_ST0, SZ_NA } +#define O_ST1 { OP_ST1, SZ_NA } +#define O_ST2 { OP_ST2, SZ_NA } +#define O_ST3 { OP_ST3, SZ_NA } +#define O_ST4 { OP_ST4, SZ_NA } +#define O_ST5 { OP_ST5, SZ_NA } +#define O_ST6 { OP_ST6, SZ_NA } +#define O_ST7 { OP_ST7, SZ_NA } +#define O_U { OP_U, SZ_O } +#define O_Ux { OP_U, SZ_X } +#define O_V { OP_V, SZ_DQ } +#define O_Vdq { OP_V, SZ_DQ } +#define O_Vqq { OP_V, SZ_QQ } +#define O_Vsd { OP_V, SZ_Q } +#define O_Vx { OP_V, SZ_X } +#define O_W { OP_W, SZ_DQ } +#define O_Wdq { OP_W, SZ_DQ } +#define O_Wqq { OP_W, SZ_QQ } +#define O_Wsd { OP_W, SZ_Q } +#define O_Wx { OP_W, SZ_X } +#define O_eAX { OP_eAX, SZ_Z } +#define O_eCX { OP_eCX, SZ_Z } +#define O_eDX { OP_eDX, SZ_Z } +#define O_rAX { OP_rAX, SZ_V } +#define O_rCX { OP_rCX, SZ_V } +#define O_rDX { OP_rDX, SZ_V } +#define O_sIb { OP_sI, SZ_B } +#define O_sIv { OP_sI, SZ_V } +#define O_sIz { OP_sI, SZ_Z } + +struct ud_itab_entry ud_itab[] = { + /* 0000 */ { UD_Iinvalid, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0001 */ { UD_Iaaa, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0002 */ { UD_Iaad, O_Ib, O_NONE, O_NONE, O_NONE, P_none }, + /* 0003 */ { UD_Iaam, O_Ib, O_NONE, O_NONE, O_NONE, P_none }, + /* 0004 */ { UD_Iaas, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0005 */ { UD_Iadc, O_Eb, O_Gb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0006 */ { UD_Iadc, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0007 */ { UD_Iadc, O_Gb, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0008 */ { UD_Iadc, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0009 */ { UD_Iadc, O_AL, O_Ib, O_NONE, O_NONE, P_none }, + /* 0010 */ { UD_Iadc, O_rAX, O_sIz, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0011 */ { UD_Iadc, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0012 */ { UD_Iadc, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_inv64 }, + /* 0013 */ { UD_Iadc, O_Ev, O_sIz, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0014 */ { UD_Iadc, O_Ev, O_sIb, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0015 */ { UD_Iadd, O_Eb, O_Gb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0016 */ { UD_Iadd, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0017 */ { UD_Iadd, O_Gb, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0018 */ { UD_Iadd, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0019 */ { UD_Iadd, O_AL, O_Ib, O_NONE, O_NONE, P_none }, + /* 0020 */ { UD_Iadd, O_rAX, O_sIz, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0021 */ { UD_Iadd, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0022 */ { UD_Iadd, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_inv64 }, + /* 0023 */ { UD_Iadd, O_Ev, O_sIz, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0024 */ { UD_Iadd, O_Ev, O_sIb, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0025 */ { UD_Iaddpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0026 */ { UD_Ivaddpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0027 */ { UD_Iaddps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0028 */ { UD_Ivaddps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0029 */ { UD_Iaddsd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0030 */ { UD_Ivaddsd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0031 */ { UD_Iaddss, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0032 */ { UD_Ivaddss, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0033 */ { UD_Iaddsubpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0034 */ { UD_Ivaddsubpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0035 */ { UD_Iaddsubps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0036 */ { UD_Ivaddsubps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0037 */ { UD_Iaesdec, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0038 */ { UD_Ivaesdec, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0039 */ { UD_Iaesdeclast, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0040 */ { UD_Ivaesdeclast, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0041 */ { UD_Iaesenc, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0042 */ { UD_Ivaesenc, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0043 */ { UD_Iaesenclast, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0044 */ { UD_Ivaesenclast, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0045 */ { UD_Iaesimc, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0046 */ { UD_Ivaesimc, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0047 */ { UD_Iaeskeygenassist, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0048 */ { UD_Ivaeskeygenassist, O_Vx, O_Wx, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0049 */ { UD_Iand, O_Eb, O_Gb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0050 */ { UD_Iand, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0051 */ { UD_Iand, O_Gb, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0052 */ { UD_Iand, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0053 */ { UD_Iand, O_AL, O_Ib, O_NONE, O_NONE, P_none }, + /* 0054 */ { UD_Iand, O_rAX, O_sIz, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0055 */ { UD_Iand, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0056 */ { UD_Iand, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_inv64 }, + /* 0057 */ { UD_Iand, O_Ev, O_sIz, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0058 */ { UD_Iand, O_Ev, O_sIb, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0059 */ { UD_Iandpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0060 */ { UD_Ivandpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0061 */ { UD_Iandps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0062 */ { UD_Ivandps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0063 */ { UD_Iandnpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0064 */ { UD_Ivandnpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0065 */ { UD_Iandnps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0066 */ { UD_Ivandnps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0067 */ { UD_Iarpl, O_Ew, O_Gw, O_NONE, O_NONE, P_aso }, + /* 0068 */ { UD_Imovsxd, O_Gq, O_Ed, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexx|P_rexr|P_rexb }, + /* 0069 */ { UD_Icall, O_Ev, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0070 */ { UD_Icall, O_Eq, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 0071 */ { UD_Icall, O_Fv, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0072 */ { UD_Icall, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0073 */ { UD_Icall, O_Av, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0074 */ { UD_Icbw, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0075 */ { UD_Icwde, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0076 */ { UD_Icdqe, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0077 */ { UD_Iclc, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0078 */ { UD_Icld, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0079 */ { UD_Iclflush, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0080 */ { UD_Iclgi, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0081 */ { UD_Icli, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0082 */ { UD_Iclts, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0083 */ { UD_Icmc, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0084 */ { UD_Icmovo, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0085 */ { UD_Icmovno, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0086 */ { UD_Icmovb, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0087 */ { UD_Icmovae, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0088 */ { UD_Icmovz, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0089 */ { UD_Icmovnz, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0090 */ { UD_Icmovbe, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0091 */ { UD_Icmova, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0092 */ { UD_Icmovs, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0093 */ { UD_Icmovns, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0094 */ { UD_Icmovp, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0095 */ { UD_Icmovnp, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0096 */ { UD_Icmovl, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0097 */ { UD_Icmovge, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0098 */ { UD_Icmovle, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0099 */ { UD_Icmovg, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0100 */ { UD_Icmp, O_Eb, O_Gb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0101 */ { UD_Icmp, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0102 */ { UD_Icmp, O_Gb, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0103 */ { UD_Icmp, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0104 */ { UD_Icmp, O_AL, O_Ib, O_NONE, O_NONE, P_none }, + /* 0105 */ { UD_Icmp, O_rAX, O_sIz, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0106 */ { UD_Icmp, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0107 */ { UD_Icmp, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_inv64 }, + /* 0108 */ { UD_Icmp, O_Ev, O_sIz, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0109 */ { UD_Icmp, O_Ev, O_sIb, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0110 */ { UD_Icmppd, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0111 */ { UD_Ivcmppd, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0112 */ { UD_Icmpps, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0113 */ { UD_Ivcmpps, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0114 */ { UD_Icmpsb, O_NONE, O_NONE, O_NONE, O_NONE, P_strz|P_seg }, + /* 0115 */ { UD_Icmpsw, O_NONE, O_NONE, O_NONE, O_NONE, P_strz|P_oso|P_rexw|P_seg }, + /* 0116 */ { UD_Icmpsd, O_NONE, O_NONE, O_NONE, O_NONE, P_strz|P_oso|P_rexw|P_seg }, + /* 0117 */ { UD_Icmpsd, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0118 */ { UD_Ivcmpsd, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0119 */ { UD_Icmpsq, O_NONE, O_NONE, O_NONE, O_NONE, P_strz|P_oso|P_rexw|P_seg }, + /* 0120 */ { UD_Icmpss, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0121 */ { UD_Ivcmpss, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0122 */ { UD_Icmpxchg, O_Eb, O_Gb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0123 */ { UD_Icmpxchg, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0124 */ { UD_Icmpxchg8b, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0125 */ { UD_Icmpxchg8b, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0126 */ { UD_Icmpxchg16b, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0127 */ { UD_Icomisd, O_Vsd, O_Wsd, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0128 */ { UD_Ivcomisd, O_Vsd, O_Wsd, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0129 */ { UD_Icomiss, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0130 */ { UD_Ivcomiss, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0131 */ { UD_Icpuid, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0132 */ { UD_Icvtdq2pd, O_V, O_Wdq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0133 */ { UD_Ivcvtdq2pd, O_Vx, O_Wdq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0134 */ { UD_Icvtdq2ps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0135 */ { UD_Ivcvtdq2ps, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0136 */ { UD_Icvtpd2dq, O_Vdq, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0137 */ { UD_Ivcvtpd2dq, O_Vdq, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0138 */ { UD_Icvtpd2pi, O_P, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0139 */ { UD_Icvtpd2ps, O_Vdq, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0140 */ { UD_Ivcvtpd2ps, O_Vdq, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0141 */ { UD_Icvtpi2ps, O_V, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0142 */ { UD_Icvtpi2pd, O_V, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0143 */ { UD_Icvtps2dq, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0144 */ { UD_Ivcvtps2dq, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0145 */ { UD_Icvtps2pd, O_V, O_Wdq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0146 */ { UD_Ivcvtps2pd, O_Vx, O_Wdq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0147 */ { UD_Icvtps2pi, O_P, O_MqU, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0148 */ { UD_Icvtsd2si, O_Gy, O_MqU, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0149 */ { UD_Ivcvtsd2si, O_Gy, O_MqU, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0150 */ { UD_Icvtsd2ss, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0151 */ { UD_Ivcvtsd2ss, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0152 */ { UD_Icvtsi2sd, O_V, O_Ey, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0153 */ { UD_Ivcvtsi2sd, O_Vx, O_Hx, O_Ey, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0154 */ { UD_Icvtsi2ss, O_V, O_Ey, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0155 */ { UD_Ivcvtsi2ss, O_Vx, O_Hx, O_Ey, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0156 */ { UD_Icvtss2sd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0157 */ { UD_Ivcvtss2sd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0158 */ { UD_Icvtss2si, O_Gy, O_MdU, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0159 */ { UD_Ivcvtss2si, O_Gy, O_MdU, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0160 */ { UD_Icvttpd2dq, O_Vdq, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0161 */ { UD_Ivcvttpd2dq, O_Vdq, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0162 */ { UD_Icvttpd2pi, O_P, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0163 */ { UD_Icvttps2dq, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0164 */ { UD_Ivcvttps2dq, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0165 */ { UD_Icvttps2pi, O_P, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0166 */ { UD_Icvttsd2si, O_Gy, O_MqU, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0167 */ { UD_Ivcvttsd2si, O_Gy, O_MqU, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0168 */ { UD_Icvttss2si, O_Gy, O_MdU, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0169 */ { UD_Ivcvttss2si, O_Gy, O_MdU, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0170 */ { UD_Icwd, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0171 */ { UD_Icdq, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0172 */ { UD_Icqo, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0173 */ { UD_Idaa, O_NONE, O_NONE, O_NONE, O_NONE, P_inv64 }, + /* 0174 */ { UD_Idas, O_NONE, O_NONE, O_NONE, O_NONE, P_inv64 }, + /* 0175 */ { UD_Idec, O_R0z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0176 */ { UD_Idec, O_R1z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0177 */ { UD_Idec, O_R2z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0178 */ { UD_Idec, O_R3z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0179 */ { UD_Idec, O_R4z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0180 */ { UD_Idec, O_R5z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0181 */ { UD_Idec, O_R6z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0182 */ { UD_Idec, O_R7z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0183 */ { UD_Idec, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0184 */ { UD_Idec, O_Ev, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0185 */ { UD_Idiv, O_Ev, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0186 */ { UD_Idiv, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0187 */ { UD_Idivpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0188 */ { UD_Ivdivpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0189 */ { UD_Idivps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0190 */ { UD_Ivdivps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0191 */ { UD_Idivsd, O_V, O_MqU, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0192 */ { UD_Ivdivsd, O_Vx, O_Hx, O_MqU, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0193 */ { UD_Idivss, O_V, O_MdU, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0194 */ { UD_Ivdivss, O_Vx, O_Hx, O_MdU, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0195 */ { UD_Idppd, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0196 */ { UD_Ivdppd, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0197 */ { UD_Idpps, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0198 */ { UD_Ivdpps, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0199 */ { UD_Iemms, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0200 */ { UD_Ienter, O_Iw, O_Ib, O_NONE, O_NONE, P_def64 }, + /* 0201 */ { UD_Iextractps, O_MdRy, O_V, O_Ib, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0202 */ { UD_Ivextractps, O_MdRy, O_Vx, O_Ib, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 0203 */ { UD_If2xm1, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0204 */ { UD_Ifabs, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0205 */ { UD_Ifadd, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0206 */ { UD_Ifadd, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0207 */ { UD_Ifadd, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0208 */ { UD_Ifadd, O_ST1, O_ST0, O_NONE, O_NONE, P_none }, + /* 0209 */ { UD_Ifadd, O_ST2, O_ST0, O_NONE, O_NONE, P_none }, + /* 0210 */ { UD_Ifadd, O_ST3, O_ST0, O_NONE, O_NONE, P_none }, + /* 0211 */ { UD_Ifadd, O_ST4, O_ST0, O_NONE, O_NONE, P_none }, + /* 0212 */ { UD_Ifadd, O_ST5, O_ST0, O_NONE, O_NONE, P_none }, + /* 0213 */ { UD_Ifadd, O_ST6, O_ST0, O_NONE, O_NONE, P_none }, + /* 0214 */ { UD_Ifadd, O_ST7, O_ST0, O_NONE, O_NONE, P_none }, + /* 0215 */ { UD_Ifadd, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0216 */ { UD_Ifadd, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0217 */ { UD_Ifadd, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0218 */ { UD_Ifadd, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0219 */ { UD_Ifadd, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0220 */ { UD_Ifadd, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0221 */ { UD_Ifadd, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0222 */ { UD_Ifadd, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0223 */ { UD_Ifaddp, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0224 */ { UD_Ifaddp, O_ST1, O_ST0, O_NONE, O_NONE, P_none }, + /* 0225 */ { UD_Ifaddp, O_ST2, O_ST0, O_NONE, O_NONE, P_none }, + /* 0226 */ { UD_Ifaddp, O_ST3, O_ST0, O_NONE, O_NONE, P_none }, + /* 0227 */ { UD_Ifaddp, O_ST4, O_ST0, O_NONE, O_NONE, P_none }, + /* 0228 */ { UD_Ifaddp, O_ST5, O_ST0, O_NONE, O_NONE, P_none }, + /* 0229 */ { UD_Ifaddp, O_ST6, O_ST0, O_NONE, O_NONE, P_none }, + /* 0230 */ { UD_Ifaddp, O_ST7, O_ST0, O_NONE, O_NONE, P_none }, + /* 0231 */ { UD_Ifbld, O_Mt, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0232 */ { UD_Ifbstp, O_Mt, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0233 */ { UD_Ifchs, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0234 */ { UD_Ifclex, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0235 */ { UD_Ifcmovb, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0236 */ { UD_Ifcmovb, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0237 */ { UD_Ifcmovb, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0238 */ { UD_Ifcmovb, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0239 */ { UD_Ifcmovb, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0240 */ { UD_Ifcmovb, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0241 */ { UD_Ifcmovb, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0242 */ { UD_Ifcmovb, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0243 */ { UD_Ifcmove, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0244 */ { UD_Ifcmove, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0245 */ { UD_Ifcmove, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0246 */ { UD_Ifcmove, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0247 */ { UD_Ifcmove, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0248 */ { UD_Ifcmove, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0249 */ { UD_Ifcmove, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0250 */ { UD_Ifcmove, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0251 */ { UD_Ifcmovbe, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0252 */ { UD_Ifcmovbe, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0253 */ { UD_Ifcmovbe, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0254 */ { UD_Ifcmovbe, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0255 */ { UD_Ifcmovbe, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0256 */ { UD_Ifcmovbe, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0257 */ { UD_Ifcmovbe, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0258 */ { UD_Ifcmovbe, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0259 */ { UD_Ifcmovu, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0260 */ { UD_Ifcmovu, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0261 */ { UD_Ifcmovu, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0262 */ { UD_Ifcmovu, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0263 */ { UD_Ifcmovu, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0264 */ { UD_Ifcmovu, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0265 */ { UD_Ifcmovu, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0266 */ { UD_Ifcmovu, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0267 */ { UD_Ifcmovnb, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0268 */ { UD_Ifcmovnb, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0269 */ { UD_Ifcmovnb, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0270 */ { UD_Ifcmovnb, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0271 */ { UD_Ifcmovnb, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0272 */ { UD_Ifcmovnb, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0273 */ { UD_Ifcmovnb, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0274 */ { UD_Ifcmovnb, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0275 */ { UD_Ifcmovne, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0276 */ { UD_Ifcmovne, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0277 */ { UD_Ifcmovne, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0278 */ { UD_Ifcmovne, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0279 */ { UD_Ifcmovne, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0280 */ { UD_Ifcmovne, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0281 */ { UD_Ifcmovne, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0282 */ { UD_Ifcmovne, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0283 */ { UD_Ifcmovnbe, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0284 */ { UD_Ifcmovnbe, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0285 */ { UD_Ifcmovnbe, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0286 */ { UD_Ifcmovnbe, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0287 */ { UD_Ifcmovnbe, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0288 */ { UD_Ifcmovnbe, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0289 */ { UD_Ifcmovnbe, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0290 */ { UD_Ifcmovnbe, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0291 */ { UD_Ifcmovnu, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0292 */ { UD_Ifcmovnu, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0293 */ { UD_Ifcmovnu, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0294 */ { UD_Ifcmovnu, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0295 */ { UD_Ifcmovnu, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0296 */ { UD_Ifcmovnu, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0297 */ { UD_Ifcmovnu, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0298 */ { UD_Ifcmovnu, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0299 */ { UD_Ifucomi, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0300 */ { UD_Ifucomi, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0301 */ { UD_Ifucomi, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0302 */ { UD_Ifucomi, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0303 */ { UD_Ifucomi, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0304 */ { UD_Ifucomi, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0305 */ { UD_Ifucomi, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0306 */ { UD_Ifucomi, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0307 */ { UD_Ifcom, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0308 */ { UD_Ifcom, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0309 */ { UD_Ifcom, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0310 */ { UD_Ifcom, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0311 */ { UD_Ifcom, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0312 */ { UD_Ifcom, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0313 */ { UD_Ifcom, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0314 */ { UD_Ifcom, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0315 */ { UD_Ifcom, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0316 */ { UD_Ifcom, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0317 */ { UD_Ifcom2, O_ST0, O_NONE, O_NONE, O_NONE, P_none }, + /* 0318 */ { UD_Ifcom2, O_ST1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0319 */ { UD_Ifcom2, O_ST2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0320 */ { UD_Ifcom2, O_ST3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0321 */ { UD_Ifcom2, O_ST4, O_NONE, O_NONE, O_NONE, P_none }, + /* 0322 */ { UD_Ifcom2, O_ST5, O_NONE, O_NONE, O_NONE, P_none }, + /* 0323 */ { UD_Ifcom2, O_ST6, O_NONE, O_NONE, O_NONE, P_none }, + /* 0324 */ { UD_Ifcom2, O_ST7, O_NONE, O_NONE, O_NONE, P_none }, + /* 0325 */ { UD_Ifcomp3, O_ST0, O_NONE, O_NONE, O_NONE, P_none }, + /* 0326 */ { UD_Ifcomp3, O_ST1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0327 */ { UD_Ifcomp3, O_ST2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0328 */ { UD_Ifcomp3, O_ST3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0329 */ { UD_Ifcomp3, O_ST4, O_NONE, O_NONE, O_NONE, P_none }, + /* 0330 */ { UD_Ifcomp3, O_ST5, O_NONE, O_NONE, O_NONE, P_none }, + /* 0331 */ { UD_Ifcomp3, O_ST6, O_NONE, O_NONE, O_NONE, P_none }, + /* 0332 */ { UD_Ifcomp3, O_ST7, O_NONE, O_NONE, O_NONE, P_none }, + /* 0333 */ { UD_Ifcomi, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0334 */ { UD_Ifcomi, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0335 */ { UD_Ifcomi, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0336 */ { UD_Ifcomi, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0337 */ { UD_Ifcomi, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0338 */ { UD_Ifcomi, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0339 */ { UD_Ifcomi, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0340 */ { UD_Ifcomi, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0341 */ { UD_Ifucomip, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0342 */ { UD_Ifucomip, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0343 */ { UD_Ifucomip, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0344 */ { UD_Ifucomip, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0345 */ { UD_Ifucomip, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0346 */ { UD_Ifucomip, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0347 */ { UD_Ifucomip, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0348 */ { UD_Ifucomip, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0349 */ { UD_Ifcomip, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0350 */ { UD_Ifcomip, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0351 */ { UD_Ifcomip, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0352 */ { UD_Ifcomip, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0353 */ { UD_Ifcomip, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0354 */ { UD_Ifcomip, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0355 */ { UD_Ifcomip, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0356 */ { UD_Ifcomip, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0357 */ { UD_Ifcomp, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0358 */ { UD_Ifcomp, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0359 */ { UD_Ifcomp, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0360 */ { UD_Ifcomp, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0361 */ { UD_Ifcomp, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0362 */ { UD_Ifcomp, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0363 */ { UD_Ifcomp, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0364 */ { UD_Ifcomp, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0365 */ { UD_Ifcomp, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0366 */ { UD_Ifcomp, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0367 */ { UD_Ifcomp5, O_ST0, O_NONE, O_NONE, O_NONE, P_none }, + /* 0368 */ { UD_Ifcomp5, O_ST1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0369 */ { UD_Ifcomp5, O_ST2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0370 */ { UD_Ifcomp5, O_ST3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0371 */ { UD_Ifcomp5, O_ST4, O_NONE, O_NONE, O_NONE, P_none }, + /* 0372 */ { UD_Ifcomp5, O_ST5, O_NONE, O_NONE, O_NONE, P_none }, + /* 0373 */ { UD_Ifcomp5, O_ST6, O_NONE, O_NONE, O_NONE, P_none }, + /* 0374 */ { UD_Ifcomp5, O_ST7, O_NONE, O_NONE, O_NONE, P_none }, + /* 0375 */ { UD_Ifcompp, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0376 */ { UD_Ifcos, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0377 */ { UD_Ifdecstp, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0378 */ { UD_Ifdiv, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0379 */ { UD_Ifdiv, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0380 */ { UD_Ifdiv, O_ST1, O_ST0, O_NONE, O_NONE, P_none }, + /* 0381 */ { UD_Ifdiv, O_ST2, O_ST0, O_NONE, O_NONE, P_none }, + /* 0382 */ { UD_Ifdiv, O_ST3, O_ST0, O_NONE, O_NONE, P_none }, + /* 0383 */ { UD_Ifdiv, O_ST4, O_ST0, O_NONE, O_NONE, P_none }, + /* 0384 */ { UD_Ifdiv, O_ST5, O_ST0, O_NONE, O_NONE, P_none }, + /* 0385 */ { UD_Ifdiv, O_ST6, O_ST0, O_NONE, O_NONE, P_none }, + /* 0386 */ { UD_Ifdiv, O_ST7, O_ST0, O_NONE, O_NONE, P_none }, + /* 0387 */ { UD_Ifdiv, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0388 */ { UD_Ifdiv, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0389 */ { UD_Ifdiv, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0390 */ { UD_Ifdiv, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0391 */ { UD_Ifdiv, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0392 */ { UD_Ifdiv, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0393 */ { UD_Ifdiv, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0394 */ { UD_Ifdiv, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0395 */ { UD_Ifdiv, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0396 */ { UD_Ifdivp, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0397 */ { UD_Ifdivp, O_ST1, O_ST0, O_NONE, O_NONE, P_none }, + /* 0398 */ { UD_Ifdivp, O_ST2, O_ST0, O_NONE, O_NONE, P_none }, + /* 0399 */ { UD_Ifdivp, O_ST3, O_ST0, O_NONE, O_NONE, P_none }, + /* 0400 */ { UD_Ifdivp, O_ST4, O_ST0, O_NONE, O_NONE, P_none }, + /* 0401 */ { UD_Ifdivp, O_ST5, O_ST0, O_NONE, O_NONE, P_none }, + /* 0402 */ { UD_Ifdivp, O_ST6, O_ST0, O_NONE, O_NONE, P_none }, + /* 0403 */ { UD_Ifdivp, O_ST7, O_ST0, O_NONE, O_NONE, P_none }, + /* 0404 */ { UD_Ifdivr, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0405 */ { UD_Ifdivr, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0406 */ { UD_Ifdivr, O_ST1, O_ST0, O_NONE, O_NONE, P_none }, + /* 0407 */ { UD_Ifdivr, O_ST2, O_ST0, O_NONE, O_NONE, P_none }, + /* 0408 */ { UD_Ifdivr, O_ST3, O_ST0, O_NONE, O_NONE, P_none }, + /* 0409 */ { UD_Ifdivr, O_ST4, O_ST0, O_NONE, O_NONE, P_none }, + /* 0410 */ { UD_Ifdivr, O_ST5, O_ST0, O_NONE, O_NONE, P_none }, + /* 0411 */ { UD_Ifdivr, O_ST6, O_ST0, O_NONE, O_NONE, P_none }, + /* 0412 */ { UD_Ifdivr, O_ST7, O_ST0, O_NONE, O_NONE, P_none }, + /* 0413 */ { UD_Ifdivr, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0414 */ { UD_Ifdivr, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0415 */ { UD_Ifdivr, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0416 */ { UD_Ifdivr, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0417 */ { UD_Ifdivr, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0418 */ { UD_Ifdivr, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0419 */ { UD_Ifdivr, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0420 */ { UD_Ifdivr, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0421 */ { UD_Ifdivr, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0422 */ { UD_Ifdivrp, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0423 */ { UD_Ifdivrp, O_ST1, O_ST0, O_NONE, O_NONE, P_none }, + /* 0424 */ { UD_Ifdivrp, O_ST2, O_ST0, O_NONE, O_NONE, P_none }, + /* 0425 */ { UD_Ifdivrp, O_ST3, O_ST0, O_NONE, O_NONE, P_none }, + /* 0426 */ { UD_Ifdivrp, O_ST4, O_ST0, O_NONE, O_NONE, P_none }, + /* 0427 */ { UD_Ifdivrp, O_ST5, O_ST0, O_NONE, O_NONE, P_none }, + /* 0428 */ { UD_Ifdivrp, O_ST6, O_ST0, O_NONE, O_NONE, P_none }, + /* 0429 */ { UD_Ifdivrp, O_ST7, O_ST0, O_NONE, O_NONE, P_none }, + /* 0430 */ { UD_Ifemms, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0431 */ { UD_Iffree, O_ST0, O_NONE, O_NONE, O_NONE, P_none }, + /* 0432 */ { UD_Iffree, O_ST1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0433 */ { UD_Iffree, O_ST2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0434 */ { UD_Iffree, O_ST3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0435 */ { UD_Iffree, O_ST4, O_NONE, O_NONE, O_NONE, P_none }, + /* 0436 */ { UD_Iffree, O_ST5, O_NONE, O_NONE, O_NONE, P_none }, + /* 0437 */ { UD_Iffree, O_ST6, O_NONE, O_NONE, O_NONE, P_none }, + /* 0438 */ { UD_Iffree, O_ST7, O_NONE, O_NONE, O_NONE, P_none }, + /* 0439 */ { UD_Iffreep, O_ST0, O_NONE, O_NONE, O_NONE, P_none }, + /* 0440 */ { UD_Iffreep, O_ST1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0441 */ { UD_Iffreep, O_ST2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0442 */ { UD_Iffreep, O_ST3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0443 */ { UD_Iffreep, O_ST4, O_NONE, O_NONE, O_NONE, P_none }, + /* 0444 */ { UD_Iffreep, O_ST5, O_NONE, O_NONE, O_NONE, P_none }, + /* 0445 */ { UD_Iffreep, O_ST6, O_NONE, O_NONE, O_NONE, P_none }, + /* 0446 */ { UD_Iffreep, O_ST7, O_NONE, O_NONE, O_NONE, P_none }, + /* 0447 */ { UD_Ificom, O_Mw, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0448 */ { UD_Ificom, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0449 */ { UD_Ificomp, O_Mw, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0450 */ { UD_Ificomp, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0451 */ { UD_Ifild, O_Mw, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0452 */ { UD_Ifild, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0453 */ { UD_Ifild, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0454 */ { UD_Ifincstp, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0455 */ { UD_Ifninit, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0456 */ { UD_Ifiadd, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0457 */ { UD_Ifiadd, O_Mw, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0458 */ { UD_Ifidivr, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0459 */ { UD_Ifidivr, O_Mw, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0460 */ { UD_Ifidiv, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0461 */ { UD_Ifidiv, O_Mw, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0462 */ { UD_Ifisub, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0463 */ { UD_Ifisub, O_Mw, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0464 */ { UD_Ifisubr, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0465 */ { UD_Ifisubr, O_Mw, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0466 */ { UD_Ifist, O_Mw, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0467 */ { UD_Ifist, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0468 */ { UD_Ifistp, O_Mw, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0469 */ { UD_Ifistp, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0470 */ { UD_Ifistp, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0471 */ { UD_Ifisttp, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0472 */ { UD_Ifisttp, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0473 */ { UD_Ifisttp, O_Mw, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0474 */ { UD_Ifld, O_Mt, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0475 */ { UD_Ifld, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0476 */ { UD_Ifld, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0477 */ { UD_Ifld, O_ST0, O_NONE, O_NONE, O_NONE, P_none }, + /* 0478 */ { UD_Ifld, O_ST1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0479 */ { UD_Ifld, O_ST2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0480 */ { UD_Ifld, O_ST3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0481 */ { UD_Ifld, O_ST4, O_NONE, O_NONE, O_NONE, P_none }, + /* 0482 */ { UD_Ifld, O_ST5, O_NONE, O_NONE, O_NONE, P_none }, + /* 0483 */ { UD_Ifld, O_ST6, O_NONE, O_NONE, O_NONE, P_none }, + /* 0484 */ { UD_Ifld, O_ST7, O_NONE, O_NONE, O_NONE, P_none }, + /* 0485 */ { UD_Ifld1, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0486 */ { UD_Ifldl2t, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0487 */ { UD_Ifldl2e, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0488 */ { UD_Ifldpi, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0489 */ { UD_Ifldlg2, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0490 */ { UD_Ifldln2, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0491 */ { UD_Ifldz, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0492 */ { UD_Ifldcw, O_Mw, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0493 */ { UD_Ifldenv, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0494 */ { UD_Ifmul, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0495 */ { UD_Ifmul, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0496 */ { UD_Ifmul, O_ST1, O_ST0, O_NONE, O_NONE, P_none }, + /* 0497 */ { UD_Ifmul, O_ST2, O_ST0, O_NONE, O_NONE, P_none }, + /* 0498 */ { UD_Ifmul, O_ST3, O_ST0, O_NONE, O_NONE, P_none }, + /* 0499 */ { UD_Ifmul, O_ST4, O_ST0, O_NONE, O_NONE, P_none }, + /* 0500 */ { UD_Ifmul, O_ST5, O_ST0, O_NONE, O_NONE, P_none }, + /* 0501 */ { UD_Ifmul, O_ST6, O_ST0, O_NONE, O_NONE, P_none }, + /* 0502 */ { UD_Ifmul, O_ST7, O_ST0, O_NONE, O_NONE, P_none }, + /* 0503 */ { UD_Ifmul, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0504 */ { UD_Ifmul, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0505 */ { UD_Ifmul, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0506 */ { UD_Ifmul, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0507 */ { UD_Ifmul, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0508 */ { UD_Ifmul, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0509 */ { UD_Ifmul, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0510 */ { UD_Ifmul, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0511 */ { UD_Ifmul, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0512 */ { UD_Ifmulp, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0513 */ { UD_Ifmulp, O_ST1, O_ST0, O_NONE, O_NONE, P_none }, + /* 0514 */ { UD_Ifmulp, O_ST2, O_ST0, O_NONE, O_NONE, P_none }, + /* 0515 */ { UD_Ifmulp, O_ST3, O_ST0, O_NONE, O_NONE, P_none }, + /* 0516 */ { UD_Ifmulp, O_ST4, O_ST0, O_NONE, O_NONE, P_none }, + /* 0517 */ { UD_Ifmulp, O_ST5, O_ST0, O_NONE, O_NONE, P_none }, + /* 0518 */ { UD_Ifmulp, O_ST6, O_ST0, O_NONE, O_NONE, P_none }, + /* 0519 */ { UD_Ifmulp, O_ST7, O_ST0, O_NONE, O_NONE, P_none }, + /* 0520 */ { UD_Ifimul, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0521 */ { UD_Ifimul, O_Mw, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0522 */ { UD_Ifnop, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0523 */ { UD_Ifndisi, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0524 */ { UD_Ifneni, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0525 */ { UD_Ifnsetpm, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0526 */ { UD_Ifpatan, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0527 */ { UD_Ifprem, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0528 */ { UD_Ifprem1, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0529 */ { UD_Ifptan, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0530 */ { UD_Ifrndint, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0531 */ { UD_Ifrstor, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0532 */ { UD_Ifrstpm, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0533 */ { UD_Ifnsave, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0534 */ { UD_Ifscale, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0535 */ { UD_Ifsin, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0536 */ { UD_Ifsincos, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0537 */ { UD_Ifsqrt, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0538 */ { UD_Ifstp, O_Mt, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0539 */ { UD_Ifstp, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0540 */ { UD_Ifstp, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0541 */ { UD_Ifstp, O_ST0, O_NONE, O_NONE, O_NONE, P_none }, + /* 0542 */ { UD_Ifstp, O_ST1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0543 */ { UD_Ifstp, O_ST2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0544 */ { UD_Ifstp, O_ST3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0545 */ { UD_Ifstp, O_ST4, O_NONE, O_NONE, O_NONE, P_none }, + /* 0546 */ { UD_Ifstp, O_ST5, O_NONE, O_NONE, O_NONE, P_none }, + /* 0547 */ { UD_Ifstp, O_ST6, O_NONE, O_NONE, O_NONE, P_none }, + /* 0548 */ { UD_Ifstp, O_ST7, O_NONE, O_NONE, O_NONE, P_none }, + /* 0549 */ { UD_Ifstp1, O_ST0, O_NONE, O_NONE, O_NONE, P_none }, + /* 0550 */ { UD_Ifstp1, O_ST1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0551 */ { UD_Ifstp1, O_ST2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0552 */ { UD_Ifstp1, O_ST3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0553 */ { UD_Ifstp1, O_ST4, O_NONE, O_NONE, O_NONE, P_none }, + /* 0554 */ { UD_Ifstp1, O_ST5, O_NONE, O_NONE, O_NONE, P_none }, + /* 0555 */ { UD_Ifstp1, O_ST6, O_NONE, O_NONE, O_NONE, P_none }, + /* 0556 */ { UD_Ifstp1, O_ST7, O_NONE, O_NONE, O_NONE, P_none }, + /* 0557 */ { UD_Ifstp8, O_ST0, O_NONE, O_NONE, O_NONE, P_none }, + /* 0558 */ { UD_Ifstp8, O_ST1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0559 */ { UD_Ifstp8, O_ST2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0560 */ { UD_Ifstp8, O_ST3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0561 */ { UD_Ifstp8, O_ST4, O_NONE, O_NONE, O_NONE, P_none }, + /* 0562 */ { UD_Ifstp8, O_ST5, O_NONE, O_NONE, O_NONE, P_none }, + /* 0563 */ { UD_Ifstp8, O_ST6, O_NONE, O_NONE, O_NONE, P_none }, + /* 0564 */ { UD_Ifstp8, O_ST7, O_NONE, O_NONE, O_NONE, P_none }, + /* 0565 */ { UD_Ifstp9, O_ST0, O_NONE, O_NONE, O_NONE, P_none }, + /* 0566 */ { UD_Ifstp9, O_ST1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0567 */ { UD_Ifstp9, O_ST2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0568 */ { UD_Ifstp9, O_ST3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0569 */ { UD_Ifstp9, O_ST4, O_NONE, O_NONE, O_NONE, P_none }, + /* 0570 */ { UD_Ifstp9, O_ST5, O_NONE, O_NONE, O_NONE, P_none }, + /* 0571 */ { UD_Ifstp9, O_ST6, O_NONE, O_NONE, O_NONE, P_none }, + /* 0572 */ { UD_Ifstp9, O_ST7, O_NONE, O_NONE, O_NONE, P_none }, + /* 0573 */ { UD_Ifst, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0574 */ { UD_Ifst, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0575 */ { UD_Ifst, O_ST0, O_NONE, O_NONE, O_NONE, P_none }, + /* 0576 */ { UD_Ifst, O_ST1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0577 */ { UD_Ifst, O_ST2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0578 */ { UD_Ifst, O_ST3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0579 */ { UD_Ifst, O_ST4, O_NONE, O_NONE, O_NONE, P_none }, + /* 0580 */ { UD_Ifst, O_ST5, O_NONE, O_NONE, O_NONE, P_none }, + /* 0581 */ { UD_Ifst, O_ST6, O_NONE, O_NONE, O_NONE, P_none }, + /* 0582 */ { UD_Ifst, O_ST7, O_NONE, O_NONE, O_NONE, P_none }, + /* 0583 */ { UD_Ifnstcw, O_Mw, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0584 */ { UD_Ifnstenv, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0585 */ { UD_Ifnstsw, O_Mw, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0586 */ { UD_Ifnstsw, O_AX, O_NONE, O_NONE, O_NONE, P_none }, + /* 0587 */ { UD_Ifsub, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0588 */ { UD_Ifsub, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0589 */ { UD_Ifsub, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0590 */ { UD_Ifsub, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0591 */ { UD_Ifsub, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0592 */ { UD_Ifsub, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0593 */ { UD_Ifsub, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0594 */ { UD_Ifsub, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0595 */ { UD_Ifsub, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0596 */ { UD_Ifsub, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0597 */ { UD_Ifsub, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0598 */ { UD_Ifsub, O_ST1, O_ST0, O_NONE, O_NONE, P_none }, + /* 0599 */ { UD_Ifsub, O_ST2, O_ST0, O_NONE, O_NONE, P_none }, + /* 0600 */ { UD_Ifsub, O_ST3, O_ST0, O_NONE, O_NONE, P_none }, + /* 0601 */ { UD_Ifsub, O_ST4, O_ST0, O_NONE, O_NONE, P_none }, + /* 0602 */ { UD_Ifsub, O_ST5, O_ST0, O_NONE, O_NONE, P_none }, + /* 0603 */ { UD_Ifsub, O_ST6, O_ST0, O_NONE, O_NONE, P_none }, + /* 0604 */ { UD_Ifsub, O_ST7, O_ST0, O_NONE, O_NONE, P_none }, + /* 0605 */ { UD_Ifsubp, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0606 */ { UD_Ifsubp, O_ST1, O_ST0, O_NONE, O_NONE, P_none }, + /* 0607 */ { UD_Ifsubp, O_ST2, O_ST0, O_NONE, O_NONE, P_none }, + /* 0608 */ { UD_Ifsubp, O_ST3, O_ST0, O_NONE, O_NONE, P_none }, + /* 0609 */ { UD_Ifsubp, O_ST4, O_ST0, O_NONE, O_NONE, P_none }, + /* 0610 */ { UD_Ifsubp, O_ST5, O_ST0, O_NONE, O_NONE, P_none }, + /* 0611 */ { UD_Ifsubp, O_ST6, O_ST0, O_NONE, O_NONE, P_none }, + /* 0612 */ { UD_Ifsubp, O_ST7, O_ST0, O_NONE, O_NONE, P_none }, + /* 0613 */ { UD_Ifsubr, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0614 */ { UD_Ifsubr, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0615 */ { UD_Ifsubr, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0616 */ { UD_Ifsubr, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0617 */ { UD_Ifsubr, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0618 */ { UD_Ifsubr, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0619 */ { UD_Ifsubr, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0620 */ { UD_Ifsubr, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0621 */ { UD_Ifsubr, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0622 */ { UD_Ifsubr, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0623 */ { UD_Ifsubr, O_ST1, O_ST0, O_NONE, O_NONE, P_none }, + /* 0624 */ { UD_Ifsubr, O_ST2, O_ST0, O_NONE, O_NONE, P_none }, + /* 0625 */ { UD_Ifsubr, O_ST3, O_ST0, O_NONE, O_NONE, P_none }, + /* 0626 */ { UD_Ifsubr, O_ST4, O_ST0, O_NONE, O_NONE, P_none }, + /* 0627 */ { UD_Ifsubr, O_ST5, O_ST0, O_NONE, O_NONE, P_none }, + /* 0628 */ { UD_Ifsubr, O_ST6, O_ST0, O_NONE, O_NONE, P_none }, + /* 0629 */ { UD_Ifsubr, O_ST7, O_ST0, O_NONE, O_NONE, P_none }, + /* 0630 */ { UD_Ifsubr, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0631 */ { UD_Ifsubrp, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0632 */ { UD_Ifsubrp, O_ST1, O_ST0, O_NONE, O_NONE, P_none }, + /* 0633 */ { UD_Ifsubrp, O_ST2, O_ST0, O_NONE, O_NONE, P_none }, + /* 0634 */ { UD_Ifsubrp, O_ST3, O_ST0, O_NONE, O_NONE, P_none }, + /* 0635 */ { UD_Ifsubrp, O_ST4, O_ST0, O_NONE, O_NONE, P_none }, + /* 0636 */ { UD_Ifsubrp, O_ST5, O_ST0, O_NONE, O_NONE, P_none }, + /* 0637 */ { UD_Ifsubrp, O_ST6, O_ST0, O_NONE, O_NONE, P_none }, + /* 0638 */ { UD_Ifsubrp, O_ST7, O_ST0, O_NONE, O_NONE, P_none }, + /* 0639 */ { UD_Iftst, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0640 */ { UD_Ifucom, O_ST0, O_NONE, O_NONE, O_NONE, P_none }, + /* 0641 */ { UD_Ifucom, O_ST1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0642 */ { UD_Ifucom, O_ST2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0643 */ { UD_Ifucom, O_ST3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0644 */ { UD_Ifucom, O_ST4, O_NONE, O_NONE, O_NONE, P_none }, + /* 0645 */ { UD_Ifucom, O_ST5, O_NONE, O_NONE, O_NONE, P_none }, + /* 0646 */ { UD_Ifucom, O_ST6, O_NONE, O_NONE, O_NONE, P_none }, + /* 0647 */ { UD_Ifucom, O_ST7, O_NONE, O_NONE, O_NONE, P_none }, + /* 0648 */ { UD_Ifucomp, O_ST0, O_NONE, O_NONE, O_NONE, P_none }, + /* 0649 */ { UD_Ifucomp, O_ST1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0650 */ { UD_Ifucomp, O_ST2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0651 */ { UD_Ifucomp, O_ST3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0652 */ { UD_Ifucomp, O_ST4, O_NONE, O_NONE, O_NONE, P_none }, + /* 0653 */ { UD_Ifucomp, O_ST5, O_NONE, O_NONE, O_NONE, P_none }, + /* 0654 */ { UD_Ifucomp, O_ST6, O_NONE, O_NONE, O_NONE, P_none }, + /* 0655 */ { UD_Ifucomp, O_ST7, O_NONE, O_NONE, O_NONE, P_none }, + /* 0656 */ { UD_Ifucompp, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0657 */ { UD_Ifxam, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0658 */ { UD_Ifxch, O_ST0, O_ST0, O_NONE, O_NONE, P_none }, + /* 0659 */ { UD_Ifxch, O_ST0, O_ST1, O_NONE, O_NONE, P_none }, + /* 0660 */ { UD_Ifxch, O_ST0, O_ST2, O_NONE, O_NONE, P_none }, + /* 0661 */ { UD_Ifxch, O_ST0, O_ST3, O_NONE, O_NONE, P_none }, + /* 0662 */ { UD_Ifxch, O_ST0, O_ST4, O_NONE, O_NONE, P_none }, + /* 0663 */ { UD_Ifxch, O_ST0, O_ST5, O_NONE, O_NONE, P_none }, + /* 0664 */ { UD_Ifxch, O_ST0, O_ST6, O_NONE, O_NONE, P_none }, + /* 0665 */ { UD_Ifxch, O_ST0, O_ST7, O_NONE, O_NONE, P_none }, + /* 0666 */ { UD_Ifxch4, O_ST0, O_NONE, O_NONE, O_NONE, P_none }, + /* 0667 */ { UD_Ifxch4, O_ST1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0668 */ { UD_Ifxch4, O_ST2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0669 */ { UD_Ifxch4, O_ST3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0670 */ { UD_Ifxch4, O_ST4, O_NONE, O_NONE, O_NONE, P_none }, + /* 0671 */ { UD_Ifxch4, O_ST5, O_NONE, O_NONE, O_NONE, P_none }, + /* 0672 */ { UD_Ifxch4, O_ST6, O_NONE, O_NONE, O_NONE, P_none }, + /* 0673 */ { UD_Ifxch4, O_ST7, O_NONE, O_NONE, O_NONE, P_none }, + /* 0674 */ { UD_Ifxch7, O_ST0, O_NONE, O_NONE, O_NONE, P_none }, + /* 0675 */ { UD_Ifxch7, O_ST1, O_NONE, O_NONE, O_NONE, P_none }, + /* 0676 */ { UD_Ifxch7, O_ST2, O_NONE, O_NONE, O_NONE, P_none }, + /* 0677 */ { UD_Ifxch7, O_ST3, O_NONE, O_NONE, O_NONE, P_none }, + /* 0678 */ { UD_Ifxch7, O_ST4, O_NONE, O_NONE, O_NONE, P_none }, + /* 0679 */ { UD_Ifxch7, O_ST5, O_NONE, O_NONE, O_NONE, P_none }, + /* 0680 */ { UD_Ifxch7, O_ST6, O_NONE, O_NONE, O_NONE, P_none }, + /* 0681 */ { UD_Ifxch7, O_ST7, O_NONE, O_NONE, O_NONE, P_none }, + /* 0682 */ { UD_Ifxrstor, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0683 */ { UD_Ifxsave, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0684 */ { UD_Ifxtract, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0685 */ { UD_Ifyl2x, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0686 */ { UD_Ifyl2xp1, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0687 */ { UD_Ihlt, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0688 */ { UD_Iidiv, O_Ev, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0689 */ { UD_Iidiv, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0690 */ { UD_Iin, O_AL, O_Ib, O_NONE, O_NONE, P_none }, + /* 0691 */ { UD_Iin, O_eAX, O_Ib, O_NONE, O_NONE, P_oso }, + /* 0692 */ { UD_Iin, O_AL, O_DX, O_NONE, O_NONE, P_none }, + /* 0693 */ { UD_Iin, O_eAX, O_DX, O_NONE, O_NONE, P_oso }, + /* 0694 */ { UD_Iimul, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0695 */ { UD_Iimul, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0696 */ { UD_Iimul, O_Ev, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0697 */ { UD_Iimul, O_Gv, O_Ev, O_Iz, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0698 */ { UD_Iimul, O_Gv, O_Ev, O_sIb, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0699 */ { UD_Iinc, O_R0z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0700 */ { UD_Iinc, O_R1z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0701 */ { UD_Iinc, O_R2z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0702 */ { UD_Iinc, O_R3z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0703 */ { UD_Iinc, O_R4z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0704 */ { UD_Iinc, O_R5z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0705 */ { UD_Iinc, O_R6z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0706 */ { UD_Iinc, O_R7z, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0707 */ { UD_Iinc, O_Ev, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0708 */ { UD_Iinc, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0709 */ { UD_Iinsb, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_seg }, + /* 0710 */ { UD_Iinsw, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_oso|P_seg }, + /* 0711 */ { UD_Iinsd, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_oso|P_seg }, + /* 0712 */ { UD_Iint1, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0713 */ { UD_Iint3, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0714 */ { UD_Iint, O_Ib, O_NONE, O_NONE, O_NONE, P_none }, + /* 0715 */ { UD_Iinto, O_NONE, O_NONE, O_NONE, O_NONE, P_inv64 }, + /* 0716 */ { UD_Iinvd, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0717 */ { UD_Iinvept, O_Gd, O_Mo, O_NONE, O_NONE, P_none }, + /* 0718 */ { UD_Iinvept, O_Gq, O_Mo, O_NONE, O_NONE, P_none }, + /* 0719 */ { UD_Iinvlpg, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0720 */ { UD_Iinvlpga, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0721 */ { UD_Iinvvpid, O_Gd, O_Mo, O_NONE, O_NONE, P_none }, + /* 0722 */ { UD_Iinvvpid, O_Gq, O_Mo, O_NONE, O_NONE, P_none }, + /* 0723 */ { UD_Iiretw, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0724 */ { UD_Iiretd, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0725 */ { UD_Iiretq, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0726 */ { UD_Ijo, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0727 */ { UD_Ijo, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0728 */ { UD_Ijno, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0729 */ { UD_Ijno, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0730 */ { UD_Ijb, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0731 */ { UD_Ijb, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0732 */ { UD_Ijae, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0733 */ { UD_Ijae, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0734 */ { UD_Ijz, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0735 */ { UD_Ijz, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0736 */ { UD_Ijnz, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0737 */ { UD_Ijnz, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0738 */ { UD_Ijbe, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0739 */ { UD_Ijbe, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0740 */ { UD_Ija, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0741 */ { UD_Ija, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0742 */ { UD_Ijs, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0743 */ { UD_Ijs, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0744 */ { UD_Ijns, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0745 */ { UD_Ijns, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0746 */ { UD_Ijp, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0747 */ { UD_Ijp, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0748 */ { UD_Ijnp, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0749 */ { UD_Ijnp, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0750 */ { UD_Ijl, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0751 */ { UD_Ijl, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0752 */ { UD_Ijge, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0753 */ { UD_Ijge, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0754 */ { UD_Ijle, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0755 */ { UD_Ijle, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0756 */ { UD_Ijg, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0757 */ { UD_Ijg, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0758 */ { UD_Ijcxz, O_Jb, O_NONE, O_NONE, O_NONE, P_aso }, + /* 0759 */ { UD_Ijecxz, O_Jb, O_NONE, O_NONE, O_NONE, P_aso }, + /* 0760 */ { UD_Ijrcxz, O_Jb, O_NONE, O_NONE, O_NONE, P_aso }, + /* 0761 */ { UD_Ijmp, O_Ev, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 0762 */ { UD_Ijmp, O_Fv, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0763 */ { UD_Ijmp, O_Jz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 0764 */ { UD_Ijmp, O_Av, O_NONE, O_NONE, O_NONE, P_oso }, + /* 0765 */ { UD_Ijmp, O_Jb, O_NONE, O_NONE, O_NONE, P_def64 }, + /* 0766 */ { UD_Ilahf, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0767 */ { UD_Ilar, O_Gv, O_Ew, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0768 */ { UD_Ildmxcsr, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0769 */ { UD_Ilds, O_Gv, O_M, O_NONE, O_NONE, P_aso|P_oso }, + /* 0770 */ { UD_Ilea, O_Gv, O_M, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0771 */ { UD_Iles, O_Gv, O_M, O_NONE, O_NONE, P_aso|P_oso }, + /* 0772 */ { UD_Ilfs, O_Gz, O_M, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0773 */ { UD_Ilgs, O_Gz, O_M, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0774 */ { UD_Ilidt, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0775 */ { UD_Ilss, O_Gv, O_M, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0776 */ { UD_Ileave, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0777 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0778 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0779 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0780 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0781 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0782 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0783 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0784 */ { UD_Ilfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0785 */ { UD_Ilgdt, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0786 */ { UD_Illdt, O_Ew, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0787 */ { UD_Ilmsw, O_Ew, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0788 */ { UD_Ilmsw, O_Ew, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0789 */ { UD_Ilock, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0790 */ { UD_Ilodsb, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_seg }, + /* 0791 */ { UD_Ilodsw, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 0792 */ { UD_Ilodsd, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 0793 */ { UD_Ilodsq, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 0794 */ { UD_Iloopne, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0795 */ { UD_Iloope, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0796 */ { UD_Iloop, O_Jb, O_NONE, O_NONE, O_NONE, P_none }, + /* 0797 */ { UD_Ilsl, O_Gv, O_Ew, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0798 */ { UD_Iltr, O_Ew, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0799 */ { UD_Imaskmovq, O_P, O_N, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0800 */ { UD_Imaxpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0801 */ { UD_Ivmaxpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0802 */ { UD_Imaxps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0803 */ { UD_Ivmaxps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0804 */ { UD_Imaxsd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0805 */ { UD_Ivmaxsd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0806 */ { UD_Imaxss, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0807 */ { UD_Ivmaxss, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0808 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0809 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0810 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0811 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0812 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0813 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0814 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0815 */ { UD_Imfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0816 */ { UD_Iminpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0817 */ { UD_Ivminpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0818 */ { UD_Iminps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0819 */ { UD_Ivminps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0820 */ { UD_Iminsd, O_V, O_MqU, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0821 */ { UD_Ivminsd, O_Vx, O_Hx, O_MqU, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0822 */ { UD_Iminss, O_V, O_MdU, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0823 */ { UD_Ivminss, O_Vx, O_Hx, O_MdU, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0824 */ { UD_Imonitor, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0825 */ { UD_Imontmul, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0826 */ { UD_Imov, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0827 */ { UD_Imov, O_Ev, O_sIz, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0828 */ { UD_Imov, O_Eb, O_Gb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0829 */ { UD_Imov, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0830 */ { UD_Imov, O_Gb, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0831 */ { UD_Imov, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0832 */ { UD_Imov, O_MwRv, O_S, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0833 */ { UD_Imov, O_S, O_MwRv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0834 */ { UD_Imov, O_AL, O_Ob, O_NONE, O_NONE, P_none }, + /* 0835 */ { UD_Imov, O_rAX, O_Ov, O_NONE, O_NONE, P_aso|P_oso|P_rexw }, + /* 0836 */ { UD_Imov, O_Ob, O_AL, O_NONE, O_NONE, P_none }, + /* 0837 */ { UD_Imov, O_Ov, O_rAX, O_NONE, O_NONE, P_aso|P_oso|P_rexw }, + /* 0838 */ { UD_Imov, O_R0b, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 0839 */ { UD_Imov, O_R1b, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 0840 */ { UD_Imov, O_R2b, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 0841 */ { UD_Imov, O_R3b, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 0842 */ { UD_Imov, O_R4b, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 0843 */ { UD_Imov, O_R5b, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 0844 */ { UD_Imov, O_R6b, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 0845 */ { UD_Imov, O_R7b, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 0846 */ { UD_Imov, O_R0v, O_Iv, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0847 */ { UD_Imov, O_R1v, O_Iv, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0848 */ { UD_Imov, O_R2v, O_Iv, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0849 */ { UD_Imov, O_R3v, O_Iv, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0850 */ { UD_Imov, O_R4v, O_Iv, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0851 */ { UD_Imov, O_R5v, O_Iv, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0852 */ { UD_Imov, O_R6v, O_Iv, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0853 */ { UD_Imov, O_R7v, O_Iv, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 0854 */ { UD_Imov, O_R, O_C, O_NONE, O_NONE, P_rexr|P_rexw|P_rexb }, + /* 0855 */ { UD_Imov, O_R, O_D, O_NONE, O_NONE, P_rexr|P_rexw|P_rexb }, + /* 0856 */ { UD_Imov, O_C, O_R, O_NONE, O_NONE, P_rexr|P_rexw|P_rexb }, + /* 0857 */ { UD_Imov, O_D, O_R, O_NONE, O_NONE, P_rexr|P_rexw|P_rexb }, + /* 0858 */ { UD_Imovapd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0859 */ { UD_Ivmovapd, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0860 */ { UD_Imovapd, O_W, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0861 */ { UD_Ivmovapd, O_Wx, O_Vx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0862 */ { UD_Imovaps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0863 */ { UD_Ivmovaps, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0864 */ { UD_Imovaps, O_W, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0865 */ { UD_Ivmovaps, O_Wx, O_Vx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0866 */ { UD_Imovd, O_P, O_Ey, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0867 */ { UD_Imovd, O_P, O_Ey, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0868 */ { UD_Imovd, O_V, O_Ey, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0869 */ { UD_Ivmovd, O_Vx, O_Ey, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0870 */ { UD_Imovd, O_V, O_Ey, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0871 */ { UD_Ivmovd, O_Vx, O_Ey, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0872 */ { UD_Imovd, O_Ey, O_P, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0873 */ { UD_Imovd, O_Ey, O_P, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0874 */ { UD_Imovd, O_Ey, O_V, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0875 */ { UD_Ivmovd, O_Ey, O_Vx, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0876 */ { UD_Imovd, O_Ey, O_V, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0877 */ { UD_Ivmovd, O_Ey, O_Vx, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0878 */ { UD_Imovhpd, O_V, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0879 */ { UD_Ivmovhpd, O_Vx, O_Hx, O_M, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0880 */ { UD_Imovhpd, O_M, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0881 */ { UD_Ivmovhpd, O_M, O_Vx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0882 */ { UD_Imovhps, O_V, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0883 */ { UD_Ivmovhps, O_Vx, O_Hx, O_M, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0884 */ { UD_Imovhps, O_M, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0885 */ { UD_Ivmovhps, O_M, O_Vx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0886 */ { UD_Imovlhps, O_V, O_U, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0887 */ { UD_Ivmovlhps, O_Vx, O_Hx, O_Ux, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0888 */ { UD_Imovlpd, O_V, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0889 */ { UD_Ivmovlpd, O_Vx, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0890 */ { UD_Imovlpd, O_M, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0891 */ { UD_Ivmovlpd, O_M, O_Vx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0892 */ { UD_Imovlps, O_V, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0893 */ { UD_Ivmovlps, O_Vx, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0894 */ { UD_Imovlps, O_M, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0895 */ { UD_Ivmovlps, O_M, O_Vx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0896 */ { UD_Imovhlps, O_V, O_U, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0897 */ { UD_Ivmovhlps, O_Vx, O_Ux, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0898 */ { UD_Imovmskpd, O_Gd, O_U, O_NONE, O_NONE, P_oso|P_rexr|P_rexb }, + /* 0899 */ { UD_Ivmovmskpd, O_Gd, O_Ux, O_NONE, O_NONE, P_oso|P_rexr|P_rexb|P_vexl }, + /* 0900 */ { UD_Imovmskps, O_Gd, O_U, O_NONE, O_NONE, P_oso|P_rexr|P_rexb }, + /* 0901 */ { UD_Ivmovmskps, O_Gd, O_Ux, O_NONE, O_NONE, P_oso|P_rexr|P_rexb }, + /* 0902 */ { UD_Imovntdq, O_M, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0903 */ { UD_Ivmovntdq, O_M, O_Vx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0904 */ { UD_Imovnti, O_M, O_Gy, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0905 */ { UD_Imovntpd, O_M, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0906 */ { UD_Ivmovntpd, O_M, O_Vx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0907 */ { UD_Imovntps, O_M, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0908 */ { UD_Ivmovntps, O_M, O_Vx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0909 */ { UD_Imovntq, O_M, O_P, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0910 */ { UD_Imovq, O_P, O_Eq, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0911 */ { UD_Imovq, O_V, O_Eq, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0912 */ { UD_Ivmovq, O_Vx, O_Eq, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0913 */ { UD_Imovq, O_Eq, O_P, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0914 */ { UD_Imovq, O_Eq, O_V, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0915 */ { UD_Ivmovq, O_Eq, O_Vx, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0916 */ { UD_Imovq, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0917 */ { UD_Ivmovq, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0918 */ { UD_Imovq, O_W, O_V, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0919 */ { UD_Ivmovq, O_Wx, O_Vx, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0920 */ { UD_Imovq, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0921 */ { UD_Imovq, O_Q, O_P, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0922 */ { UD_Imovsb, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_seg }, + /* 0923 */ { UD_Imovsw, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 0924 */ { UD_Imovsd, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 0925 */ { UD_Imovsd, O_V, O_MqU, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0926 */ { UD_Imovsd, O_W, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0927 */ { UD_Imovsq, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 0928 */ { UD_Imovss, O_V, O_MdU, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0929 */ { UD_Imovss, O_W, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0930 */ { UD_Imovsx, O_Gv, O_Eb, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0931 */ { UD_Imovsx, O_Gy, O_Ew, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0932 */ { UD_Imovupd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0933 */ { UD_Ivmovupd, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0934 */ { UD_Imovupd, O_W, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0935 */ { UD_Ivmovupd, O_Wx, O_Vx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0936 */ { UD_Imovups, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0937 */ { UD_Ivmovups, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0938 */ { UD_Imovups, O_W, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0939 */ { UD_Ivmovups, O_Wx, O_Vx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0940 */ { UD_Imovzx, O_Gv, O_Eb, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0941 */ { UD_Imovzx, O_Gy, O_Ew, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0942 */ { UD_Imul, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0943 */ { UD_Imul, O_Ev, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0944 */ { UD_Imulpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0945 */ { UD_Ivmulpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0946 */ { UD_Imulps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0947 */ { UD_Ivmulps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0948 */ { UD_Imulsd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0949 */ { UD_Ivmulsd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0950 */ { UD_Imulss, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0951 */ { UD_Ivmulss, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0952 */ { UD_Imwait, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 0953 */ { UD_Ineg, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0954 */ { UD_Ineg, O_Ev, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0955 */ { UD_Inop, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0956 */ { UD_Inop, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0957 */ { UD_Inop, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0958 */ { UD_Inop, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0959 */ { UD_Inop, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0960 */ { UD_Inop, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0961 */ { UD_Inop, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0962 */ { UD_Inot, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0963 */ { UD_Inot, O_Ev, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0964 */ { UD_Ior, O_Eb, O_Gb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0965 */ { UD_Ior, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0966 */ { UD_Ior, O_Gb, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0967 */ { UD_Ior, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0968 */ { UD_Ior, O_AL, O_Ib, O_NONE, O_NONE, P_none }, + /* 0969 */ { UD_Ior, O_rAX, O_sIz, O_NONE, O_NONE, P_oso|P_rexw }, + /* 0970 */ { UD_Ior, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0971 */ { UD_Ior, O_Ev, O_sIz, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0972 */ { UD_Ior, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0973 */ { UD_Ior, O_Ev, O_sIb, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 0974 */ { UD_Iorpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0975 */ { UD_Ivorpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0976 */ { UD_Iorps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0977 */ { UD_Ivorps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0978 */ { UD_Iout, O_Ib, O_AL, O_NONE, O_NONE, P_none }, + /* 0979 */ { UD_Iout, O_Ib, O_eAX, O_NONE, O_NONE, P_oso }, + /* 0980 */ { UD_Iout, O_DX, O_AL, O_NONE, O_NONE, P_none }, + /* 0981 */ { UD_Iout, O_DX, O_eAX, O_NONE, O_NONE, P_oso }, + /* 0982 */ { UD_Ioutsb, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_seg }, + /* 0983 */ { UD_Ioutsw, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_oso|P_seg }, + /* 0984 */ { UD_Ioutsd, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_oso|P_seg }, + /* 0985 */ { UD_Ipacksswb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0986 */ { UD_Ivpacksswb, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0987 */ { UD_Ipacksswb, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0988 */ { UD_Ipackssdw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0989 */ { UD_Ivpackssdw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0990 */ { UD_Ipackssdw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0991 */ { UD_Ipackuswb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0992 */ { UD_Ivpackuswb, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0993 */ { UD_Ipackuswb, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0994 */ { UD_Ipaddb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0995 */ { UD_Ivpaddb, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 0996 */ { UD_Ipaddb, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0997 */ { UD_Ipaddw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0998 */ { UD_Ipaddw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 0999 */ { UD_Ivpaddw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1000 */ { UD_Ipaddd, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1001 */ { UD_Ipaddd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1002 */ { UD_Ivpaddd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1003 */ { UD_Ipaddsb, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1004 */ { UD_Ipaddsb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1005 */ { UD_Ivpaddsb, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1006 */ { UD_Ipaddsw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1007 */ { UD_Ipaddsw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1008 */ { UD_Ivpaddsw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1009 */ { UD_Ipaddusb, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1010 */ { UD_Ipaddusb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1011 */ { UD_Ivpaddusb, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1012 */ { UD_Ipaddusw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1013 */ { UD_Ipaddusw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1014 */ { UD_Ivpaddusw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1015 */ { UD_Ipand, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1016 */ { UD_Ivpand, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1017 */ { UD_Ipand, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1018 */ { UD_Ipandn, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1019 */ { UD_Ivpandn, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1020 */ { UD_Ipandn, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1021 */ { UD_Ipavgb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1022 */ { UD_Ivpavgb, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1023 */ { UD_Ipavgb, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1024 */ { UD_Ipavgw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1025 */ { UD_Ivpavgw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1026 */ { UD_Ipavgw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1027 */ { UD_Ipcmpeqb, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1028 */ { UD_Ipcmpeqb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1029 */ { UD_Ivpcmpeqb, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1030 */ { UD_Ipcmpeqw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1031 */ { UD_Ipcmpeqw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1032 */ { UD_Ivpcmpeqw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1033 */ { UD_Ipcmpeqd, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1034 */ { UD_Ipcmpeqd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1035 */ { UD_Ivpcmpeqd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1036 */ { UD_Ipcmpgtb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1037 */ { UD_Ivpcmpgtb, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1038 */ { UD_Ipcmpgtb, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1039 */ { UD_Ipcmpgtw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1040 */ { UD_Ivpcmpgtw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1041 */ { UD_Ipcmpgtw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1042 */ { UD_Ipcmpgtd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1043 */ { UD_Ivpcmpgtd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1044 */ { UD_Ipcmpgtd, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1045 */ { UD_Ipextrb, O_MbRv, O_V, O_Ib, O_NONE, P_aso|P_rexx|P_rexr|P_rexb|P_def64 }, + /* 1046 */ { UD_Ivpextrb, O_MbRv, O_Vx, O_Ib, O_NONE, P_aso|P_rexx|P_rexr|P_rexb|P_def64 }, + /* 1047 */ { UD_Ipextrd, O_Ed, O_V, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexw|P_rexb }, + /* 1048 */ { UD_Ivpextrd, O_Ed, O_Vx, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexw|P_rexb }, + /* 1049 */ { UD_Ipextrd, O_Ed, O_V, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexw|P_rexb }, + /* 1050 */ { UD_Ivpextrd, O_Ed, O_Vx, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexw|P_rexb }, + /* 1051 */ { UD_Ipextrq, O_Eq, O_V, O_Ib, O_NONE, P_aso|P_rexr|P_rexw|P_rexb|P_def64 }, + /* 1052 */ { UD_Ivpextrq, O_Eq, O_Vx, O_Ib, O_NONE, P_aso|P_rexr|P_rexw|P_rexb|P_def64 }, + /* 1053 */ { UD_Ipextrw, O_Gd, O_U, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexb }, + /* 1054 */ { UD_Ivpextrw, O_Gd, O_Ux, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexb }, + /* 1055 */ { UD_Ipextrw, O_Gd, O_N, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1056 */ { UD_Ipextrw, O_MwRd, O_V, O_Ib, O_NONE, P_aso|P_rexw|P_rexx|P_rexr|P_rexb }, + /* 1057 */ { UD_Ivpextrw, O_MwRd, O_Vx, O_Ib, O_NONE, P_aso|P_rexw|P_rexx|P_rexr|P_rexb }, + /* 1058 */ { UD_Ipinsrb, O_V, O_MbRd, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1059 */ { UD_Ipinsrw, O_P, O_MwRy, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 1060 */ { UD_Ipinsrw, O_V, O_MwRy, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 1061 */ { UD_Ivpinsrw, O_Vx, O_MwRy, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 1062 */ { UD_Ipinsrd, O_V, O_Ed, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1063 */ { UD_Ipinsrd, O_V, O_Ed, O_Ib, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1064 */ { UD_Ipinsrq, O_V, O_Eq, O_Ib, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1065 */ { UD_Ivpinsrb, O_V, O_H, O_MbRd, O_Ib, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1066 */ { UD_Ivpinsrd, O_V, O_H, O_Ed, O_Ib, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1067 */ { UD_Ivpinsrd, O_V, O_H, O_Ed, O_Ib, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1068 */ { UD_Ivpinsrq, O_V, O_H, O_Eq, O_Ib, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1069 */ { UD_Ipmaddwd, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1070 */ { UD_Ipmaddwd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1071 */ { UD_Ivpmaddwd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1072 */ { UD_Ipmaxsw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1073 */ { UD_Ivpmaxsw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1074 */ { UD_Ipmaxsw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1075 */ { UD_Ipmaxub, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1076 */ { UD_Ipmaxub, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1077 */ { UD_Ivpmaxub, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1078 */ { UD_Ipminsw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1079 */ { UD_Ivpminsw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1080 */ { UD_Ipminsw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1081 */ { UD_Ipminub, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1082 */ { UD_Ivpminub, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1083 */ { UD_Ipminub, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1084 */ { UD_Ipmovmskb, O_Gd, O_U, O_NONE, O_NONE, P_oso|P_rexr|P_rexw|P_rexb }, + /* 1085 */ { UD_Ivpmovmskb, O_Gd, O_Ux, O_NONE, O_NONE, P_oso|P_rexr|P_rexw|P_rexb }, + /* 1086 */ { UD_Ipmovmskb, O_Gd, O_N, O_NONE, O_NONE, P_oso|P_rexr|P_rexw|P_rexb }, + /* 1087 */ { UD_Ipmulhuw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1088 */ { UD_Ipmulhuw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1089 */ { UD_Ivpmulhuw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1090 */ { UD_Ipmulhw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1091 */ { UD_Ivpmulhw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1092 */ { UD_Ipmulhw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1093 */ { UD_Ipmullw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1094 */ { UD_Ipmullw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1095 */ { UD_Ivpmullw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1096 */ { UD_Ipop, O_ES, O_NONE, O_NONE, O_NONE, P_inv64 }, + /* 1097 */ { UD_Ipop, O_SS, O_NONE, O_NONE, O_NONE, P_inv64 }, + /* 1098 */ { UD_Ipop, O_DS, O_NONE, O_NONE, O_NONE, P_inv64 }, + /* 1099 */ { UD_Ipop, O_GS, O_NONE, O_NONE, O_NONE, P_none }, + /* 1100 */ { UD_Ipop, O_FS, O_NONE, O_NONE, O_NONE, P_none }, + /* 1101 */ { UD_Ipop, O_R0v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1102 */ { UD_Ipop, O_R1v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1103 */ { UD_Ipop, O_R2v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1104 */ { UD_Ipop, O_R3v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1105 */ { UD_Ipop, O_R4v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1106 */ { UD_Ipop, O_R5v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1107 */ { UD_Ipop, O_R6v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1108 */ { UD_Ipop, O_R7v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1109 */ { UD_Ipop, O_Ev, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 1110 */ { UD_Ipopa, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_inv64 }, + /* 1111 */ { UD_Ipopad, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_inv64 }, + /* 1112 */ { UD_Ipopfw, O_NONE, O_NONE, O_NONE, O_NONE, P_oso }, + /* 1113 */ { UD_Ipopfd, O_NONE, O_NONE, O_NONE, O_NONE, P_oso }, + /* 1114 */ { UD_Ipopfq, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 1115 */ { UD_Ipopfq, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 1116 */ { UD_Ipor, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1117 */ { UD_Ivpor, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1118 */ { UD_Ipor, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1119 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1120 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1121 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1122 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1123 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1124 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1125 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1126 */ { UD_Iprefetch, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1127 */ { UD_Iprefetchnta, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1128 */ { UD_Iprefetcht0, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1129 */ { UD_Iprefetcht1, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1130 */ { UD_Iprefetcht2, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1131 */ { UD_Ipsadbw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1132 */ { UD_Ivpsadbw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1133 */ { UD_Ipsadbw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1134 */ { UD_Ipshufw, O_P, O_Q, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1135 */ { UD_Ipsllw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1136 */ { UD_Ipsllw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1137 */ { UD_Ipsllw, O_U, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 1138 */ { UD_Ipsllw, O_N, O_Ib, O_NONE, O_NONE, P_none }, + /* 1139 */ { UD_Ipslld, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1140 */ { UD_Ipslld, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1141 */ { UD_Ipslld, O_U, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 1142 */ { UD_Ipslld, O_N, O_Ib, O_NONE, O_NONE, P_none }, + /* 1143 */ { UD_Ipsllq, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1144 */ { UD_Ipsllq, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1145 */ { UD_Ipsllq, O_U, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 1146 */ { UD_Ipsllq, O_N, O_Ib, O_NONE, O_NONE, P_none }, + /* 1147 */ { UD_Ipsraw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1148 */ { UD_Ipsraw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1149 */ { UD_Ivpsraw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1150 */ { UD_Ipsraw, O_U, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 1151 */ { UD_Ivpsraw, O_Hx, O_Ux, O_Ib, O_NONE, P_rexb }, + /* 1152 */ { UD_Ipsraw, O_N, O_Ib, O_NONE, O_NONE, P_none }, + /* 1153 */ { UD_Ipsrad, O_N, O_Ib, O_NONE, O_NONE, P_none }, + /* 1154 */ { UD_Ipsrad, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1155 */ { UD_Ivpsrad, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1156 */ { UD_Ipsrad, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1157 */ { UD_Ipsrad, O_U, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 1158 */ { UD_Ivpsrad, O_Hx, O_Ux, O_Ib, O_NONE, P_rexb }, + /* 1159 */ { UD_Ipsrlw, O_N, O_Ib, O_NONE, O_NONE, P_none }, + /* 1160 */ { UD_Ipsrlw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1161 */ { UD_Ipsrlw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1162 */ { UD_Ivpsrlw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1163 */ { UD_Ipsrlw, O_U, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 1164 */ { UD_Ivpsrlw, O_Hx, O_Ux, O_Ib, O_NONE, P_rexb }, + /* 1165 */ { UD_Ipsrld, O_N, O_Ib, O_NONE, O_NONE, P_none }, + /* 1166 */ { UD_Ipsrld, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1167 */ { UD_Ipsrld, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1168 */ { UD_Ivpsrld, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1169 */ { UD_Ipsrld, O_U, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 1170 */ { UD_Ivpsrld, O_Hx, O_Ux, O_Ib, O_NONE, P_rexb }, + /* 1171 */ { UD_Ipsrlq, O_N, O_Ib, O_NONE, O_NONE, P_none }, + /* 1172 */ { UD_Ipsrlq, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1173 */ { UD_Ipsrlq, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1174 */ { UD_Ivpsrlq, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1175 */ { UD_Ipsrlq, O_U, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 1176 */ { UD_Ivpsrlq, O_Hx, O_Ux, O_Ib, O_NONE, P_rexb }, + /* 1177 */ { UD_Ipsubb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1178 */ { UD_Ivpsubb, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1179 */ { UD_Ipsubb, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1180 */ { UD_Ipsubw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1181 */ { UD_Ivpsubw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1182 */ { UD_Ipsubw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1183 */ { UD_Ipsubd, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1184 */ { UD_Ipsubd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1185 */ { UD_Ivpsubd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1186 */ { UD_Ipsubsb, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1187 */ { UD_Ipsubsb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1188 */ { UD_Ivpsubsb, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1189 */ { UD_Ipsubsw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1190 */ { UD_Ipsubsw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1191 */ { UD_Ivpsubsw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1192 */ { UD_Ipsubusb, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1193 */ { UD_Ipsubusb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1194 */ { UD_Ivpsubusb, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1195 */ { UD_Ipsubusw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1196 */ { UD_Ipsubusw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1197 */ { UD_Ivpsubusw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1198 */ { UD_Ipunpckhbw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1199 */ { UD_Ivpunpckhbw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1200 */ { UD_Ipunpckhbw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1201 */ { UD_Ipunpckhwd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1202 */ { UD_Ivpunpckhwd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1203 */ { UD_Ipunpckhwd, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1204 */ { UD_Ipunpckhdq, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1205 */ { UD_Ivpunpckhdq, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1206 */ { UD_Ipunpckhdq, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1207 */ { UD_Ipunpcklbw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1208 */ { UD_Ivpunpcklbw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1209 */ { UD_Ipunpcklbw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1210 */ { UD_Ipunpcklwd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1211 */ { UD_Ivpunpcklwd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1212 */ { UD_Ipunpcklwd, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1213 */ { UD_Ipunpckldq, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1214 */ { UD_Ivpunpckldq, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1215 */ { UD_Ipunpckldq, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1216 */ { UD_Ipi2fw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1217 */ { UD_Ipi2fd, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1218 */ { UD_Ipf2iw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1219 */ { UD_Ipf2id, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1220 */ { UD_Ipfnacc, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1221 */ { UD_Ipfpnacc, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1222 */ { UD_Ipfcmpge, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1223 */ { UD_Ipfmin, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1224 */ { UD_Ipfrcp, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1225 */ { UD_Ipfrsqrt, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1226 */ { UD_Ipfsub, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1227 */ { UD_Ipfadd, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1228 */ { UD_Ipfcmpgt, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1229 */ { UD_Ipfmax, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1230 */ { UD_Ipfrcpit1, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1231 */ { UD_Ipfrsqit1, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1232 */ { UD_Ipfsubr, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1233 */ { UD_Ipfacc, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1234 */ { UD_Ipfcmpeq, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1235 */ { UD_Ipfmul, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1236 */ { UD_Ipfrcpit2, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1237 */ { UD_Ipmulhrw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1238 */ { UD_Ipswapd, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1239 */ { UD_Ipavgusb, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1240 */ { UD_Ipush, O_ES, O_NONE, O_NONE, O_NONE, P_inv64 }, + /* 1241 */ { UD_Ipush, O_CS, O_NONE, O_NONE, O_NONE, P_inv64 }, + /* 1242 */ { UD_Ipush, O_SS, O_NONE, O_NONE, O_NONE, P_inv64 }, + /* 1243 */ { UD_Ipush, O_DS, O_NONE, O_NONE, O_NONE, P_inv64 }, + /* 1244 */ { UD_Ipush, O_GS, O_NONE, O_NONE, O_NONE, P_none }, + /* 1245 */ { UD_Ipush, O_FS, O_NONE, O_NONE, O_NONE, P_none }, + /* 1246 */ { UD_Ipush, O_R0v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1247 */ { UD_Ipush, O_R1v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1248 */ { UD_Ipush, O_R2v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1249 */ { UD_Ipush, O_R3v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1250 */ { UD_Ipush, O_R4v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1251 */ { UD_Ipush, O_R5v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1252 */ { UD_Ipush, O_R6v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1253 */ { UD_Ipush, O_R7v, O_NONE, O_NONE, O_NONE, P_oso|P_rexb|P_def64 }, + /* 1254 */ { UD_Ipush, O_sIz, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 1255 */ { UD_Ipush, O_Ev, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 1256 */ { UD_Ipush, O_sIb, O_NONE, O_NONE, O_NONE, P_oso|P_def64 }, + /* 1257 */ { UD_Ipusha, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_inv64 }, + /* 1258 */ { UD_Ipushad, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_inv64 }, + /* 1259 */ { UD_Ipushfw, O_NONE, O_NONE, O_NONE, O_NONE, P_oso }, + /* 1260 */ { UD_Ipushfw, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_rexw|P_def64 }, + /* 1261 */ { UD_Ipushfd, O_NONE, O_NONE, O_NONE, O_NONE, P_oso }, + /* 1262 */ { UD_Ipushfq, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_rexw|P_def64 }, + /* 1263 */ { UD_Ipushfq, O_NONE, O_NONE, O_NONE, O_NONE, P_oso|P_rexw|P_def64 }, + /* 1264 */ { UD_Ipxor, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1265 */ { UD_Ivpxor, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1266 */ { UD_Ipxor, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1267 */ { UD_Ircl, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1268 */ { UD_Ircl, O_Ev, O_Ib, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1269 */ { UD_Ircl, O_Eb, O_I1, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1270 */ { UD_Ircl, O_Eb, O_CL, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1271 */ { UD_Ircl, O_Ev, O_CL, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1272 */ { UD_Ircl, O_Ev, O_I1, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1273 */ { UD_Ircr, O_Eb, O_I1, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1274 */ { UD_Ircr, O_Ev, O_Ib, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1275 */ { UD_Ircr, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1276 */ { UD_Ircr, O_Ev, O_I1, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1277 */ { UD_Ircr, O_Eb, O_CL, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1278 */ { UD_Ircr, O_Ev, O_CL, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1279 */ { UD_Irol, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1280 */ { UD_Irol, O_Eb, O_I1, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1281 */ { UD_Irol, O_Ev, O_I1, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1282 */ { UD_Irol, O_Eb, O_CL, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1283 */ { UD_Irol, O_Ev, O_CL, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1284 */ { UD_Irol, O_Ev, O_Ib, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1285 */ { UD_Iror, O_Eb, O_I1, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1286 */ { UD_Iror, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1287 */ { UD_Iror, O_Ev, O_Ib, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1288 */ { UD_Iror, O_Ev, O_I1, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1289 */ { UD_Iror, O_Eb, O_CL, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1290 */ { UD_Iror, O_Ev, O_CL, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1291 */ { UD_Ircpps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1292 */ { UD_Ivrcpps, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1293 */ { UD_Ircpss, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1294 */ { UD_Ivrcpss, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1295 */ { UD_Irdmsr, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1296 */ { UD_Irdpmc, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1297 */ { UD_Irdtsc, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1298 */ { UD_Irdtscp, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1299 */ { UD_Irepne, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1300 */ { UD_Irep, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1301 */ { UD_Iret, O_Iw, O_NONE, O_NONE, O_NONE, P_none }, + /* 1302 */ { UD_Iret, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1303 */ { UD_Iretf, O_Iw, O_NONE, O_NONE, O_NONE, P_none }, + /* 1304 */ { UD_Iretf, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1305 */ { UD_Irsm, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1306 */ { UD_Irsqrtps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1307 */ { UD_Ivrsqrtps, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1308 */ { UD_Irsqrtss, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1309 */ { UD_Ivrsqrtss, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1310 */ { UD_Isahf, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1311 */ { UD_Isalc, O_NONE, O_NONE, O_NONE, O_NONE, P_inv64 }, + /* 1312 */ { UD_Isar, O_Ev, O_I1, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1313 */ { UD_Isar, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1314 */ { UD_Isar, O_Eb, O_I1, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1315 */ { UD_Isar, O_Ev, O_Ib, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1316 */ { UD_Isar, O_Eb, O_CL, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1317 */ { UD_Isar, O_Ev, O_CL, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1318 */ { UD_Ishl, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1319 */ { UD_Ishl, O_Ev, O_Ib, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1320 */ { UD_Ishl, O_Eb, O_I1, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1321 */ { UD_Ishl, O_Eb, O_CL, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1322 */ { UD_Ishl, O_Ev, O_CL, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1323 */ { UD_Ishl, O_Ev, O_Ib, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1324 */ { UD_Ishl, O_Eb, O_CL, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1325 */ { UD_Ishl, O_Ev, O_I1, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1326 */ { UD_Ishl, O_Eb, O_I1, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1327 */ { UD_Ishl, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1328 */ { UD_Ishl, O_Ev, O_CL, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1329 */ { UD_Ishl, O_Ev, O_I1, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1330 */ { UD_Ishr, O_Ev, O_Ib, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1331 */ { UD_Ishr, O_Eb, O_CL, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1332 */ { UD_Ishr, O_Ev, O_I1, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1333 */ { UD_Ishr, O_Eb, O_I1, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1334 */ { UD_Ishr, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1335 */ { UD_Ishr, O_Ev, O_CL, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1336 */ { UD_Isbb, O_Eb, O_Gb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1337 */ { UD_Isbb, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1338 */ { UD_Isbb, O_Gb, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1339 */ { UD_Isbb, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1340 */ { UD_Isbb, O_AL, O_Ib, O_NONE, O_NONE, P_none }, + /* 1341 */ { UD_Isbb, O_rAX, O_sIz, O_NONE, O_NONE, P_oso|P_rexw }, + /* 1342 */ { UD_Isbb, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1343 */ { UD_Isbb, O_Ev, O_sIz, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1344 */ { UD_Isbb, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_inv64 }, + /* 1345 */ { UD_Isbb, O_Ev, O_sIb, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1346 */ { UD_Iscasb, O_NONE, O_NONE, O_NONE, O_NONE, P_strz }, + /* 1347 */ { UD_Iscasw, O_NONE, O_NONE, O_NONE, O_NONE, P_strz|P_oso|P_rexw }, + /* 1348 */ { UD_Iscasd, O_NONE, O_NONE, O_NONE, O_NONE, P_strz|P_oso|P_rexw }, + /* 1349 */ { UD_Iscasq, O_NONE, O_NONE, O_NONE, O_NONE, P_strz|P_oso|P_rexw }, + /* 1350 */ { UD_Iseto, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1351 */ { UD_Isetno, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1352 */ { UD_Isetb, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1353 */ { UD_Isetae, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1354 */ { UD_Isetz, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1355 */ { UD_Isetnz, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1356 */ { UD_Isetbe, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1357 */ { UD_Iseta, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1358 */ { UD_Isets, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1359 */ { UD_Isetns, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1360 */ { UD_Isetp, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1361 */ { UD_Isetnp, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1362 */ { UD_Isetl, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1363 */ { UD_Isetge, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1364 */ { UD_Isetle, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1365 */ { UD_Isetg, O_Eb, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1366 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1367 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1368 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1369 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1370 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1371 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1372 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1373 */ { UD_Isfence, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1374 */ { UD_Isgdt, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1375 */ { UD_Ishld, O_Ev, O_Gv, O_Ib, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1376 */ { UD_Ishld, O_Ev, O_Gv, O_CL, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1377 */ { UD_Ishrd, O_Ev, O_Gv, O_Ib, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1378 */ { UD_Ishrd, O_Ev, O_Gv, O_CL, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1379 */ { UD_Ishufpd, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1380 */ { UD_Ivshufpd, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1381 */ { UD_Ishufps, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1382 */ { UD_Ivshufps, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1383 */ { UD_Isidt, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1384 */ { UD_Isldt, O_MwRv, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1385 */ { UD_Ismsw, O_MwRv, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1386 */ { UD_Ismsw, O_MwRv, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1387 */ { UD_Isqrtps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1388 */ { UD_Ivsqrtps, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1389 */ { UD_Isqrtpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1390 */ { UD_Ivsqrtpd, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1391 */ { UD_Isqrtsd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1392 */ { UD_Ivsqrtsd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1393 */ { UD_Isqrtss, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1394 */ { UD_Ivsqrtss, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1395 */ { UD_Istc, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1396 */ { UD_Istd, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1397 */ { UD_Istgi, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1398 */ { UD_Isti, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1399 */ { UD_Iskinit, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1400 */ { UD_Istmxcsr, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1401 */ { UD_Ivstmxcsr, O_Md, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1402 */ { UD_Istosb, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_seg }, + /* 1403 */ { UD_Istosw, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 1404 */ { UD_Istosd, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 1405 */ { UD_Istosq, O_NONE, O_NONE, O_NONE, O_NONE, P_str|P_seg|P_oso|P_rexw }, + /* 1406 */ { UD_Istr, O_MwRv, O_NONE, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1407 */ { UD_Isub, O_Eb, O_Gb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1408 */ { UD_Isub, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1409 */ { UD_Isub, O_Gb, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1410 */ { UD_Isub, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1411 */ { UD_Isub, O_AL, O_Ib, O_NONE, O_NONE, P_none }, + /* 1412 */ { UD_Isub, O_rAX, O_sIz, O_NONE, O_NONE, P_oso|P_rexw }, + /* 1413 */ { UD_Isub, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1414 */ { UD_Isub, O_Ev, O_sIz, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1415 */ { UD_Isub, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_inv64 }, + /* 1416 */ { UD_Isub, O_Ev, O_sIb, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1417 */ { UD_Isubpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1418 */ { UD_Ivsubpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1419 */ { UD_Isubps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1420 */ { UD_Ivsubps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1421 */ { UD_Isubsd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1422 */ { UD_Ivsubsd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1423 */ { UD_Isubss, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1424 */ { UD_Ivsubss, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1425 */ { UD_Iswapgs, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1426 */ { UD_Isyscall, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1427 */ { UD_Isysenter, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1428 */ { UD_Isysenter, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1429 */ { UD_Isysexit, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1430 */ { UD_Isysexit, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1431 */ { UD_Isysret, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1432 */ { UD_Itest, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1433 */ { UD_Itest, O_Eb, O_Gb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1434 */ { UD_Itest, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1435 */ { UD_Itest, O_AL, O_Ib, O_NONE, O_NONE, P_none }, + /* 1436 */ { UD_Itest, O_rAX, O_sIz, O_NONE, O_NONE, P_oso|P_rexw }, + /* 1437 */ { UD_Itest, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1438 */ { UD_Itest, O_Ev, O_sIz, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1439 */ { UD_Itest, O_Ev, O_Iz, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1440 */ { UD_Iucomisd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1441 */ { UD_Ivucomisd, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1442 */ { UD_Iucomiss, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1443 */ { UD_Ivucomiss, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1444 */ { UD_Iud2, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1445 */ { UD_Iunpckhpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1446 */ { UD_Ivunpckhpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1447 */ { UD_Iunpckhps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1448 */ { UD_Ivunpckhps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1449 */ { UD_Iunpcklps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1450 */ { UD_Ivunpcklps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1451 */ { UD_Iunpcklpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1452 */ { UD_Ivunpcklpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1453 */ { UD_Iverr, O_Ew, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1454 */ { UD_Iverw, O_Ew, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1455 */ { UD_Ivmcall, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1456 */ { UD_Irdrand, O_R, O_NONE, O_NONE, O_NONE, P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1457 */ { UD_Ivmclear, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1458 */ { UD_Ivmxon, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1459 */ { UD_Ivmptrld, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1460 */ { UD_Ivmptrst, O_Mq, O_NONE, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1461 */ { UD_Ivmlaunch, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1462 */ { UD_Ivmresume, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1463 */ { UD_Ivmxoff, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1464 */ { UD_Ivmread, O_Ey, O_Gy, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 1465 */ { UD_Ivmwrite, O_Gy, O_Ey, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_def64 }, + /* 1466 */ { UD_Ivmrun, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1467 */ { UD_Ivmmcall, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1468 */ { UD_Ivmload, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1469 */ { UD_Ivmsave, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1470 */ { UD_Iwait, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1471 */ { UD_Iwbinvd, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1472 */ { UD_Iwrmsr, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1473 */ { UD_Ixadd, O_Eb, O_Gb, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexx|P_rexb }, + /* 1474 */ { UD_Ixadd, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1475 */ { UD_Ixchg, O_Eb, O_Gb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1476 */ { UD_Ixchg, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1477 */ { UD_Ixchg, O_R0v, O_rAX, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1478 */ { UD_Ixchg, O_R1v, O_rAX, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1479 */ { UD_Ixchg, O_R2v, O_rAX, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1480 */ { UD_Ixchg, O_R3v, O_rAX, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1481 */ { UD_Ixchg, O_R4v, O_rAX, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1482 */ { UD_Ixchg, O_R5v, O_rAX, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1483 */ { UD_Ixchg, O_R6v, O_rAX, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1484 */ { UD_Ixchg, O_R7v, O_rAX, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1485 */ { UD_Ixgetbv, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1486 */ { UD_Ixlatb, O_NONE, O_NONE, O_NONE, O_NONE, P_rexw|P_seg }, + /* 1487 */ { UD_Ixor, O_Eb, O_Gb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1488 */ { UD_Ixor, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1489 */ { UD_Ixor, O_Gb, O_Eb, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1490 */ { UD_Ixor, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1491 */ { UD_Ixor, O_AL, O_Ib, O_NONE, O_NONE, P_none }, + /* 1492 */ { UD_Ixor, O_rAX, O_sIz, O_NONE, O_NONE, P_oso|P_rexw }, + /* 1493 */ { UD_Ixor, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1494 */ { UD_Ixor, O_Ev, O_sIz, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1495 */ { UD_Ixor, O_Eb, O_Ib, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_inv64 }, + /* 1496 */ { UD_Ixor, O_Ev, O_sIb, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1497 */ { UD_Ixorpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1498 */ { UD_Ivxorpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1499 */ { UD_Ixorps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1500 */ { UD_Ivxorps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1501 */ { UD_Ixcryptecb, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1502 */ { UD_Ixcryptcbc, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1503 */ { UD_Ixcryptctr, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1504 */ { UD_Ixcryptcfb, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1505 */ { UD_Ixcryptofb, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1506 */ { UD_Ixrstor, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1507 */ { UD_Ixsave, O_M, O_NONE, O_NONE, O_NONE, P_aso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1508 */ { UD_Ixsetbv, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1509 */ { UD_Ixsha1, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1510 */ { UD_Ixsha256, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1511 */ { UD_Ixstore, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1512 */ { UD_Ipclmulqdq, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1513 */ { UD_Ivpclmulqdq, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1514 */ { UD_Igetsec, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1515 */ { UD_Imovdqa, O_W, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1516 */ { UD_Ivmovdqa, O_Wx, O_Vx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1517 */ { UD_Imovdqa, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1518 */ { UD_Ivmovdqa, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1519 */ { UD_Imaskmovdqu, O_V, O_U, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1520 */ { UD_Ivmaskmovdqu, O_Vx, O_Ux, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1521 */ { UD_Imovdq2q, O_P, O_U, O_NONE, O_NONE, P_aso|P_rexb }, + /* 1522 */ { UD_Imovdqu, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1523 */ { UD_Ivmovdqu, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1524 */ { UD_Imovdqu, O_W, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1525 */ { UD_Ivmovdqu, O_Wx, O_Vx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1526 */ { UD_Imovq2dq, O_V, O_N, O_NONE, O_NONE, P_aso|P_rexr }, + /* 1527 */ { UD_Ipaddq, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1528 */ { UD_Ipaddq, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1529 */ { UD_Ivpaddq, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1530 */ { UD_Ipsubq, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1531 */ { UD_Ivpsubq, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1532 */ { UD_Ipsubq, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1533 */ { UD_Ipmuludq, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1534 */ { UD_Ipmuludq, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1535 */ { UD_Ipshufhw, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1536 */ { UD_Ivpshufhw, O_Vx, O_Wx, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1537 */ { UD_Ipshuflw, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1538 */ { UD_Ivpshuflw, O_Vx, O_Wx, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1539 */ { UD_Ipshufd, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1540 */ { UD_Ivpshufd, O_Vx, O_Wx, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1541 */ { UD_Ipslldq, O_U, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 1542 */ { UD_Ivpslldq, O_Hx, O_Ux, O_Ib, O_NONE, P_rexb }, + /* 1543 */ { UD_Ipsrldq, O_U, O_Ib, O_NONE, O_NONE, P_rexb }, + /* 1544 */ { UD_Ivpsrldq, O_Hx, O_Ux, O_Ib, O_NONE, P_rexb }, + /* 1545 */ { UD_Ipunpckhqdq, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1546 */ { UD_Ivpunpckhqdq, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1547 */ { UD_Ipunpcklqdq, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1548 */ { UD_Ivpunpcklqdq, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1549 */ { UD_Ihaddpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1550 */ { UD_Ivhaddpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1551 */ { UD_Ihaddps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1552 */ { UD_Ivhaddps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1553 */ { UD_Ihsubpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1554 */ { UD_Ivhsubpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1555 */ { UD_Ihsubps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1556 */ { UD_Ivhsubps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1557 */ { UD_Iinsertps, O_V, O_Md, O_Ib, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1558 */ { UD_Ivinsertps, O_Vx, O_Hx, O_Md, O_Ib, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1559 */ { UD_Ilddqu, O_V, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1560 */ { UD_Ivlddqu, O_Vx, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1561 */ { UD_Imovddup, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1562 */ { UD_Ivmovddup, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1563 */ { UD_Imovddup, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1564 */ { UD_Ivmovddup, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1565 */ { UD_Imovshdup, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1566 */ { UD_Ivmovshdup, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1567 */ { UD_Imovshdup, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1568 */ { UD_Ivmovshdup, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1569 */ { UD_Imovsldup, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1570 */ { UD_Ivmovsldup, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1571 */ { UD_Imovsldup, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1572 */ { UD_Ivmovsldup, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1573 */ { UD_Ipabsb, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1574 */ { UD_Ipabsb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1575 */ { UD_Ivpabsb, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1576 */ { UD_Ipabsw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1577 */ { UD_Ipabsw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1578 */ { UD_Ivpabsw, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1579 */ { UD_Ipabsd, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1580 */ { UD_Ipabsd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1581 */ { UD_Ivpabsd, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1582 */ { UD_Ipshufb, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1583 */ { UD_Ipshufb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1584 */ { UD_Ivpshufb, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1585 */ { UD_Iphaddw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1586 */ { UD_Iphaddw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1587 */ { UD_Ivphaddw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1588 */ { UD_Iphaddd, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1589 */ { UD_Iphaddd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1590 */ { UD_Ivphaddd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1591 */ { UD_Iphaddsw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1592 */ { UD_Iphaddsw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1593 */ { UD_Ivphaddsw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1594 */ { UD_Ipmaddubsw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1595 */ { UD_Ipmaddubsw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1596 */ { UD_Ivpmaddubsw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1597 */ { UD_Iphsubw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1598 */ { UD_Iphsubw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1599 */ { UD_Ivphsubw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1600 */ { UD_Iphsubd, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1601 */ { UD_Iphsubd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1602 */ { UD_Ivphsubd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1603 */ { UD_Iphsubsw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1604 */ { UD_Iphsubsw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1605 */ { UD_Ivphsubsw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1606 */ { UD_Ipsignb, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1607 */ { UD_Ipsignb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1608 */ { UD_Ivpsignb, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1609 */ { UD_Ipsignd, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1610 */ { UD_Ipsignd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1611 */ { UD_Ivpsignd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1612 */ { UD_Ipsignw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1613 */ { UD_Ipsignw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1614 */ { UD_Ivpsignw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1615 */ { UD_Ipmulhrsw, O_P, O_Q, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1616 */ { UD_Ipmulhrsw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1617 */ { UD_Ivpmulhrsw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1618 */ { UD_Ipalignr, O_P, O_Q, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1619 */ { UD_Ipalignr, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1620 */ { UD_Ivpalignr, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1621 */ { UD_Ipblendvb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1622 */ { UD_Ipmuldq, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1623 */ { UD_Ivpmuldq, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1624 */ { UD_Ipminsb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1625 */ { UD_Ivpminsb, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1626 */ { UD_Ipminsd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1627 */ { UD_Ivpminsd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1628 */ { UD_Ipminuw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1629 */ { UD_Ivpminuw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1630 */ { UD_Ipminud, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1631 */ { UD_Ivpminud, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1632 */ { UD_Ipmaxsb, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1633 */ { UD_Ivpmaxsb, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1634 */ { UD_Ipmaxsd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1635 */ { UD_Ivpmaxsd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1636 */ { UD_Ipmaxud, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1637 */ { UD_Ivpmaxud, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1638 */ { UD_Ipmaxuw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1639 */ { UD_Ivpmaxuw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1640 */ { UD_Ipmulld, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1641 */ { UD_Ivpmulld, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1642 */ { UD_Iphminposuw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1643 */ { UD_Ivphminposuw, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1644 */ { UD_Iroundps, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1645 */ { UD_Ivroundps, O_Vx, O_Wx, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1646 */ { UD_Iroundpd, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1647 */ { UD_Ivroundpd, O_Vx, O_Wx, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1648 */ { UD_Iroundss, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1649 */ { UD_Ivroundss, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1650 */ { UD_Iroundsd, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1651 */ { UD_Ivroundsd, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1652 */ { UD_Iblendpd, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1653 */ { UD_Ivblendpd, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1654 */ { UD_Iblendps, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1655 */ { UD_Ivblendps, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1656 */ { UD_Iblendvpd, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1657 */ { UD_Iblendvps, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1658 */ { UD_Ibound, O_Gv, O_M, O_NONE, O_NONE, P_aso|P_oso }, + /* 1659 */ { UD_Ibsf, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1660 */ { UD_Ibsr, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1661 */ { UD_Ibswap, O_R0y, O_NONE, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1662 */ { UD_Ibswap, O_R1y, O_NONE, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1663 */ { UD_Ibswap, O_R2y, O_NONE, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1664 */ { UD_Ibswap, O_R3y, O_NONE, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1665 */ { UD_Ibswap, O_R4y, O_NONE, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1666 */ { UD_Ibswap, O_R5y, O_NONE, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1667 */ { UD_Ibswap, O_R6y, O_NONE, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1668 */ { UD_Ibswap, O_R7y, O_NONE, O_NONE, O_NONE, P_oso|P_rexw|P_rexb }, + /* 1669 */ { UD_Ibt, O_Ev, O_Ib, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1670 */ { UD_Ibt, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1671 */ { UD_Ibtc, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1672 */ { UD_Ibtc, O_Ev, O_Ib, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1673 */ { UD_Ibtr, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1674 */ { UD_Ibtr, O_Ev, O_Ib, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1675 */ { UD_Ibts, O_Ev, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1676 */ { UD_Ibts, O_Ev, O_Ib, O_NONE, O_NONE, P_aso|P_oso|P_rexw|P_rexr|P_rexx|P_rexb }, + /* 1677 */ { UD_Ipblendw, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1678 */ { UD_Ivpblendw, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1679 */ { UD_Impsadbw, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1680 */ { UD_Ivmpsadbw, O_Vx, O_Hx, O_Wx, O_Ib, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1681 */ { UD_Imovntdqa, O_V, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1682 */ { UD_Ivmovntdqa, O_Vx, O_M, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb|P_vexl }, + /* 1683 */ { UD_Ipackusdw, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1684 */ { UD_Ivpackusdw, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb|P_vexl }, + /* 1685 */ { UD_Ipmovsxbw, O_V, O_MqU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1686 */ { UD_Ivpmovsxbw, O_Vx, O_MqU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1687 */ { UD_Ipmovsxbd, O_V, O_MdU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1688 */ { UD_Ivpmovsxbd, O_Vx, O_MdU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1689 */ { UD_Ipmovsxbq, O_V, O_MwU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1690 */ { UD_Ivpmovsxbq, O_Vx, O_MwU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1691 */ { UD_Ipmovsxwd, O_V, O_MqU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1692 */ { UD_Ivpmovsxwd, O_Vx, O_MqU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1693 */ { UD_Ipmovsxwq, O_V, O_MdU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1694 */ { UD_Ivpmovsxwq, O_Vx, O_MdU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1695 */ { UD_Ipmovsxdq, O_V, O_MqU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1696 */ { UD_Ipmovzxbw, O_V, O_MqU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1697 */ { UD_Ivpmovzxbw, O_Vx, O_MqU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1698 */ { UD_Ipmovzxbd, O_V, O_MdU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1699 */ { UD_Ivpmovzxbd, O_Vx, O_MdU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1700 */ { UD_Ipmovzxbq, O_V, O_MwU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1701 */ { UD_Ivpmovzxbq, O_Vx, O_MwU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1702 */ { UD_Ipmovzxwd, O_V, O_MqU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1703 */ { UD_Ivpmovzxwd, O_Vx, O_MqU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1704 */ { UD_Ipmovzxwq, O_V, O_MdU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1705 */ { UD_Ivpmovzxwq, O_Vx, O_MdU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1706 */ { UD_Ipmovzxdq, O_V, O_MqU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1707 */ { UD_Ivpmovzxdq, O_Vx, O_MqU, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1708 */ { UD_Ipcmpeqq, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1709 */ { UD_Ivpcmpeqq, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1710 */ { UD_Ipopcnt, O_Gv, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1711 */ { UD_Iptest, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1712 */ { UD_Ivptest, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb|P_vexl }, + /* 1713 */ { UD_Ipcmpestri, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1714 */ { UD_Ivpcmpestri, O_Vx, O_Wx, O_Ib, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1715 */ { UD_Ipcmpestrm, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1716 */ { UD_Ivpcmpestrm, O_Vx, O_Wx, O_Ib, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1717 */ { UD_Ipcmpgtq, O_V, O_W, O_NONE, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1718 */ { UD_Ivpcmpgtq, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1719 */ { UD_Ipcmpistri, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1720 */ { UD_Ivpcmpistri, O_Vx, O_Wx, O_Ib, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1721 */ { UD_Ipcmpistrm, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1722 */ { UD_Ivpcmpistrm, O_Vx, O_Wx, O_Ib, O_NONE, P_aso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1723 */ { UD_Imovbe, O_Gv, O_Mv, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1724 */ { UD_Imovbe, O_Mv, O_Gv, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1725 */ { UD_Icrc32, O_Gy, O_Eb, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1726 */ { UD_Icrc32, O_Gy, O_Ev, O_NONE, O_NONE, P_aso|P_oso|P_rexr|P_rexw|P_rexx|P_rexb }, + /* 1727 */ { UD_Ivbroadcastss, O_V, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1728 */ { UD_Ivbroadcastsd, O_Vqq, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1729 */ { UD_Ivextractf128, O_Wdq, O_Vqq, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1730 */ { UD_Ivinsertf128, O_Vqq, O_Hqq, O_Wdq, O_Ib, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1731 */ { UD_Ivmaskmovps, O_V, O_H, O_M, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1732 */ { UD_Ivmaskmovps, O_M, O_H, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1733 */ { UD_Ivmaskmovpd, O_V, O_H, O_M, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1734 */ { UD_Ivmaskmovpd, O_M, O_H, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1735 */ { UD_Ivpermilpd, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1736 */ { UD_Ivpermilpd, O_V, O_W, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1737 */ { UD_Ivpermilps, O_Vx, O_Hx, O_Wx, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1738 */ { UD_Ivpermilps, O_Vx, O_Wx, O_Ib, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1739 */ { UD_Ivperm2f128, O_Vqq, O_Hqq, O_Wqq, O_Ib, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1740 */ { UD_Ivtestps, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1741 */ { UD_Ivtestpd, O_Vx, O_Wx, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1742 */ { UD_Ivzeroupper, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1743 */ { UD_Ivzeroall, O_NONE, O_NONE, O_NONE, O_NONE, P_none }, + /* 1744 */ { UD_Ivblendvpd, O_Vx, O_Hx, O_Wx, O_Lx, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1745 */ { UD_Ivblendvps, O_Vx, O_Hx, O_Wx, O_Lx, P_aso|P_rexr|P_rexx|P_rexb|P_vexl }, + /* 1746 */ { UD_Ivmovsd, O_V, O_H, O_U, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1747 */ { UD_Ivmovsd, O_V, O_Mq, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1748 */ { UD_Ivmovsd, O_U, O_H, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1749 */ { UD_Ivmovsd, O_Mq, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1750 */ { UD_Ivmovss, O_V, O_H, O_U, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1751 */ { UD_Ivmovss, O_V, O_Md, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1752 */ { UD_Ivmovss, O_U, O_H, O_V, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1753 */ { UD_Ivmovss, O_Md, O_V, O_NONE, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1754 */ { UD_Ivpblendvb, O_V, O_H, O_W, O_L, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1755 */ { UD_Ivpsllw, O_V, O_H, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1756 */ { UD_Ivpsllw, O_H, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1757 */ { UD_Ivpslld, O_V, O_H, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1758 */ { UD_Ivpslld, O_H, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1759 */ { UD_Ivpsllq, O_V, O_H, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, + /* 1760 */ { UD_Ivpsllq, O_H, O_V, O_W, O_NONE, P_aso|P_rexr|P_rexx|P_rexb }, +}; + + +const char* ud_mnemonics_str[] = { + "aaa", + "aad", + "aam", + "aas", + "adc", + "add", + "addpd", + "addps", + "addsd", + "addss", + "addsubpd", + "addsubps", + "aesdec", + "aesdeclast", + "aesenc", + "aesenclast", + "aesimc", + "aeskeygenassist", + "and", + "andnpd", + "andnps", + "andpd", + "andps", + "arpl", + "blendpd", + "blendps", + "blendvpd", + "blendvps", + "bound", + "bsf", + "bsr", + "bswap", + "bt", + "btc", + "btr", + "bts", + "call", + "cbw", + "cdq", + "cdqe", + "clc", + "cld", + "clflush", + "clgi", + "cli", + "clts", + "cmc", + "cmova", + "cmovae", + "cmovb", + "cmovbe", + "cmovg", + "cmovge", + "cmovl", + "cmovle", + "cmovno", + "cmovnp", + "cmovns", + "cmovnz", + "cmovo", + "cmovp", + "cmovs", + "cmovz", + "cmp", + "cmppd", + "cmpps", + "cmpsb", + "cmpsd", + "cmpsq", + "cmpss", + "cmpsw", + "cmpxchg", + "cmpxchg16b", + "cmpxchg8b", + "comisd", + "comiss", + "cpuid", + "cqo", + "crc32", + "cvtdq2pd", + "cvtdq2ps", + "cvtpd2dq", + "cvtpd2pi", + "cvtpd2ps", + "cvtpi2pd", + "cvtpi2ps", + "cvtps2dq", + "cvtps2pd", + "cvtps2pi", + "cvtsd2si", + "cvtsd2ss", + "cvtsi2sd", + "cvtsi2ss", + "cvtss2sd", + "cvtss2si", + "cvttpd2dq", + "cvttpd2pi", + "cvttps2dq", + "cvttps2pi", + "cvttsd2si", + "cvttss2si", + "cwd", + "cwde", + "daa", + "das", + "dec", + "div", + "divpd", + "divps", + "divsd", + "divss", + "dppd", + "dpps", + "emms", + "enter", + "extractps", + "f2xm1", + "fabs", + "fadd", + "faddp", + "fbld", + "fbstp", + "fchs", + "fclex", + "fcmovb", + "fcmovbe", + "fcmove", + "fcmovnb", + "fcmovnbe", + "fcmovne", + "fcmovnu", + "fcmovu", + "fcom", + "fcom2", + "fcomi", + "fcomip", + "fcomp", + "fcomp3", + "fcomp5", + "fcompp", + "fcos", + "fdecstp", + "fdiv", + "fdivp", + "fdivr", + "fdivrp", + "femms", + "ffree", + "ffreep", + "fiadd", + "ficom", + "ficomp", + "fidiv", + "fidivr", + "fild", + "fimul", + "fincstp", + "fist", + "fistp", + "fisttp", + "fisub", + "fisubr", + "fld", + "fld1", + "fldcw", + "fldenv", + "fldl2e", + "fldl2t", + "fldlg2", + "fldln2", + "fldpi", + "fldz", + "fmul", + "fmulp", + "fndisi", + "fneni", + "fninit", + "fnop", + "fnsave", + "fnsetpm", + "fnstcw", + "fnstenv", + "fnstsw", + "fpatan", + "fprem", + "fprem1", + "fptan", + "frndint", + "frstor", + "frstpm", + "fscale", + "fsin", + "fsincos", + "fsqrt", + "fst", + "fstp", + "fstp1", + "fstp8", + "fstp9", + "fsub", + "fsubp", + "fsubr", + "fsubrp", + "ftst", + "fucom", + "fucomi", + "fucomip", + "fucomp", + "fucompp", + "fxam", + "fxch", + "fxch4", + "fxch7", + "fxrstor", + "fxsave", + "fxtract", + "fyl2x", + "fyl2xp1", + "getsec", + "haddpd", + "haddps", + "hlt", + "hsubpd", + "hsubps", + "idiv", + "imul", + "in", + "inc", + "insb", + "insd", + "insertps", + "insw", + "int", + "int1", + "int3", + "into", + "invd", + "invept", + "invlpg", + "invlpga", + "invvpid", + "iretd", + "iretq", + "iretw", + "ja", + "jae", + "jb", + "jbe", + "jcxz", + "jecxz", + "jg", + "jge", + "jl", + "jle", + "jmp", + "jno", + "jnp", + "jns", + "jnz", + "jo", + "jp", + "jrcxz", + "js", + "jz", + "lahf", + "lar", + "lddqu", + "ldmxcsr", + "lds", + "lea", + "leave", + "les", + "lfence", + "lfs", + "lgdt", + "lgs", + "lidt", + "lldt", + "lmsw", + "lock", + "lodsb", + "lodsd", + "lodsq", + "lodsw", + "loop", + "loope", + "loopne", + "lsl", + "lss", + "ltr", + "maskmovdqu", + "maskmovq", + "maxpd", + "maxps", + "maxsd", + "maxss", + "mfence", + "minpd", + "minps", + "minsd", + "minss", + "monitor", + "montmul", + "mov", + "movapd", + "movaps", + "movbe", + "movd", + "movddup", + "movdq2q", + "movdqa", + "movdqu", + "movhlps", + "movhpd", + "movhps", + "movlhps", + "movlpd", + "movlps", + "movmskpd", + "movmskps", + "movntdq", + "movntdqa", + "movnti", + "movntpd", + "movntps", + "movntq", + "movq", + "movq2dq", + "movsb", + "movsd", + "movshdup", + "movsldup", + "movsq", + "movss", + "movsw", + "movsx", + "movsxd", + "movupd", + "movups", + "movzx", + "mpsadbw", + "mul", + "mulpd", + "mulps", + "mulsd", + "mulss", + "mwait", + "neg", + "nop", + "not", + "or", + "orpd", + "orps", + "out", + "outsb", + "outsd", + "outsw", + "pabsb", + "pabsd", + "pabsw", + "packssdw", + "packsswb", + "packusdw", + "packuswb", + "paddb", + "paddd", + "paddq", + "paddsb", + "paddsw", + "paddusb", + "paddusw", + "paddw", + "palignr", + "pand", + "pandn", + "pavgb", + "pavgusb", + "pavgw", + "pblendvb", + "pblendw", + "pclmulqdq", + "pcmpeqb", + "pcmpeqd", + "pcmpeqq", + "pcmpeqw", + "pcmpestri", + "pcmpestrm", + "pcmpgtb", + "pcmpgtd", + "pcmpgtq", + "pcmpgtw", + "pcmpistri", + "pcmpistrm", + "pextrb", + "pextrd", + "pextrq", + "pextrw", + "pf2id", + "pf2iw", + "pfacc", + "pfadd", + "pfcmpeq", + "pfcmpge", + "pfcmpgt", + "pfmax", + "pfmin", + "pfmul", + "pfnacc", + "pfpnacc", + "pfrcp", + "pfrcpit1", + "pfrcpit2", + "pfrsqit1", + "pfrsqrt", + "pfsub", + "pfsubr", + "phaddd", + "phaddsw", + "phaddw", + "phminposuw", + "phsubd", + "phsubsw", + "phsubw", + "pi2fd", + "pi2fw", + "pinsrb", + "pinsrd", + "pinsrq", + "pinsrw", + "pmaddubsw", + "pmaddwd", + "pmaxsb", + "pmaxsd", + "pmaxsw", + "pmaxub", + "pmaxud", + "pmaxuw", + "pminsb", + "pminsd", + "pminsw", + "pminub", + "pminud", + "pminuw", + "pmovmskb", + "pmovsxbd", + "pmovsxbq", + "pmovsxbw", + "pmovsxdq", + "pmovsxwd", + "pmovsxwq", + "pmovzxbd", + "pmovzxbq", + "pmovzxbw", + "pmovzxdq", + "pmovzxwd", + "pmovzxwq", + "pmuldq", + "pmulhrsw", + "pmulhrw", + "pmulhuw", + "pmulhw", + "pmulld", + "pmullw", + "pmuludq", + "pop", + "popa", + "popad", + "popcnt", + "popfd", + "popfq", + "popfw", + "por", + "prefetch", + "prefetchnta", + "prefetcht0", + "prefetcht1", + "prefetcht2", + "psadbw", + "pshufb", + "pshufd", + "pshufhw", + "pshuflw", + "pshufw", + "psignb", + "psignd", + "psignw", + "pslld", + "pslldq", + "psllq", + "psllw", + "psrad", + "psraw", + "psrld", + "psrldq", + "psrlq", + "psrlw", + "psubb", + "psubd", + "psubq", + "psubsb", + "psubsw", + "psubusb", + "psubusw", + "psubw", + "pswapd", + "ptest", + "punpckhbw", + "punpckhdq", + "punpckhqdq", + "punpckhwd", + "punpcklbw", + "punpckldq", + "punpcklqdq", + "punpcklwd", + "push", + "pusha", + "pushad", + "pushfd", + "pushfq", + "pushfw", + "pxor", + "rcl", + "rcpps", + "rcpss", + "rcr", + "rdmsr", + "rdpmc", + "rdrand", + "rdtsc", + "rdtscp", + "rep", + "repne", + "ret", + "retf", + "rol", + "ror", + "roundpd", + "roundps", + "roundsd", + "roundss", + "rsm", + "rsqrtps", + "rsqrtss", + "sahf", + "salc", + "sar", + "sbb", + "scasb", + "scasd", + "scasq", + "scasw", + "seta", + "setae", + "setb", + "setbe", + "setg", + "setge", + "setl", + "setle", + "setno", + "setnp", + "setns", + "setnz", + "seto", + "setp", + "sets", + "setz", + "sfence", + "sgdt", + "shl", + "shld", + "shr", + "shrd", + "shufpd", + "shufps", + "sidt", + "skinit", + "sldt", + "smsw", + "sqrtpd", + "sqrtps", + "sqrtsd", + "sqrtss", + "stc", + "std", + "stgi", + "sti", + "stmxcsr", + "stosb", + "stosd", + "stosq", + "stosw", + "str", + "sub", + "subpd", + "subps", + "subsd", + "subss", + "swapgs", + "syscall", + "sysenter", + "sysexit", + "sysret", + "test", + "ucomisd", + "ucomiss", + "ud2", + "unpckhpd", + "unpckhps", + "unpcklpd", + "unpcklps", + "vaddpd", + "vaddps", + "vaddsd", + "vaddss", + "vaddsubpd", + "vaddsubps", + "vaesdec", + "vaesdeclast", + "vaesenc", + "vaesenclast", + "vaesimc", + "vaeskeygenassist", + "vandnpd", + "vandnps", + "vandpd", + "vandps", + "vblendpd", + "vblendps", + "vblendvpd", + "vblendvps", + "vbroadcastsd", + "vbroadcastss", + "vcmppd", + "vcmpps", + "vcmpsd", + "vcmpss", + "vcomisd", + "vcomiss", + "vcvtdq2pd", + "vcvtdq2ps", + "vcvtpd2dq", + "vcvtpd2ps", + "vcvtps2dq", + "vcvtps2pd", + "vcvtsd2si", + "vcvtsd2ss", + "vcvtsi2sd", + "vcvtsi2ss", + "vcvtss2sd", + "vcvtss2si", + "vcvttpd2dq", + "vcvttps2dq", + "vcvttsd2si", + "vcvttss2si", + "vdivpd", + "vdivps", + "vdivsd", + "vdivss", + "vdppd", + "vdpps", + "verr", + "verw", + "vextractf128", + "vextractps", + "vhaddpd", + "vhaddps", + "vhsubpd", + "vhsubps", + "vinsertf128", + "vinsertps", + "vlddqu", + "vmaskmovdqu", + "vmaskmovpd", + "vmaskmovps", + "vmaxpd", + "vmaxps", + "vmaxsd", + "vmaxss", + "vmcall", + "vmclear", + "vminpd", + "vminps", + "vminsd", + "vminss", + "vmlaunch", + "vmload", + "vmmcall", + "vmovapd", + "vmovaps", + "vmovd", + "vmovddup", + "vmovdqa", + "vmovdqu", + "vmovhlps", + "vmovhpd", + "vmovhps", + "vmovlhps", + "vmovlpd", + "vmovlps", + "vmovmskpd", + "vmovmskps", + "vmovntdq", + "vmovntdqa", + "vmovntpd", + "vmovntps", + "vmovq", + "vmovsd", + "vmovshdup", + "vmovsldup", + "vmovss", + "vmovupd", + "vmovups", + "vmpsadbw", + "vmptrld", + "vmptrst", + "vmread", + "vmresume", + "vmrun", + "vmsave", + "vmulpd", + "vmulps", + "vmulsd", + "vmulss", + "vmwrite", + "vmxoff", + "vmxon", + "vorpd", + "vorps", + "vpabsb", + "vpabsd", + "vpabsw", + "vpackssdw", + "vpacksswb", + "vpackusdw", + "vpackuswb", + "vpaddb", + "vpaddd", + "vpaddq", + "vpaddsb", + "vpaddsw", + "vpaddusb", + "vpaddusw", + "vpaddw", + "vpalignr", + "vpand", + "vpandn", + "vpavgb", + "vpavgw", + "vpblendvb", + "vpblendw", + "vpclmulqdq", + "vpcmpeqb", + "vpcmpeqd", + "vpcmpeqq", + "vpcmpeqw", + "vpcmpestri", + "vpcmpestrm", + "vpcmpgtb", + "vpcmpgtd", + "vpcmpgtq", + "vpcmpgtw", + "vpcmpistri", + "vpcmpistrm", + "vperm2f128", + "vpermilpd", + "vpermilps", + "vpextrb", + "vpextrd", + "vpextrq", + "vpextrw", + "vphaddd", + "vphaddsw", + "vphaddw", + "vphminposuw", + "vphsubd", + "vphsubsw", + "vphsubw", + "vpinsrb", + "vpinsrd", + "vpinsrq", + "vpinsrw", + "vpmaddubsw", + "vpmaddwd", + "vpmaxsb", + "vpmaxsd", + "vpmaxsw", + "vpmaxub", + "vpmaxud", + "vpmaxuw", + "vpminsb", + "vpminsd", + "vpminsw", + "vpminub", + "vpminud", + "vpminuw", + "vpmovmskb", + "vpmovsxbd", + "vpmovsxbq", + "vpmovsxbw", + "vpmovsxwd", + "vpmovsxwq", + "vpmovzxbd", + "vpmovzxbq", + "vpmovzxbw", + "vpmovzxdq", + "vpmovzxwd", + "vpmovzxwq", + "vpmuldq", + "vpmulhrsw", + "vpmulhuw", + "vpmulhw", + "vpmulld", + "vpmullw", + "vpor", + "vpsadbw", + "vpshufb", + "vpshufd", + "vpshufhw", + "vpshuflw", + "vpsignb", + "vpsignd", + "vpsignw", + "vpslld", + "vpslldq", + "vpsllq", + "vpsllw", + "vpsrad", + "vpsraw", + "vpsrld", + "vpsrldq", + "vpsrlq", + "vpsrlw", + "vpsubb", + "vpsubd", + "vpsubq", + "vpsubsb", + "vpsubsw", + "vpsubusb", + "vpsubusw", + "vpsubw", + "vptest", + "vpunpckhbw", + "vpunpckhdq", + "vpunpckhqdq", + "vpunpckhwd", + "vpunpcklbw", + "vpunpckldq", + "vpunpcklqdq", + "vpunpcklwd", + "vpxor", + "vrcpps", + "vrcpss", + "vroundpd", + "vroundps", + "vroundsd", + "vroundss", + "vrsqrtps", + "vrsqrtss", + "vshufpd", + "vshufps", + "vsqrtpd", + "vsqrtps", + "vsqrtsd", + "vsqrtss", + "vstmxcsr", + "vsubpd", + "vsubps", + "vsubsd", + "vsubss", + "vtestpd", + "vtestps", + "vucomisd", + "vucomiss", + "vunpckhpd", + "vunpckhps", + "vunpcklpd", + "vunpcklps", + "vxorpd", + "vxorps", + "vzeroall", + "vzeroupper", + "wait", + "wbinvd", + "wrmsr", + "xadd", + "xchg", + "xcryptcbc", + "xcryptcfb", + "xcryptctr", + "xcryptecb", + "xcryptofb", + "xgetbv", + "xlatb", + "xor", + "xorpd", + "xorps", + "xrstor", + "xsave", + "xsetbv", + "xsha1", + "xsha256", + "xstore", + "invalid", + "3dnow", + "none", + "db", + "pause" +}; diff --git a/deps/extra/udis86/libudis86/itab.h b/deps/extra/udis86/libudis86/itab.h new file mode 100644 index 0000000..3d54c43 --- /dev/null +++ b/deps/extra/udis86/libudis86/itab.h @@ -0,0 +1,939 @@ +#ifndef UD_ITAB_H +#define UD_ITAB_H + +/* itab.h -- generated by udis86:scripts/ud_itab.py, do no edit */ + +/* ud_table_type -- lookup table types (see decode.c) */ +enum ud_table_type { + UD_TAB__OPC_VEX, + UD_TAB__OPC_TABLE, + UD_TAB__OPC_X87, + UD_TAB__OPC_MOD, + UD_TAB__OPC_RM, + UD_TAB__OPC_OSIZE, + UD_TAB__OPC_MODE, + UD_TAB__OPC_VEX_L, + UD_TAB__OPC_3DNOW, + UD_TAB__OPC_REG, + UD_TAB__OPC_ASIZE, + UD_TAB__OPC_VEX_W, + UD_TAB__OPC_SSE, + UD_TAB__OPC_VENDOR +}; + +/* ud_mnemonic -- mnemonic constants */ +enum ud_mnemonic_code { + UD_Iaaa, + UD_Iaad, + UD_Iaam, + UD_Iaas, + UD_Iadc, + UD_Iadd, + UD_Iaddpd, + UD_Iaddps, + UD_Iaddsd, + UD_Iaddss, + UD_Iaddsubpd, + UD_Iaddsubps, + UD_Iaesdec, + UD_Iaesdeclast, + UD_Iaesenc, + UD_Iaesenclast, + UD_Iaesimc, + UD_Iaeskeygenassist, + UD_Iand, + UD_Iandnpd, + UD_Iandnps, + UD_Iandpd, + UD_Iandps, + UD_Iarpl, + UD_Iblendpd, + UD_Iblendps, + UD_Iblendvpd, + UD_Iblendvps, + UD_Ibound, + UD_Ibsf, + UD_Ibsr, + UD_Ibswap, + UD_Ibt, + UD_Ibtc, + UD_Ibtr, + UD_Ibts, + UD_Icall, + UD_Icbw, + UD_Icdq, + UD_Icdqe, + UD_Iclc, + UD_Icld, + UD_Iclflush, + UD_Iclgi, + UD_Icli, + UD_Iclts, + UD_Icmc, + UD_Icmova, + UD_Icmovae, + UD_Icmovb, + UD_Icmovbe, + UD_Icmovg, + UD_Icmovge, + UD_Icmovl, + UD_Icmovle, + UD_Icmovno, + UD_Icmovnp, + UD_Icmovns, + UD_Icmovnz, + UD_Icmovo, + UD_Icmovp, + UD_Icmovs, + UD_Icmovz, + UD_Icmp, + UD_Icmppd, + UD_Icmpps, + UD_Icmpsb, + UD_Icmpsd, + UD_Icmpsq, + UD_Icmpss, + UD_Icmpsw, + UD_Icmpxchg, + UD_Icmpxchg16b, + UD_Icmpxchg8b, + UD_Icomisd, + UD_Icomiss, + UD_Icpuid, + UD_Icqo, + UD_Icrc32, + UD_Icvtdq2pd, + UD_Icvtdq2ps, + UD_Icvtpd2dq, + UD_Icvtpd2pi, + UD_Icvtpd2ps, + UD_Icvtpi2pd, + UD_Icvtpi2ps, + UD_Icvtps2dq, + UD_Icvtps2pd, + UD_Icvtps2pi, + UD_Icvtsd2si, + UD_Icvtsd2ss, + UD_Icvtsi2sd, + UD_Icvtsi2ss, + UD_Icvtss2sd, + UD_Icvtss2si, + UD_Icvttpd2dq, + UD_Icvttpd2pi, + UD_Icvttps2dq, + UD_Icvttps2pi, + UD_Icvttsd2si, + UD_Icvttss2si, + UD_Icwd, + UD_Icwde, + UD_Idaa, + UD_Idas, + UD_Idec, + UD_Idiv, + UD_Idivpd, + UD_Idivps, + UD_Idivsd, + UD_Idivss, + UD_Idppd, + UD_Idpps, + UD_Iemms, + UD_Ienter, + UD_Iextractps, + UD_If2xm1, + UD_Ifabs, + UD_Ifadd, + UD_Ifaddp, + UD_Ifbld, + UD_Ifbstp, + UD_Ifchs, + UD_Ifclex, + UD_Ifcmovb, + UD_Ifcmovbe, + UD_Ifcmove, + UD_Ifcmovnb, + UD_Ifcmovnbe, + UD_Ifcmovne, + UD_Ifcmovnu, + UD_Ifcmovu, + UD_Ifcom, + UD_Ifcom2, + UD_Ifcomi, + UD_Ifcomip, + UD_Ifcomp, + UD_Ifcomp3, + UD_Ifcomp5, + UD_Ifcompp, + UD_Ifcos, + UD_Ifdecstp, + UD_Ifdiv, + UD_Ifdivp, + UD_Ifdivr, + UD_Ifdivrp, + UD_Ifemms, + UD_Iffree, + UD_Iffreep, + UD_Ifiadd, + UD_Ificom, + UD_Ificomp, + UD_Ifidiv, + UD_Ifidivr, + UD_Ifild, + UD_Ifimul, + UD_Ifincstp, + UD_Ifist, + UD_Ifistp, + UD_Ifisttp, + UD_Ifisub, + UD_Ifisubr, + UD_Ifld, + UD_Ifld1, + UD_Ifldcw, + UD_Ifldenv, + UD_Ifldl2e, + UD_Ifldl2t, + UD_Ifldlg2, + UD_Ifldln2, + UD_Ifldpi, + UD_Ifldz, + UD_Ifmul, + UD_Ifmulp, + UD_Ifndisi, + UD_Ifneni, + UD_Ifninit, + UD_Ifnop, + UD_Ifnsave, + UD_Ifnsetpm, + UD_Ifnstcw, + UD_Ifnstenv, + UD_Ifnstsw, + UD_Ifpatan, + UD_Ifprem, + UD_Ifprem1, + UD_Ifptan, + UD_Ifrndint, + UD_Ifrstor, + UD_Ifrstpm, + UD_Ifscale, + UD_Ifsin, + UD_Ifsincos, + UD_Ifsqrt, + UD_Ifst, + UD_Ifstp, + UD_Ifstp1, + UD_Ifstp8, + UD_Ifstp9, + UD_Ifsub, + UD_Ifsubp, + UD_Ifsubr, + UD_Ifsubrp, + UD_Iftst, + UD_Ifucom, + UD_Ifucomi, + UD_Ifucomip, + UD_Ifucomp, + UD_Ifucompp, + UD_Ifxam, + UD_Ifxch, + UD_Ifxch4, + UD_Ifxch7, + UD_Ifxrstor, + UD_Ifxsave, + UD_Ifxtract, + UD_Ifyl2x, + UD_Ifyl2xp1, + UD_Igetsec, + UD_Ihaddpd, + UD_Ihaddps, + UD_Ihlt, + UD_Ihsubpd, + UD_Ihsubps, + UD_Iidiv, + UD_Iimul, + UD_Iin, + UD_Iinc, + UD_Iinsb, + UD_Iinsd, + UD_Iinsertps, + UD_Iinsw, + UD_Iint, + UD_Iint1, + UD_Iint3, + UD_Iinto, + UD_Iinvd, + UD_Iinvept, + UD_Iinvlpg, + UD_Iinvlpga, + UD_Iinvvpid, + UD_Iiretd, + UD_Iiretq, + UD_Iiretw, + UD_Ija, + UD_Ijae, + UD_Ijb, + UD_Ijbe, + UD_Ijcxz, + UD_Ijecxz, + UD_Ijg, + UD_Ijge, + UD_Ijl, + UD_Ijle, + UD_Ijmp, + UD_Ijno, + UD_Ijnp, + UD_Ijns, + UD_Ijnz, + UD_Ijo, + UD_Ijp, + UD_Ijrcxz, + UD_Ijs, + UD_Ijz, + UD_Ilahf, + UD_Ilar, + UD_Ilddqu, + UD_Ildmxcsr, + UD_Ilds, + UD_Ilea, + UD_Ileave, + UD_Iles, + UD_Ilfence, + UD_Ilfs, + UD_Ilgdt, + UD_Ilgs, + UD_Ilidt, + UD_Illdt, + UD_Ilmsw, + UD_Ilock, + UD_Ilodsb, + UD_Ilodsd, + UD_Ilodsq, + UD_Ilodsw, + UD_Iloop, + UD_Iloope, + UD_Iloopne, + UD_Ilsl, + UD_Ilss, + UD_Iltr, + UD_Imaskmovdqu, + UD_Imaskmovq, + UD_Imaxpd, + UD_Imaxps, + UD_Imaxsd, + UD_Imaxss, + UD_Imfence, + UD_Iminpd, + UD_Iminps, + UD_Iminsd, + UD_Iminss, + UD_Imonitor, + UD_Imontmul, + UD_Imov, + UD_Imovapd, + UD_Imovaps, + UD_Imovbe, + UD_Imovd, + UD_Imovddup, + UD_Imovdq2q, + UD_Imovdqa, + UD_Imovdqu, + UD_Imovhlps, + UD_Imovhpd, + UD_Imovhps, + UD_Imovlhps, + UD_Imovlpd, + UD_Imovlps, + UD_Imovmskpd, + UD_Imovmskps, + UD_Imovntdq, + UD_Imovntdqa, + UD_Imovnti, + UD_Imovntpd, + UD_Imovntps, + UD_Imovntq, + UD_Imovq, + UD_Imovq2dq, + UD_Imovsb, + UD_Imovsd, + UD_Imovshdup, + UD_Imovsldup, + UD_Imovsq, + UD_Imovss, + UD_Imovsw, + UD_Imovsx, + UD_Imovsxd, + UD_Imovupd, + UD_Imovups, + UD_Imovzx, + UD_Impsadbw, + UD_Imul, + UD_Imulpd, + UD_Imulps, + UD_Imulsd, + UD_Imulss, + UD_Imwait, + UD_Ineg, + UD_Inop, + UD_Inot, + UD_Ior, + UD_Iorpd, + UD_Iorps, + UD_Iout, + UD_Ioutsb, + UD_Ioutsd, + UD_Ioutsw, + UD_Ipabsb, + UD_Ipabsd, + UD_Ipabsw, + UD_Ipackssdw, + UD_Ipacksswb, + UD_Ipackusdw, + UD_Ipackuswb, + UD_Ipaddb, + UD_Ipaddd, + UD_Ipaddq, + UD_Ipaddsb, + UD_Ipaddsw, + UD_Ipaddusb, + UD_Ipaddusw, + UD_Ipaddw, + UD_Ipalignr, + UD_Ipand, + UD_Ipandn, + UD_Ipavgb, + UD_Ipavgusb, + UD_Ipavgw, + UD_Ipblendvb, + UD_Ipblendw, + UD_Ipclmulqdq, + UD_Ipcmpeqb, + UD_Ipcmpeqd, + UD_Ipcmpeqq, + UD_Ipcmpeqw, + UD_Ipcmpestri, + UD_Ipcmpestrm, + UD_Ipcmpgtb, + UD_Ipcmpgtd, + UD_Ipcmpgtq, + UD_Ipcmpgtw, + UD_Ipcmpistri, + UD_Ipcmpistrm, + UD_Ipextrb, + UD_Ipextrd, + UD_Ipextrq, + UD_Ipextrw, + UD_Ipf2id, + UD_Ipf2iw, + UD_Ipfacc, + UD_Ipfadd, + UD_Ipfcmpeq, + UD_Ipfcmpge, + UD_Ipfcmpgt, + UD_Ipfmax, + UD_Ipfmin, + UD_Ipfmul, + UD_Ipfnacc, + UD_Ipfpnacc, + UD_Ipfrcp, + UD_Ipfrcpit1, + UD_Ipfrcpit2, + UD_Ipfrsqit1, + UD_Ipfrsqrt, + UD_Ipfsub, + UD_Ipfsubr, + UD_Iphaddd, + UD_Iphaddsw, + UD_Iphaddw, + UD_Iphminposuw, + UD_Iphsubd, + UD_Iphsubsw, + UD_Iphsubw, + UD_Ipi2fd, + UD_Ipi2fw, + UD_Ipinsrb, + UD_Ipinsrd, + UD_Ipinsrq, + UD_Ipinsrw, + UD_Ipmaddubsw, + UD_Ipmaddwd, + UD_Ipmaxsb, + UD_Ipmaxsd, + UD_Ipmaxsw, + UD_Ipmaxub, + UD_Ipmaxud, + UD_Ipmaxuw, + UD_Ipminsb, + UD_Ipminsd, + UD_Ipminsw, + UD_Ipminub, + UD_Ipminud, + UD_Ipminuw, + UD_Ipmovmskb, + UD_Ipmovsxbd, + UD_Ipmovsxbq, + UD_Ipmovsxbw, + UD_Ipmovsxdq, + UD_Ipmovsxwd, + UD_Ipmovsxwq, + UD_Ipmovzxbd, + UD_Ipmovzxbq, + UD_Ipmovzxbw, + UD_Ipmovzxdq, + UD_Ipmovzxwd, + UD_Ipmovzxwq, + UD_Ipmuldq, + UD_Ipmulhrsw, + UD_Ipmulhrw, + UD_Ipmulhuw, + UD_Ipmulhw, + UD_Ipmulld, + UD_Ipmullw, + UD_Ipmuludq, + UD_Ipop, + UD_Ipopa, + UD_Ipopad, + UD_Ipopcnt, + UD_Ipopfd, + UD_Ipopfq, + UD_Ipopfw, + UD_Ipor, + UD_Iprefetch, + UD_Iprefetchnta, + UD_Iprefetcht0, + UD_Iprefetcht1, + UD_Iprefetcht2, + UD_Ipsadbw, + UD_Ipshufb, + UD_Ipshufd, + UD_Ipshufhw, + UD_Ipshuflw, + UD_Ipshufw, + UD_Ipsignb, + UD_Ipsignd, + UD_Ipsignw, + UD_Ipslld, + UD_Ipslldq, + UD_Ipsllq, + UD_Ipsllw, + UD_Ipsrad, + UD_Ipsraw, + UD_Ipsrld, + UD_Ipsrldq, + UD_Ipsrlq, + UD_Ipsrlw, + UD_Ipsubb, + UD_Ipsubd, + UD_Ipsubq, + UD_Ipsubsb, + UD_Ipsubsw, + UD_Ipsubusb, + UD_Ipsubusw, + UD_Ipsubw, + UD_Ipswapd, + UD_Iptest, + UD_Ipunpckhbw, + UD_Ipunpckhdq, + UD_Ipunpckhqdq, + UD_Ipunpckhwd, + UD_Ipunpcklbw, + UD_Ipunpckldq, + UD_Ipunpcklqdq, + UD_Ipunpcklwd, + UD_Ipush, + UD_Ipusha, + UD_Ipushad, + UD_Ipushfd, + UD_Ipushfq, + UD_Ipushfw, + UD_Ipxor, + UD_Ircl, + UD_Ircpps, + UD_Ircpss, + UD_Ircr, + UD_Irdmsr, + UD_Irdpmc, + UD_Irdrand, + UD_Irdtsc, + UD_Irdtscp, + UD_Irep, + UD_Irepne, + UD_Iret, + UD_Iretf, + UD_Irol, + UD_Iror, + UD_Iroundpd, + UD_Iroundps, + UD_Iroundsd, + UD_Iroundss, + UD_Irsm, + UD_Irsqrtps, + UD_Irsqrtss, + UD_Isahf, + UD_Isalc, + UD_Isar, + UD_Isbb, + UD_Iscasb, + UD_Iscasd, + UD_Iscasq, + UD_Iscasw, + UD_Iseta, + UD_Isetae, + UD_Isetb, + UD_Isetbe, + UD_Isetg, + UD_Isetge, + UD_Isetl, + UD_Isetle, + UD_Isetno, + UD_Isetnp, + UD_Isetns, + UD_Isetnz, + UD_Iseto, + UD_Isetp, + UD_Isets, + UD_Isetz, + UD_Isfence, + UD_Isgdt, + UD_Ishl, + UD_Ishld, + UD_Ishr, + UD_Ishrd, + UD_Ishufpd, + UD_Ishufps, + UD_Isidt, + UD_Iskinit, + UD_Isldt, + UD_Ismsw, + UD_Isqrtpd, + UD_Isqrtps, + UD_Isqrtsd, + UD_Isqrtss, + UD_Istc, + UD_Istd, + UD_Istgi, + UD_Isti, + UD_Istmxcsr, + UD_Istosb, + UD_Istosd, + UD_Istosq, + UD_Istosw, + UD_Istr, + UD_Isub, + UD_Isubpd, + UD_Isubps, + UD_Isubsd, + UD_Isubss, + UD_Iswapgs, + UD_Isyscall, + UD_Isysenter, + UD_Isysexit, + UD_Isysret, + UD_Itest, + UD_Iucomisd, + UD_Iucomiss, + UD_Iud2, + UD_Iunpckhpd, + UD_Iunpckhps, + UD_Iunpcklpd, + UD_Iunpcklps, + UD_Ivaddpd, + UD_Ivaddps, + UD_Ivaddsd, + UD_Ivaddss, + UD_Ivaddsubpd, + UD_Ivaddsubps, + UD_Ivaesdec, + UD_Ivaesdeclast, + UD_Ivaesenc, + UD_Ivaesenclast, + UD_Ivaesimc, + UD_Ivaeskeygenassist, + UD_Ivandnpd, + UD_Ivandnps, + UD_Ivandpd, + UD_Ivandps, + UD_Ivblendpd, + UD_Ivblendps, + UD_Ivblendvpd, + UD_Ivblendvps, + UD_Ivbroadcastsd, + UD_Ivbroadcastss, + UD_Ivcmppd, + UD_Ivcmpps, + UD_Ivcmpsd, + UD_Ivcmpss, + UD_Ivcomisd, + UD_Ivcomiss, + UD_Ivcvtdq2pd, + UD_Ivcvtdq2ps, + UD_Ivcvtpd2dq, + UD_Ivcvtpd2ps, + UD_Ivcvtps2dq, + UD_Ivcvtps2pd, + UD_Ivcvtsd2si, + UD_Ivcvtsd2ss, + UD_Ivcvtsi2sd, + UD_Ivcvtsi2ss, + UD_Ivcvtss2sd, + UD_Ivcvtss2si, + UD_Ivcvttpd2dq, + UD_Ivcvttps2dq, + UD_Ivcvttsd2si, + UD_Ivcvttss2si, + UD_Ivdivpd, + UD_Ivdivps, + UD_Ivdivsd, + UD_Ivdivss, + UD_Ivdppd, + UD_Ivdpps, + UD_Iverr, + UD_Iverw, + UD_Ivextractf128, + UD_Ivextractps, + UD_Ivhaddpd, + UD_Ivhaddps, + UD_Ivhsubpd, + UD_Ivhsubps, + UD_Ivinsertf128, + UD_Ivinsertps, + UD_Ivlddqu, + UD_Ivmaskmovdqu, + UD_Ivmaskmovpd, + UD_Ivmaskmovps, + UD_Ivmaxpd, + UD_Ivmaxps, + UD_Ivmaxsd, + UD_Ivmaxss, + UD_Ivmcall, + UD_Ivmclear, + UD_Ivminpd, + UD_Ivminps, + UD_Ivminsd, + UD_Ivminss, + UD_Ivmlaunch, + UD_Ivmload, + UD_Ivmmcall, + UD_Ivmovapd, + UD_Ivmovaps, + UD_Ivmovd, + UD_Ivmovddup, + UD_Ivmovdqa, + UD_Ivmovdqu, + UD_Ivmovhlps, + UD_Ivmovhpd, + UD_Ivmovhps, + UD_Ivmovlhps, + UD_Ivmovlpd, + UD_Ivmovlps, + UD_Ivmovmskpd, + UD_Ivmovmskps, + UD_Ivmovntdq, + UD_Ivmovntdqa, + UD_Ivmovntpd, + UD_Ivmovntps, + UD_Ivmovq, + UD_Ivmovsd, + UD_Ivmovshdup, + UD_Ivmovsldup, + UD_Ivmovss, + UD_Ivmovupd, + UD_Ivmovups, + UD_Ivmpsadbw, + UD_Ivmptrld, + UD_Ivmptrst, + UD_Ivmread, + UD_Ivmresume, + UD_Ivmrun, + UD_Ivmsave, + UD_Ivmulpd, + UD_Ivmulps, + UD_Ivmulsd, + UD_Ivmulss, + UD_Ivmwrite, + UD_Ivmxoff, + UD_Ivmxon, + UD_Ivorpd, + UD_Ivorps, + UD_Ivpabsb, + UD_Ivpabsd, + UD_Ivpabsw, + UD_Ivpackssdw, + UD_Ivpacksswb, + UD_Ivpackusdw, + UD_Ivpackuswb, + UD_Ivpaddb, + UD_Ivpaddd, + UD_Ivpaddq, + UD_Ivpaddsb, + UD_Ivpaddsw, + UD_Ivpaddusb, + UD_Ivpaddusw, + UD_Ivpaddw, + UD_Ivpalignr, + UD_Ivpand, + UD_Ivpandn, + UD_Ivpavgb, + UD_Ivpavgw, + UD_Ivpblendvb, + UD_Ivpblendw, + UD_Ivpclmulqdq, + UD_Ivpcmpeqb, + UD_Ivpcmpeqd, + UD_Ivpcmpeqq, + UD_Ivpcmpeqw, + UD_Ivpcmpestri, + UD_Ivpcmpestrm, + UD_Ivpcmpgtb, + UD_Ivpcmpgtd, + UD_Ivpcmpgtq, + UD_Ivpcmpgtw, + UD_Ivpcmpistri, + UD_Ivpcmpistrm, + UD_Ivperm2f128, + UD_Ivpermilpd, + UD_Ivpermilps, + UD_Ivpextrb, + UD_Ivpextrd, + UD_Ivpextrq, + UD_Ivpextrw, + UD_Ivphaddd, + UD_Ivphaddsw, + UD_Ivphaddw, + UD_Ivphminposuw, + UD_Ivphsubd, + UD_Ivphsubsw, + UD_Ivphsubw, + UD_Ivpinsrb, + UD_Ivpinsrd, + UD_Ivpinsrq, + UD_Ivpinsrw, + UD_Ivpmaddubsw, + UD_Ivpmaddwd, + UD_Ivpmaxsb, + UD_Ivpmaxsd, + UD_Ivpmaxsw, + UD_Ivpmaxub, + UD_Ivpmaxud, + UD_Ivpmaxuw, + UD_Ivpminsb, + UD_Ivpminsd, + UD_Ivpminsw, + UD_Ivpminub, + UD_Ivpminud, + UD_Ivpminuw, + UD_Ivpmovmskb, + UD_Ivpmovsxbd, + UD_Ivpmovsxbq, + UD_Ivpmovsxbw, + UD_Ivpmovsxwd, + UD_Ivpmovsxwq, + UD_Ivpmovzxbd, + UD_Ivpmovzxbq, + UD_Ivpmovzxbw, + UD_Ivpmovzxdq, + UD_Ivpmovzxwd, + UD_Ivpmovzxwq, + UD_Ivpmuldq, + UD_Ivpmulhrsw, + UD_Ivpmulhuw, + UD_Ivpmulhw, + UD_Ivpmulld, + UD_Ivpmullw, + UD_Ivpor, + UD_Ivpsadbw, + UD_Ivpshufb, + UD_Ivpshufd, + UD_Ivpshufhw, + UD_Ivpshuflw, + UD_Ivpsignb, + UD_Ivpsignd, + UD_Ivpsignw, + UD_Ivpslld, + UD_Ivpslldq, + UD_Ivpsllq, + UD_Ivpsllw, + UD_Ivpsrad, + UD_Ivpsraw, + UD_Ivpsrld, + UD_Ivpsrldq, + UD_Ivpsrlq, + UD_Ivpsrlw, + UD_Ivpsubb, + UD_Ivpsubd, + UD_Ivpsubq, + UD_Ivpsubsb, + UD_Ivpsubsw, + UD_Ivpsubusb, + UD_Ivpsubusw, + UD_Ivpsubw, + UD_Ivptest, + UD_Ivpunpckhbw, + UD_Ivpunpckhdq, + UD_Ivpunpckhqdq, + UD_Ivpunpckhwd, + UD_Ivpunpcklbw, + UD_Ivpunpckldq, + UD_Ivpunpcklqdq, + UD_Ivpunpcklwd, + UD_Ivpxor, + UD_Ivrcpps, + UD_Ivrcpss, + UD_Ivroundpd, + UD_Ivroundps, + UD_Ivroundsd, + UD_Ivroundss, + UD_Ivrsqrtps, + UD_Ivrsqrtss, + UD_Ivshufpd, + UD_Ivshufps, + UD_Ivsqrtpd, + UD_Ivsqrtps, + UD_Ivsqrtsd, + UD_Ivsqrtss, + UD_Ivstmxcsr, + UD_Ivsubpd, + UD_Ivsubps, + UD_Ivsubsd, + UD_Ivsubss, + UD_Ivtestpd, + UD_Ivtestps, + UD_Ivucomisd, + UD_Ivucomiss, + UD_Ivunpckhpd, + UD_Ivunpckhps, + UD_Ivunpcklpd, + UD_Ivunpcklps, + UD_Ivxorpd, + UD_Ivxorps, + UD_Ivzeroall, + UD_Ivzeroupper, + UD_Iwait, + UD_Iwbinvd, + UD_Iwrmsr, + UD_Ixadd, + UD_Ixchg, + UD_Ixcryptcbc, + UD_Ixcryptcfb, + UD_Ixcryptctr, + UD_Ixcryptecb, + UD_Ixcryptofb, + UD_Ixgetbv, + UD_Ixlatb, + UD_Ixor, + UD_Ixorpd, + UD_Ixorps, + UD_Ixrstor, + UD_Ixsave, + UD_Ixsetbv, + UD_Ixsha1, + UD_Ixsha256, + UD_Ixstore, + UD_Iinvalid, + UD_I3dnow, + UD_Inone, + UD_Idb, + UD_Ipause, + UD_MAX_MNEMONIC_CODE +}; + +extern const char * ud_mnemonics_str[]; + +#endif /* UD_ITAB_H */ diff --git a/deps/libtomcrypt b/deps/libtomcrypt new file mode 160000 index 0000000..fae62af --- /dev/null +++ b/deps/libtomcrypt @@ -0,0 +1 @@ +Subproject commit fae62af0ab16f469c2512ec04575dd60ca018657 diff --git a/deps/libtommath b/deps/libtommath new file mode 160000 index 0000000..0df542c --- /dev/null +++ b/deps/libtommath @@ -0,0 +1 @@ +Subproject commit 0df542cb70f621bbeec207be1949832fb1442479 diff --git a/deps/minhook b/deps/minhook new file mode 160000 index 0000000..0f25a24 --- /dev/null +++ b/deps/minhook @@ -0,0 +1 @@ +Subproject commit 0f25a2449b3cf878bcbdbf91b693c38149ecf029 diff --git a/deps/premake/discord-rpc.lua b/deps/premake/discord-rpc.lua new file mode 100644 index 0000000..ef28bcb --- /dev/null +++ b/deps/premake/discord-rpc.lua @@ -0,0 +1,39 @@ +discordrpc = { + source = path.join(dependencies.basePath, "discord-rpc"), +} + +function discordrpc.import() + links { "discord-rpc" } + discordrpc.includes() +end + +function discordrpc.includes() + includedirs { + path.join(discordrpc.source, "include"), + } +end + +function discordrpc.project() + project "discord-rpc" + language "C++" + + discordrpc.includes() + rapidjson.import(); + + files { + path.join(discordrpc.source, "src/*.h"), + path.join(discordrpc.source, "src/*.cpp"), + } + + removefiles { + path.join(discordrpc.source, "src/dllmain.cpp"), + path.join(discordrpc.source, "src/*_linux.cpp"), + path.join(discordrpc.source, "src/*_unix.cpp"), + path.join(discordrpc.source, "src/*_osx.cpp"), + } + + warnings "Off" + kind "StaticLib" +end + +table.insert(dependencies, discordrpc) diff --git a/deps/premake/gsl.lua b/deps/premake/gsl.lua new file mode 100644 index 0000000..7c0b1e0 --- /dev/null +++ b/deps/premake/gsl.lua @@ -0,0 +1,19 @@ +gsl = { + source = path.join(dependencies.basePath, "GSL") +} + +function gsl.import() + gsl.includes() +end + +function gsl.includes() + includedirs { + path.join(gsl.source, "include") + } +end + +function gsl.project() + +end + +table.insert(dependencies, gsl) diff --git a/deps/premake/libtomcrypt.lua b/deps/premake/libtomcrypt.lua new file mode 100644 index 0000000..7ca3570 --- /dev/null +++ b/deps/premake/libtomcrypt.lua @@ -0,0 +1,64 @@ +libtomcrypt = { + source = path.join(dependencies.basePath, "libtomcrypt"), +} + +function libtomcrypt.import() + links { + "libtomcrypt" + } + + libtomcrypt.includes() +end + +function libtomcrypt.includes() + includedirs { + path.join(libtomcrypt.source, "src/headers") + } + + defines { + "LTC_NO_FAST", + "LTC_NO_PROTOTYPES", + "LTC_NO_RSA_BLINDING", + "LTC_NO_FILE", + "ARGTYPE=4", + } +end + +function libtomcrypt.project() + project "libtomcrypt" + language "C" + + libtomcrypt.includes() + libtommath.import() + + files { + path.join(libtomcrypt.source, "src/**.c"), + } + + removefiles { + path.join(libtomcrypt.source, "src/**/*_test.c"), + path.join(libtomcrypt.source, "src/**/*tab.c"), + path.join(libtomcrypt.source, "src/encauth/ocb3/**.c"), + } + + defines { + "_CRT_SECURE_NO_WARNINGS", + "LTC_SOURCE", + "_LIB", + "USE_LTM" + } + + removedefines { + "_DLL", + "_USRDLL" + } + + linkoptions { + "-IGNORE:4221" + } + + warnings "Off" + kind "StaticLib" +end + +table.insert(dependencies, libtomcrypt) diff --git a/deps/premake/libtommath.lua b/deps/premake/libtommath.lua new file mode 100644 index 0000000..ab4cdde --- /dev/null +++ b/deps/premake/libtommath.lua @@ -0,0 +1,52 @@ +libtommath = { + source = path.join(dependencies.basePath, "libtommath"), +} + +function libtommath.import() + links { + "libtommath" + } + + libtommath.includes() +end + +function libtommath.includes() + includedirs { + libtommath.source + } + + defines { + "LTM_DESC", + "__STDC_IEC_559__", + "MP_NO_DEV_URANDOM", + } +end + +function libtommath.project() + project "libtommath" + language "C" + + libtommath.includes() + + files { + path.join(libtommath.source, "*.c"), + } + + defines { + "_LIB" + } + + removedefines { + "_DLL", + "_USRDLL" + } + + linkoptions { + "-IGNORE:4221" + } + + warnings "Off" + kind "StaticLib" +end + +table.insert(dependencies, libtommath) diff --git a/deps/premake/minhook.lua b/deps/premake/minhook.lua new file mode 100644 index 0000000..396d4d3 --- /dev/null +++ b/deps/premake/minhook.lua @@ -0,0 +1,31 @@ +minhook = { + source = path.join(dependencies.basePath, "minhook"), +} + +function minhook.import() + links { "minhook" } + minhook.includes() +end + +function minhook.includes() + includedirs { + path.join(minhook.source, "include") + } +end + +function minhook.project() + project "minhook" + language "C" + + minhook.includes() + + files { + path.join(minhook.source, "src/**.h"), + path.join(minhook.source, "src/**.c"), + } + + warnings "Off" + kind "StaticLib" +end + +table.insert(dependencies, minhook) diff --git a/deps/premake/minizip.lua b/deps/premake/minizip.lua new file mode 100644 index 0000000..4a5754b --- /dev/null +++ b/deps/premake/minizip.lua @@ -0,0 +1,43 @@ +minizip = { + source = path.join(dependencies.basePath, "zlib/contrib/minizip"), +} + +function minizip.import() + links { "minizip" } + zlib.import() + minizip.includes() +end + +function minizip.includes() + includedirs { + minizip.source + } + + zlib.includes() +end + +function minizip.project() + project "minizip" + language "C" + + minizip.includes() + + files { + path.join(minizip.source, "*.h"), + path.join(minizip.source, "*.c"), + } + + removefiles { + path.join(minizip.source, "miniunz.c"), + path.join(minizip.source, "minizip.c"), + } + + defines { + "_CRT_SECURE_NO_DEPRECATE", + } + + warnings "Off" + kind "StaticLib" +end + +table.insert(dependencies, minizip) diff --git a/deps/premake/rapidjson.lua b/deps/premake/rapidjson.lua new file mode 100644 index 0000000..d108512 --- /dev/null +++ b/deps/premake/rapidjson.lua @@ -0,0 +1,19 @@ +rapidjson = { + source = path.join(dependencies.basePath, "rapidjson"), +} + +function rapidjson.import() + rapidjson.includes() +end + +function rapidjson.includes() + includedirs { + path.join(rapidjson.source, "include"), + } +end + +function rapidjson.project() + +end + +table.insert(dependencies, rapidjson) diff --git a/deps/premake/udis86.lua b/deps/premake/udis86.lua new file mode 100644 index 0000000..896ec8b --- /dev/null +++ b/deps/premake/udis86.lua @@ -0,0 +1,37 @@ +udis86 = { + source = path.join(dependencies.basePath, "udis86"), +} + +function udis86.import() + links { + "udis86" + } + + udis86.includes() +end + +function udis86.includes() + includedirs { + udis86.source, + path.join(udis86.source, "libudis86"), + path.join(dependencies.basePath, "extra/udis86"), + path.join(dependencies.basePath, "extra/udis86/libudis86"), + } +end + +function udis86.project() + project "udis86" + language "C" + + udis86.includes() + + files { + path.join(udis86.source, "libudis86/*.c"), + path.join(dependencies.basePath, "extra/udis86/libudis86/*.c"), + } + + warnings "Off" + kind "StaticLib" +end + +table.insert(dependencies, udis86) diff --git a/deps/premake/zlib.lua b/deps/premake/zlib.lua new file mode 100644 index 0000000..566a707 --- /dev/null +++ b/deps/premake/zlib.lua @@ -0,0 +1,39 @@ +zlib = { + source = path.join(dependencies.basePath, "zlib"), +} + +function zlib.import() + links { "zlib" } + zlib.includes() +end + +function zlib.includes() + includedirs { + zlib.source + } + + defines { + "ZLIB_CONST", + } +end + +function zlib.project() + project "zlib" + language "C" + + zlib.includes() + + files { + path.join(zlib.source, "*.h"), + path.join(zlib.source, "*.c"), + } + + defines { + "_CRT_SECURE_NO_DEPRECATE", + } + + warnings "Off" + kind "StaticLib" +end + +table.insert(dependencies, zlib) diff --git a/deps/rapidjson b/deps/rapidjson new file mode 160000 index 0000000..973dc9c --- /dev/null +++ b/deps/rapidjson @@ -0,0 +1 @@ +Subproject commit 973dc9c06dcd3d035ebd039cfb9ea457721ec213 diff --git a/deps/udis86 b/deps/udis86 new file mode 160000 index 0000000..56ff6c8 --- /dev/null +++ b/deps/udis86 @@ -0,0 +1 @@ +Subproject commit 56ff6c87c11de0ffa725b14339004820556e343d diff --git a/deps/zlib b/deps/zlib new file mode 160000 index 0000000..04f42ce --- /dev/null +++ b/deps/zlib @@ -0,0 +1 @@ +Subproject commit 04f42ceca40f73e2978b50e93806c2a18c1281fc diff --git a/generate.bat b/generate.bat new file mode 100644 index 0000000..2bad27b --- /dev/null +++ b/generate.bat @@ -0,0 +1,4 @@ +@echo off +echo Updating submodules... +call git submodule update --init --recursive +call tools\premake5 %* vs2022 diff --git a/premake5.lua b/premake5.lua new file mode 100644 index 0000000..7212366 --- /dev/null +++ b/premake5.lua @@ -0,0 +1,331 @@ +gitVersioningCommand = "git describe --tags --dirty --always" +gitCurrentBranchCommand = "git symbolic-ref -q --short HEAD" + +-- Quote the given string input as a C string +function cstrquote(value) + if value == nil then + return "\"\"" + end + result = value:gsub("\\", "\\\\") + result = result:gsub("\"", "\\\"") + result = result:gsub("\n", "\\n") + result = result:gsub("\t", "\\t") + result = result:gsub("\r", "\\r") + result = result:gsub("\a", "\\a") + result = result:gsub("\b", "\\b") + result = "\"" .. result .. "\"" + return result +end + +-- Converts tags in "vX.X.X" format and given revision number Y to an array of numbers {X,X,X,Y}. +-- In the case where the format does not work fall back to padding with zeroes and just ending with the revision number. +-- partscount can be either 3 or 4. +function vertonumarr(value, vernumber, partscount) + vernum = {} + for num in string.gmatch(value or "", "%d+") do + if #vernum < 3 then + table.insert(vernum, tonumber(num)) + end + end + while #vernum < 3 do + table.insert(vernum, 0) + end + if #vernum < partscount then + table.insert(vernum, tonumber(vernumber)) + end + return vernum +end + +dependencies = { + basePath = "./deps" +} + +function dependencies.load() + dir = path.join(dependencies.basePath, "premake/*.lua") + deps = os.matchfiles(dir) + + for i, dep in pairs(deps) do + dep = dep:gsub(".lua", "") + require(dep) + end +end + +function dependencies.imports() + for i, proj in pairs(dependencies) do + if type(i) == 'number' then + proj.import() + end + end +end + +function dependencies.projects() + for i, proj in pairs(dependencies) do + if type(i) == 'number' then + proj.project() + end + end +end + +newoption { + trigger = "copy-to", + description = "Optional, copy the exe to a custom folder after build, define the path here if wanted.", + value = "PATH" +} + +newaction { + trigger = "version", + description = "Returns the version string for the current commit of the source code.", + onWorkspace = function(wks) + -- get current version via git + local proc = assert(io.popen(gitVersioningCommand, "r")) + local gitDescribeOutput = assert(proc:read('*a')):gsub("%s+", "") + proc:close() + local version = gitDescribeOutput + + proc = assert(io.popen(gitCurrentBranchCommand, "r")) + local gitCurrentBranchOutput = assert(proc:read('*a')):gsub("%s+", "") + local gitCurrentBranchSuccess = proc:close() + if gitCurrentBranchSuccess then + -- We got a branch name, check if it is a feature branch + if gitCurrentBranchOutput ~= "develop" and gitCurrentBranchOutput ~= "master" then + version = version .. "-" .. gitCurrentBranchOutput + end + end + + print(version) + os.exit(0) + end +} + +newaction { + trigger = "generate-buildinfo", + description = "Sets up build information file like version.h.", + onWorkspace = function(wks) + -- get old version number from version.hpp if any + local oldVersion = "(none)" + local oldVersionHeader = io.open(wks.location .. "/src/version.h", "r") + if oldVersionHeader ~= nil then + local oldVersionHeaderContent = assert(oldVersionHeader:read('*l')) + while oldVersionHeaderContent do + m = string.match(oldVersionHeaderContent, "#define GIT_DESCRIBE (.+)%s*$") + if m ~= nil then + oldVersion = m + end + + oldVersionHeaderContent = oldVersionHeader:read('*l') + end + end + + -- get current version via git + local proc = assert(io.popen(gitVersioningCommand, "r")) + local gitDescribeOutput = assert(proc:read('*a')):gsub("%s+", "") + proc:close() + + -- generate version.hpp with a revision number if not equal + gitDescribeOutputQuoted = cstrquote(gitDescribeOutput) + if oldVersion ~= gitDescribeOutputQuoted then + -- get current git hash and write to version.txt (used by the preliminary updater) + -- TODO - remove once proper updater and release versioning exists + local proc = assert(io.popen("git rev-parse HEAD", "r")) + local gitCommitHash = assert(proc:read('*a')):gsub("%s+", "") + proc:close() + + -- get whether this is a clean revision (no uncommitted changes) + proc = assert(io.popen("git status --porcelain", "r")) + local revDirty = (assert(proc:read('*a')) ~= "") + if revDirty then revDirty = 1 else revDirty = 0 end + proc:close() + + -- get current tag name + proc = assert(io.popen("git describe --tags --abbrev=0")) + local tagName = proc:read('*l') + + -- get current branch name + proc = assert(io.popen("git branch --show-current")) + local branchName = proc:read('*l') + + -- branch for ci + if branchName == nil or branchName == '' then + proc = assert(io.popen("git show -s --pretty=%d HEAD")) + local branchInfo = proc:read('*l') + m = string.match(branchInfo, ".+,.+, ([^)]+)") + if m ~= nil then + branchName = m + end + end + + if branchName == nil then + branchName = "develop" + end + + print("Detected branch: " .. branchName) + + -- get revision number via git + local proc = assert(io.popen("git rev-list --count HEAD", "r")) + local revNumber = assert(proc:read('*a')):gsub("%s+", "") + + print ("Update " .. oldVersion .. " -> " .. gitDescribeOutputQuoted) + + -- write to version.txt for preliminary updater + -- NOTE - remove this once we have a proper updater and proper release versioning + local versionFile = assert(io.open(wks.location .. "/version.txt", "w")) + versionFile:write(gitCommitHash) + versionFile:close() + + -- write version header + local versionHeader = assert(io.open(wks.location .. "/src/version.h", "w")) + versionHeader:write("/*\n") + versionHeader:write(" * Automatically generated by premake5.\n") + versionHeader:write(" * Do not touch!\n") + versionHeader:write(" */\n") + versionHeader:write("\n") + versionHeader:write("#define GIT_DESCRIBE " .. gitDescribeOutputQuoted .. "\n") + versionHeader:write("#define GIT_DIRTY " .. revDirty .. "\n") + versionHeader:write("#define GIT_HASH " .. cstrquote(gitCommitHash) .. "\n") + versionHeader:write("#define GIT_TAG " .. cstrquote(tagName) .. "\n") + versionHeader:write("#define GIT_BRANCH " .. cstrquote(branchName) .. "\n") + versionHeader:write("\n") + versionHeader:write("// Version transformed for RC files\n") + versionHeader:write("#define VERSION_PRODUCT_RC " .. table.concat(vertonumarr(tagName, revNumber, 3), ",") .. "\n") + versionHeader:write("#define VERSION_PRODUCT " .. cstrquote(table.concat(vertonumarr(tagName, revNumber, 3), ".")) .. "\n") + versionHeader:write("#define VERSION_FILE_RC " .. table.concat(vertonumarr(tagName, revNumber, 4), ",") .. "\n") + versionHeader:write("#define VERSION_FILE " .. cstrquote(table.concat(vertonumarr(tagName, revNumber, 4), ".")) .. "\n") + versionHeader:write("\n") + versionHeader:write("// Alias definitions\n") + versionHeader:write("#define VERSION GIT_DESCRIBE\n") + versionHeader:write("#define SHORTVERSION VERSION_PRODUCT\n") + versionHeader:close() + local versionHeader = assert(io.open(wks.location .. "/src/version.hpp", "w")) + versionHeader:write("/*\n") + versionHeader:write(" * Automatically generated by premake5.\n") + versionHeader:write(" * Do not touch!\n") + versionHeader:write(" *\n") + versionHeader:write(" * This file exists for reasons of complying with our coding standards.\n") + versionHeader:write(" *\n") + versionHeader:write(" * The Resource Compiler will ignore any content from C++ header files if they're not from STDInclude.hpp.\n") + versionHeader:write(" * That's the reason why we now place all version info in version.h instead.\n") + versionHeader:write(" */\n") + versionHeader:write("\n") + versionHeader:write("#include \".\\version.h\"\n") + versionHeader:close() + end + end +} + +dependencies.load() + +workspace "iw4-sp" +startproject "client" +location "./build" +objdir "%{wks.location}/obj" +targetdir "%{wks.location}/bin/%{cfg.platform}/%{cfg.buildcfg}" + +configurations {"Debug", "Release"} + +language "C++" +cppdialect "C++20" + +architecture "x86" +platforms "Win32" + +systemversion "latest" +symbols "On" +staticruntime "On" +editandcontinue "Off" +warnings "Extra" +characterset "ASCII" + +if os.getenv("CI") then + defines {"CI"} +end + +flags {"NoIncrementalLink", "NoMinimalRebuild", "MultiProcessorCompile", "No64BitChecks"} + +filter "platforms:Win*" + defines {"_WINDOWS", "WIN32"} +filter {} + +filter "configurations:Release" + optimize "Size" + buildoptions {"/GL"} + linkoptions {"/IGNORE:4702", "/LTCG"} + defines {"NDEBUG"} + flags {"FatalCompileWarnings"} +filter {} + +filter "configurations:Debug" + optimize "Debug" + defines {"DEBUG", "_DEBUG"} +filter {} + +project "common" +kind "StaticLib" +language "C++" + +files {"./src/common/**.hpp", "./src/common/**.cpp"} + +includedirs {"./src/common", "%{prj.location}/src"} + +resincludedirs {"$(ProjectDir)src"} + +dependencies.imports() + +project "runner" +kind "WindowedApp" +language "C++" + +files {"./src/runner/**.rc", "./src/runner/**.hpp", "./src/runner/**.cpp", "./src/runner/resources/**.*"} + +includedirs {"./src/runner", "./src/common", "%{prj.location}/src"} + +resincludedirs {"$(ProjectDir)src"} + +links {"common"} + +dependencies.imports() + +project "client" +kind "WindowedApp" +language "C++" + +targetname "iw4-sp" + +pchheader "std_include.hpp" +pchsource "src/client/std_include.cpp" + +linkoptions {"/IGNORE:4254", "/DYNAMICBASE:NO", "/SAFESEH:NO", "/LARGEADDRESSAWARE", "/LAST:.main", "/PDBCompress"} + +files {"./src/client/**.rc", "./src/client/**.hpp", "./src/client/**.cpp", "./src/resources/**.*"} + +includedirs {"./src/client", "./src/common", "%{prj.location}/src"} + +resincludedirs {"$(ProjectDir)src"} + +links {"common"} + +prebuildcommands {"pushd %{_MAIN_SCRIPT_DIR}", "tools\\premake5 generate-buildinfo", "popd"} + +if _OPTIONS["copy-to"] then + postbuildcommands { + "copy /y \"$(TargetDir)*.exe\" \"" .. _OPTIONS["copy-to"] .. "\"" + } +end + +dependencies.imports() + +project "tlsdll" +kind "SharedLib" +language "C++" + +files {"./src/tlsdll/**.rc", "./src/tlsdll/**.hpp", "./src/tlsdll/**.cpp", "./src/tlsdll/resources/**.*"} + +includedirs {"./src/tlsdll", "%{prj.location}/src"} + +links {"common"} + +resincludedirs {"$(ProjectDir)src"} + +dependencies.imports() + +group "Dependencies" +dependencies.projects() diff --git a/src/client/component/asset_restrict.cpp b/src/client/component/asset_restrict.cpp new file mode 100644 index 0000000..476de55 --- /dev/null +++ b/src/client/component/asset_restrict.cpp @@ -0,0 +1,49 @@ +#include +#include "loader/component_loader.hpp" + +#include +#include + +namespace asset_restrict { +namespace { +game::XAssetEntry entry_pool[789312]; + +game::XAssetHeader reallocate_asset_pool(game::XAssetType type, + const int size) { + const auto entry_size = + reinterpret_cast(game::DB_GetXAssetSizeHandlers[type])(); + const game::XAssetHeader pool_entry = { + .data = utils::memory::allocate(entry_size * size)}; + game::DB_XAssetPool[type] = pool_entry.data; + game::g_poolSize[type] = size; + + return pool_entry; +} +} // namespace + +class component final : public component_interface { +public: + void post_load() override { + patch_entry_pool_sp(); + reallocate_asset_pool(game::ASSET_TYPE_GAMEWORLD_MP, 1); + } + + static void patch_entry_pool_sp() { + // Apply new size + utils::hook::set(0x581740, sizeof(entry_pool) / + sizeof(game::XAssetEntry)); + utils::hook::set(0x581721, entry_pool + 1); + utils::hook::set(0x581732, entry_pool + 1); + + utils::hook::signature signature(0x411000, 0x200000); + + signature.add({"\x60\xB3\xB2\x00", "xxxx", [](char* address) { + utils::hook::set(address, entry_pool); + }}); + + signature.process(); + } +}; +} // namespace asset_restrict + +REGISTER_COMPONENT(asset_restrict::component) diff --git a/src/client/component/assets/assets.cpp b/src/client/component/assets/assets.cpp new file mode 100644 index 0000000..d7073e3 --- /dev/null +++ b/src/client/component/assets/assets.cpp @@ -0,0 +1,60 @@ +#include +#include "loader/component_loader.hpp" + +#include "localize_entry.hpp" +#include "map_ents.hpp" +#include "raw_file.hpp" + +#include + +namespace assets { +namespace { +void load_asset(game::XAssetType type, game::XAssetHeader* header) { + if (header) { + switch (type) { + case game::ASSET_TYPE_LOCALIZE_ENTRY: + process_localize_entry(*header); + break; + case game::ASSET_TYPE_MAP_ENTS: + process_map_ents(*header); + break; + case game::ASSET_TYPE_RAWFILE: + process_raw_file(*header); + break; + default: + break; + } + } +} + +void __declspec(naked) db_add_x_asset_stub() { + __asm { + pushad; + + push [esp + 0x20 + 0x8]; + push [esp + 0x20 + 0x8]; + call load_asset; + add esp, 0x8; + + popad; + + sub esp, 0x14; + mov eax, dword ptr [esp + 0x1C]; + + push 0x581EE7; + ret; + } +} +} // namespace + +class asset final : public component_interface { +public: + void post_load() override { + // We may modify assets to some extents here or just dump them + utils::hook(0x581EE0, db_add_x_asset_stub, HOOK_JUMP).install()->quick(); + utils::hook::nop(0x581EE5, 2); + } +}; +} // namespace assets + +REGISTER_COMPONENT(assets::asset) diff --git a/src/client/component/assets/localize_entry.cpp b/src/client/component/assets/localize_entry.cpp new file mode 100644 index 0000000..a8f9d5d --- /dev/null +++ b/src/client/component/assets/localize_entry.cpp @@ -0,0 +1,26 @@ +#include + +#include "localize_entry.hpp" + +#include +#include +#include + +namespace assets { +namespace { +bool is_enabled() { IS_FLAG_ENABLED(dump_localize_entry); } +} // namespace + +void process_localize_entry(game::XAssetHeader header) { + if (!is_enabled()) { + return; + } + + auto* localize = header.localize; + const auto filename = + utils::string::va("raw/localizedstrings/{0}", localize->name); + + // Simple format, should be fine for now + utils::io::write_file(filename, localize->value); +} +} // namespace assets diff --git a/src/client/component/assets/localize_entry.hpp b/src/client/component/assets/localize_entry.hpp new file mode 100644 index 0000000..171a8f5 --- /dev/null +++ b/src/client/component/assets/localize_entry.hpp @@ -0,0 +1,5 @@ +#pragma once + +namespace assets { +void process_localize_entry(game::XAssetHeader header); +} diff --git a/src/client/component/assets/map_ents.cpp b/src/client/component/assets/map_ents.cpp new file mode 100644 index 0000000..9df841d --- /dev/null +++ b/src/client/component/assets/map_ents.cpp @@ -0,0 +1,30 @@ +#include + +#include "component/filesystem.hpp" + +#include "map_ents.hpp" + +#include + +namespace assets { +namespace { +std::string map_entities; + +void load_map_entities(game::MapEnts* entry) { + const auto file_name = utils::string::va("{0}.ents", entry->name); + const filesystem::file ent_file(file_name, game::FS_THREAD_DATABASE); + + // Load ent file from raw if it exists + if (ent_file.exists()) { + map_entities = ent_file.get_buffer(); + entry->entityString = map_entities.data(); + entry->numEntityChars = static_cast(map_entities.size()) + 1; + } +} +} // namespace + +void process_map_ents(game::XAssetHeader header) { + auto* map_ents = header.mapEnts; + load_map_entities(map_ents); +} +} // namespace assets diff --git a/src/client/component/assets/map_ents.hpp b/src/client/component/assets/map_ents.hpp new file mode 100644 index 0000000..ccfa5a6 --- /dev/null +++ b/src/client/component/assets/map_ents.hpp @@ -0,0 +1,5 @@ +#pragma once + +namespace assets { +void process_map_ents(game::XAssetHeader header); +} diff --git a/src/client/component/assets/raw_file.cpp b/src/client/component/assets/raw_file.cpp new file mode 100644 index 0000000..3586b5f --- /dev/null +++ b/src/client/component/assets/raw_file.cpp @@ -0,0 +1,181 @@ +#include +#include "loader/component_loader.hpp" + +#include "raw_file.hpp" + +#include +#include +#include +#include + +#include + +namespace assets { +namespace { +utils::hook::detour db_read_raw_file_hook; +utils::hook::detour com_load_info_string_hook; + +char* db_read_raw_file_stub(const char* filename, char* buf, int size) { + auto file_handle = 0; + const auto file_size = game::FS_FOpenFileRead(filename, &file_handle); + + if (file_handle != 0) { + if ((file_size + 1) <= size) { + game::FS_Read(buf, file_size, file_handle); + buf[file_size] = '\0'; + game::FS_FCloseFile(file_handle); + return buf; + } + + game::FS_FCloseFile(file_handle); + game::Com_PrintError( + game::CON_CHANNEL_ERROR, + "Ignoring raw file '%s' as it exceeds buffer size %i > %i\n", filename, + file_size, size); + } + + auto* rawfile = + game::DB_FindXAssetHeader(game::ASSET_TYPE_RAWFILE, filename).rawfile; + if (game::DB_IsXAssetDefault(game::ASSET_TYPE_RAWFILE, filename)) { + return nullptr; + } + + game::DB_GetRawBuffer(rawfile, buf, size); + return buf; +} + +const char* com_load_info_string_fast_file(const char* file_name, + const char* file_desc, + const char* ident, + char* load_buffer) { + const static DWORD Com_LoadInfoString_FastFile_t = 0x602FA0; + const char* result{}; + + __asm { + pushad; + + mov ebx, load_buffer; + mov edi, file_name; + push ident; + push file_desc; + call Com_LoadInfoString_FastFile_t; + add esp, 0x8; + mov result, eax; + + popad; + } + + return result; +} + +const char* com_load_info_string_load_obj(const char* file_name, + const char* file_desc, + const char* ident, + char* load_buffer) { + int file_handle; + + const auto file_len = + game::FS_FOpenFileByMode(file_name, &file_handle, game::FS_READ); + if (file_len < 0) { + game::Com_DPrintf(game::CON_CHANNEL_SYSTEM, + "Could not load %s [%s] as rawfile", file_desc, + file_name); + return nullptr; + } + + const auto ident_len = static_cast(std::strlen(ident)); + game::FS_Read(load_buffer, ident_len, file_handle); + load_buffer[ident_len] = '\0'; + + if (std::strncmp(load_buffer, ident, ident_len) != 0) { + game::Com_Error(game::ERR_DROP, + "\x15" + "File [%s] is not a %s\n", + file_name, file_desc); + return nullptr; + } + + if ((file_len - ident_len) >= 0x4000) { + game::Com_Error(game::ERR_DROP, + "\x15" + "File [%s] is too long of a %s to parse\n", + file_name, file_desc); + return nullptr; + } + + game::FS_Read(load_buffer, file_len - ident_len, file_handle); + load_buffer[file_len - ident_len] = '\0'; + game::FS_FCloseFile(file_handle); + + return load_buffer; +} + +const char* com_load_info_string_stub(const char* file_name, + const char* file_desc, const char* ident, + char* load_buffer) { + const auto* buffer = + com_load_info_string_load_obj(file_name, file_desc, ident, load_buffer); + if (!buffer) { + buffer = com_load_info_string_fast_file(file_name, file_desc, ident, + load_buffer); + } + + if (!game::Info_Validate(buffer)) { + game::Com_Error(game::ERR_DROP, + "\x15" + "File [%s] is not a valid %s\n", + file_name, file_desc); + return nullptr; + } + + return buffer; +} + +bool is_enabled() { IS_FLAG_ENABLED(dump_raw_file); } +} // namespace + +void process_raw_file(game::XAssetHeader header) { + if (!is_enabled()) { + return; + } + + const auto* raw_file = header.rawfile; + const auto filename = utils::string::va("raw/{0}", raw_file->name); + + if (raw_file->compressedLen > 0) { + std::vector uncompressed; + uncompressed.resize(raw_file->len); + + if (uncompress(uncompressed.data(), (uLongf*)&raw_file->len, + (const Bytef*)raw_file->buffer, + raw_file->compressedLen) == Z_OK) { + std::string data; + data.assign(uncompressed.begin(), uncompressed.end()); + + utils::io::write_file(filename, data); + } + + return; + } + + // If uncompressed just dump it + utils::io::write_file(filename, raw_file->buffer); +} + +class raw_file final : public component_interface { +public: + void post_load() override { + // Remove fs_game check for moddable raw files + // allows non-fs_game to modify raw files + utils::hook::nop(0x612932, 2); + + db_read_raw_file_hook.create(0x46DA60, &db_read_raw_file_stub); + + com_load_info_string_hook.create(0x42DB20, &com_load_info_string_stub); + } + + void pre_destroy() override { db_read_raw_file_hook.clear(); } +}; +} // namespace assets + +REGISTER_COMPONENT(assets::raw_file) diff --git a/src/client/component/assets/raw_file.hpp b/src/client/component/assets/raw_file.hpp new file mode 100644 index 0000000..0d634f1 --- /dev/null +++ b/src/client/component/assets/raw_file.hpp @@ -0,0 +1,5 @@ +#pragma once + +namespace assets { +void process_raw_file(game::XAssetHeader header); +} diff --git a/src/client/component/auth.cpp b/src/client/component/auth.cpp new file mode 100644 index 0000000..02de7e7 --- /dev/null +++ b/src/client/component/auth.cpp @@ -0,0 +1,84 @@ +#include +#include "loader/component_loader.hpp" + +#include +#include +#include +#include + +#include "auth.hpp" + +namespace auth { +namespace { +std::string get_hw_profile_guid() { + HW_PROFILE_INFO info; + if (!GetCurrentHwProfileA(&info)) { + return {}; + } + + return std::string{info.szHwProfileGuid, sizeof(info.szHwProfileGuid)}; +} + +std::string get_protected_data() { + std::string input = "Alter-Ware-IW4-SP-Auth"; + + DATA_BLOB data_in{}, data_out{}; + data_in.pbData = reinterpret_cast(input.data()); + data_in.cbData = static_cast(input.size()); + if (CryptProtectData(&data_in, nullptr, nullptr, nullptr, nullptr, + CRYPTPROTECT_LOCAL_MACHINE, &data_out) != TRUE) { + return {}; + } + + const auto size = std::min(data_out.cbData, 52); + std::string result(reinterpret_cast(data_out.pbData), size); + LocalFree(data_out.pbData); + + return result; +} + +std::string get_hdd_serial() { + DWORD serial{}; + if (!GetVolumeInformationA("C:\\", nullptr, 0, &serial, nullptr, nullptr, + nullptr, 0)) { + return {}; + } + + return utils::string::va("{0:08X}", serial); +} + +std::string get_key_entropy() { + std::string entropy{}; + entropy.append(utils::smbios::get_uuid()); + entropy.append(get_hw_profile_guid()); + entropy.append(get_protected_data()); + entropy.append(get_hdd_serial()); + + if (entropy.empty()) { + entropy.resize(32); + utils::cryptography::random::get_data(entropy.data(), entropy.size()); + } + + return entropy; +} + +utils::cryptography::ecc::key& get_key() { + static auto key = + utils::cryptography::ecc::generate_key(512, get_key_entropy()); + return key; +} + +} // namespace + +std::uint64_t get_guid() { return get_key().get_hash(); } + +class component final : public component_interface { +public: + void post_load() override { + // Patch Steam_GetClientIDAsXUID + utils::hook::set(0x4911B0, 0xC301B0); + } +}; +} // namespace auth + +REGISTER_COMPONENT(auth::component) diff --git a/src/client/component/auth.hpp b/src/client/component/auth.hpp new file mode 100644 index 0000000..56d5ba1 --- /dev/null +++ b/src/client/component/auth.hpp @@ -0,0 +1,5 @@ +#pragma once + +namespace auth { +std::uint64_t get_guid(); +} diff --git a/src/client/component/botlib/l_precomp.cpp b/src/client/component/botlib/l_precomp.cpp new file mode 100644 index 0000000..a9f798e --- /dev/null +++ b/src/client/component/botlib/l_precomp.cpp @@ -0,0 +1,254 @@ +#include + +#include "l_precomp.hpp" +#include "l_script.hpp" + +namespace pc { +constexpr auto DEFINEHASHSIZE = 1024; + +constexpr auto MAX_SOURCEFILES = 64; + +game::define_s* globaldefines; + +void free_token(game::token_s* token) { + game::FreeMemory(token); + --*game::numtokens; +} + +game::define_s* define_from_string(const char* string) { + game::source_s src; + + auto* script = load_script_memory( + string, static_cast(std::strlen(string)), "*extern"); + // create a new source + std::memset(&src, 0, sizeof(game::source_s)); + strncpy_s(src.filename, "*extern", _TRUNCATE); + + src.scriptstack = script; + src.definehash = static_cast( + game::GetClearedMemory(DEFINEHASHSIZE * sizeof(game::define_s*))); + + // create a define from the source + auto res = game::PC_Directive_define(&src); + + // free any tokens if left + for (auto* t = src.tokens; t; t = src.tokens) { + src.tokens = src.tokens->next; + free_token(t); + } + + game::define_s* def = nullptr; + for (auto i = 0; i < DEFINEHASHSIZE; ++i) { + if (src.definehash[i]) { + def = src.definehash[i]; + break; + } + } + + game::FreeMemory(src.definehash); + free_script(script); + + // if the define was created successfully + if (res > 0) { + return def; + } + + // free the define is created + if (src.defines) { + game::PC_FreeDefine(def); + } + + return nullptr; +} + +int name_hash(char* name) { + auto hash = 0; + for (auto i = 0; name[i] != '\0'; ++i) { + hash += name[i] * (119 + i); + } + + hash = (hash ^ (hash >> 10) ^ (hash >> 20)) & (DEFINEHASHSIZE - 1); + return hash; +} + +void add_define_to_hash(game::define_s* define, game::define_s** definehash) { + auto hash = name_hash(define->name); + define->hashnext = definehash[hash]; + definehash[hash] = define; +} + +int add_define(game::source_s* source, const char* string) { + + auto* define = define_from_string(string); + if (!define) { + return 0; + } + + add_define_to_hash(define, source->definehash); + + return true; +} + +game::define_s* copy_define([[maybe_unused]] game::source_s* source, + game::define_s* define) { + game::token_s *token, *newtoken, *lasttoken; + + auto* newdefine = static_cast( + game::GetMemory(sizeof(game::define_s) + strlen(define->name) + 1)); + + // copy the define name + newdefine->name = (char*)newdefine + sizeof(game::define_s); + std::memcpy(newdefine->name, define->name, std::strlen(define->name) + 1); + + newdefine->flags = define->flags; + newdefine->builtin = define->builtin; + newdefine->numparms = define->numparms; + + // the define is not linked + newdefine->next = nullptr; + newdefine->hashnext = nullptr; + + // copy the define tokens + newdefine->tokens = nullptr; + for (lasttoken = nullptr, token = define->tokens; token; + token = token->next) { + newtoken = game::PC_CopyToken(token); + newtoken->next = nullptr; + if (lasttoken) { + lasttoken->next = newtoken; + } else { + newdefine->tokens = newtoken; + } + + lasttoken = newtoken; + } + + // copy the define parameters + newdefine->parms = nullptr; + for (lasttoken = nullptr, token = define->parms; token; token = token->next) { + newtoken = game::PC_CopyToken(token); + newtoken->next = nullptr; + if (lasttoken) { + lasttoken->next = newtoken; + } else { + newdefine->parms = newtoken; + } + + lasttoken = newtoken; + } + + return newdefine; +} + +void add_global_defines_to_source(game::source_s* source) { + for (auto* define = globaldefines; define; define = define->next) { + auto* newdefine = copy_define(source, define); + + add_define_to_hash(newdefine, source->definehash); + } +} + +game::source_s* load_source_file(const char* filename) { + auto* script = load_script_file(filename); + if (!script) { + return nullptr; + } + + script->next = nullptr; + + auto* source = + static_cast(game::GetMemory(sizeof(game::source_s))); + std::memset(source, 0, sizeof(game::source_s)); + + strncpy_s(source->filename, filename, _TRUNCATE); + source->scriptstack = script; + source->tokens = nullptr; + source->defines = nullptr; + source->indentstack = nullptr; + source->skip = 0; + + source->definehash = static_cast( + game::GetClearedMemory(DEFINEHASHSIZE * sizeof(game::define_s*))); + + add_global_defines_to_source(source); + return source; +} + +int load_source_handle(const char* filename, const char** builtin_defines) { + int i; + + for (i = 1; i < MAX_SOURCEFILES; ++i) { + if (!game::sourceFiles[i]) { + break; + } + } + + if (i >= MAX_SOURCEFILES) { + return 0; + } + + auto* source = load_source_file(filename); + if (!source) { + return 0; + } + + if (builtin_defines) { + for (auto define_iter = 0; builtin_defines[define_iter]; ++define_iter) { + add_define(source, builtin_defines[define_iter]); + } + } + + game::sourceFiles[i] = source; + return i; +} + +void free_source(game::source_s* source) { + // free all the scripts + while (source->scriptstack) { + auto* script = source->scriptstack; + source->scriptstack = source->scriptstack->next; + free_script(script); + } + + // free all the tokens + while (source->tokens) { + auto* token = source->tokens; + source->tokens = source->tokens->next; + free_token(token); + } + + for (auto i = 0; i < DEFINEHASHSIZE; ++i) { + while (source->definehash[i]) { + auto* define = source->definehash[i]; + source->definehash[i] = source->definehash[i]->hashnext; + game::PC_FreeDefine(define); + } + } + + // free all indents + while (source->indentstack) { + auto* indent = source->indentstack; + source->indentstack = source->indentstack->next; + game::FreeMemory(indent); + } + + if (source->definehash) { + game::FreeMemory(source->definehash); + } + + // free the source itself + game::FreeMemory(source); +} + +int free_source_handle(int handle) { + if (handle < 1 || handle >= MAX_SOURCEFILES) + return 0; + + if (!game::sourceFiles[handle]) + return 0; + + free_source(game::sourceFiles[handle]); + game::sourceFiles[handle] = nullptr; + return 1; +} +} // namespace pc diff --git a/src/client/component/botlib/l_precomp.hpp b/src/client/component/botlib/l_precomp.hpp new file mode 100644 index 0000000..7ceecf2 --- /dev/null +++ b/src/client/component/botlib/l_precomp.hpp @@ -0,0 +1,6 @@ +#pragma once + +namespace pc { +int load_source_handle(const char* filename, const char** builtin_defines); +int free_source_handle(int handle); +} // namespace pc diff --git a/src/client/component/botlib/l_script.cpp b/src/client/component/botlib/l_script.cpp new file mode 100644 index 0000000..93df92f --- /dev/null +++ b/src/client/component/botlib/l_script.cpp @@ -0,0 +1,204 @@ +#include +#include "l_script.hpp" + +namespace pc { +// clang-format off +game::punctuation_s default_punctuations[] = +{ + { ">>=", P_RSHIFT_ASSIGN, nullptr }, + { "<<=", P_LSHIFT_ASSIGN, nullptr }, + + { "...", P_PARMS, nullptr }, + // define merge operator + { "##", P_PRECOMPMERGE, nullptr }, + // logic operators + { "&&", P_LOGIC_AND, nullptr }, + { "||", P_LOGIC_OR, nullptr }, + { ">=", P_LOGIC_GEQ, nullptr }, + { "<=", P_LOGIC_LEQ, nullptr }, + { "==", P_LOGIC_EQ, nullptr }, + { "!=", P_LOGIC_UNEQ, nullptr }, + // arithmatic operators + { "*=", P_MUL_ASSIGN, nullptr }, + { "/=",P_DIV_ASSIGN, nullptr }, + { "%=", P_MOD_ASSIGN, nullptr }, + { "+=", P_ADD_ASSIGN, nullptr }, + { "-=", P_SUB_ASSIGN,nullptr }, + { "++", P_INC, nullptr }, + { "--", P_DEC, nullptr }, + // binary operators + { "&=", P_BIN_AND_ASSIGN, nullptr }, + { "|=", P_BIN_OR_ASSIGN, nullptr }, + { "^=", P_BIN_XOR_ASSIGN, nullptr }, + { ">>", P_RSHIFT, nullptr }, + { "<<", P_LSHIFT, nullptr }, + // reference operators + { "->", P_POINTERREF, nullptr }, + // C++ + { "::", P_CPP1, nullptr }, + { ".*", P_CPP2, nullptr }, + // arithmatic operators + { "*", P_MUL, nullptr }, + { "/", P_DIV,nullptr }, + { "%", P_MOD, nullptr }, + { "+", P_ADD, nullptr }, + { "-", P_SUB, nullptr }, + { "=", P_ASSIGN, nullptr }, + // binary operators + { "&", P_BIN_AND, nullptr }, + { "|", P_BIN_OR, nullptr }, + { "^", P_BIN_XOR, nullptr }, + { "~", P_BIN_NOT, nullptr }, + // logic operators + { "!", P_LOGIC_NOT, nullptr }, + { ">", P_LOGIC_GREATER, nullptr }, + { "<", P_LOGIC_LESS, nullptr }, + // reference operator + { ".", P_REF, nullptr }, + // seperators + { ",", P_COMMA, nullptr }, + { ";", P_SEMICOLON, nullptr }, + // label indication + { ":", P_COLON, nullptr }, + // if statement + { "?", P_QUESTIONMARK, nullptr }, + // embracements + { "(", P_PARENTHESESOPEN, nullptr }, + { ")", P_PARENTHESESCLOSE, nullptr }, + { "{", P_BRACEOPEN, nullptr }, + { "}", P_BRACECLOSE, nullptr }, + { "[", P_SQBRACKETOPEN, nullptr }, + { "]", P_SQBRACKETCLOSE, nullptr }, + // + { "\\", P_BACKSLASH, nullptr }, + // precompiler operator + { "#", P_PRECOMP, nullptr }, + { "$", P_DOLLAR, nullptr }, + { nullptr, 0, nullptr }, +}; +// clang-format on + +void create_punctuation_table(game::script_s* script, + game::punctuation_s* punctuations) { + game::punctuation_s* p; + + // get memory for the table + if (!script->punctuationtable) { + script->punctuationtable = static_cast( + game::GetMemory(256 * sizeof(game::punctuation_s*))); + } + + std::memset(script->punctuationtable, 0, 256 * sizeof(game::punctuation_s*)); + + // add the punctuations in the list to the punctuation table + for (auto i = 0; punctuations[i].p; ++i) { + auto* newp = &punctuations[i]; + game::punctuation_s* lastp = nullptr; + + // sort the punctuations in this table entry on length (longer punctuations + // first) + for (p = script->punctuationtable[(unsigned int)newp->p[0]]; p; + p = p->next) { + if (std::strlen(p->p) < std::strlen(newp->p)) { + newp->next = p; + if (lastp) { + lastp->next = newp; + } else { + script->punctuationtable[(unsigned int)newp->p[0]] = newp; + } + + break; + } + + lastp = p; + } + + if (!p) { + newp->next = nullptr; + if (lastp) { + lastp->next = newp; + } else { + script->punctuationtable[(unsigned int)newp->p[0]] = newp; + } + } + } +} + +void set_script_punctuations(game::script_s* script) { + create_punctuation_table(script, default_punctuations); + script->punctuations = default_punctuations; +} + +game::script_s* load_script_file(const char* filename) { + int fp; + char pathname[game::MAX_QPATH]; + + sprintf_s(pathname, "%s", filename); + const auto length = game::FS_FOpenFileRead(pathname, &fp); + if (!fp) { + return nullptr; + } + + auto* buffer = game::GetClearedMemory(sizeof(game::script_s) + length + 1); + auto* script = static_cast(buffer); + strncpy_s(script->filename, filename, _TRUNCATE); + + script->buffer = static_cast(buffer) + sizeof(game::script_s); + script->buffer[length] = '\0'; + script->length = length; + // pointer in script buffer + script->script_p = script->buffer; + // pointer in script buffer before reading token + script->lastscript_p = script->buffer; + // pointer to end of script buffer + script->end_p = &script->buffer[length]; + // set if there's a token available in script->token + script->tokenavailable = 0; + + script->line = 1; + script->lastline = 1; + + set_script_punctuations(script); + + game::FS_Read(script->buffer, length, fp); + game::FS_FCloseFile(fp); + + script->length = game::Com_Compress(script->buffer); + return script; +} + +game::script_s* load_script_memory(const char* ptr, int length, + const char* name) { + auto* buffer = game::GetClearedMemory(sizeof(game::script_s) + length + 1); + auto* script = static_cast(buffer); + + strncpy_s(script->filename, name, _TRUNCATE); + script->buffer = static_cast(buffer) + sizeof(game::script_s); + script->buffer[length] = '\0'; + script->length = length; + // pointer in script buffer + script->script_p = script->buffer; + // pointer in script buffer before reading token + script->lastscript_p = script->buffer; + // pointer to end of script buffer + script->end_p = &script->buffer[length]; + // set if there's a token available in script->token + script->tokenavailable = 0; + + script->line = 1; + script->lastline = 1; + + set_script_punctuations(script); + + std::memcpy(script->buffer, ptr, length); + + return script; +} + +void free_script(game::script_s* script) { + if (script->punctuationtable) + game::FreeMemory(script->punctuationtable); + + game::FreeMemory(script); +} +} // namespace pc diff --git a/src/client/component/botlib/l_script.hpp b/src/client/component/botlib/l_script.hpp new file mode 100644 index 0000000..3e8ca65 --- /dev/null +++ b/src/client/component/botlib/l_script.hpp @@ -0,0 +1,70 @@ +#pragma once + +#define P_RSHIFT_ASSIGN 1 +#define P_LSHIFT_ASSIGN 2 +#define P_PARMS 3 +#define P_PRECOMPMERGE 4 + +#define P_LOGIC_AND 5 +#define P_LOGIC_OR 6 +#define P_LOGIC_GEQ 7 +#define P_LOGIC_LEQ 8 +#define P_LOGIC_EQ 9 +#define P_LOGIC_UNEQ 10 + +#define P_MUL_ASSIGN 11 +#define P_DIV_ASSIGN 12 +#define P_MOD_ASSIGN 13 +#define P_ADD_ASSIGN 14 +#define P_SUB_ASSIGN 15 +#define P_INC 16 +#define P_DEC 17 + +#define P_BIN_AND_ASSIGN 18 +#define P_BIN_OR_ASSIGN 19 +#define P_BIN_XOR_ASSIGN 20 +#define P_RSHIFT 21 +#define P_LSHIFT 22 + +#define P_POINTERREF 23 +#define P_CPP1 24 +#define P_CPP2 25 +#define P_MUL 26 +#define P_DIV 27 +#define P_MOD 28 +#define P_ADD 29 +#define P_SUB 30 +#define P_ASSIGN 31 + +#define P_BIN_AND 32 +#define P_BIN_OR 33 +#define P_BIN_XOR 34 +#define P_BIN_NOT 35 + +#define P_LOGIC_NOT 36 +#define P_LOGIC_GREATER 37 +#define P_LOGIC_LESS 38 + +#define P_REF 39 +#define P_COMMA 40 +#define P_SEMICOLON 41 +#define P_COLON 42 +#define P_QUESTIONMARK 43 + +#define P_PARENTHESESOPEN 44 +#define P_PARENTHESESCLOSE 45 +#define P_BRACEOPEN 46 +#define P_BRACECLOSE 47 +#define P_SQBRACKETOPEN 48 +#define P_SQBRACKETCLOSE 49 +#define P_BACKSLASH 50 + +#define P_PRECOMP 51 +#define P_DOLLAR 52 + +namespace pc { +game::script_s* load_script_file(const char* filename); +game::script_s* load_script_memory(const char* ptr, int length, + const char* name); +void free_script(game::script_s* script); +} // namespace pc diff --git a/src/client/component/branding.cpp b/src/client/component/branding.cpp new file mode 100644 index 0000000..bd87001 --- /dev/null +++ b/src/client/component/branding.cpp @@ -0,0 +1,123 @@ +#include +#include "loader/component_loader.hpp" +#include "game/dvars.hpp" + +#include +#include + +#include + +namespace branding { +namespace { +#ifdef _DEBUG +constexpr auto* BUILD_TYPE = "IW4_DEV SP"; +#else +constexpr auto* BUILD_TYPE = "IW4 SP"; +#endif + +constexpr const char* get_build_number() { + return SHORTVERSION " latest " __DATE__ " " __TIME__; +} + +const char* get_version_string() { + const auto* result = utils::string::va( + "{} {} build {} {}", BUILD_TYPE, "(Alpha)", get_build_number(), + reinterpret_cast(0x6A1574)); + + return result; +} + +void dvar_set_version_string(const game::dvar_t* dvar, const char* /*value*/) { + const auto* result = get_version_string(); + utils::hook::invoke(0x480E70, dvar, result); +} + +void cg_draw_version() { + assert(game::ScrPlace_IsFullScreenActive()); + + // Default values + constexpr auto font_scale = 0.25f; + constexpr auto max_chars = std::numeric_limits::max(); + // Default colours + constexpr float shadow_color[] = {0.0f, 0.0f, 0.0f, 0.69f}; + constexpr float color[] = {0.4f, 0.69f, 1.0f, 0.69f}; + + auto* const placement = game::ScrPlace_GetUnsafeFullPlacement(); + auto* const font = game::UI_GetFontHandle(placement, 0, 0.583f); + + const auto width = game::UI_TextWidth((*dvars::version)->current.string, 0, + font, font_scale); + const auto height = game::UI_TextHeight(font, font_scale); + + // clang-format off + game::UI_DrawText(placement, (*dvars::version)->current.string, max_chars, + font, + 1.0f - (dvars::cg_drawVersionX->current.value + + static_cast(width)), + 1.0f - (dvars::cg_drawVersionY->current.value + + static_cast(height)), + 3, 3, font_scale, shadow_color, 0); + game::UI_DrawText(placement, (*dvars::version)->current.string, max_chars, + font, + (0.0f - static_cast(width)) - + dvars::cg_drawVersionX->current.value, + (0.0f - static_cast(height)) - + dvars::cg_drawVersionY->current.value, + 3, 3, font_scale, color, 0); + // clang-format on +} + +void cg_draw_full_screen_debug_overlays_stub(int local_client_num) { + assert(game::ScrPlace_IsFullScreenActive()); + + if (dvars::cg_drawVersion->current.enabled) { + cg_draw_version(); + } + + utils::hook::invoke(0x44BD00, local_client_num); +} +} // namespace + +class component final : public component_interface { +public: + void post_load() override { + utils::hook(0x46F570, get_build_number, HOOK_JUMP).install()->quick(); + utils::hook(0x60429A, dvar_set_version_string, HOOK_CALL) + .install() + ->quick(); + + utils::hook::set(0x446A48, "iw4-sp: Console"); + utils::hook::set(0x50C110, "iw4-sp: Game"); + + utils::hook::set(0x579364, "iw4-sp: " SHORTVERSION "> "); + + // Com_Init_Try_Block_Function + utils::hook::set(0x604004, BUILD_TYPE); + utils::hook::set(0x603FFF, SHORTVERSION); + utils::hook::set(0x603FF5, __DATE__); + + register_branding_dvars(); + utils::hook(0x57DAFF, cg_draw_full_screen_debug_overlays_stub, HOOK_CALL) + .install() + ->quick(); + } + + static void register_branding_dvars() { +#ifdef _DEBUG + constexpr auto value = true; +#else + constexpr auto value = false; +#endif + dvars::cg_drawVersion = game::Dvar_RegisterBool( + "cg_drawVersion", value, game::DVAR_NONE, "Draw the game version"); + dvars::cg_drawVersionX = game::Dvar_RegisterFloat( + "cg_drawVersionX", 50.0f, 0.0f, 512.0f, game::DVAR_NONE, + "X offset for the version string"); + dvars::cg_drawVersionY = game::Dvar_RegisterFloat( + "cg_drawVersionY", 18.0f, 0.0f, 512.0f, game::DVAR_NONE, + "Y offset for the version string"); + } +}; +} // namespace branding + +REGISTER_COMPONENT(branding::component) diff --git a/src/client/component/ceg.cpp b/src/client/component/ceg.cpp new file mode 100644 index 0000000..6a85c33 --- /dev/null +++ b/src/client/component/ceg.cpp @@ -0,0 +1,38 @@ +#include +#include "loader/component_loader.hpp" + +#include + +namespace ceg { +class component final : public component_interface { +public: + void post_load() override { + // Some unnecessary CEG functions. + // Important functions are patched in the exe already + + utils::hook::set(0x44AD80, 0xC301B0); + utils::hook::set(0x476A20, 0xC301B0); + utils::hook::set(0x4E3B90, 0xC301B0); + utils::hook::set(0x4E3B90, 0xC301B0); + utils::hook::set(0x411160, 0xC301B0); + utils::hook::set(0x41E390, 0xC301B0); + utils::hook::set(0x47C2E0, 0xC301B0); + utils::hook::set(0x4EEA90, 0xC301B0); + utils::hook::set(0x40E380, 0xC301B0); + + // Killer caller + utils::hook::set(0x43F320, 0xC3); + utils::hook::set(0x458ED0, 0xC3); + utils::hook::set(0x47A140, 0xC3); + + utils::hook::nop(0x411166, 9); + + // Remove 'Steam Start' check + utils::hook::nop(0x43FAD5, 12); + // Shutdown + utils::hook::set(0x4619B0, 0xC3); + } +}; +} // namespace ceg + +REGISTER_COMPONENT(ceg::component) diff --git a/src/client/component/command.cpp b/src/client/component/command.cpp new file mode 100644 index 0000000..9c56ec1 --- /dev/null +++ b/src/client/component/command.cpp @@ -0,0 +1,152 @@ +#include +#include "loader/component_loader.hpp" + +#include +#include +#include + +#include "command.hpp" + +namespace command { +namespace { +utils::hook::detour client_command_hook; + +std::unordered_map> handlers; +std::unordered_map> + handlers_sv; + +void main_handler() { + params params; + + const auto command = utils::string::to_lower(params[0]); + if (handlers.contains(command)) { + handlers[command](params); + } +} + +void client_command_stub(int client_num, const char* s) { + + auto* entity = &game::g_entities[client_num]; + + params_sv params; + + const auto command = utils::string::to_lower(params[0]); + const auto got = handlers_sv.find(command); + + if (got != handlers_sv.end()) { + got->second(entity, params); + return; + } + + client_command_hook.invoke(client_num, s); +} +} // namespace + +params::params() : nesting_(game::cmd_args->nesting) { + assert(game::cmd_args->nesting < game::CMD_MAX_NESTING); +} + +int params::size() const { return game::cmd_args->argc[this->nesting_]; } + +const char* params::get(const int index) const { + if (index >= this->size()) { + return ""; + } + + return game::cmd_args->argv[this->nesting_][index]; +} + +std::string params::join(const int index) const { + std::string result; + + for (auto i = index; i < this->size(); i++) { + if (i > index) + result.append(" "); + result.append(this->get(i)); + } + + return result; +} + +params_sv::params_sv() : nesting_(game::sv_cmd_args->nesting) { + assert(game::sv_cmd_args->nesting < game::CMD_MAX_NESTING); +} + +int params_sv::size() const { return game::sv_cmd_args->argc[this->nesting_]; } + +const char* params_sv::get(const int index) const { + if (index >= this->size()) { + return ""; + } + + return game::sv_cmd_args->argv[this->nesting_][index]; +} + +std::string params_sv::join(const int index) const { + std::string result; + + for (auto i = index; i < this->size(); i++) { + if (i > index) + result.append(" "); + result.append(this->get(i)); + } + + return result; +} + +void add_raw(const char* name, void (*callback)(), const int is_key) { + assert(is_key == 0 || is_key == 1); + + game::Cmd_AddCommand( + name, callback, + utils::memory::get_allocator()->allocate(), is_key); +} + +void add(const char* name, const std::function& callback) { + const auto command = utils::string::to_lower(name); + + if (!handlers.contains(command)) { + add_raw(name, main_handler); + } + + handlers[command] = callback; +} + +void add(const char* name, const std::function& callback) { + add(name, [callback](const params&) { callback(); }); +} + +void add_sv(const char* name, + std::function callback) { + const auto command = utils::string::to_lower(name); + + if (!handlers_sv.contains(command)) { + handlers_sv[command] = callback; + } +} + +void execute(std::string command, const bool sync) { + command += "\n"; + + if (sync) { + game::Cmd_ExecuteSingleCommand(0, 0, command.data()); + } else { + game::Cbuf_AddText(0, command.data()); + } +} + +class component final : public component_interface { +public: + static_assert(sizeof(game::cmd_function_s) == 0x18); + static_assert(offsetof(game::gentity_s, client) == 0x108); + + void post_load() override { + client_command_hook.create(0x4DF4B0, client_command_stub); + } + + void pre_destroy() override { client_command_hook.clear(); } +}; +} // namespace command + +REGISTER_COMPONENT(command::component) diff --git a/src/client/component/command.hpp b/src/client/component/command.hpp new file mode 100644 index 0000000..f34a625 --- /dev/null +++ b/src/client/component/command.hpp @@ -0,0 +1,40 @@ +#pragma once + +namespace command { +class params { +public: + params(); + + [[nodiscard]] int size() const; + [[nodiscard]] const char* get(int index) const; + [[nodiscard]] std::string join(int index) const; + + const char* operator[](const int index) const { return this->get(index); } + +private: + int nesting_; +}; + +class params_sv { +public: + params_sv(); + + [[nodiscard]] int size() const; + [[nodiscard]] const char* get(int index) const; + [[nodiscard]] std::string join(int index) const; + + const char* operator[](const int index) const { return this->get(index); } + +private: + int nesting_; +}; + +void add_raw(const char* name, void (*callback)(), int is_key = 0); +void add(const char* name, const std::function& callback); +void add(const char* name, const std::function& callback); + +void add_sv(const char* name, + std::function callback); + +void execute(std::string command, bool sync = false); +} // namespace command diff --git a/src/client/component/console.cpp b/src/client/component/console.cpp new file mode 100644 index 0000000..fc6c6fb --- /dev/null +++ b/src/client/component/console.cpp @@ -0,0 +1,71 @@ +#include +#include "loader/component_loader.hpp" + +#include + +#include "dvar.hpp" + +namespace console { +namespace { +bool is_command; + +void con_toggle_console() { + game::Field_Clear(game::g_consoleField); + + if (game::conDrawInputGlob->matchIndex >= 0 && + game::conDrawInputGlob->autoCompleteChoice[0] != '\0') { + game::conDrawInputGlob->matchIndex = -1; + game::conDrawInputGlob->autoCompleteChoice[0] = '\0'; + } + + game::g_consoleField->widthInPixels = *game::g_console_field_width; + game::g_consoleField->charHeight = *game::g_console_char_height; + game::g_consoleField->fixedSize = 1; + game::con->outputVisible = false; + + // clientUIActives[0].keyCatchers + utils::hook::set(0x929140, + *reinterpret_cast(0x929140) ^ + game::KEYCATCH_CONSOLE); +} + +bool con_is_dvar_command_stub(const char* cmd) { + is_command = game::Con_IsDvarCommand(cmd); + return is_command; +} + +void cmd_for_each_stub(void (*callback)(const char* str)) { + if (!is_command) { + utils::hook::invoke(0x4B7000, callback); + } +} +} // namespace + +class component final : public component_interface { +public: + static_assert(sizeof(game::field_t) == 0x118); + static_assert(sizeof(game::ConDrawInputGlob) == 0x64); + + void post_start() override { + // Prevents console from opening + dvar::override::register_bool("monkeytoy", false, game::DVAR_NONE); + } + + void post_load() override { + utils::hook(0x44317E, con_toggle_console, HOOK_CALL) + .install() + ->quick(); // CL_KeyEvent + utils::hook(0x442E8E, con_toggle_console, HOOK_JUMP) + .install() + ->quick(); // CL_KeyEvent + + // Con_DrawInput + utils::hook(0x57946D, con_is_dvar_command_stub, HOOK_CALL) + .install() + ->quick(); + utils::hook(0x57951C, cmd_for_each_stub, HOOK_CALL).install()->quick(); + } +}; +} // namespace console + +REGISTER_COMPONENT(console::component) diff --git a/src/client/component/debug.cpp b/src/client/component/debug.cpp new file mode 100644 index 0000000..e3de982 --- /dev/null +++ b/src/client/component/debug.cpp @@ -0,0 +1,129 @@ +#include +#include "loader/component_loader.hpp" +#include "game/dvars.hpp" +#include "game/engine/scoped_critical_section.hpp" +#include "game/engine/large_local.hpp" + +#include + +#include "command.hpp" +#include "scheduler.hpp" + +namespace debug { +namespace { +void com_assert_f() { assert("a" && false); } + +void com_bug_f(const command::params& params) { + char new_file_name[0x105]{}; + char to_ospath[MAX_PATH]{}; + char from_ospath[MAX_PATH]{}; + const char* bug; + + if (!*game::logfile) { + game::Com_PrintError(game::CON_CHANNEL_ERROR, + "CopyFile failed: logfile wasn't opened\n"); + } + + if (params.size() == 2) { + bug = params.get(1); + } else { + assert(dvars::bug_name); + bug = dvars::bug_name->current.string; + } + + sprintf_s(new_file_name, "%s_%s.log", bug, game::Live_GetLocalClientName(0)); + + game::engine::scoped_critical_section _(game::CRITSECT_CONSOLE, + game::SCOPED_CRITSECT_NORMAL); + + if (*game::logfile) { + game::FS_FCloseFile(*game::logfile); + *game::logfile = 0; + } + + game::FS_BuildOSPath(std::filesystem::current_path().string().data(), "", + "console.log", from_ospath); + game::FS_BuildOSPath(std::filesystem::current_path().string().data(), "", + new_file_name, to_ospath); + const auto result = CopyFileA(from_ospath, to_ospath, 0); + game::Com_OpenLogFile(); + + if (!result) { + game::Com_PrintError(game::CON_CHANNEL_ERROR, "CopyFile failed(%d) %s %s\n", + GetLastError(), "console.log", new_file_name); + } +} + +void com_bug_name_inc_f() { + char buf[260]{}; + + if (std::strlen(dvars::bug_name->current.string) < 4) { + game::Dvar_SetString(dvars::bug_name, "bug0"); + return; + } + + if (std::strncmp(dvars::bug_name->current.string, "bug", 3) != 0) { + game::Dvar_SetString(dvars::bug_name, "bug0"); + return; + } + + const auto n = std::strtol(dvars::bug_name->current.string + 3, nullptr, 10); + sprintf_s(buf, "bug%d", n + 1); + game::Dvar_SetString(dvars::bug_name, buf); +} + +void g_print_fast_file_errors(const char* fastfile) { + assert(fastfile); + + game::engine::large_local rawfile_buf_large_local(0x18000); + auto* rawfile_buf = static_cast(rawfile_buf_large_local.get_buf()); + + auto* text = game::DB_ReadRawFile(fastfile, rawfile_buf, 0x18000); + + assert(text); + + if (*text) { + game::Com_PrintError(game::CON_CHANNEL_ERROR, + "There were errors when building fast file '%s'\n", + fastfile); + game::Com_PrintError(game::CON_CHANNEL_ERROR, "%s", text); + } +} + +void g_init_game_stub() { + utils::hook::invoke(0x4D6410); + + g_print_fast_file_errors("code_post_gfx"); + g_print_fast_file_errors("common"); + g_print_fast_file_errors((*dvars::sv_mapname)->current.string); +} +} // namespace + +class component final : public component_interface { +public: + static_assert(sizeof(RTL_CRITICAL_SECTION) == 0x18); + + void post_load() override { + utils::hook::set(0x604203, com_assert_f); + + scheduler::once( + [] { + dvars::bug_name = game::Dvar_RegisterString( + "bug_name", "bug0", game::DVAR_CHEAT | game::DVAR_CODINFO, + "Name appended to the copied console log"); + }, + scheduler::pipeline::main); + + command::add("bug", com_bug_f); + command::add("bug_name_inc", com_bug_name_inc_f); + +#ifdef _DEBUG + utils::hook(0x4C79DF, g_init_game_stub, HOOK_CALL) + .install() + ->quick(); // Scr_FreeEntityList +#endif + } +}; +} // namespace debug + +REGISTER_COMPONENT(debug::component) diff --git a/src/client/component/discord.cpp b/src/client/component/discord.cpp new file mode 100644 index 0000000..1c90a26 --- /dev/null +++ b/src/client/component/discord.cpp @@ -0,0 +1,77 @@ +#include +#include "loader/component_loader.hpp" + +#include + +#include "scheduler.hpp" + +using namespace std::literals; + +namespace discord { +namespace { +DiscordRichPresence discord_presence; + +void update_discord() { + Discord_RunCallbacks(); + + if (!discord_presence.startTimestamp) { + discord_presence.startTimestamp = + std::chrono::duration_cast( + std::chrono::system_clock::now().time_since_epoch()) + .count(); + } + + Discord_UpdatePresence(&discord_presence); +} +} // namespace + +class component final : public component_interface { +public: + void post_load() override { + DiscordEventHandlers handlers; + ZeroMemory(&handlers, sizeof(handlers)); + handlers.ready = ready; + handlers.errored = errored; + handlers.disconnected = errored; + handlers.joinGame = nullptr; + handlers.spectateGame = nullptr; + handlers.joinRequest = nullptr; + + Discord_Initialize("978049907585863710", &handlers, 1, nullptr); + + scheduler::once( + [] { + scheduler::once(update_discord, scheduler::pipeline::async); + scheduler::loop(update_discord, scheduler::pipeline::async, 15s); + }, + scheduler::pipeline::main); + + initialized_ = true; + } + + void pre_destroy() override { + if (initialized_) { + Discord_Shutdown(); + } + } + +private: + bool initialized_ = false; + + static void ready(const DiscordUser* request) { + ZeroMemory(&discord_presence, sizeof(discord_presence)); + + discord_presence.state = "Singleplayer"; + discord_presence.instance = 1; + discord_presence.startTimestamp = 0; + printf("Discord: Ready\n"); + Discord_UpdatePresence(&discord_presence); + } + + static void errored(const int error_code, const char* message) { + printf("Discord: (%i) %s", error_code, message); + } +}; +} // namespace discord + +REGISTER_COMPONENT(discord::component) diff --git a/src/client/component/dvar.cpp b/src/client/component/dvar.cpp new file mode 100644 index 0000000..e83e4ea --- /dev/null +++ b/src/client/component/dvar.cpp @@ -0,0 +1,172 @@ + +#include +#include "loader/component_loader.hpp" + +#include + +#include "dvar.hpp" + +namespace dvar { +struct dvar_base { + std::uint16_t flags{}; +}; + +struct dvar_bool : dvar_base { + bool value{}; +}; + +struct dvar_float : dvar_base { + float value{}; + float min{}; + float max{}; +}; + +struct dvar_int : dvar_base { + int value{}; + int min{}; + int max{}; +}; + +struct dvar_string : dvar_base { + std::string value{}; +}; + +namespace { +template +T* find_dvar(std::unordered_map& map, const std::string& name) { + auto i = map.find(name); + if (i != map.end()) { + return &i->second; + } + + return nullptr; +} +} // namespace + +namespace override { +static std::unordered_map register_bool_overrides; +static std::unordered_map register_float_overrides; +static std::unordered_map register_int_overrides; +static std::unordered_map register_string_overrides; + +void register_bool(const std::string& name, const bool value, + const std::uint16_t flags) { + dvar_bool values; + values.value = value; + values.flags = flags; + register_bool_overrides[name] = values; +} + +void register_float(const std::string& name, const float value, const float min, + const float max, const std::uint16_t flags) { + dvar_float values; + values.value = value; + values.min = min; + values.max = max; + values.flags = flags; + register_float_overrides[name] = values; +} + +void register_int(const std::string& name, const int value, const int min, + const int max, const std::uint16_t flags) { + dvar_int values; + values.value = value; + values.min = min; + values.max = max; + values.flags = flags; + register_int_overrides[name] = values; +} + +void register_string(const std::string& name, const std::string& value, + const std::uint16_t flags) { + dvar_string values; + values.value = value; + values.flags = flags; + register_string_overrides[name] = values; +} +} // namespace override + +namespace { +utils::hook::detour dvar_register_bool_hook; +utils::hook::detour dvar_register_float_hook; +utils::hook::detour dvar_register_int_hook; +utils::hook::detour dvar_register_string_hook; + +const game::dvar_t* dvar_register_bool_stub(const char* name, bool value, + std::uint16_t flags, + const char* description) { + auto* var = find_dvar(override::register_bool_overrides, name); + if (var) { + value = var->value; + flags = var->flags; + } + + return dvar_register_bool_hook.invoke(name, value, flags, + description); +} + +const game::dvar_t* dvar_register_float_stub(const char* name, float value, + float min, float max, + std::uint16_t flags, + const char* description) { + auto* var = find_dvar(override::register_float_overrides, name); + if (var) { + value = var->value; + min = var->min; + max = var->max; + flags = var->flags; + } + + return dvar_register_float_hook.invoke( + name, value, min, max, flags, description); +} + +const game::dvar_t* dvar_register_int_stub(const char* name, int value, int min, + int max, std::uint16_t flags, + const char* description) { + auto* var = find_dvar(override::register_int_overrides, name); + if (var) { + value = var->value; + min = var->min; + max = var->max; + flags = var->flags; + } + + return dvar_register_int_hook.invoke( + name, value, min, max, flags, description); +} + +const game::dvar_t* dvar_register_string_stub(const char* name, + const char* value, + std::uint16_t flags, + const char* description) { + auto* var = find_dvar(override::register_string_overrides, name); + if (var) { + value = var->value.data(); + flags = var->flags; + } + + return dvar_register_string_hook.invoke( + name, value, flags, description); +} +} // namespace + +class component final : public component_interface { +public: + void post_load() override { + dvar_register_bool_hook.create(0x429390, &dvar_register_bool_stub); + dvar_register_float_hook.create(0x4051D0, &dvar_register_float_stub); + dvar_register_int_hook.create(0x4E9490, &dvar_register_int_stub); + dvar_register_string_hook.create(0x49E0B0, &dvar_register_string_stub); + } + + void pre_destroy() override { + dvar_register_bool_hook.clear(); + dvar_register_float_hook.clear(); + dvar_register_int_hook.clear(); + dvar_register_string_hook.clear(); + } +}; +} // namespace dvar + +REGISTER_COMPONENT(dvar::component) diff --git a/src/client/component/dvar.hpp b/src/client/component/dvar.hpp new file mode 100644 index 0000000..66901ae --- /dev/null +++ b/src/client/component/dvar.hpp @@ -0,0 +1,13 @@ +#pragma once + +namespace dvar { +namespace override { +void register_bool(const std::string& name, bool value, std::uint16_t flags); +void register_float(const std::string& name, float value, float min, float max, + std::uint16_t flags); +void register_int(const std::string& name, int value, int min, int max, + std::uint16_t flags); +void register_string(const std::string& name, const std::string& value, + std::uint16_t flags); +} // namespace override +} // namespace dvar diff --git a/src/client/component/dvar_patches.cpp b/src/client/component/dvar_patches.cpp new file mode 100644 index 0000000..f709941 --- /dev/null +++ b/src/client/component/dvar_patches.cpp @@ -0,0 +1,68 @@ +#include +#include "loader/component_loader.hpp" + +#include + +#include "scheduler.hpp" +#include "dvar.hpp" + +namespace dvar_patches { +namespace { +const game::dvar_t* dvar_register_name(const char* dvar_name, const char* value, + unsigned __int16 flags, + const char* description) { + return game::Dvar_RegisterString( + dvar_name, value, game::DVAR_ARCHIVE | game::DVAR_USERINFO, description); +} +} // namespace + +class component final : public component_interface { +public: + void post_start() override { + dvar::override::register_bool("intro", true, game::DVAR_NONE); + dvar::override::register_float("cg_fov", 65.0f, 65.0f, 160.0f, + game::DVAR_ARCHIVE); + dvar::override::register_string("fs_basegame", BASEGAME, game::DVAR_INIT); + +#ifdef _DEBUG + dvar::override::register_bool("sv_cheats", true, game::DVAR_NONE); +#endif + } + + void post_load() override { + utils::hook(0x475156, dvar_register_name, HOOK_CALL).install()->quick(); + patch_sp(); + } + +private: + static void patch_sp() { + utils::hook::set(0x635841, 0xEB); // Read only + utils::hook::set(0x635913, 0xEB); // Cheat protected + utils::hook::set(0x6358A5, 0xEB); // Write protected + utils::hook::set(0x635974, 0xEB); // Latched + +#ifdef _DEBUG + // Nop Dvar_RegisterVariant for sv_cheats in Dvar_Init + utils::hook::nop(0x471522, 5); +#endif + + // Skip dvar output + utils::hook::set(0x4CD2B7, 0xEB); + + // Ignore server dvar change for clients + utils::hook::set(0x63580B, 0xEB); + + scheduler::once( + [] { + game::Dvar_RegisterBool("scr_damageFeedback", true, game::DVAR_NONE, + "Show marker when hitting enemies"); + game::Dvar_RegisterString("connect_ip", "127.0.0.1:28960", + game::DVAR_NONE, + "Temporary dvar used to connect"); + }, + scheduler::pipeline::main); + } +}; +} // namespace dvar_patches + +REGISTER_COMPONENT(dvar_patches::component) diff --git a/src/client/component/filesystem.cpp b/src/client/component/filesystem.cpp new file mode 100644 index 0000000..d945013 --- /dev/null +++ b/src/client/component/filesystem.cpp @@ -0,0 +1,82 @@ +#include +#include "loader/component_loader.hpp" + +#include +#include + +#include "game_module.hpp" +#include "filesystem.hpp" + +namespace filesystem { +namespace { +const char* sys_default_install_path_stub() { + static auto current_path = std::filesystem::current_path().string(); + return current_path.data(); +} +} // namespace + +std::vector vectored_file_list(const std::string& path, + const std::string& extension) { + std::vector file_list; + + auto num_files = 0; + const auto** files = game::FS_ListFiles(path.data(), extension.data(), + game::FS_LIST_ALL, &num_files, 10); + + if (files) { + for (auto i = 0; i < num_files; ++i) { + if (files[i]) { + file_list.emplace_back(files[i]); + } + } + + game::FS_FreeFileList(files, 10); + } + + return file_list; +} + +std::string get_binary_directory() { + const auto dir = game_module::get_host_module().get_folder(); + return utils::string::replace(dir, "/", "\\"); +} + +file::file(std::string name, game::FsThread thread) : name_(std::move(name)) { + assert(!this->name_.empty()); + + auto handle = 0; + const auto len = + game::FS_FOpenFileReadForThread(name_.data(), &handle, thread); + + if (!handle) { + this->valid_ = false; + return; + } + + auto* buf = static_cast(game::Hunk_AllocateTempMemory(len + 1)); + game::FS_Read(buf, len, handle); + buf[len] = '\0'; + + game::FS_FCloseFile(handle); + + this->valid_ = true; + this->buffer_.append(buf, len); +} + +bool file::exists() const { return this->valid_; } + +const std::string& file::get_buffer() const { return this->buffer_; } + +const std::string& file::get_name() const { return this->name_; } + +class component final : public component_interface { +public: + void post_load() override { + utils::hook(0x465B90, sys_default_install_path_stub, HOOK_CALL) + .install() + ->quick(); // Sys_CreateFile + } +}; +} // namespace filesystem + +REGISTER_COMPONENT(filesystem::component) diff --git a/src/client/component/filesystem.hpp b/src/client/component/filesystem.hpp new file mode 100644 index 0000000..177e3ca --- /dev/null +++ b/src/client/component/filesystem.hpp @@ -0,0 +1,21 @@ +#pragma once + +namespace filesystem { +std::vector vectored_file_list(const std::string& path, + const std::string& extension); +std::string get_binary_directory(); + +class file { +public: + file(std::string name, game::FsThread thread); + + [[nodiscard]] bool exists() const; + [[nodiscard]] const std::string& get_buffer() const; + [[nodiscard]] const std::string& get_name() const; + +private: + bool valid_ = false; + std::string name_; + std::string buffer_; +}; +} // namespace filesystem diff --git a/src/client/component/game_log.cpp b/src/client/component/game_log.cpp new file mode 100644 index 0000000..ac34055 --- /dev/null +++ b/src/client/component/game_log.cpp @@ -0,0 +1,115 @@ +#include +#include "loader/component_loader.hpp" +#include "game/dvars.hpp" + +#include + +#include "gsc/extension.hpp" + +#include "game_log.hpp" +#include "scheduler.hpp" + +namespace game_log { +namespace { +int log_file = 0; + +void g_scr_log_print() { + char string[1024]{}; + std::size_t i_string_len = 0; + + const auto i_num_parms = game::Scr_GetNumParam(); + for (std::size_t i = 0; i < i_num_parms; ++i) { + const auto* psz_token = game::Scr_GetString(i); + const auto i_token_len = std::strlen(psz_token); + + i_string_len += i_token_len; + if (i_string_len >= sizeof(string)) { + // Do not overflow the buffer + break; + } + + strncat_s(string, psz_token, _TRUNCATE); + } + + log_printf("%s", string); +} + +void g_init_game_stub() { + game::Com_Printf(game::CON_CHANNEL_SERVER, + "------- Game Initialization -------\n"); + game::Com_Printf(game::CON_CHANNEL_SERVER, "gamename: iw4-sp\n"); + game::Com_Printf(game::CON_CHANNEL_SERVER, "gamedate: %s\n", __DATE__); + + if (*dvars::g_log->current.string == '\0') { + game::Com_Printf(game::CON_CHANNEL_SERVER, "Not logging to disk.\n"); + } else { + game::FS_FOpenFileByMode(dvars::g_log->current.string, &log_file, + game::FS_APPEND_SYNC); + + if (!log_file) { + game::Com_PrintWarning(game::CON_CHANNEL_SERVER, + "WARNING: Couldn't open logfile: %s\n"); + } else { + log_printf( + "------------------------------------------------------------\n"); + log_printf("InitGame\n"); + } + } + + utils::hook::invoke(0x4FA880); // Vehicle_ClearServerDefs +} + +void g_shutdown_game_stub() { + if (log_file) { + log_printf("ShutdownGame:\n"); + log_printf( + "------------------------------------------------------------\n"); + + game::FS_FCloseFile(log_file); + log_file = 0; + } + + utils::hook::invoke(0x455F90); // Actor_ClearThreatBiasGroups +} +} // namespace + +void log_printf(const char* fmt, ...) { + char string[1024]{}; + char string2[1024]{}; + va_list ap; + + if (!log_file) { + return; + } + + va_start(ap, fmt); + vsnprintf_s(string2, _TRUNCATE, fmt, ap); + va_end(ap); + + const auto time = game::level->time / 1000; + const auto len = sprintf_s(string, "%3i:%i%i %s", time / 60, time % 60 / 10, + time % 60 % 10, string2); + game::FS_Write(string, len, log_file); +} + +class component final : public component_interface { +public: + static_assert(offsetof(game::level_locals_t, time) == 0x34); + + void post_load() override { + utils::hook(0x4C75E0, g_init_game_stub, HOOK_CALL).install()->quick(); + utils::hook(0x418B5A, g_shutdown_game_stub, HOOK_CALL).install()->quick(); + + scheduler::once( + [] { + dvars::g_log = game::Dvar_RegisterString( + "g_log", "games_sp.log", game::DVAR_NONE, "Log file name"); + }, + scheduler::pipeline::main); + + gsc::add_function("logprint", g_scr_log_print); + } +}; +} // namespace game_log + +REGISTER_COMPONENT(game_log::component) diff --git a/src/client/component/game_log.hpp b/src/client/component/game_log.hpp new file mode 100644 index 0000000..7e39c34 --- /dev/null +++ b/src/client/component/game_log.hpp @@ -0,0 +1,5 @@ +#pragma once + +namespace game_log { +void log_printf(const char* fmt, ...); +} diff --git a/src/client/component/game_module.cpp b/src/client/component/game_module.cpp new file mode 100644 index 0000000..40ff3ad --- /dev/null +++ b/src/client/component/game_module.cpp @@ -0,0 +1,110 @@ +#include +#include "loader/component_loader.hpp" + +#ifdef INJECT_HOST_AS_LIB +#include +#endif + +#include + +#include "game_module.hpp" + +namespace game_module { +#ifdef INJECT_HOST_AS_LIB +namespace { +utils::hook::detour handle_a_hook; +utils::hook::detour handle_w_hook; +utils::hook::detour handle_ex_a_hook; +utils::hook::detour handle_ex_w_hook; +utils::hook::detour file_name_a_hook; +utils::hook::detour file_name_w_hook; + +HMODULE WINAPI get_module_handle_a(const LPCSTR module_name) { + if (!module_name) { + return get_game_module(); + } + + return handle_a_hook.invoke(module_name); +} + +HMODULE WINAPI get_module_handle_w(const LPWSTR module_name) { + if (!module_name) { + return get_game_module(); + } + + return handle_w_hook.invoke(module_name); +} + +BOOL WINAPI get_module_handle_ex_a(const DWORD flags, const LPCSTR module_name, + HMODULE* hmodule) { + if (!module_name) { + *hmodule = get_game_module(); + return TRUE; + } + + return handle_ex_a_hook.invoke(flags, module_name, hmodule); +} + +BOOL WINAPI get_module_handle_ex_w(const DWORD flags, const LPCWSTR module_name, + HMODULE* hmodule) { + if (!module_name) { + *hmodule = get_game_module(); + return TRUE; + } + + return handle_ex_w_hook.invoke(flags, module_name, hmodule); +} + +DWORD WINAPI get_module_file_name_a(HMODULE hmodule, const LPSTR filename, + const DWORD size) { + if (!hmodule) { + hmodule = get_game_module(); + } + + return file_name_a_hook.invoke(hmodule, filename, size); +} + +DWORD WINAPI get_module_file_name_w(HMODULE hmodule, const LPWSTR filename, + const DWORD size) { + if (!hmodule || utils::nt::library(hmodule) == get_game_module()) { + hmodule = get_host_module(); + } + + return file_name_w_hook.invoke(hmodule, filename, size); +} + +void hook_module_resolving() { + handle_a_hook.create(&GetModuleHandleA, &get_module_handle_a); + handle_w_hook.create(&GetModuleHandleW, &get_module_handle_w); + handle_ex_w_hook.create(&GetModuleHandleExA, &get_module_handle_ex_a); + handle_ex_w_hook.create(&GetModuleHandleExW, &get_module_handle_ex_w); + file_name_a_hook.create(&GetModuleFileNameA, &get_module_file_name_a); + file_name_w_hook.create(&GetModuleFileNameW, &get_module_file_name_w); +} +} // namespace +#endif + +utils::nt::library get_game_module() { + static utils::nt::library game{reinterpret_cast(0x400000)}; + return game; +} + +utils::nt::library get_host_module() { + static utils::nt::library host{}; + return host; +} +class component final : public component_interface { +public: + void post_start() override { get_host_module(); } + + void post_load() override { +#ifdef INJECT_HOST_AS_LIB + hook_module_resolving(); +#else + assert(get_host_module() == get_game_module()); +#endif + } +}; +} // namespace game_module + +REGISTER_COMPONENT(game_module::component) diff --git a/src/client/component/game_module.hpp b/src/client/component/game_module.hpp new file mode 100644 index 0000000..e43f6de --- /dev/null +++ b/src/client/component/game_module.hpp @@ -0,0 +1,6 @@ +#pragma once + +namespace game_module { +utils::nt::library get_game_module(); +utils::nt::library get_host_module(); +} // namespace game_module diff --git a/src/client/component/gsc/extension.cpp b/src/client/component/gsc/extension.cpp new file mode 100644 index 0000000..ea7c200 --- /dev/null +++ b/src/client/component/gsc/extension.cpp @@ -0,0 +1,126 @@ +#include +#include "loader/component_loader.hpp" + +#include +#include + +#include "extension.hpp" + +namespace gsc { +#define GSC_DEBUG_FUNCTIONS + +namespace { +struct script_function_def { + game::BuiltinFunction actionFunc; + bool type; +}; + +struct script_method_def { + game::BuiltinMethod actionFunc; + bool type; +}; + +std::unordered_map custom_scr_funcs; +std::unordered_map custom_scr_meths; + +game::BuiltinFunction built_in_get_function_stub(const char** p_name, + int* type) { + if (p_name) { + const auto itr = custom_scr_funcs.find(utils::string::to_lower(*p_name)); + if (itr != custom_scr_funcs.end()) { + *type = itr->second.type; + return itr->second.actionFunc; + } + } else { + for (const auto& [name, func] : custom_scr_funcs) { + game::Scr_RegisterFunction(reinterpret_cast(func.actionFunc), + name.data()); + } + } + + // If no function was found let's call BuiltIn_GetFunction + return utils::hook::invoke(0x4DD160, p_name, type); +} + +game::BuiltinMethod built_in_get_method_stub(const char** p_name, int* type) { + if (p_name) { + const auto itr = custom_scr_meths.find(utils::string::to_lower(*p_name)); + if (itr != custom_scr_meths.end()) { + *type = itr->second.type; + return itr->second.actionFunc; + } + } else { + for (const auto& [name, meth] : custom_scr_meths) { + game::Scr_RegisterFunction(reinterpret_cast(meth.actionFunc), + name.data()); + } + } + + // If no method was found let's call BuiltIn_GetMethod + return utils::hook::invoke(0x5DB850, p_name, type); +} +} // namespace + +void add_function(const char* name, game::BuiltinFunction func, bool type) { + script_function_def def; + def.actionFunc = func; + def.type = type; + + custom_scr_funcs.emplace(utils::string::to_lower(name), def); +} + +void add_method(const char* name, game::BuiltinMethod func, bool type) { + script_method_def def; + def.actionFunc = func; + def.type = type; + + custom_scr_meths.emplace(utils::string::to_lower(name), def); +} + +class extension final : public component_interface { +public: + void post_load() override { + // Fetch custom functions + utils::hook(0x4ADF9C, built_in_get_function_stub, HOOK_CALL) + .install() + ->quick(); // Scr_GetFunction + + utils::hook(0x444827, built_in_get_method_stub, HOOK_CALL) + .install() + ->quick(); // Scr_GetMethod + + add_functions(); +#ifdef GSC_DEBUG_FUNCTIONS + add_debug_functions(); +#endif + } + + static void add_functions() { + add_function("Float", [] { + switch (game::Scr_GetType(0)) { + case game::VAR_STRING: + game::Scr_AddFloat( + static_cast(std::atof(game::Scr_GetString(0)))); + break; + case game::VAR_FLOAT: + game::Scr_AddFloat(game::Scr_GetFloat(0)); + break; + case game::VAR_INTEGER: + game::Scr_AddFloat(static_cast(game::Scr_GetInt(0))); + break; + default: + game::Scr_ParamError(0, utils::string::va("cannot cast {0} to float", + game::Scr_GetTypeName(0))); + break; + } + }); + } + + static void add_debug_functions() { + add_function("AddDebugCommand", + [] { game::Cbuf_AddText(0, game::Scr_GetString(0)); }); + } +}; +} // namespace gsc + +REGISTER_COMPONENT(gsc::extension) diff --git a/src/client/component/gsc/extension.hpp b/src/client/component/gsc/extension.hpp new file mode 100644 index 0000000..6fa2ce1 --- /dev/null +++ b/src/client/component/gsc/extension.hpp @@ -0,0 +1,7 @@ +#pragma once + +namespace gsc { +void add_function(const char* name, game::BuiltinFunction func, + bool type = false); +void add_method(const char* name, game::BuiltinMethod func, bool type = false); +} // namespace gsc diff --git a/src/client/component/gsc/loading.cpp b/src/client/component/gsc/loading.cpp new file mode 100644 index 0000000..a393c71 --- /dev/null +++ b/src/client/component/gsc/loading.cpp @@ -0,0 +1,88 @@ +#include +#include "loader/component_loader.hpp" + +#include +#include + +namespace gsc { +namespace { +std::vector main_handles; +std::vector init_handles; + +// Do not use C++ objects because Scr_LoadScript may longjmp +void g_scr_load_scripts_stub() { + // Clear handles (from previous GSC loading session) + main_handles.clear(); + init_handles.clear(); + + char path[MAX_PATH]{}; + + auto num_files = 0; + const auto** files = + game::FS_ListFiles("scripts/", "gsc", game::FS_LIST_ALL, &num_files, 10); + + for (auto i = 0; i < num_files; ++i) { + const auto* script_file = files[i]; + game::Com_Printf(game::CON_CHANNEL_SERVER, "Loading script %s...\n", + script_file); + + const auto len = sprintf_s(path, "%s/%s", "scripts", script_file); + if (len == -1) { + continue; + } + + // Scr_LoadScriptInternal will add the '.gsc' suffix so we remove it + path[len - 4] = '\0'; + + if (!game::Scr_LoadScript(path)) { + game::Com_Printf(game::CON_CHANNEL_SERVER, + "Script %s encountered an error while loading\n", path); + continue; + } + + game::Com_Printf(game::CON_CHANNEL_SERVER, + "Script %s.gsc loaded successfully\n", path); + + const auto main_handle = game::Scr_GetFunctionHandle(path, "main"); + if (main_handle) { + main_handles.push_back(main_handle); + } + + const auto init_handle = game::Scr_GetFunctionHandle(path, "init"); + if (init_handle) { + init_handles.push_back(init_handle); + } + // Allow scripts with no handles + } + + game::FS_FreeFileList(files, 10); +} + +void scr_load_level_stub() { + for (const auto& handle : main_handles) { + const auto id = game::Scr_ExecThread(handle, 0); + game::Scr_FreeThread(static_cast(id)); + } + + utils::hook::invoke(0x470860); // Scr_LoadLevel + + for (const auto& handle : init_handles) { + const auto id = game::Scr_ExecThread(handle, 0); + game::Scr_FreeThread(static_cast(id)); + } +} +} // namespace + +class loading final : public component_interface { +public: + void post_load() override { + utils::hook(0x4054C2, g_scr_load_scripts_stub, HOOK_JUMP) + .install() + ->quick(); + + utils::hook(0x4C1E34, scr_load_level_stub, HOOK_CALL).install()->quick(); + } +}; +} // namespace gsc + +REGISTER_COMPONENT(gsc::loading) diff --git a/src/client/component/gsc/string.cpp b/src/client/component/gsc/string.cpp new file mode 100644 index 0000000..adac45f --- /dev/null +++ b/src/client/component/gsc/string.cpp @@ -0,0 +1,83 @@ +#include +#include "loader/component_loader.hpp" + +#include "extension.hpp" + +namespace gsc { +namespace { +void scr_str_i_cmp() { + const auto* string1 = game::SL_ConvertToString(game::Scr_GetConstString(0)); + const auto* string2 = game::SL_ConvertToString(game::Scr_GetConstString(1)); + + game::Scr_AddInt(game::I_stricmp(string1, string2)); +} + +void scr_is_end_str() { + const auto* str = game::Scr_GetString(0); + const auto* suffix = game::Scr_GetString(1); + + const auto str_len = std::strlen(str); + const auto suffix_len = std::strlen(suffix); + + if (suffix_len > str_len) { + game::Scr_AddInt(0); + return; + } + + game::Scr_AddInt( + std::memcmp(str + str_len - suffix_len, suffix, suffix_len) == 0); +} + +void scr_to_upper() { + const auto script_value = game::Scr_GetConstString(0); + const auto* string = game::SL_ConvertToString(script_value); + + char out[1024]{}; + bool changed = false; + + std::size_t i = 0; + while (i < sizeof(out)) { + const auto value = *string; + const auto result = + static_cast(std::toupper(static_cast(value))); + + out[i] = result; + + if (value != result) { + changed = true; + } + + if (result == '\0') { + break; + } + + ++string; + ++i; + } + + if (i >= sizeof(out)) { + game::Scr_Error("string too long"); + return; + } + + if (changed) { + game::Scr_AddString(out); + } else { + game::SL_AddRefToString(script_value); + game::Scr_AddConstString(script_value); + game::SL_RemoveRefToString(script_value); + } +} +} // namespace + +class string final : public component_interface { +public: + void post_load() override { + add_function("StrICmp", scr_str_i_cmp); + add_function("IsEndStr", scr_is_end_str); + add_function("ToUpper", scr_to_upper); + } +}; +} // namespace gsc + +REGISTER_COMPONENT(gsc::string) diff --git a/src/client/component/images.cpp b/src/client/component/images.cpp new file mode 100644 index 0000000..c6d962d --- /dev/null +++ b/src/client/component/images.cpp @@ -0,0 +1,16 @@ +#include +#include "loader/component_loader.hpp" + +#include + +namespace images { +class component final : public component_interface { +public: + void post_load() override { + // Skip version check + utils::hook::set(0x544746, 0xEB); + } +}; +} // namespace images + +REGISTER_COMPONENT(images::component) diff --git a/src/client/component/lean.cpp b/src/client/component/lean.cpp new file mode 100644 index 0000000..3825118 --- /dev/null +++ b/src/client/component/lean.cpp @@ -0,0 +1,73 @@ +#include +#include "loader/component_loader.hpp" + +#include + +#include "command.hpp" + +namespace lean { +namespace { +game::kbutton_t in_lean_left; +game::kbutton_t in_lean_right; + +void in_lean_left_down() { game::IN_KeyDown(&in_lean_left); } + +void in_lean_left_up() { game::IN_KeyUp(&in_lean_left); } + +void in_lean_right_down() { game::IN_KeyDown(&in_lean_right); } + +void in_lean_right_up() { game::IN_KeyUp(&in_lean_right); } + +void set_lean_flags(game::usercmd_s* cmd) { + if (in_lean_left.active || in_lean_left.wasPressed) { + cmd->buttons |= game::CMD_BUTTON_LEAN_LEFT; + } + + if (in_lean_right.active || in_lean_right.wasPressed) { + cmd->buttons |= game::CMD_BUTTON_LEAN_RIGHT; + } + + in_lean_left.wasPressed = false; + in_lean_right.wasPressed = false; +} + +void __declspec(naked) cl_cmd_buttons_stub() { + __asm { + pushad; + + push esi; + call set_lean_flags; + add esp, 0x4; + + popad; + + // code skipped by our hook + mov eax, ecx; + imul eax, eax, 0x21C; + + // CL_CmdButton + push 0x57B2B8; + ret; + } +} +} // namespace + +class component final : public component_interface { +public: + static_assert(sizeof(game::kbutton_t) == 0x14); + static_assert(sizeof(game::usercmd_s) == 0x40); + + void post_load() override { + command::add_raw("+leanleft", in_lean_left_down, TRUE); + command::add_raw("-leanleft", in_lean_left_up, TRUE); + + command::add_raw("+leanright", in_lean_right_down, TRUE); + command::add_raw("-leanright", in_lean_right_up, TRUE); + + utils::hook(0x57B2B0, cl_cmd_buttons_stub, HOOK_JUMP).install()->quick(); + utils::hook::nop(0x57B2B0 + 5, 3); + } +}; +} // namespace lean + +REGISTER_COMPONENT(lean::component) diff --git a/src/client/component/network.cpp b/src/client/component/network.cpp new file mode 100644 index 0000000..11ae9d1 --- /dev/null +++ b/src/client/component/network.cpp @@ -0,0 +1,83 @@ +#include +#include "loader/component_loader.hpp" + +#include "command.hpp" +#include "network.hpp" + +#include +#include + +namespace network { +namespace { +void cl_co_op_connect(const command::params& params) { + // Valid format is IP Port + if (params.size() < 3) { + return; + } + + const auto input = std::strtol(params.get(2), nullptr, 10); + const auto port = ::htons(static_cast(input)); + + command::execute( + utils::string::va("connect_coop {0} {1}", params.get(1), port)); +} +} // namespace + +class component final : public component_interface { +public: + void post_load() override { patch_sp(); } + +private: + static void patch_sp() { + // Ignore protocol mismatch + utils::hook::set(0x65D0C2, 0xEB); + utils::hook::set(0x65D0ED, 0xEB); + + // Disable matchmaking stuff + utils::hook::set(0x43BAE0, 0xEB); + + // Ignore 'MAX_PACKET_USERCMDS' + utils::hook::set(0x4B1436, 0xEB); + + // Disable IWNet stuff + utils::hook::set(0x44E824, 0xEB); + utils::hook::set(0x44E808, 0xEB); + + // Disable MP packet handler + utils::hook::set(0x65E717, 0xEB); + + // Disable LSP packet handler + utils::hook::set(0x65E3A4, 0xEB); + + // Avoid spam + utils::hook(0x65E786, game::Com_DPrintf, HOOK_CALL).install()->quick(); + utils::hook(0x65D659, game::Com_DPrintf, HOOK_CALL).install()->quick(); + + // Disable BigShort in NET_AdrToString + utils::hook(0x4BF4D1, game::ShortNoSwap, HOOK_CALL).install()->quick(); + utils::hook(0x4BF50C, game::ShortNoSwap, HOOK_CALL).install()->quick(); + + // Fix NET_StringToAdr (Only known workaround that actually works) + utils::hook::set(0x475417, "connect_coop"); + command::add("connect", cl_co_op_connect); + + // Disable BigShort in GetLocalAddressForEncryptedConnection + utils::hook(0x4CF42D, game::ShortNoSwap, HOOK_CALL).install()->quick(); + + // Parse port as unsigned short in Net_AddrToString + utils::hook::set(0x4BF4F3, "%u.%u.%u.%u:%hu"); + + // Force Win socket initialization + utils::hook::nop(0x42B649, 2); + + // Kill LSP + utils::hook::set(0x4553F0, 0xC3); // Hello + utils::hook::set(0x428D00, 0xC3); // LSP_SendLogRequest + utils::hook::set(0x4D13C0, 0xC3); // LSP_ParsePacket + utils::hook::set(0x66D440, 0xC3); // LSP_AddKeepAlive + utils::hook::nop(0x494E68, 5); // Don't create LSP socket + } +}; +} // namespace network + +REGISTER_COMPONENT(network::component) diff --git a/src/client/component/network.hpp b/src/client/component/network.hpp new file mode 100644 index 0000000..3a91e39 --- /dev/null +++ b/src/client/component/network.hpp @@ -0,0 +1,5 @@ +#pragma once + +namespace network { +using callback = std::function; +} diff --git a/src/client/component/no_border.cpp b/src/client/component/no_border.cpp new file mode 100644 index 0000000..a58423b --- /dev/null +++ b/src/client/component/no_border.cpp @@ -0,0 +1,43 @@ +#include +#include "loader/component_loader.hpp" +#include "game/dvars.hpp" + +#include + +namespace no_border { +namespace { +void __declspec(naked) window_style_stub() { + __asm { + push eax; + mov eax, dvars::r_noBorder; + cmp byte ptr [eax + 0x10], 1; + pop eax; + + je remove_border; + + mov ebp, WS_VISIBLE | WS_SYSMENU | WS_CAPTION; + jmp safe_return; + + remove_border: + mov ebp, WS_VISIBLE | WS_POPUP; + + safe_return: + push 0x50C0B8; + ret; + } +} +} // namespace + +class component final : public component_interface { +public: + void post_load() override { + utils::hook(0x50C0B3, window_style_stub, HOOK_JUMP).install()->quick(); + + dvars::r_noBorder = + game::Dvar_RegisterBool("r_noBorder", false, game::DVAR_ARCHIVE, + "Do not use a border in windowed mode"); + } +}; +} // namespace no_border + +REGISTER_COMPONENT(no_border::component) diff --git a/src/client/component/patches.cpp b/src/client/component/patches.cpp new file mode 100644 index 0000000..000bbff --- /dev/null +++ b/src/client/component/patches.cpp @@ -0,0 +1,103 @@ +#include +#include "loader/component_loader.hpp" + +#include +#include + +#include "command.hpp" +#include "filesystem.hpp" + +namespace patches { +namespace { +void sys_init_stub() { + game::Cmd_SetAutoComplete("exec", "", "cfg"); + utils::hook::invoke(0x4EEB20); +} + +void cl_play_unskippable_cinematic_f() { + // CL_PlayCinematic_f + utils::hook::invoke(0x4CC950); + *game::cin_skippable = true; +} + +void cl_start_multiplayer_f() { + utils::nt::update_dll_search_path(filesystem::get_binary_directory()); + utils::nt::launch_process("iw4mp.exe", "-multiplayer"); + command::execute("quit", false); +} + +const char* live_get_local_client_name_stub() { + return game::Dvar_FindVar("name")->current.string; +} +} // namespace + +class component final : public component_interface { +public: + void post_load() override { + utils::hook(0x6042A2, sys_init_stub, HOOK_CALL).install()->quick(); + + utils::hook(0x492EF0, live_get_local_client_name_stub, HOOK_JUMP) + .install() + ->quick(); + + patch_sp(); + } + +private: + static void patch_sp() { + // Force external console + utils::hook::nop(0x604071, 21); + + // Remove limit on IWD file loading + utils::hook::set(0x630FF3, 0xEB); + + // Ignore XUID match + utils::hook::set(0x65D1AF, 0xEB); + + // Remove this particular string from the log file + utils::hook::nop(0x6030A6, 5); + + // Config related + utils::hook::set(0x4D3FD3, 0xEB); + + // Improper quit popup + utils::hook::nop(0x4F5B3A, 2); + + // Remove fs_game check + utils::hook::nop(0x612932, 2); + + // Build os path stuff + utils::hook::set(0x6300BF, 0xEB); + + // Show intro (or not) + utils::hook::set(0x6035BD, 0x0); + + // raw -> main + utils::hook::set(0x50A0B2, 0x723390); + + // Disable 'replay' output + utils::hook::nop(0x65F14A, 5); + + // Disable heartbeat output + utils::hook::nop(0x57EF87, 5); + + // Allow intro to be skipped + utils::hook::set(0x47529F, cl_play_unskippable_cinematic_f); + + // Start IW4 MP + utils::hook::set(0x475327, cl_start_multiplayer_f); + + // Enable commandline arguments + utils::hook::set(0x453B24, 0xEB); + + // Rename config + utils::hook::set(0x6040F2, CLIENT_CONFIG); + utils::hook::set(0x602D38, CLIENT_CONFIG); + utils::hook::set(0x6037C9, CLIENT_CONFIG); + utils::hook::set(0x4D3FDB, CLIENT_CONFIG); + utils::hook::set(0x469DB6, CLIENT_CONFIG); + } +}; +} // namespace patches + +REGISTER_COMPONENT(patches::component) diff --git a/src/client/component/player_movement.cpp b/src/client/component/player_movement.cpp new file mode 100644 index 0000000..1a7924f --- /dev/null +++ b/src/client/component/player_movement.cpp @@ -0,0 +1,180 @@ +#include +#include "loader/component_loader.hpp" +#include "game/dvars.hpp" + +#include "gsc/extension.hpp" + +#include + +namespace player_movement { +namespace { +void __declspec(naked) pm_step_slide_move_stub() { + __asm { + push eax; + mov eax, dvars::pm_bounce; + cmp byte ptr [eax + 0x10], 1; + pop eax; + + je bounce; + + cmp dword ptr [esp + 0x24], 0; + jnz no_bounce; + + bounce: + push 0x4E905B; + ret; + + no_bounce: + push 0x4E906F; + ret; + } +} + +void pm_project_velocity_stub(const float* vel_in, const float* normal, + float* vel_out) { + const auto length_squared_2d = vel_in[0] * vel_in[0] + vel_in[1] * vel_in[1]; + + if (std::fabsf(normal[2]) < 0.001f || length_squared_2d == 0.0f) { + vel_out[0] = vel_in[0]; + vel_out[1] = vel_in[1]; + vel_out[2] = vel_in[2]; + return; + } + + auto new_z = vel_in[0] * normal[0] + vel_in[1] * normal[1]; + new_z = -new_z / normal[2]; + + const auto length_scale = + std::sqrtf((vel_in[2] * vel_in[2] + length_squared_2d) / + (new_z * new_z + length_squared_2d)); + + if (dvars::pm_bouncingAllAngles->current.enabled || + (length_scale < 1.f || new_z < 0.f || vel_in[2] > 0.f)) { + vel_out[0] = vel_in[0] * length_scale; + vel_out[1] = vel_in[1] * length_scale; + vel_out[2] = new_z * length_scale; + } +} + +game::gentity_s* weapon_rocket_launcher_fire_stub( + game::gentity_s* ent, unsigned int weapon_index, float spread, + game::weaponParms* wp, const float* gun_vel, + game::lockonFireParms* lock_parms, bool magic_bullet) { + auto* result = utils::hook::invoke( + 0x443F20, ent, weapon_index, spread, wp, gun_vel, lock_parms, + magic_bullet); + + if (ent->client && dvars::pm_rocketJump->current.enabled) { + const auto scale = dvars::pm_rocketJumpScale->current.value; + ent->client->ps.velocity[0] += (0.0f - wp->forward[0]) * scale; + ent->client->ps.velocity[1] += (0.0f - wp->forward[1]) * scale; + ent->client->ps.velocity[2] += (0.0f - wp->forward[2]) * scale; + } + + return result; +} + +void cm_transformed_capsule_trace_stub(game::trace_t* results, + const float* start, const float* end, + const game::Bounds* bounds, + const game::Bounds* capsule, + int contents, const float* origin, + const float* angles) { + if (dvars::pm_playerCollision->current.enabled) { + utils::hook::invoke(0x47C7D0, results, start, end, bounds, capsule, + contents, origin, angles); + } +} + +void pm_trace_stub(game::pmove_t* pm, game::trace_t* results, + const float* start, const float* end, + const game::Bounds* bounds, int pass_entity_num, + int content_mask) { + game::PM_trace(pm, results, start, end, bounds, pass_entity_num, + content_mask); + // Allow the player to stand even when there is no headroom + if (dvars::pm_elevators->current.enabled) { + results->allsolid = false; + } +} + +void pm_player_trace_stub(game::pmove_t* pm, game::trace_t* results, + const float* start, const float* end, + const game::Bounds* bounds, int pass_entity_num, + int content_mask) { + game::PM_playerTrace(pm, results, start, end, bounds, pass_entity_num, + content_mask); + + if (dvars::pm_elevators->current.enabled) { + results->startsolid = false; + } +} +void g_scr_is_sprinting(const game::scr_entref_t entref) { + const auto* client = game::GetEntity(entref)->client; + if (!client) { + game::Scr_Error("IsSprinting can only be called on a player"); + return; + } + + game::Scr_AddInt(game::PM_IsSprinting(&client->ps)); +} +} // namespace + +class component final : public component_interface { +public: + static_assert(sizeof(game::weaponParms) == 0x48); + static_assert(sizeof(game::lockonFireParms) == 0x18); + + void post_load() override { + utils::hook(0x4E9054, pm_step_slide_move_stub, HOOK_JUMP) + .install() + ->quick(); // PM_StepSlideMove + utils::hook(0x4E90BE, pm_project_velocity_stub, HOOK_CALL) + .install() + ->quick(); // PM_StepSlideMove + + utils::hook(0x4FA809, weapon_rocket_launcher_fire_stub, HOOK_CALL) + .install() + ->quick(); // FireWeapon + + utils::hook(0x4B6FC0, cm_transformed_capsule_trace_stub, HOOK_CALL) + .install() + ->quick(); // SV_ClipMoveToEntity + utils::hook(0x57635F, cm_transformed_capsule_trace_stub, HOOK_CALL) + .install() + ->quick(); // CG_ClipMoveToEntity + + utils::hook(0x64F439, pm_trace_stub, HOOK_CALL) + .install() + ->quick(); // PM_CheckDuck + utils::hook(0x651A60, pm_player_trace_stub, HOOK_CALL) + .install() + ->quick(); // PM_CorrectAllSolid + utils::hook(0x651AF2, pm_player_trace_stub, HOOK_CALL) + .install() + ->quick(); // PM_CorrectAllSolid + + gsc::add_method("IsSprinting", g_scr_is_sprinting); + register_dvars(); + } + + static void register_dvars() { + // clang-format off + dvars::pm_bounce = game::Dvar_RegisterBool( + "pm_bounce", false, game::DVAR_NONE, "CoD4 Bounces"); + dvars::pm_bouncingAllAngles = game::Dvar_RegisterBool( + "pm_bouncingAllAngles", false, game::DVAR_NONE, "Enable bouncing from all angles"); + dvars::pm_rocketJump = game::Dvar_RegisterBool( + "pm_rocketJump", true, game::DVAR_NONE, "CoD4 rocket jumps"); + dvars::pm_rocketJumpScale = game::Dvar_RegisterFloat( + "pm_rocketJumpScale", 64.0f, 0.0f, 1024.0f, game::DVAR_NONE, ""); + dvars::pm_playerCollision = game::Dvar_RegisterBool( + "pm_playerCollision", true, game::DVAR_NONE, "Push intersecting players away from each other"); + dvars::pm_elevators = game::Dvar_RegisterBool( + "pm_elevators", false, game::DVAR_NONE, "CoD4 elevators"); + // clang-format on + } +}; +} // namespace player_movement + +REGISTER_COMPONENT(player_movement::component) diff --git a/src/client/component/scheduler.cpp b/src/client/component/scheduler.cpp new file mode 100644 index 0000000..29de32b --- /dev/null +++ b/src/client/component/scheduler.cpp @@ -0,0 +1,163 @@ +#include +#include "loader/component_loader.hpp" + +#include +#include +#include + +#include "scheduler.hpp" + +namespace scheduler { +namespace { +struct task { + std::function handler{}; + std::chrono::milliseconds interval{}; + std::chrono::high_resolution_clock::time_point last_call{}; +}; + +using task_list = std::vector; + +class task_pipeline { +public: + void add(task&& task) { + new_callbacks_.access([&task, this](task_list& tasks) { + tasks.emplace_back(std::move(task)); + }); + } + + void clear() { + callbacks_.access([&](task_list& tasks) { + this->merge_callbacks(); + tasks.clear(); + }); + } + + void execute() { + callbacks_.access([&](task_list& tasks) { + this->merge_callbacks(); + + for (auto i = tasks.begin(); i != tasks.end();) { + const auto now = std::chrono::high_resolution_clock::now(); + const auto diff = now - i->last_call; + + if (diff < i->interval) { + ++i; + continue; + } + + i->last_call = now; + + const auto res = i->handler(); + if (res == cond_end) { + i = tasks.erase(i); + } else { + ++i; + } + } + }); + } + +private: + utils::concurrency::container new_callbacks_; + utils::concurrency::container callbacks_; + + void merge_callbacks() { + callbacks_.access([&](task_list& tasks) { + new_callbacks_.access([&](task_list& new_tasks) { + tasks.insert(tasks.end(), + std::move_iterator(new_tasks.begin()), + std::move_iterator(new_tasks.end())); + new_tasks = {}; + }); + }); + } +}; + +volatile bool kill = false; +std::thread thread; +task_pipeline pipelines[pipeline::count]; + +void execute(const pipeline type) { + assert(type >= 0 && type < pipeline::count); + pipelines[type].execute(); +} + +void g_glass_update_stub() { + utils::hook::invoke(0x43D7E0); + execute(pipeline::server); +} + +void r_end_frame_stub() { + utils::hook::invoke(0x50F540); + execute(pipeline::renderer); +} + +void main_frame_stub() { + utils::hook::invoke(0x4D3FC0); + execute(pipeline::main); +} +} // namespace + +void clear_tasks(const pipeline type) { return pipelines[type].clear(); } + +void schedule(const std::function& callback, const pipeline type, + const std::chrono::milliseconds delay) { + assert(type >= 0 && type < pipeline::count); + + task task; + task.handler = callback; + task.interval = delay; + task.last_call = std::chrono::high_resolution_clock::now(); + + pipelines[type].add(std::move(task)); +} + +void loop(const std::function& callback, const pipeline type, + const std::chrono::milliseconds delay) { + schedule( + [callback]() { + callback(); + return cond_continue; + }, + type, delay); +} + +void once(const std::function& callback, const pipeline type, + const std::chrono::milliseconds delay) { + schedule( + [callback]() { + callback(); + return cond_end; + }, + type, delay); +} + +unsigned int thread_id; + +class component final : public component_interface { +public: + void post_start() override { + thread = utils::thread::create_named_thread("Async Scheduler", [] { + while (!kill) { + execute(pipeline::async); + std::this_thread::sleep_for(10ms); + } + }); + } + + void post_load() override { + utils::hook(0x4EDBDD, g_glass_update_stub, HOOK_CALL).install()->quick(); + utils::hook(0x49C3AF, main_frame_stub, HOOK_CALL).install()->quick(); + utils::hook(0x57DB13, r_end_frame_stub, HOOK_CALL).install()->quick(); + } + + void pre_destroy() override { + kill = true; + if (thread.joinable()) { + thread.join(); + } + } +}; +} // namespace scheduler + +REGISTER_COMPONENT(scheduler::component) diff --git a/src/client/component/scheduler.hpp b/src/client/component/scheduler.hpp new file mode 100644 index 0000000..46348fb --- /dev/null +++ b/src/client/component/scheduler.hpp @@ -0,0 +1,33 @@ +#pragma once + +using namespace std::literals; + +namespace scheduler { +enum pipeline { + // Asynchronuous pipeline, disconnected from the game + async = 0, + + // The game's rendering pipeline + renderer, + + // The game's server thread + server, + + // The game's main thread + main, + + count, +}; + +static constexpr auto cond_continue = false; +static constexpr auto cond_end = true; + +void clear_tasks(pipeline type); + +void schedule(const std::function& callback, pipeline type, + std::chrono::milliseconds delay = 0ms); +void loop(const std::function& callback, pipeline type, + std::chrono::milliseconds delay = 0ms); +void once(const std::function& callback, pipeline type, + std::chrono::milliseconds delay = 0ms); +} // namespace scheduler diff --git a/src/client/component/steam_patches.cpp b/src/client/component/steam_patches.cpp new file mode 100644 index 0000000..a45811c --- /dev/null +++ b/src/client/component/steam_patches.cpp @@ -0,0 +1,47 @@ +#include +#include "loader/component_loader.hpp" + +#include + +namespace steam_patches { +namespace { +void __declspec(naked) steam_init() { + const static DWORD Steam_IsClientSignedInLocally_t = 0x4293F0; + + __asm { + call Steam_IsClientSignedInLocally_t; + test al, al; + jz return_safe; + + push 0x43FAF9; + ret; + + return_safe: + mov al, 1; + ret; + } +} +} // namespace + +class component final : public component_interface { +public: + void post_load() override { + patch_sp(); + utils::hook(0x43FAF0, steam_init, HOOK_JUMP).install()->quick(); + } + + static void patch_sp() { + // Prevent stat loading from steam + utils::hook::set(0x43FB33, 0xC3); + + // Steam must be running + utils::hook::nop(0x6040A3, 30); + + // No-Steam + utils::hook::nop(0x4E9458, 7); + utils::hook::nop(0x4E9470, 7); + } +}; +} // namespace steam_patches + +REGISTER_COMPONENT(steam_patches::component) diff --git a/src/client/component/steam_proxy.cpp b/src/client/component/steam_proxy.cpp new file mode 100644 index 0000000..0665afc --- /dev/null +++ b/src/client/component/steam_proxy.cpp @@ -0,0 +1,197 @@ +#include +#include "loader/component_loader.hpp" + +#include +#include +#include +#include + +#include + +#include "steam/steam.hpp" +#include "steam/interface.hpp" + +#include "scheduler.hpp" + +namespace { +enum class ownership_state { + success, + unowned, + nosteam, + error, +}; + +utils::binary_resource runner_file(RUNNER, "iw4sp-runner.exe"); + +bool is_disabled() { + static const auto disabled = utils::flags::has_flag("nosteam"); + return disabled; +} +} // namespace + +class steam_proxy final : public component_interface { +public: + void post_load() override { + if (is_disabled()) { + return; + } + + this->load_client(); + this->clean_up_on_error(); + + try { + this->start_mod("iw4-sp Singleplayer", 10180); + } catch (const std::exception& ex) { + printf("Steam: %s\n", ex.what()); + } + } + + void pre_destroy() override { + if (this->steam_client_module_) { + if (this->steam_pipe_) { + if (this->global_user_) { + this->steam_client_module_.invoke( + "Steam_ReleaseUser", this->steam_pipe_, this->global_user_); + } + + this->steam_client_module_.invoke("Steam_BReleaseSteamPipe", + this->steam_pipe_); + } + } + } + +private: + utils::nt::library steam_client_module_{}; + + steam::interface client_engine_ {}; + steam::interface client_user_ {}; + steam::interface client_utils_ {}; + + void* steam_pipe_ = nullptr; + void* global_user_ = nullptr; + + [[nodiscard]] void* load_client_engine() const { + if (!this->steam_client_module_) + return nullptr; + + for (auto i = 1; i < 1000; ++i) { + const auto* name = + utils::string::va("CLIENTENGINE_INTERFACE_VERSION{0:03}", i); + + auto* const client_engine = this->steam_client_module_.invoke( + "CreateInterface", name, nullptr); + if (client_engine) + return client_engine; + } + + return nullptr; + } + + void load_client() { + const auto steam_path = steam::get_steam_install_directory(); + if (steam_path.empty()) + return; + + utils::nt::library::load(steam_path / "tier0_s.dll"); + utils::nt::library::load(steam_path / "vstdlib_s.dll"); + this->steam_client_module_ = + utils::nt::library::load(steam_path / "steamclient.dll"); + if (!this->steam_client_module_) + return; + + this->client_engine_ = load_client_engine(); + if (!this->client_engine_) + return; + + this->steam_pipe_ = + this->steam_client_module_.invoke("Steam_CreateSteamPipe"); + this->global_user_ = this->steam_client_module_.invoke( + "Steam_ConnectToGlobalUser", this->steam_pipe_); + this->client_user_ = this->client_engine_.invoke( + 8, this->steam_pipe_, this->global_user_); // GetIClientUser + this->client_utils_ = this->client_engine_.invoke( + 14, this->steam_pipe_); // GetIClientUtils + } + + ownership_state start_mod(const std::string& title, + const std::size_t app_id) { + __try { + return this->start_mod_unsafe(title, app_id); + } __except (EXCEPTION_EXECUTE_HANDLER) { + this->do_cleanup(); + return ownership_state::error; + } + } + + ownership_state start_mod_unsafe(const std::string& title, + std::size_t app_id) { + if (!this->client_utils_ || !this->client_user_) + return ownership_state::nosteam; + + if (!this->client_user_.invoke("BIsSubscribedApp", app_id)) { +#ifdef _DEBUG + app_id = 480; // Spacewar +#else + return ownership_state::unowned; +#endif + } + + if (is_disabled()) { + return ownership_state::success; + } + + this->client_utils_.invoke("SetAppIDForCurrentPipe", app_id, false); + + char our_directory[MAX_PATH] = {0}; + GetCurrentDirectoryA(sizeof(our_directory), our_directory); + + const auto path = runner_file.get_extracted_file(); + const auto* cmd_line = + utils::string::va("\"{0}\" -proc {1}", path, GetCurrentProcessId()); + + game_id game_id; + game_id.raw.type = 1; // k_EGameIDTypeGameMod + game_id.raw.app_id = app_id & 0xFFFFFF; + + const auto* mod_id = "IW4"; + game_id.raw.mod_id = + *reinterpret_cast(mod_id) | 0x80000000; + + this->client_user_.invoke("SpawnProcess", path.data(), cmd_line, + our_directory, game_id.bits, title.data(), + app_id, 0, 0, 0); + + return ownership_state::success; + } + + void do_cleanup() { + this->client_engine_ = nullptr; + this->client_user_ = nullptr; + this->client_utils_ = nullptr; + + this->steam_pipe_ = nullptr; + this->global_user_ = nullptr; + + this->steam_client_module_ = utils::nt::library{nullptr}; + } + + void clean_up_on_error() { + scheduler::schedule( + [this] { + if (this->steam_client_module_ && this->steam_pipe_ && + this->global_user_ && + this->steam_client_module_.invoke( + "Steam_BConnected", this->global_user_, this->steam_pipe_) && + this->steam_client_module_.invoke( + "Steam_BLoggedOn", this->global_user_, this->steam_pipe_)) { + return scheduler::cond_continue; + } + + this->do_cleanup(); + return scheduler::cond_end; + }, + scheduler::pipeline::async); + } +}; + +REGISTER_COMPONENT(steam_proxy) diff --git a/src/client/component/ultra_wide.cpp b/src/client/component/ultra_wide.cpp new file mode 100644 index 0000000..83cecb6 --- /dev/null +++ b/src/client/component/ultra_wide.cpp @@ -0,0 +1,74 @@ +#include +#include "loader/component_loader.hpp" + +#include + +namespace ultra_wide { +const game::dvar_t* r_customAspectRatio; + +const game::dvar_t* dvar_register_aspect_ratio(const char* dvar_name, + const char** /*value_list*/, + int default_index, + unsigned __int16 flags, + const char* description) { + static const char* values[] = {"auto", "standard", "wide 16:10", + "wide 16:9", "custom", nullptr}; + + // register enumeration dvar + return game::Dvar_RegisterEnum(dvar_name, values, default_index, flags, + description); +} + +void set_aspect_ratio() { + *reinterpret_cast(0x1C91A78) = r_customAspectRatio->current.value; +} + +__declspec(naked) void set_aspect_ratio_stub() { + __asm { + mov eax, [eax + 0x10]; + cmp eax, 4; + + mov dword ptr ds:0x1C91A68, edx; + mov dword ptr ds:0x1C91A6C, esi; + mov dword ptr ds:0x1C91A74, ecx; + + ja default_case; + je custom_ratio; + + push 0x50AE6C; + ret; + + default_case: + push 0x50AF6C; + ret; + + custom_ratio: + pushad; + call set_aspect_ratio; + popad; + + mov eax, 1; // set widescreen to 1 + + push 0x50AF05; + ret; + } +} + +class component final : public component_interface { +public: + void post_load() override { + utils::hook(0x51E80B, &dvar_register_aspect_ratio, HOOK_CALL) + .install() + ->quick(); + + utils::hook(0x50AE4E, &set_aspect_ratio_stub, HOOK_JUMP).install()->quick(); + utils::hook::nop(0x50AE4E + 5, 1); + + r_customAspectRatio = game::Dvar_RegisterFloat( + "r_customAspectRatio", 16.0f / 9.0f, 4.0f / 3.0f, 63.0f / 9.0f, + game::DVAR_ARCHIVE, "Screen aspect ratio"); + } +}; +} // namespace ultra_wide + +REGISTER_COMPONENT(ultra_wide::component) diff --git a/src/client/component/weapons.cpp b/src/client/component/weapons.cpp new file mode 100644 index 0000000..261ed81 --- /dev/null +++ b/src/client/component/weapons.cpp @@ -0,0 +1,48 @@ +#include +#include "loader/component_loader.hpp" + +#include + +namespace weapons { +namespace { +game::WeaponCompleteDef* +bg_load_weapon_variant_def_fast_file_stub(const char* name) { + if (auto* raw_weapon_file = + game::BG_LoadWeaponVariantDefInternal("sp", name)) { + return raw_weapon_file; + } + + auto* zone_weapon_file = + game::DB_FindXAssetHeader(game::ASSET_TYPE_WEAPON, name).weapon; + return game::DB_IsXAssetDefault(game::ASSET_TYPE_WEAPON, name) + ? nullptr + : zone_weapon_file; +} +} // namespace + +class component final : public component_interface { +public: + void post_load() override { patch_sp(); } + +private: + static void patch_sp() { + // Weapon asset existence check + utils::hook::nop(0x43E1D8, 5); + // Is asset default + utils::hook::nop(0x43E1E0, 5); + // Do not jump + utils::hook::nop(0x43E1EA, 2); + + // Ignore missing default weapon + utils::hook::set(0x659DBE, 0xEB); + + utils::hook(0x659E00, bg_load_weapon_variant_def_fast_file_stub, HOOK_JUMP) + .install() + ->quick(); + // Disable warning if raw weapon file cannot be found + utils::hook::nop(0x659730, 5); + } +}; +} // namespace weapons + +REGISTER_COMPONENT(weapons::component) diff --git a/src/client/component/zone.cpp b/src/client/component/zone.cpp new file mode 100644 index 0000000..71bb387 --- /dev/null +++ b/src/client/component/zone.cpp @@ -0,0 +1,25 @@ +#include +#include "loader/component_loader.hpp" + +#include + +namespace zone { +class component final : public component_interface { +public: + static_assert(sizeof(game::XZoneInfo) == 0xC); + + void post_load() override { patch_sp(); } + +private: + static void patch_sp() { + // Ignore zone version mismatch + utils::hook::set(0x4256D8, 0xEB); + + // Disc read error + utils::hook::nop(0x4B7335, 2); + utils::hook::set(0x4256B9, 0xEB); + } +}; +} // namespace zone + +REGISTER_COMPONENT(zone::component) diff --git a/src/client/game/dvars.cpp b/src/client/game/dvars.cpp new file mode 100644 index 0000000..af578f9 --- /dev/null +++ b/src/client/game/dvars.cpp @@ -0,0 +1,30 @@ +#include + +namespace dvars { +const game::dvar_t* r_noBorder = nullptr; + +const game::dvar_t* pm_bounce = nullptr; +const game::dvar_t* pm_bouncingAllAngles = nullptr; +const game::dvar_t* pm_rocketJump = nullptr; +const game::dvar_t* pm_rocketJumpScale = nullptr; +const game::dvar_t* pm_playerCollision = nullptr; +const game::dvar_t* pm_elevators = nullptr; + +const game::dvar_t* cg_drawVersion = nullptr; +const game::dvar_t* cg_drawVersionX = nullptr; +const game::dvar_t* cg_drawVersionY = nullptr; + +const game::dvar_t* bug_name = nullptr; + +const game::dvar_t* g_log = nullptr; + +// Game dvars +const game::dvar_t** g_specialops = + reinterpret_cast(0x1B2E1E8); + +const game::dvar_t** sv_mapname = + reinterpret_cast(0x1B2E1E4); + +const game::dvar_t** version = + reinterpret_cast(0x145D690); +} // namespace dvars diff --git a/src/client/game/dvars.hpp b/src/client/game/dvars.hpp new file mode 100644 index 0000000..33c2339 --- /dev/null +++ b/src/client/game/dvars.hpp @@ -0,0 +1,27 @@ +#pragma once + +namespace dvars { +extern const game::dvar_t* r_noBorder; + +extern const game::dvar_t* pm_bounce; +extern const game::dvar_t* pm_bouncingAllAngles; +extern const game::dvar_t* pm_rocketJump; +extern const game::dvar_t* pm_rocketJumpScale; +extern const game::dvar_t* pm_playerCollision; +extern const game::dvar_t* pm_elevators; + +extern const game::dvar_t* cg_drawVersion; +extern const game::dvar_t* cg_drawVersionX; +extern const game::dvar_t* cg_drawVersionY; + +extern const game::dvar_t* bug_name; + +extern const game::dvar_t* g_log; + +// Game dvars +extern const game::dvar_t** g_specialops; + +extern const game::dvar_t** sv_mapname; + +extern const game::dvar_t** version; +} // namespace dvars diff --git a/src/client/game/engine/fast_critical_section.cpp b/src/client/game/engine/fast_critical_section.cpp new file mode 100644 index 0000000..7594088 --- /dev/null +++ b/src/client/game/engine/fast_critical_section.cpp @@ -0,0 +1,34 @@ +#include +#include + +#include "fast_critical_section.hpp" + +namespace game::engine { +fast_critical_section_scope_read::fast_critical_section_scope_read( + FastCriticalSection* cs) + : cs_(cs) { + if (this->cs_) { + Sys_LockRead(this->cs_); + } +} + +fast_critical_section_scope_read::~fast_critical_section_scope_read() { + if (this->cs_) { + Sys_UnlockRead(this->cs_); + } +} + +fast_critical_section_scope_write::fast_critical_section_scope_write( + FastCriticalSection* cs) + : cs_(cs) { + if (this->cs_) { + Sys_LockWrite(this->cs_); + } +} + +fast_critical_section_scope_write::~fast_critical_section_scope_write() { + if (this->cs_) { + Sys_UnlockWrite(this->cs_); + } +} +} // namespace game::engine diff --git a/src/client/game/engine/fast_critical_section.hpp b/src/client/game/engine/fast_critical_section.hpp new file mode 100644 index 0000000..6ddc6ad --- /dev/null +++ b/src/client/game/engine/fast_critical_section.hpp @@ -0,0 +1,21 @@ +#pragma once + +namespace game::engine { +class fast_critical_section_scope_read { +public: + fast_critical_section_scope_read(FastCriticalSection* cs); + ~fast_critical_section_scope_read(); + +private: + FastCriticalSection* cs_; +}; + +class fast_critical_section_scope_write { +public: + fast_critical_section_scope_write(FastCriticalSection* cs); + ~fast_critical_section_scope_write(); + +private: + FastCriticalSection* cs_; +}; +} // namespace game::engine diff --git a/src/client/game/engine/large_local.cpp b/src/client/game/engine/large_local.cpp new file mode 100644 index 0000000..b5743dc --- /dev/null +++ b/src/client/game/engine/large_local.cpp @@ -0,0 +1,87 @@ +#include + +#include "large_local.hpp" + +namespace game::engine { +namespace { +constexpr auto PAGE_SIZE = 4096; + +int can_use_server_large_local() { return Sys_IsServerThread(); } + +void large_local_end(int start_pos) { + assert(Sys_IsMainThread()); + assert(g_largeLocalBuf); + + *g_largeLocalPos = start_pos; + + assert(((*g_maxLargeLocalPos + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1)) <= + (*g_minLargeLocalRightPos & ~(PAGE_SIZE - 1))); +} + +void large_local_end_right(int start_pos) { + assert(can_use_server_large_local()); + assert(g_largeLocalBuf); + + *g_largeLocalRightPos = start_pos; + + assert(((*g_maxLargeLocalPos + (PAGE_SIZE - 1)) & ~(PAGE_SIZE - 1)) <= + (*g_minLargeLocalRightPos & ~(PAGE_SIZE - 1))); +} + +void* large_local_get_buf(int start_pos, int size) { + assert(Sys_IsMainThread() || can_use_server_large_local()); + assert(g_largeLocalBuf); + assert(!(size & 127)); + + if (Sys_IsMainThread()) { + return &g_largeLocalBuf[start_pos]; + } + + const auto start_index = start_pos - size; + assert(start_index >= 0); + + return &g_largeLocalBuf[start_index]; +} +} // namespace + +large_local::large_local(int size_param) { + assert(size_param); + assert(Sys_IsMainThread() || can_use_server_large_local()); + + size_param = ((size_param + (128 - 1)) & ~(128 - 1)); + + if (Sys_IsMainThread()) { + this->start_pos_ = LargeLocalBegin(size_param); + } else { + this->start_pos_ = LargeLocalBeginRight(size_param); + } + + this->size_ = size_param; +} + +large_local::~large_local() { + if (this->size_) { + this->pop_buf(); + } +} + +void large_local::pop_buf() { + assert(this->size_); + assert(Sys_IsMainThread() || can_use_server_large_local()); + + if (Sys_IsMainThread()) { + large_local_end(this->start_pos_); + } else { + large_local_end_right(this->start_pos_); + } + + this->size_ = 0; +} + +void* large_local::get_buf() const { + assert(this->size_); + assert(Sys_IsMainThread() || can_use_server_large_local()); + + return large_local_get_buf(this->start_pos_, this->size_); +} +} // namespace game::engine diff --git a/src/client/game/engine/large_local.hpp b/src/client/game/engine/large_local.hpp new file mode 100644 index 0000000..895c714 --- /dev/null +++ b/src/client/game/engine/large_local.hpp @@ -0,0 +1,22 @@ +#pragma once + +namespace game::engine { +class large_local { +public: + explicit large_local(int size_param); + ~large_local(); + + large_local(large_local&&) = delete; + large_local(const large_local&) = delete; + large_local& operator=(large_local&&) = delete; + large_local& operator=(const large_local&) = delete; + + [[nodiscard]] void* get_buf() const; + +private: + void pop_buf(); + + int start_pos_; + int size_; +}; +} // namespace game::engine diff --git a/src/client/game/engine/scoped_critical_section.cpp b/src/client/game/engine/scoped_critical_section.cpp new file mode 100644 index 0000000..7d3ad02 --- /dev/null +++ b/src/client/game/engine/scoped_critical_section.cpp @@ -0,0 +1,63 @@ +#include + +#include "scoped_critical_section.hpp" + +namespace game::engine { +scoped_critical_section::scoped_critical_section( + const CriticalSection s, const ScopedCriticalSectionType type) + : s_(s), is_scoped_release_(false) { + if (type == SCOPED_CRITSECT_NORMAL) { + Sys_EnterCriticalSection(this->s_); + this->has_ownership_ = true; + } else { + if (type == SCOPED_CRITSECT_TRY) { + this->has_ownership_ = Sys_TryEnterCriticalSection(this->s_); + } else { + if (type == SCOPED_CRITSECT_RELEASE) { + Sys_LeaveCriticalSection(this->s_); + this->is_scoped_release_ = true; + } + this->has_ownership_ = false; + } + } +} + +scoped_critical_section::~scoped_critical_section() { + if (!this->has_ownership_ || this->is_scoped_release_) { + if (!this->has_ownership_ && this->is_scoped_release_) + Sys_EnterCriticalSection(this->s_); + } else { + Sys_LeaveCriticalSection(this->s_); + } +} + +void scoped_critical_section::enter_crit_sect() { + assert(!this->has_ownership_); + + this->has_ownership_ = true; + Sys_EnterCriticalSection(this->s_); +} + +void scoped_critical_section::leave_crit_sect() { + assert(this->has_ownership_); + + this->has_ownership_ = false; + Sys_LeaveCriticalSection(this->s_); +} + +bool scoped_critical_section::try_enter_crit_sect() { + assert(!this->has_ownership_); + + const auto result = Sys_TryEnterCriticalSection(this->s_); + this->has_ownership_ = result; + return result; +} + +bool scoped_critical_section::has_ownership() const { + return this->has_ownership_; +} + +bool scoped_critical_section::is_scoped_release() const { + return this->is_scoped_release_; +} +} // namespace game::engine diff --git a/src/client/game/engine/scoped_critical_section.hpp b/src/client/game/engine/scoped_critical_section.hpp new file mode 100644 index 0000000..2b89178 --- /dev/null +++ b/src/client/game/engine/scoped_critical_section.hpp @@ -0,0 +1,21 @@ +#pragma once + +namespace game::engine { +class scoped_critical_section { +public: + scoped_critical_section(CriticalSection s, ScopedCriticalSectionType type); + ~scoped_critical_section(); + + void enter_crit_sect(); + void leave_crit_sect(); + bool try_enter_crit_sect(); + + [[nodiscard]] bool has_ownership() const; + [[nodiscard]] bool is_scoped_release() const; + +private: + CriticalSection s_; + bool has_ownership_; + bool is_scoped_release_; +}; +} // namespace game::engine diff --git a/src/client/game/game.cpp b/src/client/game/game.cpp new file mode 100644 index 0000000..e92ad50 --- /dev/null +++ b/src/client/game/game.cpp @@ -0,0 +1,119 @@ +#include + +namespace game { +int FS_FOpenFileReadForThread(const char* filename, int* file, + FsThread thread) { + const static DWORD FS_FOpenFileReadForThread_t = 0x630380; + int result{}; + + __asm { + pushad; + + mov eax, file; + push thread; + push filename; + call FS_FOpenFileReadForThread_t; + add esp, 0x8; + mov result, eax; + + popad; + } + + return result; +} + +void IN_KeyDown(kbutton_t* b) { + const static DWORD IN_KeyDown_t = 0x57A350; + + __asm { + pushad; + + mov esi, b; + call IN_KeyDown_t; + + popad; + } +} + +void IN_KeyUp(kbutton_t* b) { + const static DWORD IN_KeyUp_t = 0x57A3F0; + + __asm { + pushad; + + mov esi, b; + call IN_KeyUp_t; + + popad; + } +} + +bool ScrPlace_IsFullScreenActive() { + return *activeScreenPlacementMode == SCRMODE_FULL; +} + +ScreenPlacement* ScrPlace_GetUnsafeFullPlacement() { + return scrPlaceFullUnsafe; +} + +bool Sys_TryEnterCriticalSection(CriticalSection critSect) { + assert(static_cast(critSect) < + static_cast(CRITSECT_COUNT)); + + return TryEnterCriticalSection(&s_criticalSection[critSect]) != FALSE; +} + +void Sys_LockRead(FastCriticalSection* critSect) { + InterlockedIncrement(&critSect->readCount); + while (critSect->writeCount) { + Sys_Sleep(0); + } +} + +void Sys_UnlockRead(FastCriticalSection* critSect) { + assert(critSect->readCount > 0); + InterlockedDecrement(&critSect->readCount); +} + +void Sys_UnlockWrite(FastCriticalSection* critSect) { + assert(critSect->writeCount > 0); + InterlockedDecrement(&critSect->writeCount); + Sys_TempPriorityEnd(&critSect->tempPriority); +} + +int PC_Int_Parse(int handle, int* i) { + const static DWORD PC_Int_Parse_t = 0x62DF10; + int result{}; + + __asm { + pushad; + + mov eax, handle; + mov esi, i; + call PC_Int_Parse_t; + mov result, eax; + + popad; + } + + return result; +} + +int PC_Float_Parse(int handle, float* f) { + const static DWORD PC_Float_Parse_t = 0x62DE40; + int result{}; + + __asm { + pushad; + + mov eax, handle; + mov esi, f; + call PC_Float_Parse_t; + mov result, eax; + + popad; + } + + return result; +} +} // namespace game diff --git a/src/client/game/game.hpp b/src/client/game/game.hpp new file mode 100644 index 0000000..9876654 --- /dev/null +++ b/src/client/game/game.hpp @@ -0,0 +1,54 @@ +#pragma once + +namespace game { +template struct base_symbol { + base_symbol(const std::size_t address) : address_(address) {} + + [[nodiscard]] T* get() const { return reinterpret_cast(this->address_); } + + operator T*() const { return this->get(); } + + T* operator->() const { return this->get(); } + +private: + std::size_t address_{}; +}; + +template struct symbol : base_symbol { + using base_symbol::base_symbol; +}; + +template +struct symbol : base_symbol { + using func_type = T(Args...); + using base_symbol::base_symbol; +}; + +// Functions that require asm stubs to be called +// or have been inlined + +int FS_FOpenFileReadForThread(const char* filename, int* file, FsThread thread); + +void IN_KeyDown(kbutton_t* b); +void IN_KeyUp(kbutton_t* b); + +bool ScrPlace_IsFullScreenActive(); +ScreenPlacement* ScrPlace_GetUnsafeFullPlacement(); + +bool Sys_TryEnterCriticalSection(CriticalSection critSect); +void Sys_LockRead(FastCriticalSection* critSect); +void Sys_UnlockRead(FastCriticalSection* critSect); +void Sys_UnlockWrite(FastCriticalSection* critSect); + +int PC_Int_Parse(int handle, int* i); +int PC_Float_Parse(int handle, float* f); + +// Global definitions +constexpr auto CMD_MAX_NESTING = 8; + +constexpr std::size_t MAX_LOCAL_CLIENTS = 1; + +constexpr auto MAX_QPATH = 64; +} // namespace game + +#include "symbols.hpp" diff --git a/src/client/game/structs.hpp b/src/client/game/structs.hpp new file mode 100644 index 0000000..5715a4d --- /dev/null +++ b/src/client/game/structs.hpp @@ -0,0 +1,926 @@ +#pragma once + +#pragma warning(push) +#pragma warning(disable : 4324) + +namespace game { +typedef float vec_t; +typedef vec_t vec2_t[2]; +typedef vec_t vec3_t[3]; +typedef vec_t vec4_t[4]; + +struct scr_entref_t { + unsigned __int16 entnum; + unsigned __int16 classnum; +}; + +typedef void(__cdecl* BuiltinMethod)(scr_entref_t); + +typedef void(__cdecl* BuiltinFunction)(); + +struct BuiltinMethodDef { + const char* actionString; + void(__cdecl* actionFunc)(scr_entref_t); + int type; +}; + +struct BuiltinFunctionDef { + const char* actionString; + void(__cdecl* actionFunc)(); + int type; +}; + +enum { + VAR_STRING = 0x2, + VAR_FLOAT = 0x5, + VAR_INTEGER = 0x6, +}; + +enum { + CON_CHANNEL_DONT_FILTER = 0x0, + CON_CHANNEL_ERROR = 0x1, + CON_CHANNEL_GAMENOTIFY = 0x2, + CON_CHANNEL_BOLDGAME = 0x3, + CON_CHANNEL_SUBTITLE = 0x4, + CON_CHANNEL_OBITUARY = 0x5, + CON_CHANNEL_LOGFILEONLY = 0x6, + CON_CHANNEL_CONSOLEONLY = 0x7, + CON_CHANNEL_GFX = 0x8, + CON_CHANNEL_SOUND = 0x9, + CON_CHANNEL_FILES = 0xA, + CON_CHANNEL_DEVGUI = 0xB, + CON_CHANNEL_PROFILE = 0xC, + CON_CHANNEL_UI = 0xD, + CON_CHANNEL_CLIENT = 0xE, + CON_CHANNEL_SERVER = 0xF, + CON_CHANNEL_SYSTEM = 0x10, + CON_CHANNEL_PLAYERWEAP = 0x11, + CON_CHANNEL_AI = 0x12, + CON_CHANNEL_ANIM = 0x13, + CON_CHANNEL_PHYS = 0x14, + CON_CHANNEL_FX = 0x15, + CON_CHANNEL_LEADERBOARDS = 0x16, + CON_CHANNEL_PARSERSCRIPT = 0x17, + CON_CHANNEL_SCRIPT = 0x18, + CON_CHANNEL_NETWORK = 0x19, + + CON_BUILTIN_CHANNEL_COUNT = 0x1A, +}; + +enum XAssetType { + ASSET_TYPE_PHYSPRESET = 0, + ASSET_TYPE_PHYSCOLLMAP = 1, + ASSET_TYPE_XANIMPARTS = 2, + ASSET_TYPE_XMODEL_SURFS = 3, + ASSET_TYPE_XMODEL = 4, + ASSET_TYPE_MATERIAL = 5, + ASSET_TYPE_PIXELSHADER = 6, + ASSET_TYPE_VERTEXSHADER = 7, + ASSET_TYPE_VERTEXDECL = 8, + ASSET_TYPE_TECHNIQUE_SET = 9, + ASSET_TYPE_IMAGE = 10, + ASSET_TYPE_SOUND = 11, + ASSET_TYPE_SOUND_CURVE = 12, + ASSET_TYPE_LOADED_SOUND = 13, + ASSET_TYPE_CLIPMAP_SP = 14, + ASSET_TYPE_CLIPMAP_MP = 15, + ASSET_TYPE_COMWORLD = 16, + ASSET_TYPE_GAMEWORLD_SP = 17, + ASSET_TYPE_GAMEWORLD_MP = 18, + ASSET_TYPE_MAP_ENTS = 19, + ASSET_TYPE_FXWORLD = 20, + ASSET_TYPE_GFXWORLD = 21, + ASSET_TYPE_LIGHT_DEF = 22, + ASSET_TYPE_UI_MAP = 23, + ASSET_TYPE_FONT = 24, + ASSET_TYPE_MENULIST = 25, + ASSET_TYPE_MENU = 26, + ASSET_TYPE_LOCALIZE_ENTRY = 27, + ASSET_TYPE_WEAPON = 28, + ASSET_TYPE_SNDDRIVER_GLOBALS = 29, + ASSET_TYPE_FX = 30, + ASSET_TYPE_IMPACT_FX = 31, + ASSET_TYPE_AITYPE = 32, + ASSET_TYPE_MPTYPE = 33, + ASSET_TYPE_CHARACTER = 34, + ASSET_TYPE_XMODELALIAS = 35, + ASSET_TYPE_RAWFILE = 36, + ASSET_TYPE_STRINGTABLE = 37, + ASSET_TYPE_LEADERBOARD = 38, + ASSET_TYPE_STRUCTURED_DATA_DEF = 39, + ASSET_TYPE_TRACER = 40, + ASSET_TYPE_VEHICLE = 41, + ASSET_TYPE_ADDON_MAP_ENTS = 42, + + ASSET_TYPE_COUNT = 43, +}; + +enum FsThread { + FS_THREAD_MAIN = 0x0, + FS_THREAD_STREAM = 0x1, + FS_THREAD_DATABASE = 0x2, + FS_THREAD_BACKEND = 0x3, + FS_THREAD_SERVER = 0x4, + FS_THREAD_COUNT = 0x5, + FS_THREAD_INVALID = 0x6, +}; + +enum FsListBehavior_e { + FS_LIST_PURE_ONLY = 0x0, + FS_LIST_ALL = 0x1, +}; + +enum fsMode_t { + FS_READ = 0x0, + FS_WRITE = 0x1, + FS_APPEND = 0x2, + FS_APPEND_SYNC = 0x3, +}; + +struct token_s { + char string[1024]; + int type; + int subtype; + unsigned int intvalue; + long double floatvalue; + char* whitespace_p; + char* endwhitespace_p; + int line; + int linescrossed; + token_s* next; +}; + +static_assert(sizeof(token_s) == 0x430); + +struct define_s { + char* name; + int flags; + int builtin; + int numparms; + token_s* parms; + token_s* tokens; + define_s* next; + define_s* hashnext; +}; + +struct punctuation_s { + const char* p; + int n; + punctuation_s* next; +}; + +struct script_s { + char filename[64]; + char* buffer; + char* script_p; + char* end_p; + char* lastscript_p; + char* whitespace_p; + char* endwhitespace_p; + int length; + int line; + int lastline; + int tokenavailable; + int flags; + punctuation_s* punctuations; + punctuation_s** punctuationtable; + token_s token; + script_s* next; +}; + +enum parseSkip_t { + SKIP_NO = 0x0, + SKIP_YES = 0x1, + SKIP_ALL_ELIFS = 0x2, +}; + +struct indent_s { + int type; + parseSkip_t skip; + script_s* script; + indent_s* next; +}; + +struct source_s { + char filename[64]; + char includepath[64]; + punctuation_s* punctuations; + script_s* scriptstack; + token_s* tokens; + define_s* defines; + define_s** definehash; + indent_s* indentstack; + int skip; + token_s token; +}; + +struct pc_token_s { + int type; + int subtype; + int intvalue; + float floatvalue; + char string[1024]; +}; + +struct cmd_function_s { + cmd_function_s* next; + const char* name; + const char* autoCompleteDir; + const char* autoCompleteExt; + void(__cdecl* function)(); + int flags; +}; + +struct CmdArgs { + int nesting; + int localClientNum[8]; + int controllerIndex[8]; + int argc[8]; + const char** argv[8]; +}; + +struct msg_t { + int overflowed; + int readOnly; + unsigned char* data; + unsigned char* splitData; + int maxsize; + int cursize; + int splitSize; + int readcount; + int bit; + int lastEntityRef; +}; + +static_assert(sizeof(msg_t) == 0x28); + +typedef enum { + ERR_FATAL = 0x0, + ERR_DROP = 0x1, + ERR_SERVERDISCONNECT = 0x2, + ERR_DISCONNECT = 0x3, + ERR_SCRIPT = 0x4, + ERR_SCRIPT_DROP = 0x5, + ERR_LOCALIZATION = 0x6, + ERR_MAPLOADERRORSUMMARY = 0x7, +} errorParm_t; + +enum DvarFlags : std::uint16_t { + DVAR_NONE = 0, + DVAR_ARCHIVE = 1 << 0, + DVAR_LATCH = 1 << 1, + DVAR_CHEAT = 1 << 2, + DVAR_CODINFO = 1 << 3, + DVAR_SCRIPTINFO = 1 << 4, + DVAR_TEMP = 1 << 5, + DVAR_SAVED = 1 << 6, + DVAR_INTERNAL = 1 << 7, + DVAR_EXTERNAL = 1 << 8, + DVAR_USERINFO = 1 << 9, + DVAR_SERVERINFO = 1 << 10, + DVAR_INIT = 1 << 11, + DVAR_SYSTEMINFO = 1 << 12, + DVAR_ROM = 1 << 13, + DVAR_CHANGEABLE_RESET = 1 << 14, + DVAR_AUTOEXEC = 1 << 15, +}; + +enum : std::int8_t { + DVAR_TYPE_BOOL = 0x0, + DVAR_TYPE_FLOAT = 0x1, + DVAR_TYPE_FLOAT_2 = 0x2, + DVAR_TYPE_FLOAT_3 = 0x3, + DVAR_TYPE_FLOAT_4 = 0x4, + DVAR_TYPE_INT = 0x5, + DVAR_TYPE_ENUM = 0x6, + DVAR_TYPE_STRING = 0x7, + DVAR_TYPE_COLOR = 0x8, + DVAR_TYPE_FLOAT_3_COLOR = 0x9, +}; + +enum DvarSetSource { + DVAR_SOURCE_INTERNAL, + DVAR_SOURCE_EXTERNAL, + DVAR_SOURCE_SCRIPT, + DVAR_SOURCE_DEVGUI, +}; + +union DvarValue { + bool enabled; + int integer; + unsigned int unsignedInt; + float value; + float vector[4]; + const char* string; + unsigned char color[4]; +}; + +struct enum_limit { + int stringCount; + const char** strings; +}; + +struct int_limit { + int min; + int max; +}; + +struct float_limit { + float min; + float max; +}; + +union DvarLimits { + enum_limit enumeration; + int_limit integer; + float_limit value; + float_limit vector; +}; + +struct dvar_t { + const char* name; + const char* description; + unsigned int flags; + char type; + bool modified; + DvarValue current; + DvarValue latched; + DvarValue reset; + DvarLimits domain; + bool(__cdecl* domainFunc)(dvar_t*, DvarValue); + dvar_t* hashNext; +}; + +enum netsrc_t { + NS_CLIENT1 = 0x0, + NS_SERVER = 0x1, + NS_MAXCLIENTS = 0x1, + NS_PACKET = 0x2, +}; + +enum netadrtype_t { + NA_BOT = 0x0, + NA_BAD = 0x1, + NA_LOOPBACK = 0x2, + NA_BROADCAST = 0x3, + NA_IP = 0x4, + NA_IPX = 0x5, + NA_BROADCAST_IPX = 0x6, +}; + +struct netadr_t { + netadrtype_t type; + unsigned char ip[4]; + unsigned __int16 port; + char ipx[10]; +}; + +static_assert(sizeof(netadr_t) == 0x14); + +struct Bounds { + float midPoint[3]; + float halfSize[3]; +}; + +struct TriggerModel { + int contents; + unsigned __int16 hullCount; + unsigned __int16 firstHull; +}; + +struct TriggerHull { + Bounds bounds; + int contents; + unsigned __int16 slabCount; + unsigned __int16 firstSlab; +}; + +struct TriggerSlab { + float dir[3]; + float midPoint; + float halfSize; +}; + +struct MapTriggers { + unsigned int count; + TriggerModel* models; + unsigned int hullCount; + TriggerHull* hulls; + unsigned int slabCount; + TriggerSlab* slabs; +}; + +struct Stage { + const char* name; + float origin[3]; + unsigned __int16 triggerIndex; + char sunPrimaryLightIndex; +}; + +struct MapEnts { + const char* name; + char* entityString; + int numEntityChars; + MapTriggers trigger; + Stage* stages; + char stageCount; +}; + +struct WeaponCompleteDef { + const char* szInternalName; +}; // Incomplete + +struct Font_s { + const char* fontName; + int pixelHeight; + int glyphCount; + void* material; + void* glowMaterial; + void* glyphs; +}; + +struct RawFile { + const char* name; + int compressedLen; + int len; + const char* buffer; +}; + +struct G_GlassPiece { + unsigned __int16 damageTaken; + unsigned __int16 collapseTime; + int lastStateChangeTime; + char impactDir; + char impactPos[2]; +}; + +static_assert(sizeof(G_GlassPiece) == 0xC); + +struct G_GlassName { + char* nameStr; + unsigned __int16 name; + unsigned __int16 pieceCount; + unsigned __int16* pieceIndices; +}; + +static_assert(sizeof(G_GlassName) == 0xC); + +struct G_GlassData { + G_GlassPiece* glassPieces; + unsigned int pieceCount; + unsigned __int16 damageToWeaken; + unsigned __int16 damageToDestroy; + unsigned int glassNameCount; + G_GlassName* glassNames; + unsigned __int8 pad[108]; +}; + +static_assert(sizeof(G_GlassData) == 0x80); + +struct GameWorldMp { + const char* name; + G_GlassData* g_glassData; +}; + +struct GameWorldSp { + const char* name; + unsigned char __pad0[0x30]; + G_GlassData* g_glassData; +}; + +static_assert(sizeof(GameWorldSp) == 0x38); + +struct MenuList { + const char* name; + int menuCount; + void** menus; +}; + +struct LocalizeEntry { + const char* value; + const char* name; +}; + +union XAssetHeader { + GameWorldSp* gameWorldSp; + GameWorldMp* gameWorldMp; + MapEnts* mapEnts; + Font_s* font; + MenuList* menuList; + LocalizeEntry* localize; + WeaponCompleteDef* weapon; + RawFile* rawfile; + void* data; +}; + +struct XAsset { + XAssetType type; + XAssetHeader header; +}; + +struct XAssetEntry { + XAsset asset; + unsigned char zoneIndex; + volatile unsigned char inuseMask; + bool printedMissingAsset; + unsigned __int16 nextHash; + unsigned __int16 nextOverride; +}; + +static_assert(sizeof(XAssetEntry) == 0x10); + +struct XZoneInfo { + const char* name; + int allocFlags; + int freeFlags; +}; + +struct playerState_s { + int commandTime; + int pm_type; + int pm_time; + int pm_flags; + int otherFlags; + int linkFlags; + int bobCycle; + float origin[3]; + float velocity[3]; + unsigned char __pad0[0xAC70]; +}; + +static_assert(sizeof(playerState_s) == 0xACA4); + +struct gclient_s { + playerState_s ps; + unsigned char __pad0[0xB0]; + int flags; // 0xAD54 + unsigned char __pad1[0x27C]; +}; + +static_assert(sizeof(gclient_s) == 0xAFD4); + +struct entityState_s { + unsigned char eType; // 0 + unsigned char __pad0[0x7D]; + unsigned __int16 number; // 0x7E + unsigned char __pad1[0x2C]; +}; + +static_assert(sizeof(entityState_s) == 0xAC); + +struct entityShared_t { + unsigned char __pad0[0x5C]; +}; + +static_assert(sizeof(entityShared_t) == 0x5C); + +struct gentity_s { + entityState_s s; + entityShared_t r; + gclient_s* client; + unsigned char __pad0[0x164]; +}; + +static_assert(sizeof(gentity_s) == 0x270); + +struct client_t { + unsigned char __pad0[0x1674]; +}; + +static_assert(sizeof(client_t) == 0x1674); + +struct level_locals_t { + unsigned char __pad0[0x34]; + int time; + unsigned char __pad1[0x4748]; +}; + +static_assert(sizeof(level_locals_t) == 0x4780); + +struct field_t { + int cursor; + int scroll; + int drawWidth; + int widthInPixels; + float charHeight; + int fixedSize; + char buffer[256]; +}; + +struct ConDrawInputGlob { + char autoCompleteChoice[64]; + int matchIndex; + int matchCount; + const char* inputText; + int inputTextLen; + bool hasExactMatch; + bool mayAutoComplete; + float x; + float y; + float leftX; + float fontHeight; +}; + +struct MessageLine { + int messageIndex; + int textBufPos; + int textBufSize; + int typingStartTime; + int lastTypingSoundTime; + int flags; +}; + +struct Message { + int startTime; + int endTime; +}; + +struct MessageWindow { + MessageLine* lines; + Message* messages; + char* circularTextBuffer; + int textBufSize; + int lineCount; + int padding; + int scrollTime; + int fadeIn; + int fadeOut; + int textBufPos; + int firstLineIndex; + int activeLineCount; + int messageIndex; +}; + +struct MessageBuffer { + char gamemsgText[4][2048]; + MessageWindow gamemsgWindows[4]; + MessageLine gamemsgLines[4][12]; + Message gamemsgMessages[4][12]; + char miniconText[4096]; + MessageWindow miniconWindow; + MessageLine miniconLines[100]; + Message miniconMessages[100]; + char errorText[1024]; + MessageWindow errorWindow; + MessageLine errorLines[5]; + Message errorMessages[5]; +}; + +struct Console { + MessageWindow consoleWindow; + MessageLine consoleLines[1024]; + Message consoleMessages[1024]; + char consoleText[65536]; + char textTempLine[512]; + unsigned int lineOffset; + int displayLineOffset; + int prevChannel; + bool outputVisible; + int fontHeight; + int visibleLineCount; + int visiblePixelWidth; + float screenMin[2]; + float screenMax[2]; + MessageBuffer messageBuffer[1]; + float color[4]; +}; + +enum { + KEYCATCH_CONSOLE = 0x1, +}; + +enum ScreenPlacementMode { + SCRMODE_FULL = 0x0, + SCRMODE_DISPLAY = 0x1, + SCRMODE_INVALID = 0x2, + SCRMODE_COUNT = 0x3, +}; + +struct ScreenPlacement { + float scaleVirtualToReal[2]; + float scaleVirtualToFull[2]; + float scaleRealToVirtual[2]; + float realViewportPosition[2]; + float realViewportSize[2]; + float virtualViewableMin[2]; + float virtualViewableMax[2]; + float realViewableMin[2]; + float realViewableMax[2]; + float virtualAdjustableMin[2]; + float virtualAdjustableMax[2]; + float realAdjustableMin[2]; + float realAdjustableMax[2]; + float subScreenLeft; +}; + +enum usercmdButtonBits { + CMD_BUTTON_LEAN_LEFT = 0x40, + CMD_BUTTON_LEAN_RIGHT = 0x80, +}; + +struct kbutton_t { + int down[2]; + unsigned int downtime; + unsigned int msec; + bool active; + bool wasPressed; +}; + +struct usercmd_s { + int serverTime; + int buttons; + int angles[3]; + unsigned __int16 weapon; + unsigned __int16 primaryWeaponForAltMode; + unsigned __int16 offHandIndex; + char forwardmove; + char rightmove; + unsigned char upmove; + unsigned char downmove; + char pitchmove; + char yawmove; + float gunPitch; + float gunYaw; + float gunXOfs; + float gunYOfs; + float gunZOfs; + float meleeChargeYaw; + unsigned char meleeChargeDist; + char selectedLoc[2]; + unsigned char selectedLocAngle; + char remoteControlAngles[2]; +}; + +struct weaponParms { + float forward[3]; + float right[3]; + float up[3]; + float muzzleTrace[3]; + float gunForward[3]; + unsigned int weaponIndex; + const void* weapDef; + const void* weapCompleteDef; +}; + +struct lockonFireParms { + bool lockon; + gentity_s* target; + float targetPosOrOffset[3]; + bool topFire; +}; + +enum TraceHitType { + TRACE_HITTYPE_NONE = 0x0, + TRACE_HITTYPE_ENTITY = 0x1, + TRACE_HITTYPE_DYNENT_MODEL = 0x2, + TRACE_HITTYPE_DYNENT_BRUSH = 0x3, + TRACE_HITTYPE_GLASS = 0x4, +}; + +struct trace_t { + float fraction; + float normal[3]; + int surfaceFlags; + int contents; + const char* material; + TraceHitType hitType; + unsigned __int16 hitId; + unsigned __int16 modelIndex; + unsigned __int16 partName; + unsigned __int16 partGroup; + bool allsolid; + bool startsolid; + bool walkable; +}; + +static_assert(sizeof(trace_t) == 0x2C); + +struct pml_t { + float forward[3]; + float right[3]; + float up[3]; + float frametime; + int msec; + int walking; + int groundPlane; + trace_t groundTrace; + float impactSpeed; + float previous_origin[3]; + float previous_velocity[3]; + unsigned int holdrand; +}; + +static_assert(sizeof(pml_t) == 0x80); + +struct pmove_t { + playerState_s* ps; + usercmd_s cmd; + usercmd_s oldcmd; + int tracemask; + int numtouch; + int touchents[32]; + Bounds bounds; + float xyspeed; + int proneChange; + int viewChangeTime; + float viewChange; + float fTorsoPitch; + float fWaistPitch; + unsigned char handler; +}; + +static_assert(sizeof(pmove_t) == 0x140); + +enum ScopedCriticalSectionType { + SCOPED_CRITSECT_NORMAL = 0x0, + SCOPED_CRITSECT_DISABLED = 0x1, + SCOPED_CRITSECT_RELEASE = 0x2, + SCOPED_CRITSECT_TRY = 0x3, +}; + +enum CriticalSection { + CRITSECT_CONSOLE = 0x0, + CRITSECT_LSP = 0x1A, + CRITSECT_CBUF = 0x21, + CRITSECT_COUNT = 0x28, +}; + +enum { + THREAD_VALUE_PROF_STACK = 0x0, + THREAD_VALUE_VA = 0x1, + THREAD_VALUE_COM_ERROR = 0x2, + THREAD_VALUE_TRACE = 0x3, + THREAD_VALUE_COUNT = 0x4, +}; + +struct TempPriority { + void* threadHandle; + int oldPriority; +}; + +struct FastCriticalSection { + volatile long readCount; + volatile long writeCount; + TempPriority tempPriority; +}; + +struct ProfileAtom { + unsigned int value[1]; +}; + +volatile struct ProfileReadable { + unsigned int hits; + ProfileAtom total; + ProfileAtom self; +}; + +struct ProfileWritable { + int nesting; + unsigned int hits; + ProfileAtom start[3]; + ProfileAtom total; + ProfileAtom child; +}; + +struct profile_t { + ProfileWritable write; + ProfileReadable read; +}; + +struct profile_guard_t { + int id; + profile_t** ppStack; +}; + +struct ProfileStack { + profile_t prof_root; + profile_t* prof_pStack[16384]; + profile_t** prof_ppStack; + profile_t prof_array[443]; + ProfileAtom prof_overhead_internal; + ProfileAtom prof_overhead_external; + profile_guard_t prof_guardstack[32]; + int prof_guardpos; + float prof_timescale; +}; + +struct va_info_t { + char va_string[2][1024]; + int index; +}; + +static_assert(sizeof(va_info_t) == 0x804); + +struct TraceCheckCount { + int global; + int* partitions; +}; + +struct TraceThreadInfo { + TraceCheckCount checkcount; +}; + +static_assert(sizeof(TraceThreadInfo) == 0x8); +} // namespace game + +#pragma warning(pop) diff --git a/src/client/game/symbols.hpp b/src/client/game/symbols.hpp new file mode 100644 index 0000000..50cad0f --- /dev/null +++ b/src/client/game/symbols.hpp @@ -0,0 +1,259 @@ +#pragma once + +#define WEAK __declspec(selectany) + +namespace game { +// Com +WEAK symbol Com_Printf{0x41BD20}; +WEAK symbol Com_PrintWarning{0x406320}; +WEAK symbol Com_PrintError{0x4C6980}; +WEAK symbol Com_DPrintf{0x42B1F0}; +WEAK symbol Com_Error{0x43DD90}; +WEAK symbol Com_OpenLogFile{0x603030}; +WEAK symbol Com_Compress{0x4316A0}; +WEAK symbol Com_EventLoop{0x4987C0}; +WEAK symbol Com_ServerPacketEvent{0x47FD30}; + +WEAK symbol va{0x4869F0}; + +// Con +WEAK symbol Con_IsDvarCommand{0x4B6610}; + +// Sys +WEAK symbol Sys_QuitAndStartProcess{0x4D69A0}; +WEAK symbol Sys_EnterCriticalSection{0x4A4CD0}; +WEAK symbol Sys_LeaveCriticalSection{0x4F78E0}; +WEAK symbol Sys_TempPriorityEnd{0x4FB800}; +WEAK symbol Sys_LockWrite{0x43C1D0}; +WEAK symbol Sys_Milliseconds{0x44E130}; +WEAK symbol Sys_IsMainThread{0x42FA00}; +WEAK symbol Sys_IsServerThread{0x4590E0}; +WEAK symbol Sys_IsDatabaseThread{0x4C9380}; +WEAK symbol Sys_SetValue{0x483310}; +WEAK symbol Sys_Sleep{0x4CFBE0}; + +WEAK symbol BigShort{0x40E7E0}; +WEAK symbol ShortNoSwap{0x4261A0}; + +WEAK symbol LargeLocalBegin{0x43fA50}; +WEAK symbol LargeLocalBeginRight{0x6317D0}; + +// CL +WEAK symbol CL_IsCgameInitialized{0x4EEA50}; +WEAK symbol CL_CoOpConnect{0x57D240}; + +// BG +WEAK symbol + BG_LoadWeaponVariantDefInternal{0x4F5AF0}; + +// Game +WEAK symbol G_GetTime{0x4E94E0}; + +WEAK symbol Cbuf_AddText{0x4A1090}; +WEAK symbol + Cmd_ExecuteSingleCommand{0x46AFD0}; +WEAK symbol + Cmd_AddCommand{0x4478A0}; +WEAK symbol + Cmd_SetAutoComplete{0x48A880}; + +// Dvars +WEAK symbol Dvar_FindVar{0x4B29D0}; +WEAK symbol + Dvar_RegisterString{0x49E0B0}; +WEAK symbol + Dvar_RegisterBool{0x429390}; +WEAK symbol + Dvar_RegisterEnum{0x4CB7C0}; +WEAK symbol + Dvar_RegisterFloat{0x4051D0}; +WEAK symbol + Dvar_RegisterInt{0x4E9490}; + +WEAK symbol Dvar_SetFloatByName{ + 0x497250}; +WEAK symbol Dvar_SetStringByName{ + 0x440C60}; +WEAK symbol Dvar_SetInt{0x4FA540}; +WEAK symbol Dvar_SetBool{0x4E57E0}; +WEAK symbol Dvar_SetString{ + 0x480E70}; +WEAK symbol Dvar_GetString{0x411F50}; +WEAK symbol Dvar_GetBool{0x481010}; + +// Script +WEAK symbol Scr_Error{0x4E9C50}; +WEAK symbol Scr_ObjectError{0x470600}; +WEAK symbol Scr_ParamError{ + 0x42C880}; +WEAK symbol GetEntity{0x4678C0}; + +WEAK symbol Scr_GetNumParam{0x4443F0}; +WEAK symbol Scr_ClearOutParams{0x4A3A00}; +WEAK symbol Scr_GetTypeName{0x4CE240}; +WEAK symbol Scr_GetString{0x4D39C0}; +WEAK symbol Scr_AddString{0x4CD670}; +WEAK symbol Scr_GetConstString{0x4AF1B0}; +WEAK symbol Scr_AddConstString{0x404CF0}; +WEAK symbol Scr_GetInt{0x454520}; +WEAK symbol Scr_AddInt{0x4865B0}; +WEAK symbol Scr_GetFloat{0x4AE590}; +WEAK symbol Scr_AddFloat{0x4986E0}; +WEAK symbol Scr_GetType{0x464EE0}; +WEAK symbol Scr_RegisterFunction{0x4F59C0}; +WEAK symbol Scr_GetFunc{0x438E10}; + +WEAK symbol + Scr_AddSourceBuffer{0x4173C0}; +WEAK symbol Scr_LoadScript{0x46CD90}; +WEAK symbol Scr_GetFunctionHandle{ + 0x462750}; +WEAK symbol Scr_ExecThread{0x41A2C0}; +WEAK symbol Scr_FreeThread{0x4C44A0}; + +// SL +WEAK symbol SL_ConvertToString{0x40E990}; +WEAK symbol SL_AddRefToString{0x4C4BD0}; +WEAK symbol SL_RemoveRefToString{0x4698E0}; + +WEAK symbol NET_AdrToString{0x4BF490}; +WEAK symbol NET_ErrorString{0x430390}; + +// Memory +WEAK symbol Hunk_AllocateTempMemory{0x492DF0}; +WEAK symbol Hunk_AllocAlignInternal{0x486C40}; + +// Zone +WEAK symbol Z_VirtualAllocInternal{0x4D9CF0}; +WEAK symbol Z_TryVirtualAllocInternal{ + 0x4D9590}; +WEAK symbol Z_VirtualFreeInternal{0x4FE260}; + +// DB +WEAK symbol + DB_FindXAssetHeader{0x40B200}; +WEAK symbol DB_IsXAssetDefault{ + 0x41AB70}; +WEAK symbol DB_GetRawBuffer{ + 0x4345E0}; +WEAK symbol + DB_LoadXAssets{0x4CFC90}; +WEAK symbol DB_ReadRawFile{ + 0x46DA60}; + +// FS +WEAK symbol _FS_ReadFile{0x4A5480}; +WEAK symbol FS_Read{0x42EDC0}; +WEAK symbol FS_Write{0x449FA0}; +WEAK symbol FS_FCloseFile{0x44E0A0}; +WEAK symbol FS_FOpenFileByMode{ + 0x41DF70}; +WEAK symbol FS_FOpenFileRead{0x48DD10}; +WEAK symbol + FS_ListFiles{0x4448F0}; +WEAK symbol FS_FreeFileList{ + 0x41C7A0}; +WEAK symbol + FS_BuildOSPath{0x4E48F0}; +WEAK symbol FS_Startup{0x47AF20}; + +// UI +WEAK symbol + UI_GetFontHandle{0x4C2600}; +WEAK symbol + UI_TextWidth{0x4F5070}; +WEAK symbol UI_TextHeight{0x407710}; +WEAK symbol + UI_DrawText{0x40FC70}; + +// PC +WEAK symbol PC_Directive_define{0x4F8CF0}; +WEAK symbol PC_FreeDefine{0x464F40}; +WEAK symbol PC_CopyToken{0x4D3670}; +WEAK symbol PC_ReadTokenHandle{0x46C3B0}; +WEAK symbol PC_SourceError{0x43A6D0}; + +WEAK symbol GetMemory{0x441880}; +WEAK symbol GetClearedMemory{0x41BCD0}; +WEAK symbol FreeMemory{0x4A7D20}; + +// PM +WEAK symbol + PM_trace{0x4B7A20}; +WEAK symbol + PM_playerTrace{0x447B90}; +WEAK symbol PM_IsSprinting{0x47CF70}; + +// Live +WEAK symbol Live_GetLocalClientName{0x492EF0}; + +// Info +WEAK symbol Info_Validate{0x425530}; + +// IW functions, could use Microsoft specific functions but who cares +WEAK symbol I_stricmp{0x409B80}; +WEAK symbol I_strnicmp{0x491E60}; + +WEAK symbol Field_Clear{0x45C350}; + +// Variables +WEAK symbol cmd_args{0x144FED0}; +WEAK symbol sv_cmd_args{0x145ABA0}; +WEAK symbol g_entities{0xEAAC38}; +WEAK symbol g_clients{0x10911E8}; + +WEAK symbol com_frameTime{0x145EC7C}; + +WEAK symbol cin_skippable{0x73264C}; + +WEAK symbol g_consoleField{0x88C700}; +WEAK symbol conDrawInputGlob{0x86E788}; +WEAK symbol con{0x86ED88}; +WEAK symbol g_console_char_height{0x732658}; +WEAK symbol g_console_field_width{0x732654}; +WEAK symbol activeScreenPlacementMode{0x93AAF4}; +WEAK symbol scrPlaceFullUnsafe{0x93AB70}; + +WEAK symbol logfile{0x145EC6C}; + +WEAK symbol level{0x10A7190}; + +WEAK symbol s_criticalSection{0x19FBA28}; +WEAK symbol ip_socket{0x1A040C8}; + +WEAK symbol sourceFiles{0x7440E8}; +WEAK symbol numtokens{0x7441F0}; + +WEAK symbol DB_GetXAssetSizeHandlers{0x733408}; +WEAK symbol DB_XAssetPool{0x7337F8}; +WEAK symbol g_poolSize{0x733510}; + +WEAK symbol g_largeLocalBuf{0x195AAF8}; + +WEAK symbol g_largeLocalPos{0x1963998}; +WEAK symbol g_maxLargeLocalPos{0x195AAFC}; + +WEAK symbol g_largeLocalRightPos{0x195AAE8}; +WEAK symbol g_minLargeLocalRightPos{0x195AB00}; + +WEAK symbol g_dwTlsIndex{0x1BFC750}; +} // namespace game diff --git a/src/client/loader/binary_loader.cpp b/src/client/loader/binary_loader.cpp new file mode 100644 index 0000000..c344141 --- /dev/null +++ b/src/client/loader/binary_loader.cpp @@ -0,0 +1,27 @@ +#include +#include +#include + +#include "binary_loader.hpp" + +#define SP_HASH \ + "39E9C4FACEA4B19017BB8C2FC64E4149708927AC40C7C3DEACC25BDD25E93D32" + +namespace binary_loader { +std::string load_base() { + std::string data; + if (!utils::io::read_file("iw4sp.exe", &data)) { + throw std::runtime_error("Failed to read game binary (iw4sp.exe)!"); + } + + const auto hash = utils::cryptography::sha256::compute(data, true); + if (hash != SP_HASH) { + throw std::runtime_error( + "Your iw4sp.exe is incompatible with this client."); + } + + return data; +} + +std::string load() { return load_base(); } +} // namespace binary_loader diff --git a/src/client/loader/binary_loader.hpp b/src/client/loader/binary_loader.hpp new file mode 100644 index 0000000..7e8a1ea --- /dev/null +++ b/src/client/loader/binary_loader.hpp @@ -0,0 +1,5 @@ +#pragma once + +namespace binary_loader { +std::string load(); +} diff --git a/src/client/loader/component_interface.hpp b/src/client/loader/component_interface.hpp new file mode 100644 index 0000000..e51ba51 --- /dev/null +++ b/src/client/loader/component_interface.hpp @@ -0,0 +1,19 @@ +#pragma once + +class component_interface { +public: + virtual ~component_interface() = default; + + virtual void post_start() {} + + virtual void post_load() {} + + virtual void pre_destroy() {} + + virtual void* load_import([[maybe_unused]] const std::string& library, + [[maybe_unused]] const std::string& function) { + return nullptr; + } + + virtual bool is_supported() { return true; } +}; diff --git a/src/client/loader/component_loader.cpp b/src/client/loader/component_loader.cpp new file mode 100644 index 0000000..3aa56db --- /dev/null +++ b/src/client/loader/component_loader.cpp @@ -0,0 +1,100 @@ +#include +#include "component_loader.hpp" + +void component_loader::register_component( + std::unique_ptr&& component_) { + get_components().push_back(std::move(component_)); +} + +bool component_loader::post_start() { + static auto handled = false; + if (handled) + return true; + handled = true; + + try { + for (const auto& component_ : get_components()) { + component_->post_start(); + } + } catch (premature_shutdown_trigger&) { + return false; + } + + return true; +} + +bool component_loader::post_load() { + static auto handled = false; + if (handled) + return true; + handled = true; + + clean(); + + try { + for (const auto& component_ : get_components()) { + component_->post_load(); + } + } catch (premature_shutdown_trigger&) { + return false; + } + + return true; +} + +void component_loader::pre_destroy() { + static auto handled = false; + if (handled) + return; + handled = true; + + for (const auto& component_ : get_components()) { + component_->pre_destroy(); + } +} + +void component_loader::clean() { + auto& components = get_components(); + for (auto i = components.begin(); i != components.end();) { + if (!(*i)->is_supported()) { + (*i)->pre_destroy(); + i = components.erase(i); + } else { + ++i; + } + } +} + +void* component_loader::load_import(const std::string& library, + const std::string& function) { + void* function_ptr = nullptr; + + for (const auto& component_ : get_components()) { + auto* const component_function_ptr = + component_->load_import(library, function); + if (component_function_ptr) { + function_ptr = component_function_ptr; + } + } + + return function_ptr; +} + +void component_loader::trigger_premature_shutdown() { + throw premature_shutdown_trigger(); +} + +std::vector>& +component_loader::get_components() { + using component_vector = std::vector>; + using component_vector_container = + std::unique_ptr>; + + static component_vector_container components( + new component_vector, [](component_vector* component_vector) { + pre_destroy(); + delete component_vector; + }); + + return *components; +} diff --git a/src/client/loader/component_loader.hpp b/src/client/loader/component_loader.hpp new file mode 100644 index 0000000..cae9910 --- /dev/null +++ b/src/client/loader/component_loader.hpp @@ -0,0 +1,50 @@ +#pragma once +#include "component_interface.hpp" + +class component_loader final { +public: + class premature_shutdown_trigger final : public std::exception { + [[nodiscard]] const char* what() const noexcept override { + return "Premature shutdown requested"; + } + }; + + template class installer final { + static_assert(std::is_base_of::value, + "component has invalid base class"); + + public: + installer() { register_component(std::make_unique()); } + }; + + template static T* get() { + for (const auto& component_ : get_components()) { + if (typeid(*component_.get()) == typeid(T)) { + return reinterpret_cast(component_.get()); + } + } + + return nullptr; + } + + static void + register_component(std::unique_ptr&& component); + + static bool post_start(); + static bool post_load(); + static void pre_destroy(); + static void clean(); + + static void* load_import(const std::string& library, + const std::string& function); + + static void trigger_premature_shutdown(); + +private: + static std::vector>& get_components(); +}; + +#define REGISTER_COMPONENT(name) \ + namespace { \ + static component_loader::installer __component; \ + } diff --git a/src/client/loader/loader.cpp b/src/client/loader/loader.cpp new file mode 100644 index 0000000..1ce576c --- /dev/null +++ b/src/client/loader/loader.cpp @@ -0,0 +1,190 @@ +#include + +#include +#include + +#include "loader.hpp" +#include "tls.hpp" + +FARPROC loader::load(const utils::nt::library& library, + const std::string& buffer) const { + + if (buffer.empty()) + return nullptr; + + const utils::nt::library source(HMODULE(buffer.data())); + if (!source) + return nullptr; + + this->load_sections(library, source); + this->load_imports(library, source); + this->load_tls(library, source); + + DWORD oldProtect; + VirtualProtect(library.get_nt_headers(), 0x1000, PAGE_EXECUTE_READWRITE, + &oldProtect); + + library.get_optional_header()->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT] = + source.get_optional_header()->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]; + std::memmove(library.get_nt_headers(), source.get_nt_headers(), + sizeof(IMAGE_NT_HEADERS) + + source.get_nt_headers()->FileHeader.NumberOfSections * + sizeof(IMAGE_SECTION_HEADER)); + + return FARPROC(library.get_ptr() + source.get_relative_entry_point()); +} + +FARPROC loader::load_library(const std::string& filename) const { + const auto target = utils::nt::library::load(filename); + if (!target) { + throw std::runtime_error{"Failed to map binary!"}; + } + + const auto base = size_t(target.get_ptr()); + if (base != 0x400000) { + throw std::runtime_error{ + utils::string::va("Binary was mapped at {0:#x} (instead of {1:#x}). " + "Something is severely broken :(", + base, 0x400000)}; + } + + this->load_imports(target, target); + this->load_tls(target, target); + + return FARPROC(target.get_ptr() + target.get_relative_entry_point()); +} + +void loader::set_import_resolver( + const std::function& + resolver) { + this->import_resolver_ = resolver; +} + +void loader::load_section(const utils::nt::library& target, + const utils::nt::library& source, + IMAGE_SECTION_HEADER* section) { + void* target_ptr = target.get_ptr() + section->VirtualAddress; + const void* source_ptr = source.get_ptr() + section->PointerToRawData; + + if (PBYTE(target_ptr) >= (target.get_ptr() + BINARY_PAYLOAD_SIZE)) { + throw std::runtime_error( + "Section exceeds the binary payload size, please increase it!"); + } + + if (section->SizeOfRawData > 0) { + DWORD old_protect; + VirtualProtect(target_ptr, section->Misc.VirtualSize, + PAGE_EXECUTE_READWRITE, &old_protect); + + std::memmove(target_ptr, source_ptr, section->SizeOfRawData); + } +} + +void loader::load_sections(const utils::nt::library& target, + const utils::nt::library& source) const { + for (auto& section : source.get_section_headers()) { + this->load_section(target, source, section); + } +} + +void loader::load_imports(const utils::nt::library& target, + const utils::nt::library& source) const { + const auto import_directory = + &source.get_optional_header() + ->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]; + + auto descriptor = PIMAGE_IMPORT_DESCRIPTOR(target.get_ptr() + + import_directory->VirtualAddress); + + while (descriptor->Name) { + std::string name = LPSTR(target.get_ptr() + descriptor->Name); + + auto name_table_entry = reinterpret_cast( + target.get_ptr() + descriptor->OriginalFirstThunk); + auto address_table_entry = + reinterpret_cast(target.get_ptr() + descriptor->FirstThunk); + + if (!descriptor->OriginalFirstThunk) { + name_table_entry = reinterpret_cast(target.get_ptr() + + descriptor->FirstThunk); + } + + while (*name_table_entry) { + FARPROC function = nullptr; + std::string function_name; + const char* function_procname; + + if (IMAGE_SNAP_BY_ORDINAL(*name_table_entry)) { + function_name = "#" + std::to_string(IMAGE_ORDINAL(*name_table_entry)); + function_procname = MAKEINTRESOURCEA(IMAGE_ORDINAL(*name_table_entry)); + } else { + auto* import = + PIMAGE_IMPORT_BY_NAME(target.get_ptr() + *name_table_entry); + function_name = import->Name; + function_procname = function_name.data(); + } + + if (this->import_resolver_) + function = FARPROC(this->import_resolver_(name, function_name)); + + if (!function) { + auto library = utils::nt::library::load(name); + if (library) { + function = GetProcAddress(library, function_procname); + } + } + + if (!function) { + throw std::runtime_error( + utils::string::va("Unable to load import '{0}' from library {1}'", + function_name, name)); + } + + utils::hook::set(address_table_entry, + reinterpret_cast(function)); + + name_table_entry++; + address_table_entry++; + } + + descriptor++; + } +} + +void loader::load_tls(const utils::nt::library& target, + const utils::nt::library& source) const { + if (!target.get_optional_header() + ->DataDirectory[IMAGE_DIRECTORY_ENTRY_TLS] + .Size) { + return; + } + + auto* target_tls = tls::allocate_tls_index(); + const auto* const source_tls = reinterpret_cast( + target.get_ptr() + target.get_optional_header() + ->DataDirectory[IMAGE_DIRECTORY_ENTRY_TLS] + .VirtualAddress); + + auto* target_tls_start = PVOID(target_tls->StartAddressOfRawData); + auto* tls_start = PVOID(source_tls->StartAddressOfRawData); + const auto tls_size = + source_tls->EndAddressOfRawData - source_tls->StartAddressOfRawData; + const auto tls_index = *reinterpret_cast(target_tls->AddressOfIndex); + + utils::hook::set(source_tls->AddressOfIndex, tls_index); + + if (target_tls->AddressOfCallBacks) { + utils::hook::set(target_tls->AddressOfCallBacks, nullptr); + } + + DWORD old_protect; + VirtualProtect(target_tls_start, tls_size, PAGE_READWRITE, &old_protect); + + auto* const tls_base = + *reinterpret_cast(__readfsdword(0x2C) + 4 * tls_index); + std::memmove(tls_base, tls_start, tls_size); + std::memmove(target_tls_start, tls_start, tls_size); + + VirtualProtect(target_tls, sizeof(*target_tls), PAGE_READWRITE, &old_protect); + *target_tls = *source_tls; +} diff --git a/src/client/loader/loader.hpp b/src/client/loader/loader.hpp new file mode 100644 index 0000000..575695e --- /dev/null +++ b/src/client/loader/loader.hpp @@ -0,0 +1,25 @@ +#pragma once + +class loader final { +public: + FARPROC load(const utils::nt::library& library, + const std::string& buffer) const; + FARPROC load_library(const std::string& filename) const; + + void set_import_resolver( + const std::function& + resolver); + +private: + std::function import_resolver_; + + static void load_section(const utils::nt::library& target, + const utils::nt::library& source, + IMAGE_SECTION_HEADER* section); + void load_sections(const utils::nt::library& target, + const utils::nt::library& source) const; + void load_imports(const utils::nt::library& target, + const utils::nt::library& source) const; + void load_tls(const utils::nt::library& target, + const utils::nt::library& source) const; +}; diff --git a/src/client/loader/tls.cpp b/src/client/loader/tls.cpp new file mode 100644 index 0000000..feb4bc1 --- /dev/null +++ b/src/client/loader/tls.cpp @@ -0,0 +1,34 @@ +#include +#include "tls.hpp" + +#include +#include + +#include + +namespace tls { +namespace { +utils::binary_resource tls_dll_file(TLS_DLL, "iw4sp-tlsdll.dll"); +} + +PIMAGE_TLS_DIRECTORY allocate_tls_index() { + static auto already_allocated = false; + if (already_allocated) { + throw std::runtime_error( + "Currently only a single allocation is supported!"); + } + + already_allocated = true; + + const auto dll_path = tls_dll_file.get_extracted_file(); + const auto tls_dll = utils::nt::library::load(dll_path); + if (!tls_dll) { + throw std::runtime_error("Failed to load TLS DLL"); + } + + return reinterpret_cast( + tls_dll.get_ptr() + tls_dll.get_optional_header() + ->DataDirectory[IMAGE_DIRECTORY_ENTRY_TLS] + .VirtualAddress); +} +} // namespace tls diff --git a/src/client/loader/tls.hpp b/src/client/loader/tls.hpp new file mode 100644 index 0000000..056eb60 --- /dev/null +++ b/src/client/loader/tls.hpp @@ -0,0 +1,5 @@ +#pragma once + +namespace tls { +PIMAGE_TLS_DIRECTORY allocate_tls_index(); +} diff --git a/src/client/main.cpp b/src/client/main.cpp new file mode 100644 index 0000000..aebb973 --- /dev/null +++ b/src/client/main.cpp @@ -0,0 +1,150 @@ +#include "std_include.hpp" +#include +#include +#include + +#include "loader/binary_loader.hpp" +#include "loader/component_loader.hpp" +#include "loader/loader.hpp" + +#include + +#include +#include + +LONG WINAPI exception_handler(PEXCEPTION_POINTERS exception_info) { + if (exception_info->ExceptionRecord->ExceptionCode == 0x406D1388) { + return EXCEPTION_CONTINUE_EXECUTION; + } + + if (exception_info->ExceptionRecord->ExceptionCode < 0x80000000 || + exception_info->ExceptionRecord->ExceptionCode == 0xE06D7363) { + return EXCEPTION_CONTINUE_SEARCH; + } + + MINIDUMP_EXCEPTION_INFORMATION exception_information = { + GetCurrentThreadId(), exception_info, FALSE}; + const auto type = MiniDumpIgnoreInaccessibleMemory // + | MiniDumpWithHandleData // + | MiniDumpScanMemory // + | MiniDumpWithProcessThreadData // + | MiniDumpWithFullMemoryInfo // + | MiniDumpWithThreadInfo; + + CreateDirectoryA("minidumps", nullptr); + const auto* file_name = + utils::string::va("minidumps\\iw4-sp_{0}.dmp", SHORTVERSION); + constexpr auto file_share = FILE_SHARE_READ | FILE_SHARE_WRITE; + const auto file_handle = + CreateFileA(file_name, GENERIC_WRITE | GENERIC_READ, file_share, nullptr, + CREATE_ALWAYS, NULL, nullptr); + + if (!MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), + file_handle, static_cast(type), + &exception_information, nullptr, nullptr)) { + char buf[4096]{}; + sprintf_s(buf, "An exception 0x%08X occurred at location 0x%p\n", + exception_info->ExceptionRecord->ExceptionCode, + exception_info->ExceptionRecord->ExceptionAddress); + MessageBoxA(nullptr, buf, "Fatal Error", MB_ICONERROR); + } + + CloseHandle(file_handle); + TerminateProcess(GetCurrentProcess(), + exception_info->ExceptionRecord->ExceptionCode); + + return EXCEPTION_CONTINUE_SEARCH; +} + +DECLSPEC_NORETURN void WINAPI exit_hook(const int code) { + component_loader::pre_destroy(); + std::exit(code); +} + +FARPROC load_binary() { + loader loader; + utils::nt::library self; + + loader.set_import_resolver( + [self](const std::string& library, const std::string& function) -> void* { + if (library == "steam_api.dll") { + return self.get_proc(function); + } + if (function == "ExitProcess") { + return exit_hook; + } + + return component_loader::load_import(library, function); + }); + + const auto buffer = binary_loader::load(); + return loader.load(self, buffer); +} + +void enable_dpi_awareness() { + const utils::nt::library user32{"user32.dll"}; + const auto set_dpi = + user32 ? user32.get_proc( + "SetProcessDpiAwarenessContext") + : nullptr; + if (set_dpi) { + set_dpi(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2); + } +} + +void apply_environment() { + char* buffer{}; + std::size_t size{}; + if (_dupenv_s(&buffer, &size, "MW2_INSTALL") != 0 || buffer == nullptr) { + return; + } + + const auto _ = gsl::finally([&] { std::free(buffer); }); + + SetCurrentDirectoryA(buffer); + SetDllDirectoryA(buffer); +} + +int main() { + AddVectoredExceptionHandler(0, exception_handler); + SetProcessDEPPolicy(PROCESS_DEP_ENABLE); + + FARPROC entry_point; + enable_dpi_awareness(); + + std::srand(std::uint32_t(time(nullptr)) ^ + ~(GetTickCount() * GetCurrentProcessId())); + + { + auto premature_shutdown = true; + const auto _0 = gsl::finally([&premature_shutdown] { + if (premature_shutdown) { + component_loader::pre_destroy(); + } + }); + + try { + apply_environment(); + + if (!component_loader::post_start()) + return 0; + + entry_point = load_binary(); + if (!entry_point) { + throw std::runtime_error("Unable to load binary into memory"); + } + + if (!component_loader::post_load()) + return 0; + + premature_shutdown = false; + } catch (const std::exception& ex) { + MessageBoxA(nullptr, ex.what(), "ERROR", MB_ICONERROR); + return 1; + } + } + + return entry_point(); +} + +int APIENTRY WinMain(HINSTANCE, HINSTANCE, PSTR, int) { return main(); } diff --git a/src/client/resource.hpp b/src/client/resource.hpp new file mode 100644 index 0000000..b567072 --- /dev/null +++ b/src/client/resource.hpp @@ -0,0 +1,8 @@ +#pragma once + +#define ID_ICON 102 + +#define TLS_DLL 301 +#define RUNNER 302 + +#define ICON_IMAGE 303 diff --git a/src/client/resource.rc b/src/client/resource.rc new file mode 100644 index 0000000..aff544d --- /dev/null +++ b/src/client/resource.rc @@ -0,0 +1,117 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "windows.h" +#include "version.h" +#include "resource.hpp" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "#include ""windows.h""\r\n" + "\0" +END + +2 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE VFT_DLL + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "AlterWare" + VALUE "FileDescription", "IW4 SP client modification" + VALUE "FileVersion", VERSION_FILE + VALUE "InternalName", "iw4-sp" + VALUE "LegalCopyright", "Copyright (C) 2023 AlterWare. All rights reserved." + VALUE "Licence", "GPLv3" + VALUE "Info", "https://alterware.dev" + VALUE "OriginalFilename", "iw4-sp.exe" + VALUE "ProductName", "iw4-sp" + VALUE "ProductVersion", VERSION_PRODUCT + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +///////////////////////////////////////////////////////////////////////////// +// +// Binary Data +// + +ID_ICON ICON "resources/icon.ico" + +#ifdef _DEBUG +TLS_DLL RCDATA "../../build/bin/Win32/Debug/tlsdll.dll" +#else +TLS_DLL RCDATA "../../build/bin/Win32/Release/tlsdll.dll" +#endif + +#ifdef _DEBUG +RUNNER RCDATA "../../build/bin/Win32/Debug/runner.exe" +#else +RUNNER RCDATA "../../build/bin/Win32/Release/runner.exe" +#endif + +ICON_IMAGE RCDATA "resources/icon.png" + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/src/client/resources/icon.ico b/src/client/resources/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..255503b161db4a77fe7a8733f4e5d79d5651f3a3 GIT binary patch literal 204862 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 x-9!$l?29ak{BNQBe{T5yFtj}W=!JgkZ(rnA +#include +#include + +#ifdef max +#undef max +#endif + +#ifdef min +#undef min +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#pragma comment(lib, "ntdll.lib") +#pragma comment(lib, "Crypt32.lib") +#pragma comment(lib, "Ws2_32.lib") +#pragma comment(lib, "dbghelp.lib") + +#pragma warning(disable : 4100) +#pragma warning(disable : 4244) + +// I have witnessed clang re-ordering my included even when +// it was set not to do it. :( +// clang-format off +#include "game/structs.hpp" +#include "game/game.hpp" +// clang-format on diff --git a/src/client/steam/interface.cpp b/src/client/steam/interface.cpp new file mode 100644 index 0000000..2326291 --- /dev/null +++ b/src/client/steam/interface.cpp @@ -0,0 +1,117 @@ +#include +#include "interface.hpp" + +#include +#include + +#include + +namespace steam { +interface::interface() : interface(nullptr) {} + +interface::interface(void* interface_ptr) + : interface_ptr_(static_cast(interface_ptr)) {} + +interface::operator bool() const { return this->interface_ptr_ != nullptr; } + +interface::method interface::find_method(const std::string& name) { + const auto method_entry = this->methods_.find(name); + if (method_entry != this->methods_.end()) { + return method_entry->second; + } + + return this->search_method(name); +} + +interface::method interface::search_method(const std::string& name) { + if (!utils::memory::is_bad_read_ptr(this->interface_ptr_)) { + auto vftbl = *this->interface_ptr_; + + while (!utils::memory::is_bad_read_ptr(vftbl) && + !utils::memory::is_bad_code_ptr(*vftbl)) { + const auto result = this->analyze_method(*vftbl); + if (result.param_size_found && result.name_found) { + const method method_result{*vftbl, result.param_size}; + this->methods_[result.name] = method_result; + + if (result.name == name) { + return method_result; + } + } + + ++vftbl; + } + } + + return {}; +} + +interface::method_result interface::analyze_method(const void* method_ptr) { + method_result result; + if (utils::memory::is_bad_code_ptr(method_ptr)) + return result; + + ud_t ud; + ud_init(&ud); + ud_set_mode(&ud, 32); + ud_set_pc(&ud, reinterpret_cast(method_ptr)); + ud_set_input_buffer(&ud, static_cast(method_ptr), + INT32_MAX); + + while (true) { + ud_disassemble(&ud); + + if (ud_insn_mnemonic(&ud) == UD_Iret && !result.param_size_found) { + const ud_operand* operand = ud_insn_opr(&ud, 0); + if (operand && operand->type == UD_OP_IMM && operand->size == 16) { + result.param_size = operand->lval.uword; + } else { + result.param_size = 0; + } + + result.param_size_found = true; + } + + if (ud_insn_mnemonic(&ud) == UD_Ipush && !result.name_found) { + const auto operand = ud_insn_opr(&ud, 0); + if (operand->type == UD_OP_IMM && operand->size == 32) { + auto* operand_ptr = reinterpret_cast(operand->lval.udword); + if (!utils::memory::is_bad_read_ptr(operand_ptr) && + this->is_rdata(operand_ptr)) { + result.name = operand_ptr; + result.name_found = true; + } + } + } + + if (*reinterpret_cast(ud.pc) == 0xCC) + break; // int 3 + if (result.param_size_found && result.name_found) + break; + } + + return result; +} + +bool interface::is_rdata(void* pointer) { + const auto pointer_lib = utils::nt::library::get_by_address(pointer); + + for (const auto& section : pointer_lib.get_section_headers()) { + const auto size = sizeof(section->Name); + char name[size + 1]; + name[size] = 0; + std::memcpy(name, section->Name, size); + + if (std::strcmp(name, ".rdata") == 0) { + const auto target = reinterpret_cast(pointer); + const size_t source_start = + size_t(pointer_lib.get_ptr()) + section->PointerToRawData; + const size_t source_end = source_start + section->SizeOfRawData; + + return target >= source_start && target <= source_end; + } + } + + return false; +} +} // namespace steam diff --git a/src/client/steam/interface.hpp b/src/client/steam/interface.hpp new file mode 100644 index 0000000..b42df89 --- /dev/null +++ b/src/client/steam/interface.hpp @@ -0,0 +1,82 @@ +#pragma once + +#ifdef interface +#undef interface +#endif + +namespace steam { +template +struct argument_size_calculator final : std::integral_constant { +}; + +template +struct argument_size_calculator final + : std::integral_constant::value + + (sizeof(void*) - 1)) & + ~(sizeof(void*) - 1))> {}; + +class interface final { +public: + class method final { + public: + void* pointer = nullptr; + std::size_t param_size = 0; + }; + + class method_result final { + public: + std::string name; + std::size_t param_size = 0; + bool name_found = false; + bool param_size_found = false; + }; + + interface(); + interface(void* interface_ptr); + + operator bool() const; + + template + T invoke(const std::string& method_name, Args... args) { + if (!this->interface_ptr_) { + throw std::runtime_error("Invalid interface pointer"); + } + + const auto method_result = this->find_method(method_name); + if (!method_result.pointer) { + throw std::runtime_error("Unable to find desired method"); + } + + constexpr std::size_t passed_argc = + argument_size_calculator::value; + if (passed_argc != method_result.param_size) { + throw std::runtime_error("Invalid argument count"); + } + + return static_cast(method_result.pointer)( + this->interface_ptr_, args...); + } + + template + T invoke(const std::size_t table_entry, Args... args) { + if (!this->interface_ptr_) { + throw std::runtime_error("Invalid interface pointer"); + } + + return static_cast( + (*this->interface_ptr_)[table_entry])(this->interface_ptr_, args...); + } + +private: + void*** interface_ptr_; + std::unordered_map methods_; + + method find_method(const std::string& name); + method search_method(const std::string& name); + + method_result analyze_method(const void* method_ptr); + + bool is_rdata(void* pointer); +}; +} // namespace steam diff --git a/src/client/steam/interfaces/apps.cpp b/src/client/steam/interfaces/apps.cpp new file mode 100644 index 0000000..ba788e1 --- /dev/null +++ b/src/client/steam/interfaces/apps.cpp @@ -0,0 +1,37 @@ +#include +#include "steam/steam.hpp" + +namespace steam { +bool apps::BIsSubscribed() { return true; } + +bool apps::BIsLowViolence() { return false; } + +bool apps::BIsCybercafe() { return false; } + +bool apps::BIsVACBanned() { return false; } + +const char* apps::GetCurrentGameLanguage() { return "english"; } + +const char* apps::GetAvailableGameLanguages() { return "english"; } + +bool apps::BIsSubscribedApp(unsigned int appID) { return true; } + +bool apps::BIsDlcInstalled(unsigned int appID) { return true; } + +unsigned int apps::GetEarliestPurchaseUnixTime(unsigned int nAppID) { + return 0; +} + +bool apps::BIsSubscribedFromFreeWeekend() { return false; } + +int apps::GetDLCCount() { return 0; } + +bool apps::BGetDLCDataByIndex(int iDLC, unsigned int* pAppID, bool* pbAvailable, + char* pchName, int cchNameBufferSize) { + return false; +} + +void apps::InstallDLC(unsigned int nAppID) {} + +void apps::UninstallDLC(unsigned int nAppID) {} +} // namespace steam diff --git a/src/client/steam/interfaces/apps.hpp b/src/client/steam/interfaces/apps.hpp new file mode 100644 index 0000000..e5c91e4 --- /dev/null +++ b/src/client/steam/interfaces/apps.hpp @@ -0,0 +1,26 @@ +#pragma once + +namespace steam { +class apps { +protected: + ~apps() = default; + +public: + virtual bool BIsSubscribed(); + virtual bool BIsLowViolence(); + virtual bool BIsCybercafe(); + virtual bool BIsVACBanned(); + virtual const char* GetCurrentGameLanguage(); + virtual const char* GetAvailableGameLanguages(); + virtual bool BIsSubscribedApp(unsigned int appID); + virtual bool BIsDlcInstalled(unsigned int appID); + virtual unsigned int GetEarliestPurchaseUnixTime(unsigned int nAppID); + virtual bool BIsSubscribedFromFreeWeekend(); + virtual int GetDLCCount(); + virtual bool BGetDLCDataByIndex(int iDLC, unsigned int* pAppID, + bool* pbAvailable, char* pchName, + int cchNameBufferSize); + virtual void InstallDLC(unsigned int nAppID); + virtual void UninstallDLC(unsigned int nAppID); +}; +} // namespace steam diff --git a/src/client/steam/interfaces/friends.cpp b/src/client/steam/interfaces/friends.cpp new file mode 100644 index 0000000..c05647f --- /dev/null +++ b/src/client/steam/interfaces/friends.cpp @@ -0,0 +1,130 @@ +#include +#include "steam/steam.hpp" + +namespace steam { +const char* friends::GetPersonaName() { return "GlaDos"; } + +void friends::SetPersonaName(const char* pchPersonaName) {} + +int friends::GetPersonaState() { return 1; } + +int friends::GetFriendCount(int eFriendFlags) { return 0; } + +steam_id friends::GetFriendByIndex(int iFriend, int iFriendFlags) { + return steam_id(); +} + +int friends::GetFriendRelationship(steam_id steamIDFriend) { return 0; } + +int friends::GetFriendPersonaState(steam_id steamIDFriend) { return 0; } + +const char* friends::GetFriendPersonaName(steam_id steamIDFriend) { return ""; } + +bool friends::GetFriendGamePlayed(steam_id steamIDFriend, + void* pFriendGameInfo) { + return false; +} + +const char* friends::GetFriendPersonaNameHistory(steam_id steamIDFriend, + int iPersonaName) { + return ""; +} + +bool friends::HasFriend(steam_id steamIDFriend, int eFriendFlags) { + return false; +} + +int friends::GetClanCount() { return 0; } + +steam_id friends::GetClanByIndex(int iClan) { return steam_id(); } + +const char* friends::GetClanName(steam_id steamIDClan) { return "3arc"; } + +const char* friends::GetClanTag(steam_id steamIDClan) { + return this->GetClanName(steamIDClan); +} + +int friends::GetFriendCountFromSource(steam_id steamIDSource) { return 0; } + +steam_id friends::GetFriendFromSourceByIndex(steam_id steamIDSource, + int iFriend) { + return steam_id(); +} + +bool friends::IsUserInSource(steam_id steamIDUser, steam_id steamIDSource) { + return false; +} + +void friends::SetInGameVoiceSpeaking(steam_id steamIDUser, bool bSpeaking) {} + +void friends::ActivateGameOverlay(const char* pchDialog) {} + +void friends::ActivateGameOverlayToUser(const char* pchDialog, + steam_id steamID) {} + +void friends::ActivateGameOverlayToWebPage(const char* pchURL) {} + +void friends::ActivateGameOverlayToStore(unsigned int nAppID) { + OutputDebugStringA("Store requested!"); +} + +void friends::SetPlayedWith(steam_id steamIDUserPlayedWith) {} + +void friends::ActivateGameOverlayInviteDialog(steam_id steamIDLobby) {} + +int friends::GetSmallFriendAvatar(steam_id steamIDFriend) { return 0; } + +int friends::GetMediumFriendAvatar(steam_id steamIDFriend) { return 0; } + +int friends::GetLargeFriendAvatar(steam_id steamIDFriend) { return 0; } + +bool friends::RequestUserInformation(steam_id steamIDUser, + bool bRequireNameOnly) { + return false; +} + +unsigned __int64 friends::RequestClanOfficerList(steam_id steamIDClan) { + return 0; +} + +steam_id friends::GetClanOwner(steam_id steamIDClan) { return steam_id(); } + +int friends::GetClanOfficerCount(steam_id steamIDClan) { return 0; } + +steam_id friends::GetClanOfficerByIndex(steam_id steamIDClan, int iOfficer) { + return steam_id(); +} + +int friends::GetUserRestrictions() { return 0; } + +bool friends::SetRichPresence(const char* pchKey, const char* pchValue) { + return true; +} + +void friends::ClearRichPresence() {} + +const char* friends::GetFriendRichPresence(steam_id steamIDFriend, + const char* pchKey) { + return ""; +} + +int friends::GetFriendRichPresenceKeyCount(steam_id steamIDFriend) { return 0; } + +const char* friends::GetFriendRichPresenceKeyByIndex(steam_id steamIDFriend, + int iKey) { + return "a"; +} + +bool friends::InviteUserToGame(steam_id steamIDFriend, + const char* pchConnectString) { + return false; +} + +int friends::GetCoplayFriendCount() { return 0; } + +steam_id friends::GetCoplayFriend(int iCoplayFriend) { return steam_id(); } + +int friends::GetFriendCoplayTime(steam_id steamIDFriend) { return 0; } + +unsigned int friends::GetFriendCoplayGame(steam_id steamIDFriend) { return 0; } +} // namespace steam diff --git a/src/client/steam/interfaces/friends.hpp b/src/client/steam/interfaces/friends.hpp new file mode 100644 index 0000000..9efedf3 --- /dev/null +++ b/src/client/steam/interfaces/friends.hpp @@ -0,0 +1,62 @@ +#pragma once + +namespace steam { +class friends { +protected: + ~friends() = default; + +public: + virtual const char* GetPersonaName(); + virtual void SetPersonaName(const char* pchPersonaName); + virtual int GetPersonaState(); + virtual int GetFriendCount(int eFriendFlags); + virtual steam_id GetFriendByIndex(int iFriend, int iFriendFlags); + virtual int GetFriendRelationship(steam_id steamIDFriend); + virtual int GetFriendPersonaState(steam_id steamIDFriend); + virtual const char* GetFriendPersonaName(steam_id steamIDFriend); + virtual bool GetFriendGamePlayed(steam_id steamIDFriend, + void* pFriendGameInfo); + virtual const char* GetFriendPersonaNameHistory(steam_id steamIDFriend, + int iPersonaName); + virtual bool HasFriend(steam_id steamIDFriend, int eFriendFlags); + virtual int GetClanCount(); + virtual steam_id GetClanByIndex(int iClan); + virtual const char* GetClanName(steam_id steamIDClan); + virtual const char* GetClanTag(steam_id steamIDClan); + virtual int GetFriendCountFromSource(steam_id steamIDSource); + virtual steam_id GetFriendFromSourceByIndex(steam_id steamIDSource, + int iFriend); + virtual bool IsUserInSource(steam_id steamIDUser, steam_id steamIDSource); + virtual void SetInGameVoiceSpeaking(steam_id steamIDUser, bool bSpeaking); + virtual void ActivateGameOverlay(const char* pchDialog); + virtual void ActivateGameOverlayToUser(const char* pchDialog, + steam_id steamID); + virtual void ActivateGameOverlayToWebPage(const char* pchURL); + virtual void ActivateGameOverlayToStore(unsigned int nAppID); + virtual void SetPlayedWith(steam_id steamIDUserPlayedWith); + virtual void ActivateGameOverlayInviteDialog(steam_id steamIDLobby); + virtual int GetSmallFriendAvatar(steam_id steamIDFriend); + virtual int GetMediumFriendAvatar(steam_id steamIDFriend); + virtual int GetLargeFriendAvatar(steam_id steamIDFriend); + virtual bool RequestUserInformation(steam_id steamIDUser, + bool bRequireNameOnly); + virtual unsigned __int64 RequestClanOfficerList(steam_id steamIDClan); + virtual steam_id GetClanOwner(steam_id steamIDClan); + virtual int GetClanOfficerCount(steam_id steamIDClan); + virtual steam_id GetClanOfficerByIndex(steam_id steamIDClan, int iOfficer); + virtual int GetUserRestrictions(); + virtual bool SetRichPresence(const char* pchKey, const char* pchValue); + virtual void ClearRichPresence(); + virtual const char* GetFriendRichPresence(steam_id steamIDFriend, + const char* pchKey); + virtual int GetFriendRichPresenceKeyCount(steam_id steamIDFriend); + virtual const char* GetFriendRichPresenceKeyByIndex(steam_id steamIDFriend, + int iKey); + virtual bool InviteUserToGame(steam_id steamIDFriend, + const char* pchConnectString); + virtual int GetCoplayFriendCount(); + virtual steam_id GetCoplayFriend(int iCoplayFriend); + virtual int GetFriendCoplayTime(steam_id steamIDFriend); + virtual unsigned int GetFriendCoplayGame(steam_id steamIDFriend); +}; +} // namespace steam diff --git a/src/client/steam/interfaces/game_server.cpp b/src/client/steam/interfaces/game_server.cpp new file mode 100644 index 0000000..eebb5ef --- /dev/null +++ b/src/client/steam/interfaces/game_server.cpp @@ -0,0 +1,74 @@ +#include +#include "steam/steam.hpp" + +namespace steam { +void game_server::LogOn() {} + +void game_server::LogOff() {} + +bool game_server::LoggedOn() { return true; } + +bool game_server::Secure() { return false; } + +steam_id game_server::GetSteamID() { return steam_id(); } + +bool game_server::SendUserConnectAndAuthenticate(unsigned int unIPClient, + const void* pvAuthBlob, + unsigned int cubAuthBlobSize, + steam_id* pSteamIDUser) { + return true; +} + +steam_id game_server::CreateUnauthenticatedUserConnection() { + return steam_id(); +} + +void game_server::SendUserDisconnect(steam_id steamIDUser) {} + +bool game_server::UpdateUserData(steam_id steamIDUser, + const char* pchPlayerName, + unsigned int uScore) { + return true; +} + +bool game_server::SetServerType(unsigned int unServerFlags, + unsigned int unGameIP, + unsigned short unGamePort, + unsigned short unSpectatorPort, + unsigned short usQueryPort, + const char* pchGameDir, const char* pchVersion, + bool bLANMode) { + return true; +} + +void game_server::UpdateServerStatus(int cPlayers, int cPlayersMax, + int cBotPlayers, const char* pchServerName, + const char* pSpectatorServerName, + const char* pchMapName) {} + +void game_server::UpdateSpectatorPort(unsigned short unSpectatorPort) {} + +void game_server::SetGameType(const char* pchGameType) {} + +bool game_server::GetUserAchievementStatus(steam_id steamID, + const char* pchAchievementName) { + return false; +} + +void game_server::GetGameplayStats() {} + +unsigned __int64 game_server::GetServerReputation() { return 0; } + +bool game_server::RequestUserGroupStatus(steam_id steamIDUser, + steam_id steamIDGroup) { + return false; +} + +unsigned int game_server::GetPublicIP() { return 0; } + +void game_server::SetGameData(const char* pchGameData) {} + +int game_server::UserHasLicenseForApp(steam_id steamID, unsigned int appID) { + return 0; +} +} // namespace steam diff --git a/src/client/steam/interfaces/game_server.hpp b/src/client/steam/interfaces/game_server.hpp new file mode 100644 index 0000000..8d2854a --- /dev/null +++ b/src/client/steam/interfaces/game_server.hpp @@ -0,0 +1,43 @@ +#pragma once + +namespace steam { +class game_server { +protected: + ~game_server() = default; + +public: + virtual void LogOn(); + virtual void LogOff(); + virtual bool LoggedOn(); + virtual bool Secure(); + virtual steam_id GetSteamID(); + virtual bool SendUserConnectAndAuthenticate(unsigned int unIPClient, + const void* pvAuthBlob, + unsigned int cubAuthBlobSize, + steam_id* pSteamIDUser); + virtual steam_id CreateUnauthenticatedUserConnection(); + virtual void SendUserDisconnect(steam_id steamIDUser); + virtual bool UpdateUserData(steam_id steamIDUser, const char* pchPlayerName, + unsigned int uScore); + virtual bool SetServerType(unsigned int unServerFlags, unsigned int unGameIP, + unsigned short unGamePort, + unsigned short unSpectatorPort, + unsigned short usQueryPort, const char* pchGameDir, + const char* pchVersion, bool bLANMode); + virtual void UpdateServerStatus(int cPlayers, int cPlayersMax, + int cBotPlayers, const char* pchServerName, + const char* pSpectatorServerName, + const char* pchMapName); + virtual void UpdateSpectatorPort(unsigned short unSpectatorPort); + virtual void SetGameType(const char* pchGameType); + virtual bool GetUserAchievementStatus(steam_id steamID, + const char* pchAchievementName); + virtual void GetGameplayStats(); + virtual unsigned __int64 GetServerReputation(); + virtual bool RequestUserGroupStatus(steam_id steamIDUser, + steam_id steamIDGroup); + virtual unsigned int GetPublicIP(); + virtual void SetGameData(const char* pchGameData); + virtual int UserHasLicenseForApp(steam_id steamID, unsigned int appID); +}; +} // namespace steam diff --git a/src/client/steam/interfaces/master_server_updater.cpp b/src/client/steam/interfaces/master_server_updater.cpp new file mode 100644 index 0000000..a76cb29 --- /dev/null +++ b/src/client/steam/interfaces/master_server_updater.cpp @@ -0,0 +1,51 @@ +#include +#include "steam/steam.hpp" + +namespace steam { +void master_server_updater::SetActive(bool bActive) {} + +void master_server_updater::SetHeartbeatInterval(int iHeartbeatInterval) {} + +bool master_server_updater::HandleIncomingPacket(const void* pData, int cbData, + unsigned int srcIP, + unsigned short srcPort) { + return true; +} + +int master_server_updater::GetNextOutgoingPacket(void* pOut, int cbMaxOut, + unsigned int* pNetAdr, + unsigned short* pPort) { + return 0; +} + +void master_server_updater::SetBasicServerData( + unsigned short nProtocolVersion, bool bDedicatedServer, + const char* pRegionName, const char* pProductName, + unsigned short nMaxReportedClients, bool bPasswordProtected, + const char* pGameDescription) {} + +void master_server_updater::ClearAllKeyValues() {} + +void master_server_updater::SetKeyValue(const char* pKey, const char* pValue) {} + +void master_server_updater::NotifyShutdown() {} + +bool master_server_updater::WasRestartRequested() { return false; } + +void master_server_updater::ForceHeartbeat() {} + +bool master_server_updater::AddMasterServer(const char* pServerAddress) { + return true; +} + +bool master_server_updater::RemoveMasterServer(const char* pServerAddress) { + return true; +} + +int master_server_updater::GetNumMasterServers() { return 0; } + +int master_server_updater::GetMasterServerAddress(int iServer, char* pOut, + int outBufferSize) { + return 0; +} +} // namespace steam diff --git a/src/client/steam/interfaces/master_server_updater.hpp b/src/client/steam/interfaces/master_server_updater.hpp new file mode 100644 index 0000000..f401b66 --- /dev/null +++ b/src/client/steam/interfaces/master_server_updater.hpp @@ -0,0 +1,32 @@ +#pragma once + +namespace steam { +class master_server_updater { +protected: + ~master_server_updater() = default; + +public: + virtual void SetActive(bool bActive); + virtual void SetHeartbeatInterval(int iHeartbeatInterval); + virtual bool HandleIncomingPacket(const void* pData, int cbData, + unsigned int srcIP, unsigned short srcPort); + virtual int GetNextOutgoingPacket(void* pOut, int cbMaxOut, + unsigned int* pNetAdr, + unsigned short* pPort); + virtual void + SetBasicServerData(unsigned short nProtocolVersion, bool bDedicatedServer, + const char* pRegionName, const char* pProductName, + unsigned short nMaxReportedClients, + bool bPasswordProtected, const char* pGameDescription); + virtual void ClearAllKeyValues(); + virtual void SetKeyValue(const char* pKey, const char* pValue); + virtual void NotifyShutdown(); + virtual bool WasRestartRequested(); + virtual void ForceHeartbeat(); + virtual bool AddMasterServer(const char* pServerAddress); + virtual bool RemoveMasterServer(const char* pServerAddress); + virtual int GetNumMasterServers(); + virtual int GetMasterServerAddress(int iServer, char* pOut, + int outBufferSize); +}; +} // namespace steam diff --git a/src/client/steam/interfaces/matchmaking.cpp b/src/client/steam/interfaces/matchmaking.cpp new file mode 100644 index 0000000..04d82a5 --- /dev/null +++ b/src/client/steam/interfaces/matchmaking.cpp @@ -0,0 +1,184 @@ +#include +#include "steam/steam.hpp" + +namespace steam { +int matchmaking::GetFavoriteGameCount() { return 0; } + +bool matchmaking::GetFavoriteGame(int iGame, unsigned int* pnAppID, + unsigned int* pnIP, + unsigned short* pnConnPort, + unsigned short* pnQueryPort, + unsigned int* punFlags, + unsigned int* pRTime32LastPlayedOnServer) { + return false; +} + +int matchmaking::AddFavoriteGame(unsigned int nAppID, unsigned int nIP, + unsigned short nConnPort, + unsigned short nQueryPort, + unsigned int unFlags, + unsigned int rTime32LastPlayedOnServer) { + return 0; +} + +bool matchmaking::RemoveFavoriteGame(unsigned int nAppID, unsigned int nIP, + unsigned short nConnPort, + unsigned short nQueryPort, + unsigned int unFlags) { + return false; +} + +unsigned __int64 matchmaking::RequestLobbyList() { return 0; } + +void matchmaking::AddRequestLobbyListStringFilter(const char* pchKeyToMatch, + const char* pchValueToMatch, + int eComparisonType) {} + +void matchmaking::AddRequestLobbyListNumericalFilter(const char* pchKeyToMatch, + int nValueToMatch, + int eComparisonType) {} + +void matchmaking::AddRequestLobbyListNearValueFilter(const char* pchKeyToMatch, + int nValueToBeCloseTo) {} + +void matchmaking::AddRequestLobbyListFilterSlotsAvailable(int nSlotsAvailable) { +} + +void matchmaking::AddRequestLobbyListDistanceFilter(int eLobbyDistanceFilter) {} + +void matchmaking::AddRequestLobbyListResultCountFilter(int cMaxResults) {} + +steam_id matchmaking::GetLobbyByIndex(int iLobby) { return steam_id(); } + +unsigned __int64 matchmaking::CreateLobby(int eLobbyType, int cMaxMembers) { + const auto result = callbacks::register_call(); + auto retvals = static_cast(calloc(1, sizeof(lobby_created))); + //::Utils::Memory::AllocateArray(); + steam_id id; + + id.raw.account_id = 1337132; + id.raw.universe = 1; + id.raw.account_type = 8; + id.raw.account_instance = 0x40000; + + retvals->m_e_result = 1; + retvals->m_ul_steam_id_lobby = id; + + callbacks::return_call(retvals, sizeof(lobby_created), + lobby_created::callback_id, result); + + matchmaking::JoinLobby(id); + + return result; +} + +unsigned __int64 matchmaking::JoinLobby(steam_id steamIDLobby) { + const auto result = callbacks::register_call(); + auto* retvals = static_cast(calloc(1, sizeof(lobby_enter))); + //::Utils::Memory::AllocateArray(); + retvals->m_b_locked = false; + retvals->m_e_chat_room_enter_response = 1; + retvals->m_rgf_chat_permissions = 0xFFFFFFFF; + retvals->m_ul_steam_id_lobby = steamIDLobby; + + callbacks::return_call(retvals, sizeof(lobby_enter), lobby_enter::callback_id, + result); + + return result; +} + +void matchmaking::LeaveLobby(steam_id steamIDLobby) { + // Components::Party::RemoveLobby(steamIDLobby); +} + +bool matchmaking::InviteUserToLobby(steam_id steamIDLobby, + steam_id steamIDInvitee) { + return true; +} + +int matchmaking::GetNumLobbyMembers(steam_id steamIDLobby) { return 1; } + +steam_id matchmaking::GetLobbyMemberByIndex(steam_id steamIDLobby, + int iMember) { + return SteamUser()->GetSteamID(); +} + +const char* matchmaking::GetLobbyData(steam_id steamIDLobby, + const char* pchKey) { + return "212"; // Components::Party::GetLobbyInfo(steamIDLobby, pchKey); +} + +bool matchmaking::SetLobbyData(steam_id steamIDLobby, const char* pchKey, + const char* pchValue) { + return true; +} + +int matchmaking::GetLobbyDataCount(steam_id steamIDLobby) { return 0; } + +bool matchmaking::GetLobbyDataByIndex(steam_id steamIDLobby, int iLobbyData, + char* pchKey, int cchKeyBufferSize, + char* pchValue, int cchValueBufferSize) { + return false; +} + +bool matchmaking::DeleteLobbyData(steam_id steamIDLobby, const char* pchKey) { + return false; +} + +const char* matchmaking::GetLobbyMemberData(steam_id steamIDLobby, + steam_id steamIDUser, + const char* pchKey) { + return ""; +} + +void matchmaking::SetLobbyMemberData(steam_id steamIDLobby, const char* pchKey, + const char* pchValue) {} + +bool matchmaking::SendLobbyChatMsg(steam_id steamIDLobby, const void* pvMsgBody, + int cubMsgBody) { + return true; +} + +int matchmaking::GetLobbyChatEntry(steam_id steamIDLobby, int iChatID, + steam_id* pSteamIDUser, void* pvData, + int cubData, int* peChatEntryType) { + return 0; +} + +bool matchmaking::RequestLobbyData(steam_id steamIDLobby) { return false; } + +void matchmaking::SetLobbyGameServer(steam_id steamIDLobby, + unsigned int unGameServerIP, + unsigned short unGameServerPort, + steam_id steamIDGameServer) {} + +bool matchmaking::GetLobbyGameServer(steam_id steamIDLobby, + unsigned int* punGameServerIP, + unsigned short* punGameServerPort, + steam_id* psteamIDGameServer) { + return false; +} + +bool matchmaking::SetLobbyMemberLimit(steam_id steamIDLobby, int cMaxMembers) { + return true; +} + +int matchmaking::GetLobbyMemberLimit(steam_id steamIDLobby) { return 0; } + +bool matchmaking::SetLobbyType(steam_id steamIDLobby, int eLobbyType) { + return true; +} + +bool matchmaking::SetLobbyJoinable(steam_id steamIDLobby, bool bLobbyJoinable) { + return true; +} + +steam_id matchmaking::GetLobbyOwner(steam_id steamIDLobby) { + return SteamUser()->GetSteamID(); +} + +bool matchmaking::SetLobbyOwner(steam_id steamIDLobby, + steam_id steamIDNewOwner) { + return true; +} +} // namespace steam diff --git a/src/client/steam/interfaces/matchmaking.hpp b/src/client/steam/interfaces/matchmaking.hpp new file mode 100644 index 0000000..0076fda --- /dev/null +++ b/src/client/steam/interfaces/matchmaking.hpp @@ -0,0 +1,94 @@ +#pragma once + +namespace steam { +struct lobby_created final { + enum { callback_id = 513 }; + + int m_e_result; + int m_pad; + steam_id m_ul_steam_id_lobby; +}; + +struct lobby_enter final { + enum { callback_id = 504 }; + + steam_id m_ul_steam_id_lobby; + int m_rgf_chat_permissions; + bool m_b_locked; + int m_e_chat_room_enter_response; +}; + +class matchmaking { +protected: + ~matchmaking() = default; + +public: + virtual int GetFavoriteGameCount(); + virtual bool GetFavoriteGame(int iGame, unsigned int* pnAppID, + unsigned int* pnIP, unsigned short* pnConnPort, + unsigned short* pnQueryPort, + unsigned int* punFlags, + unsigned int* pRTime32LastPlayedOnServer); + virtual int AddFavoriteGame(unsigned int nAppID, unsigned int nIP, + unsigned short nConnPort, + unsigned short nQueryPort, unsigned int unFlags, + unsigned int rTime32LastPlayedOnServer); + virtual bool RemoveFavoriteGame(unsigned int nAppID, unsigned int nIP, + unsigned short nConnPort, + unsigned short nQueryPort, + unsigned int unFlags); + virtual unsigned __int64 RequestLobbyList(); + virtual void AddRequestLobbyListStringFilter(const char* pchKeyToMatch, + const char* pchValueToMatch, + int eComparisonType); + virtual void AddRequestLobbyListNumericalFilter(const char* pchKeyToMatch, + int nValueToMatch, + int eComparisonType); + virtual void AddRequestLobbyListNearValueFilter(const char* pchKeyToMatch, + int nValueToBeCloseTo); + virtual void AddRequestLobbyListFilterSlotsAvailable(int nSlotsAvailable); + virtual void AddRequestLobbyListDistanceFilter(int eLobbyDistanceFilter); + virtual void AddRequestLobbyListResultCountFilter(int cMaxResults); + virtual steam_id GetLobbyByIndex(int iLobby); + virtual unsigned __int64 CreateLobby(int eLobbyType, int cMaxMembers); + virtual unsigned __int64 JoinLobby(steam_id steamIDLobby); + virtual void LeaveLobby(steam_id steamIDLobby); + virtual bool InviteUserToLobby(steam_id steamIDLobby, + steam_id steamIDInvitee); + virtual int GetNumLobbyMembers(steam_id steamIDLobby); + virtual steam_id GetLobbyMemberByIndex(steam_id steamIDLobby, int iMember); + virtual const char* GetLobbyData(steam_id steamIDLobby, const char* pchKey); + virtual bool SetLobbyData(steam_id steamIDLobby, const char* pchKey, + const char* pchValue); + virtual int GetLobbyDataCount(steam_id steamIDLobby); + virtual bool GetLobbyDataByIndex(steam_id steamIDLobby, int iLobbyData, + char* pchKey, int cchKeyBufferSize, + char* pchValue, int cchValueBufferSize); + virtual bool DeleteLobbyData(steam_id steamIDLobby, const char* pchKey); + virtual const char* GetLobbyMemberData(steam_id steamIDLobby, + steam_id steamIDUser, + const char* pchKey); + virtual void SetLobbyMemberData(steam_id steamIDLobby, const char* pchKey, + const char* pchValue); + virtual bool SendLobbyChatMsg(steam_id steamIDLobby, const void* pvMsgBody, + int cubMsgBody); + virtual int GetLobbyChatEntry(steam_id steamIDLobby, int iChatID, + steam_id* pSteamIDUser, void* pvData, + int cubData, int* peChatEntryType); + virtual bool RequestLobbyData(steam_id steamIDLobby); + virtual void SetLobbyGameServer(steam_id steamIDLobby, + unsigned int unGameServerIP, + unsigned short unGameServerPort, + steam_id steamIDGameServer); + virtual bool GetLobbyGameServer(steam_id steamIDLobby, + unsigned int* punGameServerIP, + unsigned short* punGameServerPort, + steam_id* psteamIDGameServer); + virtual bool SetLobbyMemberLimit(steam_id steamIDLobby, int cMaxMembers); + virtual int GetLobbyMemberLimit(steam_id steamIDLobby); + virtual bool SetLobbyType(steam_id steamIDLobby, int eLobbyType); + virtual bool SetLobbyJoinable(steam_id steamIDLobby, bool bLobbyJoinable); + virtual steam_id GetLobbyOwner(steam_id steamIDLobby); + virtual bool SetLobbyOwner(steam_id steamIDLobby, steam_id steamIDNewOwner); +}; +} // namespace steam diff --git a/src/client/steam/interfaces/matchmaking_servers.cpp b/src/client/steam/interfaces/matchmaking_servers.cpp new file mode 100644 index 0000000..cf589bc --- /dev/null +++ b/src/client/steam/interfaces/matchmaking_servers.cpp @@ -0,0 +1,72 @@ +#include +#include "steam/steam.hpp" + +namespace steam { +void* matchmaking_servers::RequestInternetServerList( + unsigned int iApp, void** ppchFilters, unsigned int nFilters, + void* pRequestServersResponse) { + return nullptr; +} + +void* matchmaking_servers::RequestLANServerList(unsigned int iApp, + void* pRequestServersResponse) { + return nullptr; +} + +void* matchmaking_servers::RequestFriendsServerList( + unsigned int iApp, void** ppchFilters, unsigned int nFilters, + void* pRequestServersResponse) { + return nullptr; +} + +void* matchmaking_servers::RequestFavoritesServerList( + unsigned int iApp, void** ppchFilters, unsigned int nFilters, + void* pRequestServersResponse) { + return nullptr; +} + +void* matchmaking_servers::RequestHistoryServerList( + unsigned int iApp, void** ppchFilters, unsigned int nFilters, + void* pRequestServersResponse) { + return nullptr; +} + +void* matchmaking_servers::RequestSpectatorServerList( + unsigned int iApp, void** ppchFilters, unsigned int nFilters, + void* pRequestServersResponse) { + return nullptr; +} + +void matchmaking_servers::ReleaseRequest(void* hServerListRequest) {} + +void* matchmaking_servers::GetServerDetails(void* hRequest, int iServer) { + return nullptr; +} + +void matchmaking_servers::CancelQuery(void* hRequest) {} + +void matchmaking_servers::RefreshQuery(void* hRequest) {} + +bool matchmaking_servers::IsRefreshing(void* hRequest) { return false; } + +int matchmaking_servers::GetServerCount(void* hRequest) { return 0; } + +void matchmaking_servers::RefreshServer(void* hRequest, int iServer) {} + +int matchmaking_servers::PingServer(unsigned int unIP, unsigned short usPort, + void* pRequestServersResponse) { + return 0; +} + +int matchmaking_servers::PlayerDetails(unsigned int unIP, unsigned short usPort, + void* pRequestServersResponse) { + return 0; +} + +int matchmaking_servers::ServerRules(unsigned int unIP, unsigned short usPort, + void* pRequestServersResponse) { + return 0; +} + +void matchmaking_servers::CancelServerQuery(int hServerQuery) {} +} // namespace steam diff --git a/src/client/steam/interfaces/matchmaking_servers.hpp b/src/client/steam/interfaces/matchmaking_servers.hpp new file mode 100644 index 0000000..c72a2b6 --- /dev/null +++ b/src/client/steam/interfaces/matchmaking_servers.hpp @@ -0,0 +1,43 @@ +#pragma once + +namespace steam { +class matchmaking_servers { +protected: + ~matchmaking_servers() = default; + +public: + virtual void* RequestInternetServerList(unsigned int iApp, void** ppchFilters, + unsigned int nFilters, + void* pRequestServersResponse); + virtual void* RequestLANServerList(unsigned int iApp, + void* pRequestServersResponse); + virtual void* RequestFriendsServerList(unsigned int iApp, void** ppchFilters, + unsigned int nFilters, + void* pRequestServersResponse); + virtual void* RequestFavoritesServerList(unsigned int iApp, + void** ppchFilters, + unsigned int nFilters, + void* pRequestServersResponse); + virtual void* RequestHistoryServerList(unsigned int iApp, void** ppchFilters, + unsigned int nFilters, + void* pRequestServersResponse); + virtual void* RequestSpectatorServerList(unsigned int iApp, + void** ppchFilters, + unsigned int nFilters, + void* pRequestServersResponse); + virtual void ReleaseRequest(void* hServerListRequest); + virtual void* GetServerDetails(void* hRequest, int iServer); + virtual void CancelQuery(void* hRequest); + virtual void RefreshQuery(void* hRequest); + virtual bool IsRefreshing(void* hRequest); + virtual int GetServerCount(void* hRequest); + virtual void RefreshServer(void* hRequest, int iServer); + virtual int PingServer(unsigned int unIP, unsigned short usPort, + void* pRequestServersResponse); + virtual int PlayerDetails(unsigned int unIP, unsigned short usPort, + void* pRequestServersResponse); + virtual int ServerRules(unsigned int unIP, unsigned short usPort, + void* pRequestServersResponse); + virtual void CancelServerQuery(int hServerQuery); +}; +} // namespace steam diff --git a/src/client/steam/interfaces/networking.cpp b/src/client/steam/interfaces/networking.cpp new file mode 100644 index 0000000..9237dd8 --- /dev/null +++ b/src/client/steam/interfaces/networking.cpp @@ -0,0 +1,112 @@ +#include +#include "steam/steam.hpp" + +namespace steam { +bool networking::SendP2PPacket(steam_id steamIDRemote, const void* pubData, + unsigned int cubData, int eP2PSendType) { + return false; +} + +bool networking::IsP2PPacketAvailable(unsigned int* pcubMsgSize, int idk) { + return false; +} + +bool networking::ReadP2PPacket(void* pubDest, unsigned int cubDest, + unsigned int* pcubMsgSize, + steam_id* psteamIDRemote) { + return false; +} + +bool networking::AcceptP2PSessionWithUser(steam_id steamIDRemote) { + return false; +} + +bool networking::CloseP2PSessionWithUser(steam_id steamIDRemote) { + return false; +} + +bool networking::CloseP2PChannelWithUser(steam_id steamIDRemote, + int iVirtualPort) { + return false; +} + +bool networking::GetP2PSessionState(steam_id steamIDRemote, + void* pConnectionState) { + return false; +} + +bool networking::AllowP2PPacketRelay(bool bAllow) { return false; } + +unsigned int networking::CreateListenSocket(int nVirtualP2PPort, + unsigned int nIP, + unsigned short nPort, + bool bAllowUseOfPacketRelay) { + return NULL; +} + +unsigned int +networking::CreateP2PConnectionSocket(steam_id steamIDTarget, int nVirtualPort, + int nTimeoutSec, + bool bAllowUseOfPacketRelay) { + return NULL; +} + +unsigned int networking::CreateConnectionSocket(unsigned int nIP, + unsigned short nPort, + int nTimeoutSec) { + return NULL; +} + +bool networking::DestroySocket(unsigned int hSocket, bool bNotifyRemoteEnd) { + return false; +} + +bool networking::DestroyListenSocket(unsigned int hSocket, + bool bNotifyRemoteEnd) { + return false; +} + +bool networking::SendDataOnSocket(unsigned int hSocket, void* pubData, + unsigned int cubData, bool bReliable) { + return false; +} + +bool networking::IsDataAvailableOnSocket(unsigned int hSocket, + unsigned int* pcubMsgSize) { + return false; +} + +bool networking::RetrieveDataFromSocket(unsigned int hSocket, void* pubDest, + unsigned int cubDest, + unsigned int* pcubMsgSize) { + return false; +} + +bool networking::IsDataAvailable(unsigned int hListenSocket, + unsigned int* pcubMsgSize, + unsigned int* phSocket) { + return false; +} + +bool networking::RetrieveData(unsigned int hListenSocket, void* pubDest, + unsigned int cubDest, unsigned int* pcubMsgSize, + unsigned int* phSocket) { + return false; +} + +bool networking::GetSocketInfo(unsigned int hSocket, steam_id* pSteamIDRemote, + int* peSocketStatus, unsigned int* punIPRemote, + unsigned short* punPortRemote) { + return false; +} + +bool networking::GetListenSocketInfo(unsigned int hListenSocket, + unsigned int* pnIP, + unsigned short* pnPort) { + return false; +} + +int networking::GetSocketConnectionType(unsigned int hSocket) { return 0; } + +int networking::GetMaxPacketSize(unsigned int hSocket) { return 0; } +} // namespace steam diff --git a/src/client/steam/interfaces/networking.hpp b/src/client/steam/interfaces/networking.hpp new file mode 100644 index 0000000..b6a1f57 --- /dev/null +++ b/src/client/steam/interfaces/networking.hpp @@ -0,0 +1,55 @@ +#pragma once + +namespace steam { +class networking { +protected: + ~networking() = default; + +public: + virtual bool SendP2PPacket(steam_id steamIDRemote, const void* pubData, + unsigned int cubData, int eP2PSendType); + virtual bool IsP2PPacketAvailable(unsigned int* pcubMsgSize, int idk); + virtual bool ReadP2PPacket(void* pubDest, unsigned int cubDest, + unsigned int* pcubMsgSize, + steam_id* psteamIDRemote); + virtual bool AcceptP2PSessionWithUser(steam_id steamIDRemote); + virtual bool CloseP2PSessionWithUser(steam_id steamIDRemote); + virtual bool CloseP2PChannelWithUser(steam_id steamIDRemote, + int iVirtualPort); + virtual bool GetP2PSessionState(steam_id steamIDRemote, + void* pConnectionState); + virtual bool AllowP2PPacketRelay(bool bAllow); + virtual unsigned int CreateListenSocket(int nVirtualP2PPort, unsigned int nIP, + unsigned short nPort, + bool bAllowUseOfPacketRelay); + virtual unsigned int CreateP2PConnectionSocket(steam_id steamIDTarget, + int nVirtualPort, + int nTimeoutSec, + bool bAllowUseOfPacketRelay); + virtual unsigned int CreateConnectionSocket(unsigned int nIP, + unsigned short nPort, + int nTimeoutSec); + virtual bool DestroySocket(unsigned int hSocket, bool bNotifyRemoteEnd); + virtual bool DestroyListenSocket(unsigned int hSocket, bool bNotifyRemoteEnd); + virtual bool SendDataOnSocket(unsigned int hSocket, void* pubData, + unsigned int cubData, bool bReliable); + virtual bool IsDataAvailableOnSocket(unsigned int hSocket, + unsigned int* pcubMsgSize); + virtual bool RetrieveDataFromSocket(unsigned int hSocket, void* pubDest, + unsigned int cubDest, + unsigned int* pcubMsgSize); + virtual bool IsDataAvailable(unsigned int hListenSocket, + unsigned int* pcubMsgSize, + unsigned int* phSocket); + virtual bool RetrieveData(unsigned int hListenSocket, void* pubDest, + unsigned int cubDest, unsigned int* pcubMsgSize, + unsigned int* phSocket); + virtual bool GetSocketInfo(unsigned int hSocket, steam_id* pSteamIDRemote, + int* peSocketStatus, unsigned int* punIPRemote, + unsigned short* punPortRemote); + virtual bool GetListenSocketInfo(unsigned int hListenSocket, + unsigned int* pnIP, unsigned short* pnPort); + virtual int GetSocketConnectionType(unsigned int hSocket); + virtual int GetMaxPacketSize(unsigned int hSocket); +}; +} // namespace steam diff --git a/src/client/steam/interfaces/remote_storage.cpp b/src/client/steam/interfaces/remote_storage.cpp new file mode 100644 index 0000000..33b3a69 --- /dev/null +++ b/src/client/steam/interfaces/remote_storage.cpp @@ -0,0 +1,33 @@ +#include +#include "steam/steam.hpp" + +namespace steam { +bool remote_storage::FileWrite(const char* pchFile, const void* pvData, + int cubData) { + return true; +} + +int remote_storage::GetFileSize(const char* pchFile) { return 0; } + +int remote_storage::FileRead(const char* pchFile, void* pvData, + int cubDataToRead) { + OutputDebugStringA(pchFile); + return 0; +} + +bool remote_storage::FileExists(const char* pchFile) { return false; } + +int remote_storage::GetFileCount() { return 0; } + +const char* remote_storage::GetFileNameAndSize(int iFile, + int* pnFileSizeInBytes) { + *pnFileSizeInBytes = 0; + return ""; +} + +bool remote_storage::GetQuota(int* pnTotalBytes, int* puAvailableBytes) { + *pnTotalBytes = 0x10000000; + *puAvailableBytes = 0x10000000; + return false; +} +} // namespace steam diff --git a/src/client/steam/interfaces/remote_storage.hpp b/src/client/steam/interfaces/remote_storage.hpp new file mode 100644 index 0000000..d63ea69 --- /dev/null +++ b/src/client/steam/interfaces/remote_storage.hpp @@ -0,0 +1,17 @@ +#pragma once + +namespace steam { +class remote_storage { +protected: + ~remote_storage() = default; + +public: + virtual bool FileWrite(const char* pchFile, const void* pvData, int cubData); + virtual int GetFileSize(const char* pchFile); + virtual int FileRead(const char* pchFile, void* pvData, int cubDataToRead); + virtual bool FileExists(const char* pchFile); + virtual int GetFileCount(); + virtual const char* GetFileNameAndSize(int iFile, int* pnFileSizeInBytes); + virtual bool GetQuota(int* pnTotalBytes, int* puAvailableBytes); +}; +} // namespace steam diff --git a/src/client/steam/interfaces/user.cpp b/src/client/steam/interfaces/user.cpp new file mode 100644 index 0000000..fe2c63b --- /dev/null +++ b/src/client/steam/interfaces/user.cpp @@ -0,0 +1,126 @@ +#include +#include "steam/steam.hpp" + +#include "component/auth.hpp" + +namespace steam { +namespace { +std::string auth_ticket; +} // namespace + +int user::GetHSteamUser() { return NULL; } + +bool user::LoggedOn() { return true; } + +steam_id user::GetSteamID() { + static std::uint64_t seed = 0; + if (!seed) { + seed = auth::get_guid(); + } + + steam_id id; + id.bits = seed; + return id; +} + +int user::InitiateGameConnection(void* pAuthBlob, int cbMaxAuthBlob, + steam_id steamIDGameServer, + unsigned int unIPServer, + unsigned short usPortServer, bool bSecure) { + return 0; +} + +void user::TerminateGameConnection(unsigned int unIPServer, + unsigned short usPortServer) {} + +void user::TrackAppUsageEvent(steam_id gameID, int eAppUsageEvent, + const char* pchExtraInfo) {} + +bool user::GetUserDataFolder(char* pchBuffer, int cubBuffer) { return false; } + +void user::StartVoiceRecording() {} + +void user::StopVoiceRecording() {} + +int user::GetAvailableVoice(unsigned int* pcbCompressed, + unsigned int* pcbUncompressed, + unsigned int nUncompressedVoiceDesiredSampleRate) { + return 0; +} + +int user::GetVoice(bool bWantCompressed, void* pDestBuffer, + unsigned int cbDestBufferSize, unsigned int* nBytesWritten, + bool bWantUncompressed, void* pUncompressedDestBuffer, + unsigned int cbUncompressedDestBufferSize, + unsigned int* nUncompressBytesWritten, + unsigned int nUncompressedVoiceDesiredSampleRate) { + return 0; +} + +int user::DecompressVoice(void* pCompressed, unsigned int cbCompressed, + void* pDestBuffer, unsigned int cbDestBufferSize, + unsigned int* nBytesWritten) { + return 0; +} + +unsigned int user::GetVoiceOptimalSampleRate() { return 0; } + +unsigned int user::GetAuthSessionTicket(void* pTicket, int cbMaxTicket, + unsigned int* pcbTicket) { + return 0; +} + +int user::BeginAuthSession(const void* pAuthTicket, int cbAuthTicket, + steam_id steamID) { + return 0; +} + +void user::EndAuthSession(steam_id steamID) {} + +void user::CancelAuthTicket(unsigned int hAuthTicket) {} + +unsigned int user::UserHasLicenseForApp(steam_id steamID, unsigned int appID) { + return 0; +} + +bool user::BIsBehindNAT() { return false; } + +void user::AdvertiseGame(steam_id steamIDGameServer, unsigned int unIPServer, + unsigned short usPortServer) {} + +unsigned __int64 user::RequestEncryptedAppTicket(void* pUserData, + int cbUserData) { + // Generate the authentication ticket + const auto id = this->GetSteamID(); + + auth_ticket = "iw4-sp"; + auth_ticket.resize(32); + auth_ticket.append(static_cast(pUserData), cbUserData); + auth_ticket.append(reinterpret_cast(&id.bits), sizeof(id.bits)); + + // Create the call response + const auto result = callbacks::register_call(); + auto retvals = static_cast( + calloc(1, sizeof(encrypted_app_ticket_response))); + retvals->m_e_result = 1; + + // Return the call response + callbacks::return_call(retvals, sizeof(encrypted_app_ticket_response), + encrypted_app_ticket_response::callback_id, result); + + return result; +} + +bool user::GetEncryptedAppTicket(void* pTicket, int cbMaxTicket, + unsigned int* pcbTicket) { + if (cbMaxTicket < 0 || auth_ticket.empty()) + return false; + + const auto size = + std::min(static_cast(cbMaxTicket), auth_ticket.size()); + std::memcpy(pTicket, auth_ticket.data(), size); + *pcbTicket = size; + + return true; +} +} // namespace steam diff --git a/src/client/steam/interfaces/user.hpp b/src/client/steam/interfaces/user.hpp new file mode 100644 index 0000000..8337558 --- /dev/null +++ b/src/client/steam/interfaces/user.hpp @@ -0,0 +1,61 @@ +#pragma once + +namespace steam { +struct encrypted_app_ticket_response final { + enum { callback_id = 154 }; + + int m_e_result; +}; + +class user { +protected: + ~user() = default; + +public: + virtual int GetHSteamUser(); + virtual bool LoggedOn(); + virtual steam_id GetSteamID(); + + virtual int InitiateGameConnection(void* pAuthBlob, int cbMaxAuthBlob, + steam_id steamIDGameServer, + unsigned int unIPServer, + unsigned short usPortServer, bool bSecure); + virtual void TerminateGameConnection(unsigned int unIPServer, + unsigned short usPortServer); + virtual void TrackAppUsageEvent(steam_id gameID, int eAppUsageEvent, + const char* pchExtraInfo = ""); + virtual bool GetUserDataFolder(char* pchBuffer, int cubBuffer); + virtual void StartVoiceRecording(); + virtual void StopVoiceRecording(); + virtual int + GetAvailableVoice(unsigned int* pcbCompressed, unsigned int* pcbUncompressed, + unsigned int nUncompressedVoiceDesiredSampleRate); + virtual int GetVoice(bool bWantCompressed, void* pDestBuffer, + unsigned int cbDestBufferSize, + unsigned int* nBytesWritten, bool bWantUncompressed, + void* pUncompressedDestBuffer, + unsigned int cbUncompressedDestBufferSize, + unsigned int* nUncompressBytesWritten, + unsigned int nUncompressedVoiceDesiredSampleRate); + virtual int DecompressVoice(void* pCompressed, unsigned int cbCompressed, + void* pDestBuffer, unsigned int cbDestBufferSize, + unsigned int* nBytesWritten); + virtual unsigned int GetVoiceOptimalSampleRate(); + virtual unsigned int GetAuthSessionTicket(void* pTicket, int cbMaxTicket, + unsigned int* pcbTicket); + virtual int BeginAuthSession(const void* pAuthTicket, int cbAuthTicket, + steam_id steamID); + virtual void EndAuthSession(steam_id steamID); + virtual void CancelAuthTicket(unsigned int hAuthTicket); + virtual unsigned int UserHasLicenseForApp(steam_id steamID, + unsigned int appID); + virtual bool BIsBehindNAT(); + virtual void AdvertiseGame(steam_id steamIDGameServer, + unsigned int unIPServer, + unsigned short usPortServer); + virtual unsigned __int64 RequestEncryptedAppTicket(void* pUserData, + int cbUserData); + virtual bool GetEncryptedAppTicket(void* pTicket, int cbMaxTicket, + unsigned int* pcbTicket); +}; +} // namespace steam diff --git a/src/client/steam/interfaces/user_stats.cpp b/src/client/steam/interfaces/user_stats.cpp new file mode 100644 index 0000000..8f80122 --- /dev/null +++ b/src/client/steam/interfaces/user_stats.cpp @@ -0,0 +1,178 @@ +#include +#include "steam/steam.hpp" + +namespace steam { +bool user_stats::RequestCurrentStats() { return true; } + +bool user_stats::GetStat(const char* pchName, int* pData) { return false; } + +bool user_stats::GetStat(const char* pchName, float* pData) { return false; } + +bool user_stats::SetStat(const char* pchName, int nData) { return false; } + +bool user_stats::SetStat(const char* pchName, float fData) { return false; } + +bool user_stats::UpdateAvgRateStat(const char* pchName, + float flCountThisSession, + double dSessionLength) { + return false; +} + +bool user_stats::GetAchievement(const char* pchName, bool* pbAchieved) { + return false; +} + +bool user_stats::SetAchievement(const char* pchName) { return false; } + +bool user_stats::ClearAchievement(const char* pchName) { return false; } + +bool user_stats::GetAchievementAndUnlockTime(const char* pchName, + bool* pbAchieved, + unsigned int* punUnlockTime) { + return false; +} + +bool user_stats::StoreStats() { return false; } + +int user_stats::GetAchievementIcon(const char* pchName) { return 0; } + +const char* user_stats::GetAchievementDisplayAttribute(const char* pchName, + const char* pchKey) { + return ""; +} + +bool user_stats::IndicateAchievementProgress(const char* pchName, + unsigned int nCurProgress, + unsigned int nMaxProgress) { + return false; +} + +unsigned __int64 user_stats::RequestUserStats(steam_id steamIDUser) { + return 0; +} + +bool user_stats::GetUserStat(steam_id steamIDUser, const char* pchName, + int* pData) { + return false; +} + +bool user_stats::GetUserStat(steam_id steamIDUser, const char* pchName, + float* pData) { + return false; +} + +bool user_stats::GetUserAchievement(steam_id steamIDUser, const char* pchName, + bool* pbAchieved) { + return false; +} + +bool user_stats::GetUserAchievementAndUnlockTime(steam_id steamIDUser, + const char* pchName, + bool* pbAchieved, + unsigned int* punUnlockTime) { + return false; +} + +bool user_stats::ResetAllStats(bool bAchievementsToo) { return false; } + +unsigned __int64 +user_stats::FindOrCreateLeaderboard(const char* pchLeaderboardName, + int eLeaderboardSortMethod, + int eLeaderboardDisplayType) { + return 0; +} + +unsigned __int64 user_stats::FindLeaderboard(const char* pchLeaderboardName) { + return 0; +} + +const char* user_stats::GetLeaderboardName(unsigned __int64 hSteamLeaderboard) { + return ""; +} + +int user_stats::GetLeaderboardEntryCount(unsigned __int64 hSteamLeaderboard) { + return 0; +} + +int user_stats::GetLeaderboardSortMethod(unsigned __int64 hSteamLeaderboard) { + return 0; +} + +int user_stats::GetLeaderboardDisplayType(unsigned __int64 hSteamLeaderboard) { + return 0; +} + +unsigned __int64 +user_stats::DownloadLeaderboardEntries(unsigned __int64 hSteamLeaderboard, + int eLeaderboardDataRequest, + int nRangeStart, int nRangeEnd) { + return 0; +} + +unsigned __int64 user_stats::DownloadLeaderboardEntriesForUsers( + unsigned __int64 hSteamLeaderboard, steam_id* prgUsers, int cUsers) { + return 0; +} + +bool user_stats::GetDownloadedLeaderboardEntry( + unsigned __int64 hSteamLeaderboardEntries, int index, + int* pLeaderboardEntry, int* pDetails, int cDetailsMax) { + return false; +} + +unsigned __int64 user_stats::UploadLeaderboardScore( + unsigned __int64 hSteamLeaderboard, int eLeaderboardUploadScoreMethod, + int nScore, const int* pScoreDetails, int cScoreDetailsCount) { + return 0; +} + +unsigned __int64 +user_stats::AttachLeaderboardUGC(unsigned __int64 hSteamLeaderboard, + unsigned __int64 hUGC) { + return 0; +} + +unsigned __int64 user_stats::GetNumberOfCurrentPlayers() { return 0; } + +unsigned __int64 user_stats::RequestGlobalAchievementPercentages() { return 0; } + +int user_stats::GetMostAchievedAchievementInfo(char* pchName, + unsigned int unNameBufLen, + float* pflPercent, + bool* pbAchieved) { + return 0; +} + +int user_stats::GetNextMostAchievedAchievementInfo(int iIteratorPrevious, + char* pchName, + unsigned int unNameBufLen, + float* pflPercent, + bool* pbAchieved) { + return 0; +} + +bool user_stats::GetAchievementAchievedPercent(const char* pchName, + float* pflPercent) { + return false; +} + +unsigned __int64 user_stats::RequestGlobalStats(int nHistoryDays) { return 0; } + +bool user_stats::GetGlobalStat(const char* pchStatName, __int64* pData) { + return false; +} + +bool user_stats::GetGlobalStat(const char* pchStatName, double* pData) { + return false; +} + +int user_stats::GetGlobalStatHistory(const char* pchStatName, __int64* pData, + unsigned int cubData) { + return 0; +} + +int user_stats::GetGlobalStatHistory(const char* pchStatName, double* pData, + unsigned int cubData) { + return 0; +} +} // namespace steam diff --git a/src/client/steam/interfaces/user_stats.hpp b/src/client/steam/interfaces/user_stats.hpp new file mode 100644 index 0000000..7987fd9 --- /dev/null +++ b/src/client/steam/interfaces/user_stats.hpp @@ -0,0 +1,89 @@ +#pragma once + +namespace steam { +class user_stats { +protected: + ~user_stats() = default; + +public: + virtual bool RequestCurrentStats(); + virtual bool GetStat(const char* pchName, int* pData); + virtual bool GetStat(const char* pchName, float* pData); + virtual bool SetStat(const char* pchName, int nData); + virtual bool SetStat(const char* pchName, float fData); + virtual bool UpdateAvgRateStat(const char* pchName, float flCountThisSession, + double dSessionLength); + virtual bool GetAchievement(const char* pchName, bool* pbAchieved); + virtual bool SetAchievement(const char* pchName); + virtual bool ClearAchievement(const char* pchName); + virtual bool GetAchievementAndUnlockTime(const char* pchName, + bool* pbAchieved, + unsigned int* punUnlockTime); + virtual bool StoreStats(); + virtual int GetAchievementIcon(const char* pchName); + virtual const char* GetAchievementDisplayAttribute(const char* pchName, + const char* pchKey); + virtual bool IndicateAchievementProgress(const char* pchName, + unsigned int nCurProgress, + unsigned int nMaxProgress); + virtual unsigned __int64 RequestUserStats(steam_id steamIDUser); + virtual bool GetUserStat(steam_id steamIDUser, const char* pchName, + int* pData); + virtual bool GetUserStat(steam_id steamIDUser, const char* pchName, + float* pData); + virtual bool GetUserAchievement(steam_id steamIDUser, const char* pchName, + bool* pbAchieved); + virtual bool GetUserAchievementAndUnlockTime(steam_id steamIDUser, + const char* pchName, + bool* pbAchieved, + unsigned int* punUnlockTime); + virtual bool ResetAllStats(bool bAchievementsToo); + virtual unsigned __int64 + FindOrCreateLeaderboard(const char* pchLeaderboardName, + int eLeaderboardSortMethod, + int eLeaderboardDisplayType); + virtual unsigned __int64 FindLeaderboard(const char* pchLeaderboardName); + virtual const char* GetLeaderboardName(unsigned __int64 hSteamLeaderboard); + virtual int GetLeaderboardEntryCount(unsigned __int64 hSteamLeaderboard); + virtual int GetLeaderboardSortMethod(unsigned __int64 hSteamLeaderboard); + virtual int GetLeaderboardDisplayType(unsigned __int64 hSteamLeaderboard); + virtual unsigned __int64 + DownloadLeaderboardEntries(unsigned __int64 hSteamLeaderboard, + int eLeaderboardDataRequest, int nRangeStart, + int nRangeEnd); + virtual unsigned __int64 + DownloadLeaderboardEntriesForUsers(unsigned __int64 hSteamLeaderboard, + steam_id* prgUsers, int cUsers); + virtual bool + GetDownloadedLeaderboardEntry(unsigned __int64 hSteamLeaderboardEntries, + int index, int* pLeaderboardEntry, + int* pDetails, int cDetailsMax); + virtual unsigned __int64 + UploadLeaderboardScore(unsigned __int64 hSteamLeaderboard, + int eLeaderboardUploadScoreMethod, int nScore, + const int* pScoreDetails, int cScoreDetailsCount); + virtual unsigned __int64 + AttachLeaderboardUGC(unsigned __int64 hSteamLeaderboard, + unsigned __int64 hUGC); + virtual unsigned __int64 GetNumberOfCurrentPlayers(); + virtual unsigned __int64 RequestGlobalAchievementPercentages(); + virtual int GetMostAchievedAchievementInfo(char* pchName, + unsigned int unNameBufLen, + float* pflPercent, + bool* pbAchieved); + virtual int GetNextMostAchievedAchievementInfo(int iIteratorPrevious, + char* pchName, + unsigned int unNameBufLen, + float* pflPercent, + bool* pbAchieved); + virtual bool GetAchievementAchievedPercent(const char* pchName, + float* pflPercent); + virtual unsigned __int64 RequestGlobalStats(int nHistoryDays); + virtual bool GetGlobalStat(const char* pchStatName, __int64* pData); + virtual bool GetGlobalStat(const char* pchStatName, double* pData); + virtual int GetGlobalStatHistory(const char* pchStatName, __int64* pData, + unsigned int cubData); + virtual int GetGlobalStatHistory(const char* pchStatName, double* pData, + unsigned int cubData); +}; +} // namespace steam diff --git a/src/client/steam/interfaces/utils.cpp b/src/client/steam/interfaces/utils.cpp new file mode 100644 index 0000000..307d5ed --- /dev/null +++ b/src/client/steam/interfaces/utils.cpp @@ -0,0 +1,65 @@ +#include +#include "steam/steam.hpp" + +namespace steam { +unsigned int utils::GetSecondsSinceAppActive() { return 0; } + +unsigned int utils::GetSecondsSinceComputerActive() { return 0; } + +int utils::GetConnectedUniverse() { return 1; } + +unsigned int utils::GetServerRealTime() { return 0; } + +const char* utils::GetIPCountry() { return "US"; } + +bool utils::GetImageSize(int iImage, unsigned int* pnWidth, + unsigned int* pnHeight) { + return false; +} + +bool utils::GetImageRGBA(int iImage, unsigned char* pubDest, + int nDestBufferSize) { + return false; +} + +bool utils::GetCSERIPPort(unsigned int* unIP, unsigned short* usPort) { + return false; +} + +unsigned char utils::GetCurrentBatteryPower() { return 255; } + +unsigned int utils::GetAppID() { return 10180; } + +void utils::SetOverlayNotificationPosition(int eNotificationPosition) { + if (overlay) { + overlay.invoke("SetNotificationPosition", eNotificationPosition); + } +} + +bool utils::IsAPICallCompleted(unsigned __int64 hSteamAPICall, bool* pbFailed) { + return false; +} + +int utils::GetAPICallFailureReason(unsigned __int64 hSteamAPICall) { + return -1; +} + +bool utils::GetAPICallResult(unsigned __int64 hSteamAPICall, void* pCallback, + int cubCallback, int iCallbackExpected, + bool* pbFailed) { + return false; +} + +void utils::RunFrame() {} + +unsigned int utils::GetIPCCallCount() { return 0; } + +void utils::SetWarningMessageHook(void (*pFunction)(int hpipe, + const char* message)) {} + +bool utils::IsOverlayEnabled() { return false; } + +bool utils::BOverlayNeedsPresent() { return false; } + +unsigned __int64 utils::CheckFileSignature(const char* szFileName) { return 0; } +} // namespace steam diff --git a/src/client/steam/interfaces/utils.hpp b/src/client/steam/interfaces/utils.hpp new file mode 100644 index 0000000..7a61b0d --- /dev/null +++ b/src/client/steam/interfaces/utils.hpp @@ -0,0 +1,36 @@ +#pragma once + +namespace steam { +class utils { +protected: + ~utils() = default; + +public: + virtual unsigned int GetSecondsSinceAppActive(); + virtual unsigned int GetSecondsSinceComputerActive(); + virtual int GetConnectedUniverse(); + virtual unsigned int GetServerRealTime(); + virtual const char* GetIPCountry(); + virtual bool GetImageSize(int iImage, unsigned int* pnWidth, + unsigned int* pnHeight); + virtual bool GetImageRGBA(int iImage, unsigned char* pubDest, + int nDestBufferSize); + virtual bool GetCSERIPPort(unsigned int* unIP, unsigned short* usPort); + virtual unsigned char GetCurrentBatteryPower(); + virtual unsigned int GetAppID(); + virtual void SetOverlayNotificationPosition(int eNotificationPosition); + virtual bool IsAPICallCompleted(unsigned __int64 hSteamAPICall, + bool* pbFailed); + virtual int GetAPICallFailureReason(unsigned __int64 hSteamAPICall); + virtual bool GetAPICallResult(unsigned __int64 hSteamAPICall, void* pCallback, + int cubCallback, int iCallbackExpected, + bool* pbFailed); + virtual void RunFrame(); + virtual unsigned int GetIPCCallCount(); + virtual void SetWarningMessageHook(void (*pFunction)(int hpipe, + const char* message)); + virtual bool IsOverlayEnabled(); + virtual bool BOverlayNeedsPresent(); + virtual unsigned __int64 CheckFileSignature(const char* szFileName); +}; +} // namespace steam diff --git a/src/client/steam/steam.cpp b/src/client/steam/steam.cpp new file mode 100644 index 0000000..91cf7ff --- /dev/null +++ b/src/client/steam/steam.cpp @@ -0,0 +1,209 @@ +#include +#include "steam/steam.hpp" + +namespace steam { +::utils::nt::library overlay(nullptr); + +std::uint64_t callbacks::call_id_ = 0; +std::recursive_mutex callbacks::mutex_; +std::map callbacks::calls_; +std::map callbacks::result_handlers_; +std::vector callbacks::results_; +std::vector callbacks::callback_list_; + +uint64_t callbacks::register_call() { + std::lock_guard _(mutex_); + calls_[++call_id_] = false; + return call_id_; +} + +void callbacks::register_callback(base* handler, const int callback) { + std::lock_guard _(mutex_); + handler->set_i_callback(callback); + callback_list_.push_back(handler); +} + +void callbacks::unregister_callback(base* handler) { + std::lock_guard _(mutex_); + for (auto i = callback_list_.begin(); i != callback_list_.end();) { + if (*i == handler) { + i = callback_list_.erase(i); + } else { + ++i; + } + } +} + +void callbacks::register_call_result(const uint64_t call, base* result) { + std::lock_guard _(mutex_); + result_handlers_[call] = result; +} + +void callbacks::unregister_call_result(const uint64_t call, + [[maybe_unused]] base* result) { + std::lock_guard _(mutex_); + const auto i = result_handlers_.find(call); + if (i != result_handlers_.end()) { + result_handlers_.erase(i); + } +} + +void callbacks::return_call(void* data, const int size, const int type, + const uint64_t call) { + std::lock_guard _(mutex_); + + result result; + result.call = call; + result.data = data; + result.size = size; + result.type = type; + + calls_[call] = true; + + results_.push_back(result); +} + +void callbacks::run_callbacks() { + std::lock_guard _(mutex_); + + for (const auto& result : results_) { + if (const auto itr = result_handlers_.find(result.call); + itr != result_handlers_.end()) { + itr->second->run(result.data, false, result.call); + } + + for (const auto& callback : callback_list_) { + if (callback && callback->get_i_callback() == result.type) { + callback->run(result.data, false, 0); + } + } + + if (result.data) { + std::free(result.data); + } + } + + results_.clear(); +} + +std::filesystem::path get_steam_install_directory() { + static std::string install_path{}; + if (!install_path.empty()) { + return {install_path}; + } + + HKEY reg_key; + if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Valve\\Steam", 0, + KEY_QUERY_VALUE, ®_key) == ERROR_SUCCESS) { + char path[MAX_PATH] = {0}; + DWORD length = sizeof(path); + RegQueryValueExA(reg_key, "InstallPath", nullptr, nullptr, + reinterpret_cast(path), &length); + RegCloseKey(reg_key); + + install_path = path; + } + + return {install_path}; +} + +extern "C" { +bool SteamAPI_RestartAppIfNecessary() { return false; } + +bool SteamAPI_Init() { + overlay = ::utils::nt::library("gameoverlayrenderer.dll"); + + if (!overlay) { + const auto steam_path = get_steam_install_directory(); + if (!steam_path.empty()) { + overlay = + ::utils::nt::library::load(steam_path / "gameoverlayrenderer.dll"); + } + } + + return true; +} + +void SteamAPI_RegisterCallResult(callbacks::base* result, uint64_t call) { + callbacks::register_call_result(call, result); +} + +void SteamAPI_RegisterCallback(callbacks::base* handler, int callback) { + callbacks::register_callback(handler, callback); +} + +void SteamAPI_RunCallbacks() { callbacks::run_callbacks(); } + +void SteamAPI_Shutdown() {} + +void SteamAPI_UnregisterCallResult(callbacks::base* result, + const std::uint64_t call) { + callbacks::unregister_call_result(call, result); +} + +void SteamAPI_UnregisterCallback(callbacks::base* handler) { + callbacks::unregister_callback(handler); +} + +bool SteamGameServer_Init() { return true; } + +void SteamGameServer_RunCallbacks() {} + +void SteamGameServer_Shutdown() {} + +friends* SteamFriends() { + static friends friends; + return &friends; +} + +matchmaking* SteamMatchmaking() { + static matchmaking matchmaking; + return &matchmaking; +} + +matchmaking_servers* SteamMatchmakingServers() { + static matchmaking_servers matchmaking_servers; + return &matchmaking_servers; +} + +game_server* SteamGameServer() { + static game_server game_server; + return &game_server; +} + +master_server_updater* SteamMasterServerUpdater() { + static master_server_updater master_server_updater; + return &master_server_updater; +} + +networking* SteamNetworking() { + static networking networking; + return &networking; +} + +remote_storage* SteamRemoteStorage() { + static remote_storage remote_storage; + return &remote_storage; +} + +user* SteamUser() { + static user user; + return &user; +} + +utils* SteamUtils() { + static utils utils; + return &utils; +} + +apps* SteamApps() { + static apps apps; + return &apps; +} + +user_stats* SteamUserStats() { + static user_stats user_stats; + return &user_stats; +} +} +} // namespace steam diff --git a/src/client/steam/steam.hpp b/src/client/steam/steam.hpp new file mode 100644 index 0000000..bcfa179 --- /dev/null +++ b/src/client/steam/steam.hpp @@ -0,0 +1,122 @@ +#pragma once + +#define STEAM_EXPORT extern "C" __declspec(dllexport) +#include + +struct raw_steam_id final { + unsigned int account_id : 32; + unsigned int account_instance : 20; + unsigned int account_type : 4; + int universe : 8; +}; + +typedef union { + raw_steam_id raw; + unsigned long long bits; +} steam_id; + +#pragma pack(push, 1) +struct raw_game_id final { + unsigned int app_id : 24; + unsigned int type : 8; + unsigned int mod_id : 32; +}; + +typedef union { + raw_game_id raw; + unsigned long long bits; +} game_id; +#pragma pack(pop) + +#include "interfaces/apps.hpp" +#include "interfaces/user.hpp" +#include "interfaces/utils.hpp" +#include "interfaces/friends.hpp" +#include "interfaces/user_stats.hpp" +#include "interfaces/game_server.hpp" +#include "interfaces/networking.hpp" +#include "interfaces/matchmaking.hpp" +#include "interfaces/remote_storage.hpp" +#include "interfaces/matchmaking_servers.hpp" +#include "interfaces/master_server_updater.hpp" + +namespace steam { +class callbacks { +public: + class base { + public: + base() : flags_(0), callback_(0) {} + + virtual void run(void* pv_param) = 0; + virtual void run(void* pv_param, bool failure, uint64_t handle) = 0; + virtual int get_callback_size_bytes() = 0; + + [[nodiscard]] int get_i_callback() const { return callback_; } + void set_i_callback(const int i_callback) { callback_ = i_callback; } + + protected: + ~base() = default; + + unsigned char flags_; + int callback_; + }; + + struct result final { + void* data; + int size; + int type; + std::uint64_t call; + }; + + static std::uint64_t register_call(); + + static void register_callback(base* handler, int callback); + static void unregister_callback(base* handler); + + static void register_call_result(std::uint64_t call, base* result); + static void unregister_call_result(std::uint64_t call, base* result); + + static void return_call(void* data, int size, int type, std::uint64_t call); + static void run_callbacks(); + +private: + static std::uint64_t call_id_; + static std::recursive_mutex mutex_; + static std::map calls_; + static std::map result_handlers_; + static std::vector results_; + static std::vector callback_list_; +}; + +STEAM_EXPORT bool SteamAPI_RestartAppIfNecessary(); +STEAM_EXPORT bool SteamAPI_Init(); +STEAM_EXPORT void SteamAPI_RegisterCallResult(callbacks::base* result, + uint64_t call); +STEAM_EXPORT void SteamAPI_RegisterCallback(callbacks::base* handler, + int callback); +STEAM_EXPORT void SteamAPI_RunCallbacks(); +STEAM_EXPORT void SteamAPI_Shutdown(); +STEAM_EXPORT void SteamAPI_UnregisterCallResult(callbacks::base* result, + std::uint64_t call); +STEAM_EXPORT void SteamAPI_UnregisterCallback(callbacks::base* handler); + +STEAM_EXPORT bool SteamGameServer_Init(); +STEAM_EXPORT void SteamGameServer_RunCallbacks(); +STEAM_EXPORT void SteamGameServer_Shutdown(); + +STEAM_EXPORT friends* SteamFriends(); +STEAM_EXPORT matchmaking* SteamMatchmaking(); +STEAM_EXPORT matchmaking_servers* SteamMatchmakingServers(); +STEAM_EXPORT game_server* SteamGameServer(); +STEAM_EXPORT master_server_updater* SteamMasterServerUpdater(); +STEAM_EXPORT networking* SteamNetworking(); +STEAM_EXPORT remote_storage* SteamRemoteStorage(); +STEAM_EXPORT user* SteamUser(); +STEAM_EXPORT utils* SteamUtils(); +STEAM_EXPORT apps* SteamApps(); +STEAM_EXPORT user_stats* SteamUserStats(); + +std::filesystem::path get_steam_install_directory(); + +extern ::utils::nt::library overlay; +} // namespace steam diff --git a/src/common/utils/binary_resource.cpp b/src/common/utils/binary_resource.cpp new file mode 100644 index 0000000..3be37ef --- /dev/null +++ b/src/common/utils/binary_resource.cpp @@ -0,0 +1,64 @@ +#include "binary_resource.hpp" + +#include +#include "nt.hpp" +#include "io.hpp" + +namespace utils { +namespace { +std::string get_temp_folder() { + char path[MAX_PATH] = {0}; + if (!GetTempPathA(sizeof(path), path)) { + throw std::runtime_error("Unable to get temp path"); + } + + return path; +} + +std::string write_exitisting_temp_file(const std::string& file, + const std::string& data, + const bool fatal_if_overwrite_fails) { + const auto temp = get_temp_folder(); + auto file_path = temp + file; + + std::string current_data; + if (!io::read_file(file_path, ¤t_data)) { + if (!io::write_file(file_path, data)) { + throw std::runtime_error("Failed to write file: " + file_path); + } + + return file_path; + } + + if (current_data == data || io::write_file(file_path, data) || + !fatal_if_overwrite_fails) { + return file_path; + } + + throw std::runtime_error("Temporary file was already written, but differs. " + "It can't be overwritten as it's still in use: " + + file_path); +} +} // namespace + +binary_resource::binary_resource(const int id, std::string file) + : filename_(std::move(file)) { + this->resource_ = nt::load_resource(id); + + if (this->resource_.empty()) { + throw std::runtime_error("Unable to load resource: " + std::to_string(id)); + } +} + +std::string +binary_resource::get_extracted_file(const bool fatal_if_overwrite_fails) { + if (this->path_.empty()) { + this->path_ = write_exitisting_temp_file(this->filename_, this->resource_, + fatal_if_overwrite_fails); + } + + return this->path_; +} + +const std::string& binary_resource::get_data() const { return this->resource_; } +} // namespace utils diff --git a/src/common/utils/binary_resource.hpp b/src/common/utils/binary_resource.hpp new file mode 100644 index 0000000..0b221dd --- /dev/null +++ b/src/common/utils/binary_resource.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include + +namespace utils { +class binary_resource { +public: + binary_resource(int id, std::string file); + + std::string get_extracted_file(bool fatal_if_overwrite_fails = false); + const std::string& get_data() const; + +private: + std::string resource_; + std::string filename_; + std::string path_; +}; +} // namespace utils diff --git a/src/common/utils/compression.cpp b/src/common/utils/compression.cpp new file mode 100644 index 0000000..b19335e --- /dev/null +++ b/src/common/utils/compression.cpp @@ -0,0 +1,138 @@ +#include +#include + +#include "memory.hpp" +#include "compression.hpp" + +#include +#include + +#include + +#include "io.hpp" + +namespace utils::compression { +namespace zlib { +namespace { +class zlib_stream { +public: + zlib_stream() { + std::memset(&stream_, 0, sizeof(z_stream)); + valid_ = inflateInit(&stream_) == Z_OK; + } + + ~zlib_stream() { + if (valid_) { + inflateEnd(&stream_); + } + } + + zlib_stream(zlib_stream&&) = delete; + zlib_stream(const zlib_stream&) = delete; + zlib_stream& operator=(zlib_stream&&) = delete; + zlib_stream& operator=(const zlib_stream&) = delete; + + z_stream& get() { return stream_; } + + [[nodiscard]] bool is_valid() const { return valid_; } + +private: + bool valid_{false}; + z_stream stream_{}; +}; +} // namespace + +std::string decompress(const std::string& data) { + std::string buffer; + zlib_stream stream_container; + if (!stream_container.is_valid()) { + return {}; + } + + int ret; + std::size_t offset = 0; + static thread_local std::uint8_t dest[CHUNK] = {0}; + auto& stream = stream_container.get(); + + do { + const auto input_size = std::min(sizeof(dest), data.size() - offset); + stream.avail_in = static_cast(input_size); + stream.next_in = reinterpret_cast(data.data()) + offset; + offset += stream.avail_in; + + do { + stream.avail_out = sizeof(dest); + stream.next_out = dest; + + ret = inflate(&stream, Z_NO_FLUSH); + if (ret != Z_OK && ret != Z_STREAM_END) { + return {}; + } + + buffer.insert(buffer.end(), dest, dest + sizeof(dest) - stream.avail_out); + } while (stream.avail_out == 0); + } while (ret != Z_STREAM_END); + + return buffer; +} + +std::string compress(const std::string& data) { + std::string result; + auto length = compressBound(static_cast(data.size())); + result.resize(length); + + if (compress2(reinterpret_cast(result.data()), &length, + reinterpret_cast(data.data()), + static_cast(data.size()), Z_BEST_COMPRESSION) != Z_OK) { + return {}; + } + + result.resize(length); + return result; +} +} // namespace zlib + +namespace zip { +namespace { +bool add_file(zipFile& zip_file, const std::string& filename, + const std::string& data) { + if (zipOpenNewFileInZip(zip_file, filename.data(), nullptr, nullptr, 0, + nullptr, 0, nullptr, Z_DEFLATED, + Z_BEST_COMPRESSION) != ZIP_OK) { + return false; + } + + const auto _ = gsl::finally([&zip_file]() { zipCloseFileInZip(zip_file); }); + + return ZIP_OK == zipWriteInFileInZip(zip_file, data.data(), data.size()); +} +} // namespace + +void archive::add(std::string filename, std::string data) { + this->files_[std::move(filename)] = std::move(data); +} + +bool archive::write(const std::string& filename, const std::string& comment) { + // Hack to create the directory :3 + io::write_file(filename, {}); + io::remove_file(filename); + + auto* zip_file = zipOpen(filename.data(), 0); + if (zip_file == nullptr) { + return false; + } + + const auto _ = gsl::finally([&zip_file, &comment]() { + zipClose(zip_file, comment.empty() ? nullptr : comment.data()); + }); + + for (const auto& file : this->files_) { + if (!add_file(zip_file, file.first, file.second)) { + return false; + } + } + + return true; +} +} // namespace zip +} // namespace utils::compression diff --git a/src/common/utils/compression.hpp b/src/common/utils/compression.hpp new file mode 100644 index 0000000..f2798c9 --- /dev/null +++ b/src/common/utils/compression.hpp @@ -0,0 +1,21 @@ +#pragma once + +#define CHUNK 16384u + +namespace utils::compression { +namespace zlib { +std::string compress(const std::string& data); +std::string decompress(const std::string& data); +} // namespace zlib + +namespace zip { +class archive { +public: + void add(std::string filename, std::string data); + bool write(const std::string& filename, const std::string& comment = {}); + +private: + std::unordered_map files_; +}; +} // namespace zip +} // namespace utils::compression diff --git a/src/common/utils/concurrency.hpp b/src/common/utils/concurrency.hpp new file mode 100644 index 0000000..cfcb6cc --- /dev/null +++ b/src/common/utils/concurrency.hpp @@ -0,0 +1,36 @@ +#pragma once + +#include + +namespace utils::concurrency { +template class container { +public: + template R access(F&& accessor) const { + std::lock_guard _{mutex_}; + return accessor(object_); + } + + template R access(F&& accessor) { + std::lock_guard _{mutex_}; + return accessor(object_); + } + + template + R access_with_lock(F&& accessor) const { + std::unique_lock lock{mutex_}; + return accessor(object_, lock); + } + + template R access_with_lock(F&& accessor) { + std::unique_lock lock{mutex_}; + return accessor(object_, lock); + } + + T& get_raw() { return object_; } + const T& get_raw() const { return object_; } + +private: + mutable MutexType mutex_{}; + T object_{}; +}; +} // namespace utils::concurrency diff --git a/src/common/utils/cryptography.cpp b/src/common/utils/cryptography.cpp new file mode 100644 index 0000000..c81a9b0 --- /dev/null +++ b/src/common/utils/cryptography.cpp @@ -0,0 +1,556 @@ +#include "string.hpp" +#include "cryptography.hpp" +#include "nt.hpp" + +#include + +#undef max +using namespace std::string_literals; + +/// http://www.opensource.apple.com/source/CommonCrypto/CommonCrypto-55010/Source/libtomcrypt/doc/libTomCryptDoc.pdf + +namespace utils::cryptography { +namespace { +struct __ { + __() { + ltc_mp = ltm_desc; + + register_cipher(&aes_desc); + register_cipher(&des3_desc); + + register_prng(&sprng_desc); + register_prng(&fortuna_desc); + register_prng(&yarrow_desc); + + register_hash(&sha1_desc); + register_hash(&sha256_desc); + register_hash(&sha512_desc); + } +} ___; + +[[maybe_unused]] const char* cs(const std::uint8_t* data) { + return reinterpret_cast(data); +} + +[[maybe_unused]] char* cs(std::uint8_t* data) { + return reinterpret_cast(data); +} + +[[maybe_unused]] const std::uint8_t* cs(const char* data) { + return reinterpret_cast(data); +} + +[[maybe_unused]] std::uint8_t* cs(char* data) { + return reinterpret_cast(data); +} + +[[maybe_unused]] unsigned long ul(const std::size_t value) { + return static_cast(value); +} + +class prng { +public: + prng(const ltc_prng_descriptor& descriptor, const bool autoseed = true) + : state_(std::make_unique()), descriptor_(descriptor) { + this->id_ = register_prng(&descriptor); + if (this->id_ == -1) { + throw std::runtime_error("PRNG "s + this->descriptor_.name + + " could not be registered!"); + } + + if (autoseed) { + this->auto_seed(); + } else { + this->descriptor_.start(this->state_.get()); + } + } + + ~prng() { this->descriptor_.done(this->state_.get()); } + + [[nodiscard]] prng_state* get_state() const { + this->descriptor_.ready(this->state_.get()); + return this->state_.get(); + } + + [[nodiscard]] int get_id() const { return this->id_; } + + void add_entropy(const void* data, const std::size_t length) const { + this->descriptor_.add_entropy(static_cast(data), + ul(length), this->state_.get()); + } + + void read(void* data, const std::size_t length) const { + this->descriptor_.read(static_cast(data), ul(length), + this->get_state()); + } + +private: + int id_; + std::unique_ptr state_; + const ltc_prng_descriptor& descriptor_; + + void auto_seed() const { + rng_make_prng(128, this->id_, this->state_.get(), nullptr); + + int i[4]; // uninitialized data + auto* i_ptr = &i; + this->add_entropy(reinterpret_cast(&i), sizeof(i)); + this->add_entropy(reinterpret_cast(&i_ptr), sizeof(i_ptr)); + + auto t = time(nullptr); + this->add_entropy(reinterpret_cast(&t), sizeof(t)); + } +}; + +const prng prng_(fortuna_desc); +} // namespace + +ecc::key::key() { ZeroMemory(&this->key_storage_, sizeof(this->key_storage_)); } + +ecc::key::~key() { this->free(); } + +ecc::key::key(key&& obj) noexcept : key() { this->operator=(std::move(obj)); } + +ecc::key::key(const key& obj) : key() { this->operator=(obj); } + +ecc::key& ecc::key::operator=(key&& obj) noexcept { + if (this != &obj) { + std::memmove(&this->key_storage_, &obj.key_storage_, + sizeof(this->key_storage_)); + ZeroMemory(&obj.key_storage_, sizeof(obj.key_storage_)); + } + + return *this; +} + +ecc::key& ecc::key::operator=(const key& obj) { + if (this != &obj && obj.is_valid()) { + this->deserialize(obj.serialize(obj.key_storage_.type)); + } + + return *this; +} + +bool ecc::key::operator==(key& key) const { + return (this->is_valid() && key.is_valid() && + this->serialize(PK_PUBLIC) == key.serialize(PK_PUBLIC)); +} + +bool ecc::key::is_valid() const { + return (!memory::is_set(&this->key_storage_, 0, sizeof(this->key_storage_))); +} + +ecc_key& ecc::key::get() { return this->key_storage_; } + +const ecc_key& ecc::key::get() const { return this->key_storage_; } + +std::string ecc::key::get_public_key() const { + std::uint8_t buffer[512]{}; + unsigned long length = sizeof(buffer); + + if (ecc_ansi_x963_export(&this->key_storage_, buffer, &length) == CRYPT_OK) { + return {cs(buffer), length}; + } + + return {}; +} + +void ecc::key::set(const std::string& pub_key_buffer) { + this->free(); + + if (ecc_ansi_x963_import(cs(pub_key_buffer.data()), ul(pub_key_buffer.size()), + &this->key_storage_) != CRYPT_OK) { + ZeroMemory(&this->key_storage_, sizeof(this->key_storage_)); + } +} + +void ecc::key::deserialize(const std::string& key) { + this->free(); + + if (ecc_import(cs(key.data()), ul(key.size()), &this->key_storage_) != + CRYPT_OK) { + ZeroMemory(&this->key_storage_, sizeof(this->key_storage_)); + } +} + +std::string ecc::key::serialize(const int type) const { + std::uint8_t buffer[4096]{}; + unsigned long length = sizeof(buffer); + + if (ecc_export(buffer, &length, type, &this->key_storage_) == CRYPT_OK) { + return {cs(buffer), length}; + } + + return {}; +} + +void ecc::key::free() { + if (this->is_valid()) { + ecc_free(&this->key_storage_); + } + + ZeroMemory(&this->key_storage_, sizeof(this->key_storage_)); +} + +std::uint64_t ecc::key::get_hash() const { + const auto hash = sha1::compute(this->get_public_key()); + if (hash.size() >= 8) { + return *reinterpret_cast(hash.data()); + } + + return 0; +} + +ecc::key ecc::generate_key(const int bits) { + key key; + ecc_make_key(prng_.get_state(), prng_.get_id(), bits / 8, &key.get()); + + return key; +} + +ecc::key ecc::generate_key(const int bits, const std::string& entropy) { + key key{}; + const prng yarrow(yarrow_desc, false); + yarrow.add_entropy(entropy.data(), entropy.size()); + + ecc_make_key(yarrow.get_state(), yarrow.get_id(), bits / 8, &key.get()); + + return key; +} + +std::string ecc::sign_message(const key& key, const std::string& message) { + if (!key.is_valid()) + return {}; + + std::uint8_t buffer[512]; + unsigned long length = sizeof(buffer); + + ecc_sign_hash(cs(message.data()), ul(message.size()), buffer, &length, + prng_.get_state(), prng_.get_id(), &key.get()); + + return {cs(buffer), length}; +} + +bool ecc::verify_message(const key& key, const std::string& message, + const std::string& signature) { + if (!key.is_valid()) + return false; + + auto result = 0; + return (ecc_verify_hash(cs(signature.data()), ul(signature.size()), + cs(message.data()), ul(message.size()), &result, + &key.get()) == CRYPT_OK && + result != 0); +} + +bool ecc::encrypt(const key& key, std::string& data) { + std::string out_data{}; + out_data.resize(std::max(ul(data.size() * 3), ul(0x100))); + + auto out_len = ul(out_data.size()); + auto crypt = [&]() { + return ecc_encrypt_key(cs(data.data()), ul(data.size()), + cs(out_data.data()), &out_len, prng_.get_state(), + prng_.get_id(), find_hash("sha512"), &key.get()); + }; + + auto res = crypt(); + + if (res == CRYPT_BUFFER_OVERFLOW) { + out_data.resize(out_len); + res = crypt(); + } + + if (res != CRYPT_OK) { + return false; + } + + out_data.resize(out_len); + data = std::move(out_data); + return true; +} + +bool ecc::decrypt(const key& key, std::string& data) { + std::string out_data{}; + out_data.resize(std::max(ul(data.size() * 3), ul(0x100))); + + auto out_len = ul(out_data.size()); + auto crypt = [&]() { + return ecc_decrypt_key(cs(data.data()), ul(data.size()), + cs(out_data.data()), &out_len, &key.get()); + }; + + auto res = crypt(); + + if (res == CRYPT_BUFFER_OVERFLOW) { + out_data.resize(out_len); + res = crypt(); + } + + if (res != CRYPT_OK) { + return false; + } + + out_data.resize(out_len); + data = std::move(out_data); + return true; +} + +std::string rsa::encrypt(const std::string& data, const std::string& hash, + const std::string& key) { + rsa_key new_key; + rsa_import(cs(key.data()), ul(key.size()), &new_key); + const auto _ = gsl::finally([&]() { rsa_free(&new_key); }); + + std::string out_data{}; + out_data.resize(std::max(ul(data.size() * 3), ul(0x100))); + + auto out_len = ul(out_data.size()); + auto crypt = [&]() { + return rsa_encrypt_key(cs(data.data()), ul(data.size()), + cs(out_data.data()), &out_len, cs(hash.data()), + ul(hash.size()), prng_.get_state(), prng_.get_id(), + find_hash("sha512"), &new_key); + }; + + auto res = crypt(); + + if (res == CRYPT_BUFFER_OVERFLOW) { + out_data.resize(out_len); + res = crypt(); + } + + if (res == CRYPT_OK) { + out_data.resize(out_len); + return out_data; + } + + return {}; +} + +std::string des3::encrypt(const std::string& data, const std::string& iv, + const std::string& key) { + std::string enc_data; + enc_data.resize(data.size()); + + symmetric_CBC cbc; + const auto des3 = find_cipher("3des"); + + cbc_start(des3, cs(iv.data()), cs(key.data()), static_cast(key.size()), + 0, &cbc); + cbc_encrypt(cs(data.data()), cs(enc_data.data()), ul(data.size()), &cbc); + cbc_done(&cbc); + + return enc_data; +} + +std::string des3::decrypt(const std::string& data, const std::string& iv, + const std::string& key) { + std::string dec_data; + dec_data.resize(data.size()); + + symmetric_CBC cbc; + const auto des3 = find_cipher("3des"); + + cbc_start(des3, cs(iv.data()), cs(key.data()), static_cast(key.size()), + 0, &cbc); + cbc_decrypt(cs(data.data()), cs(dec_data.data()), ul(data.size()), &cbc); + cbc_done(&cbc); + + return dec_data; +} + +std::string tiger::compute(const std::string& data, const bool hex) { + return compute(cs(data.data()), data.size(), hex); +} + +std::string tiger::compute(const std::uint8_t* data, const std::size_t length, + const bool hex) { + std::uint8_t buffer[24]{}; + + hash_state state; + tiger_init(&state); + tiger_process(&state, data, ul(length)); + tiger_done(&state, buffer); + + std::string hash(cs(buffer), sizeof(buffer)); + if (!hex) + return hash; + + return string::dump_hex(hash, {}); +} + +std::string aes::encrypt(const std::string& data, const std::string& iv, + const std::string& key) { + std::string enc_data; + enc_data.resize(data.size()); + + symmetric_CBC cbc; + const auto aes = find_cipher("aes"); + + cbc_start(aes, cs(iv.data()), cs(key.data()), static_cast(key.size()), 0, + &cbc); + cbc_encrypt(cs(data.data()), cs(enc_data.data()), ul(data.size()), &cbc); + cbc_done(&cbc); + + return enc_data; +} + +std::string aes::decrypt(const std::string& data, const std::string& iv, + const std::string& key) { + std::string dec_data; + dec_data.resize(data.size()); + + symmetric_CBC cbc; + const auto aes = find_cipher("aes"); + + cbc_start(aes, cs(iv.data()), cs(key.data()), static_cast(key.size()), 0, + &cbc); + cbc_decrypt(cs(data.data()), cs(dec_data.data()), ul(data.size()), &cbc); + cbc_done(&cbc); + + return dec_data; +} + +std::string hmac_sha1::compute(const std::string& data, + const std::string& key) { + std::string buffer; + buffer.resize(20); + + hmac_state state; + hmac_init(&state, find_hash("sha1"), cs(key.data()), ul(key.size())); + hmac_process(&state, cs(data.data()), static_cast(data.size())); + + auto out_len = ul(buffer.size()); + hmac_done(&state, cs(buffer.data()), &out_len); + + buffer.resize(out_len); + return buffer; +} + +std::string sha1::compute(const std::string& data, const bool hex) { + return compute(cs(data.data()), data.size(), hex); +} + +std::string sha1::compute(const std::uint8_t* data, const std::size_t length, + const bool hex) { + std::uint8_t buffer[20]{}; + + hash_state state; + sha1_init(&state); + sha1_process(&state, data, ul(length)); + sha1_done(&state, buffer); + + std::string hash(cs(buffer), sizeof(buffer)); + if (!hex) + return hash; + + return string::dump_hex(hash, {}); +} + +std::string sha256::compute(const std::string& data, const bool hex) { + return compute(cs(data.data()), data.size(), hex); +} + +std::string sha256::compute(const std::uint8_t* data, const std::size_t length, + const bool hex) { + std::uint8_t buffer[32]{}; + + hash_state state; + sha256_init(&state); + sha256_process(&state, data, ul(length)); + sha256_done(&state, buffer); + + std::string hash(cs(buffer), sizeof(buffer)); + if (!hex) + return hash; + + return string::dump_hex(hash, {}); +} + +std::string sha512::compute(const std::string& data, const bool hex) { + return compute(cs(data.data()), data.size(), hex); +} + +std::string sha512::compute(const std::uint8_t* data, const std::size_t length, + const bool hex) { + std::uint8_t buffer[64]{}; + + hash_state state; + sha512_init(&state); + sha512_process(&state, data, ul(length)); + sha512_done(&state, buffer); + + std::string hash(cs(buffer), sizeof(buffer)); + if (!hex) + return hash; + + return string::dump_hex(hash, {}); +} + +std::string base64::encode(const std::uint8_t* data, const std::size_t len) { + std::string result; + result.resize((len + 2) * 2); + + auto out_len = ul(result.size()); + if (base64_encode(data, ul(len), result.data(), &out_len) != CRYPT_OK) { + return {}; + } + + result.resize(out_len); + return result; +} + +std::string base64::encode(const std::string& data) { + return encode(cs(data.data()), data.size()); +} + +std::string base64::decode(const std::string& data) { + std::string result; + result.resize((data.size() + 2) * 2); + + auto out_len = ul(result.size()); + if (base64_decode(data.data(), ul(data.size()), cs(result.data()), + &out_len) != CRYPT_OK) { + return {}; + } + + result.resize(out_len); + return result; +} + +unsigned int jenkins_one_at_a_time::compute(const std::string& data) { + return compute(data.data(), data.size()); +} + +unsigned int jenkins_one_at_a_time::compute(const char* key, + const std::size_t len) { + std::uint32_t hash, i; + for (hash = i = 0; i < len; ++i) { + hash += key[i]; + hash += (hash << 10); + hash ^= (hash >> 6); + } + hash += (hash << 3); + hash ^= (hash >> 11); + hash += (hash << 15); + return hash; +} + +std::uint32_t random::get_integer() { + std::uint32_t result; + get_data(&result, sizeof(result)); + return result; +} + +std::string random::get_challenge() { + std::string result; + result.resize(sizeof(std::uint32_t)); + get_data(result.data(), result.size()); + return string::dump_hex(result, {}); +} + +void random::get_data(void* data, const std::size_t size) { + prng_.read(data, size); +} +} // namespace utils::cryptography diff --git a/src/common/utils/cryptography.hpp b/src/common/utils/cryptography.hpp new file mode 100644 index 0000000..755cef3 --- /dev/null +++ b/src/common/utils/cryptography.hpp @@ -0,0 +1,113 @@ +#pragma once + +#include +#include + +namespace utils::cryptography { +namespace ecc { +class key final { +public: + key(); + ~key(); + + key(key&& obj) noexcept; + key(const key& obj); + key& operator=(key&& obj) noexcept; + key& operator=(const key& obj); + bool operator==(key& key) const; + + [[nodiscard]] bool is_valid() const; + + ecc_key& get(); + [[nodiscard]] const ecc_key& get() const; + + [[nodiscard]] std::string get_public_key() const; + + void set(const std::string& pub_key_buffer); + + void deserialize(const std::string& key); + + [[nodiscard]] std::string serialize(int type = PK_PRIVATE) const; + + void free(); + + [[nodiscard]] std::uint64_t get_hash() const; + +private: + ecc_key key_storage_{}; +}; + +key generate_key(int bits); +key generate_key(int bits, const std::string& entropy); +std::string sign_message(const key& key, const std::string& message); +bool verify_message(const key& key, const std::string& message, + const std::string& signature); + +bool encrypt(const key& key, std::string& data); +bool decrypt(const key& key, std::string& data); +} // namespace ecc + +namespace rsa { +std::string encrypt(const std::string& data, const std::string& hash, + const std::string& key); +} + +namespace des3 { +std::string encrypt(const std::string& data, const std::string& iv, + const std::string& key); +std::string decrypt(const std::string& data, const std::string& iv, + const std::string& key); +} // namespace des3 + +namespace tiger { +std::string compute(const std::string& data, bool hex = false); +std::string compute(const std::uint8_t* data, std::size_t length, + bool hex = false); +} // namespace tiger + +namespace aes { +std::string encrypt(const std::string& data, const std::string& iv, + const std::string& key); +std::string decrypt(const std::string& data, const std::string& iv, + const std::string& key); +} // namespace aes + +namespace hmac_sha1 { +std::string compute(const std::string& data, const std::string& key); +} + +namespace sha1 { +std::string compute(const std::string& data, bool hex = false); +std::string compute(const std::uint8_t* data, std::size_t length, + bool hex = false); +} // namespace sha1 + +namespace sha256 { +std::string compute(const std::string& data, bool hex = false); +std::string compute(const std::uint8_t* data, std::size_t length, + bool hex = false); +} // namespace sha256 + +namespace sha512 { +std::string compute(const std::string& data, bool hex = false); +std::string compute(const std::uint8_t* data, std::size_t length, + bool hex = false); +} // namespace sha512 + +namespace base64 { +std::string encode(const std::uint8_t* data, std::size_t len); +std::string encode(const std::string& data); +std::string decode(const std::string& data); +} // namespace base64 + +namespace jenkins_one_at_a_time { +unsigned int compute(const std::string& data); +unsigned int compute(const char* key, std::size_t len); +}; // namespace jenkins_one_at_a_time + +namespace random { +std::uint32_t get_integer(); +std::string get_challenge(); +void get_data(void* data, std::size_t size); +} // namespace random +} // namespace utils::cryptography diff --git a/src/common/utils/flags.cpp b/src/common/utils/flags.cpp new file mode 100644 index 0000000..ad2fb97 --- /dev/null +++ b/src/common/utils/flags.cpp @@ -0,0 +1,47 @@ +#include + +#include +#include + +#include "flags.hpp" + +#include +#include + +namespace utils::flags { +void parse_flags(std::vector& flags) { + int num_args; + auto* const argv = CommandLineToArgvW(GetCommandLineW(), &num_args); + + assert(flags.empty()); + + if (argv == nullptr) { + return; + } + + for (auto i = 0; i < num_args; ++i) { + std::wstring wide_flag(argv[i]); + if (wide_flag[0] == L'-') { + wide_flag.erase(wide_flag.begin()); + const auto converted_string = string::convert(wide_flag); + flags.emplace_back(string::to_lower(converted_string)); + } + } + + LocalFree(argv); +} + +bool has_flag(const std::string& flag) { + static auto parsed = false; + static std::vector enabled_flags; + + if (!parsed) { + parse_flags(enabled_flags); + parsed = true; + } + + return std::ranges::any_of( + enabled_flags.cbegin(), enabled_flags.cend(), + [flag](const auto& elem) { return elem == string::to_lower(flag); }); +} +} // namespace utils::flags diff --git a/src/common/utils/flags.hpp b/src/common/utils/flags.hpp new file mode 100644 index 0000000..713fbd0 --- /dev/null +++ b/src/common/utils/flags.hpp @@ -0,0 +1,13 @@ +#pragma once +#include + +namespace utils::flags { +bool has_flag(const std::string& flag); +} + +#define IS_FLAG_ENABLED(flag) \ + static std::optional flag; \ + if (!(flag).has_value()) { \ + (flag).emplace(utils::flags::has_flag(#flag)); \ + } \ + return (flag).value(); diff --git a/src/common/utils/hook.cpp b/src/common/utils/hook.cpp new file mode 100644 index 0000000..d674755 --- /dev/null +++ b/src/common/utils/hook.cpp @@ -0,0 +1,218 @@ +#include "hook.hpp" + +#include + +namespace utils { +namespace { +[[maybe_unused]] class _ { +public: + _() { + if (MH_Initialize() != MH_OK) { + throw std::runtime_error("Failed to initialize MinHook"); + } + } + + ~_() { MH_Uninitialize(); } +} __; +} // namespace + +void hook::signature::process() { + if (this->signatures_.empty()) + return; + + const auto start = static_cast(this->start_); + + const unsigned int sig_count = this->signatures_.size(); + const auto containers = this->signatures_.data(); + + for (size_t i = 0; i < this->length_; ++i) { + const auto address = start + i; + + for (unsigned int k = 0; k < sig_count; ++k) { + const auto container = &containers[k]; + + unsigned int j; + for (j = 0; j < strlen(container->mask); ++j) { + if (container->mask[j] != '?' && + container->signature[j] != address[j]) { + break; + } + } + + if (j == strlen(container->mask)) { + container->callback(address); + } + } + } +} + +void hook::signature::add(const container& container) { + signatures_.push_back(container); +} + +hook::detour::detour(const size_t place, void* target) + : detour(reinterpret_cast(place), target) {} + +hook::detour::detour(void* place, void* target) { this->create(place, target); } + +hook::detour::~detour() { this->clear(); } + +void hook::detour::enable() const { MH_EnableHook(this->place_); } + +void hook::detour::disable() const { MH_DisableHook(this->place_); } + +void hook::detour::create(void* place, void* target) { + this->clear(); + this->place_ = place; + + if (MH_CreateHook(this->place_, target, &this->original_) != MH_OK) { + throw std::runtime_error("Unable to create hook"); + } + + this->enable(); +} + +void hook::detour::create(const size_t place, void* target) { + this->create(reinterpret_cast(place), target); +} + +void hook::detour::clear() { + if (this->place_) { + MH_RemoveHook(this->place_); + } + + this->place_ = nullptr; + this->original_ = nullptr; +} + +void* hook::detour::get_original() const { return this->original_; } + +hook::~hook() { + if (this->initialized_) { + this->uninstall(); + } +} + +hook* hook::initialize(const DWORD place, void (*stub)(), const bool use_jump) { + return this->initialize(place, reinterpret_cast(stub), use_jump); +} + +hook* hook::initialize(const DWORD place, void* stub, const bool use_jump) { + return this->initialize(reinterpret_cast(place), stub, use_jump); +} + +hook* hook::initialize(void* place, void* stub, const bool use_jump) { + if (this->initialized_) + return this; + this->initialized_ = true; + + this->use_jump_ = use_jump; + this->place_ = place; + this->stub_ = stub; + + this->original_ = + static_cast(this->place_) + 5 + + *reinterpret_cast((static_cast(this->place_) + 1)); + + return this; +} + +hook* hook::install(const bool unprotect, const bool keep_unprotected) { + std::lock_guard _(this->state_mutex_); + + if (!this->initialized_ || this->installed_) { + return this; + } + + this->installed_ = true; + + if (unprotect) + VirtualProtect(this->place_, sizeof(this->buffer_), PAGE_EXECUTE_READWRITE, + &this->protection_); + std::memcpy(this->buffer_, this->place_, sizeof(this->buffer_)); + + const auto code = static_cast(this->place_); + + *code = static_cast(this->use_jump_ ? 0xE9 : 0xE8); + + *reinterpret_cast(code + 1) = + reinterpret_cast(this->stub_) - + (reinterpret_cast(this->place_) + 5); + + if (unprotect && !keep_unprotected) + VirtualProtect(this->place_, sizeof(this->buffer_), this->protection_, + &this->protection_); + + FlushInstructionCache(GetCurrentProcess(), this->place_, + sizeof(this->buffer_)); + + return this; +} + +void hook::quick() { + if (this->installed_) { + this->installed_ = false; + } +} + +bool hook::iat(const nt::library module, const std::string& target_module, + const std::string& process, void* stub) { + if (!module.is_valid()) + return false; + + auto ptr = module.get_iat_entry(target_module, process); + if (!ptr) + return false; + + DWORD protect; + VirtualProtect(ptr, sizeof(*ptr), PAGE_EXECUTE_READWRITE, &protect); + + *ptr = stub; + + VirtualProtect(ptr, sizeof(*ptr), protect, &protect); + return true; +} + +hook* hook::uninstall(const bool unprotect) { + std::lock_guard _(this->state_mutex_); + + if (!this->initialized_ || !this->installed_) { + return this; + } + + this->installed_ = false; + + if (unprotect) + VirtualProtect(this->place_, sizeof(this->buffer_), PAGE_EXECUTE_READWRITE, + &this->protection_); + + std::memcpy(this->place_, this->buffer_, sizeof(this->buffer_)); + + if (unprotect) + VirtualProtect(this->place_, sizeof(this->buffer_), this->protection_, + &this->protection_); + + FlushInstructionCache(GetCurrentProcess(), this->place_, + sizeof(this->buffer_)); + + return this; +} + +void* hook::get_address() const { return this->place_; } + +void* hook::get_original() const { return this->original_; } + +void hook::nop(void* place, const size_t length) { + DWORD old_protect; + VirtualProtect(place, length, PAGE_EXECUTE_READWRITE, &old_protect); + + memset(place, 0x90, length); + + VirtualProtect(place, length, old_protect, &old_protect); + FlushInstructionCache(GetCurrentProcess(), place, length); +} + +void hook::nop(const DWORD place, const size_t length) { + nop(reinterpret_cast(place), length); +} +} // namespace utils diff --git a/src/common/utils/hook.hpp b/src/common/utils/hook.hpp new file mode 100644 index 0000000..1a5d367 --- /dev/null +++ b/src/common/utils/hook.hpp @@ -0,0 +1,168 @@ +#pragma once +#include +#include "nt.hpp" + +#define HOOK_JUMP true +#define HOOK_CALL false + +namespace utils { +class hook final { +public: + class signature final { + public: + struct container final { + const char* signature; + const char* mask; + std::function callback; + }; + + signature(void* start, const size_t length) + : start_(start), length_(length) {} + + signature(const DWORD start, const size_t length) + : signature(reinterpret_cast(start), length) {} + + signature() : signature(0x400000, 0x800000) {} + + void process(); + void add(const container& container); + + private: + void* start_; + size_t length_; + std::vector signatures_; + }; + + class detour { + public: + detour() = default; + detour(void* place, void* target); + detour(size_t place, void* target); + ~detour(); + + detour(detour&& other) noexcept { this->operator=(std::move(other)); } + + detour& operator=(detour&& other) noexcept { + if (this != &other) { + this->~detour(); + + this->place_ = other.place_; + this->original_ = other.original_; + + other.place_ = nullptr; + other.original_ = nullptr; + } + + return *this; + } + + detour(const detour&) = delete; + detour& operator=(const detour&) = delete; + + void enable() const; + void disable() const; + + void create(void* place, void* target); + void create(size_t place, void* target); + void clear(); + + template T* get() const { + return static_cast(this->get_original()); + } + + template T invoke(Args... args) { + return static_cast(this->get_original())(args...); + } + + [[nodiscard]] void* get_original() const; + + private: + void* place_{}; + void* original_{}; + }; + + hook() + : initialized_(false), installed_(false), place_(nullptr), stub_(nullptr), + original_(nullptr), use_jump_(false), protection_(0) { + ZeroMemory(this->buffer_, sizeof(this->buffer_)); + } + + hook(void* place, void* stub, const bool use_jump = true) : hook() { + this->initialize(place, stub, use_jump); + } + + hook(void* place, void (*stub)(), const bool use_jump = true) + : hook(place, reinterpret_cast(stub), use_jump) {} + + hook(const DWORD place, void* stub, const bool use_jump = true) + : hook(reinterpret_cast(place), stub, use_jump) {} + + hook(const DWORD place, const DWORD stub, const bool use_jump = true) + : hook(reinterpret_cast(place), reinterpret_cast(stub), + use_jump) {} + + hook(const DWORD place, void (*stub)(), const bool use_jump = true) + : hook(reinterpret_cast(place), reinterpret_cast(stub), + use_jump) {} + + hook(const hook&) = delete; + hook(const hook&&) = delete; + + ~hook(); + + hook* initialize(void* place, void* stub, bool use_jump = true); + hook* initialize(DWORD place, void* stub, bool use_jump = true); + hook* initialize(DWORD place, void (*stub)(), + bool use_jump = true); // For lambdas + hook* install(bool unprotect = true, bool keep_unprotected = false); + hook* uninstall(bool unprotect = true); + + void* get_address() const; + void* get_original() const; + void quick(); + + static bool iat(nt::library module, const std::string& target_module, + const std::string& process, void* stub); + + static void nop(void* place, size_t length); + static void nop(DWORD place, size_t length); + + template static void set(void* place, T value) { + DWORD old_protect; + VirtualProtect(place, sizeof(T), PAGE_EXECUTE_READWRITE, &old_protect); + + *static_cast(place) = value; + + VirtualProtect(place, sizeof(T), old_protect, &old_protect); + FlushInstructionCache(GetCurrentProcess(), place, sizeof(T)); + } + + template static void set(const DWORD place, T value) { + return set(reinterpret_cast(place), value); + } + + template + static T invoke(size_t func, Args... args) { + return reinterpret_cast(func)(args...); + } + + template + static T invoke(void* func, Args... args) { + return static_cast(func)(args...); + } + +private: + bool initialized_; + bool installed_; + + void* place_; + void* stub_; + void* original_; + char buffer_[5]{}; + bool use_jump_; + + DWORD protection_; + + std::mutex state_mutex_; +}; +} // namespace utils diff --git a/src/common/utils/info_string.cpp b/src/common/utils/info_string.cpp new file mode 100644 index 0000000..5cc7d36 --- /dev/null +++ b/src/common/utils/info_string.cpp @@ -0,0 +1,52 @@ +#include "info_string.hpp" +#include "string.hpp" + +namespace utils { +info_string::info_string(const std::string& buffer) { this->parse(buffer); } + +info_string::info_string(const std::string_view& buffer) + : info_string(std::string{buffer}) {} + +void info_string::set(const std::string& key, const std::string& value) { + this->key_value_pairs_[key] = value; +} + +std::string info_string::get(const std::string& key) const { + const auto value = this->key_value_pairs_.find(key); + if (value != this->key_value_pairs_.end()) { + return value->second; + } + + return {}; +} + +void info_string::parse(std::string buffer) { + if (buffer[0] == '\\') { + buffer = buffer.substr(1); + } + + const auto key_values = string::split(buffer, '\\'); + for (size_t i = 0; !key_values.empty() && i < (key_values.size() - 1); + i += 2) { + const auto& key = key_values[i]; + const auto& value = key_values[i + 1]; + + if (!this->key_value_pairs_.contains(key)) { + this->key_value_pairs_[key] = value; + } + } +} + +std::string info_string::build() const { + std::string info_string; + for (const auto& [key, val] : this->key_value_pairs_) { + info_string.append("\\"); + + info_string.append(key); + info_string.append("\\"); + info_string.append(val); + } + + return info_string; +} +} // namespace utils diff --git a/src/common/utils/info_string.hpp b/src/common/utils/info_string.hpp new file mode 100644 index 0000000..d722dff --- /dev/null +++ b/src/common/utils/info_string.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include +#include + +namespace utils { +class info_string { +public: + info_string() = default; + explicit info_string(const std::string& buffer); + explicit info_string(const std::string_view& buffer); + + void set(const std::string& key, const std::string& value); + [[nodiscard]] std::string get(const std::string& key) const; + [[nodiscard]] std::string build() const; + +private: + std::unordered_map key_value_pairs_; + + void parse(std::string buffer); +}; +} // namespace utils diff --git a/src/common/utils/io.cpp b/src/common/utils/io.cpp new file mode 100644 index 0000000..88e2493 --- /dev/null +++ b/src/common/utils/io.cpp @@ -0,0 +1,111 @@ +#include "io.hpp" +#include "nt.hpp" +#include + +namespace utils::io { +bool remove_file(const std::string& file) { + return DeleteFileA(file.data()) == TRUE; +} + +bool move_file(const std::string& src, const std::string& target) { + return MoveFileA(src.data(), target.data()) == TRUE; +} + +bool file_exists(const std::string& file) { + return std::filesystem::exists(file); +} + +bool write_file(const std::string& file, const std::string& data, + const bool append) { + const auto pos = file.find_last_of("/\\"); + if (pos != std::string::npos) { + create_directory(file.substr(0, pos)); + } + + std::ofstream stream(file, std::ios::binary | std::ofstream::out | + (append ? std::ofstream::app : 0)); + + if (stream.is_open()) { + stream.write(data.data(), data.size()); + stream.close(); + return true; + } + + return false; +} + +std::string read_file(const std::string& file) { + std::string data; + read_file(file, &data); + return data; +} + +bool read_file(const std::string& file, std::string* data) { + if (!data) { + return false; + } + + data->clear(); + + if (file_exists(file)) { + std::ifstream stream(file, std::ios::binary); + if (!stream.is_open()) + return false; + + stream.seekg(0, std::ios::end); + const std::streamsize size = stream.tellg(); + stream.seekg(0, std::ios::beg); + + if (size > -1) { + data->resize(static_cast(size)); + stream.read(data->data(), size); + stream.close(); + return true; + } + } + + return false; +} + +size_t file_size(const std::string& file) { + if (file_exists(file)) { + std::ifstream stream(file, std::ios::binary); + + if (stream.good()) { + stream.seekg(0, std::ios::end); + return static_cast(stream.tellg()); + } + } + + return 0; +} + +bool create_directory(const std::string& directory) { + return std::filesystem::create_directories(directory); +} + +bool directory_exists(const std::string& directory) { + return std::filesystem::is_directory(directory); +} + +bool directory_is_empty(const std::string& directory) { + return std::filesystem::is_empty(directory); +} + +std::vector list_files(const std::string& directory) { + std::vector files; + + for (auto& file : std::filesystem::directory_iterator(directory)) { + files.push_back(file.path().generic_string()); + } + + return files; +} + +void copy_folder(const std::filesystem::path& src, + const std::filesystem::path& target) { + std::filesystem::copy(src, target, + std::filesystem::copy_options::overwrite_existing | + std::filesystem::copy_options::recursive); +} +} // namespace utils::io diff --git a/src/common/utils/io.hpp b/src/common/utils/io.hpp new file mode 100644 index 0000000..92da124 --- /dev/null +++ b/src/common/utils/io.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include +#include +#include + +namespace utils::io { +bool remove_file(const std::string& file); +bool move_file(const std::string& src, const std::string& target); +bool file_exists(const std::string& file); +bool write_file(const std::string& file, const std::string& data, + bool append = false); +bool read_file(const std::string& file, std::string* data); +std::string read_file(const std::string& file); +size_t file_size(const std::string& file); +bool create_directory(const std::string& directory); +bool directory_exists(const std::string& directory); +bool directory_is_empty(const std::string& directory); +std::vector list_files(const std::string& directory); +void copy_folder(const std::filesystem::path& src, + const std::filesystem::path& target); +} // namespace utils::io diff --git a/src/common/utils/memory.cpp b/src/common/utils/memory.cpp new file mode 100644 index 0000000..3edeaa6 --- /dev/null +++ b/src/common/utils/memory.cpp @@ -0,0 +1,132 @@ +#include "memory.hpp" +#include "nt.hpp" + +namespace utils { +memory::allocator memory::mem_allocator_; + +memory::allocator::~allocator() { this->clear(); } + +void memory::allocator::clear() { + std::lock_guard _(this->mutex_); + + for (const auto& data : this->pool_) { + memory::free(data); + } + + this->pool_.clear(); +} + +void memory::allocator::free(void* data) { + std::lock_guard _(this->mutex_); + + const auto j = std::find(this->pool_.begin(), this->pool_.end(), data); + if (j != this->pool_.end()) { + memory::free(data); + this->pool_.erase(j); + } +} + +void memory::allocator::free(const void* data) { + this->free(const_cast(data)); +} + +void* memory::allocator::allocate(const std::size_t length) { + std::lock_guard _(this->mutex_); + + const auto data = memory::allocate(length); + this->pool_.push_back(data); + return data; +} + +bool memory::allocator::empty() const { return this->pool_.empty(); } + +char* memory::allocator::duplicate_string(const std::string& string) { + std::lock_guard _(this->mutex_); + + const auto data = memory::duplicate_string(string); + this->pool_.push_back(data); + return data; +} + +void* memory::allocate(const std::size_t length) { + return std::calloc(length, 1); +} + +char* memory::duplicate_string(const std::string& string) { + const auto new_string = allocate_array(string.size() + 1); + std::memcpy(new_string, string.data(), string.size()); + return new_string; +} + +void memory::free(void* data) { std::free(data); } + +void memory::free(const void* data) { free(const_cast(data)); } + +bool memory::is_set(const void* mem, const char chr, const std::size_t length) { + const auto mem_arr = static_cast(mem); + + for (std::size_t i = 0; i < length; ++i) { + if (mem_arr[i] != chr) { + return false; + } + } + + return true; +} + +bool memory::is_bad_read_ptr(const void* ptr) { + MEMORY_BASIC_INFORMATION mbi = {}; + if (VirtualQuery(ptr, &mbi, sizeof(mbi))) { + const DWORD mask = + (PAGE_READONLY | PAGE_READWRITE | PAGE_WRITECOPY | PAGE_EXECUTE_READ | + PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY); + auto b = !(mbi.Protect & mask); + // check the page is not a guard page + if (mbi.Protect & (PAGE_GUARD | PAGE_NOACCESS)) + b = true; + + return b; + } + return true; +} + +bool memory::is_bad_code_ptr(const void* ptr) { + MEMORY_BASIC_INFORMATION mbi = {}; + if (VirtualQuery(ptr, &mbi, sizeof(mbi))) { + const DWORD mask = + (PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY); + auto b = !(mbi.Protect & mask); + // check the page is not a guard page + if (mbi.Protect & (PAGE_GUARD | PAGE_NOACCESS)) + b = true; + + return b; + } + return true; +} + +bool memory::is_rdata_ptr(void* ptr) { + const std::string rdata = ".rdata"; + const auto pointer_lib = utils::nt::library::get_by_address(ptr); + + for (const auto& section : pointer_lib.get_section_headers()) { + constexpr auto size = sizeof(section->Name); + char name[size + 1]; + name[size] = 0; + std::memcpy(name, section->Name, size); + + if (name == rdata) { + const auto target = reinterpret_cast(ptr); + const auto source_start = + size_t(pointer_lib.get_ptr()) + section->PointerToRawData; + const auto source_end = source_start + section->SizeOfRawData; + + return target >= source_start && target <= source_end; + } + } + + return false; +} + +memory::allocator* memory::get_allocator() { return &memory::mem_allocator_; } +} // namespace utils diff --git a/src/common/utils/memory.hpp b/src/common/utils/memory.hpp new file mode 100644 index 0000000..3e335d8 --- /dev/null +++ b/src/common/utils/memory.hpp @@ -0,0 +1,60 @@ +#pragma once + +#include +#include + +namespace utils { +class memory final { +public: + class allocator final { + public: + ~allocator(); + + void clear(); + + void free(void* data); + + void free(const void* data); + + void* allocate(std::size_t length); + + template T* allocate() { return this->allocate_array(1); } + + template T* allocate_array(const std::size_t count = 1) { + return static_cast(this->allocate(count * sizeof(T))); + } + + [[nodiscard]] bool empty() const; + + char* duplicate_string(const std::string& string); + + private: + std::mutex mutex_; + std::vector pool_; + }; + + static void* allocate(std::size_t length); + + template static T* allocate() { return allocate_array(1); } + + template static T* allocate_array(const std::size_t count = 1) { + return static_cast(allocate(count * sizeof(T))); + } + + static char* duplicate_string(const std::string& string); + + static void free(void* data); + static void free(const void* data); + + static bool is_set(const void* mem, char chr, std::size_t length); + + static bool is_bad_read_ptr(const void* ptr); + static bool is_bad_code_ptr(const void* ptr); + static bool is_rdata_ptr(void* ptr); + + static allocator* get_allocator(); + +private: + static allocator mem_allocator_; +}; +} // namespace utils diff --git a/src/common/utils/nt.cpp b/src/common/utils/nt.cpp new file mode 100644 index 0000000..fed6dce --- /dev/null +++ b/src/common/utils/nt.cpp @@ -0,0 +1,260 @@ +#include "nt.hpp" + +namespace utils::nt { +library library::load(const std::string& name) { + return library(LoadLibraryA(name.data())); +} + +library library::load(const std::filesystem::path& path) { + return library::load(path.generic_string()); +} + +library library::get_by_address(void* address) { + HMODULE handle = nullptr; + GetModuleHandleExA(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, + static_cast(address), &handle); + return library(handle); +} + +library::library() { this->module_ = GetModuleHandleA(nullptr); } + +library::library(const std::string& name) { + this->module_ = GetModuleHandleA(name.data()); +} + +library::library(const HMODULE handle) { this->module_ = handle; } + +bool library::operator==(const library& obj) const { + return this->module_ == obj.module_; +} + +library::operator bool() const { return this->is_valid(); } + +library::operator HMODULE() const { return this->get_handle(); } + +PIMAGE_NT_HEADERS library::get_nt_headers() const { + if (!this->is_valid()) + return nullptr; + return reinterpret_cast(this->get_ptr() + + this->get_dos_header()->e_lfanew); +} + +PIMAGE_DOS_HEADER library::get_dos_header() const { + return reinterpret_cast(this->get_ptr()); +} + +PIMAGE_OPTIONAL_HEADER library::get_optional_header() const { + if (!this->is_valid()) + return nullptr; + return &this->get_nt_headers()->OptionalHeader; +} + +std::vector library::get_section_headers() const { + std::vector headers; + + auto nt_headers = this->get_nt_headers(); + auto section = IMAGE_FIRST_SECTION(nt_headers); + + for (uint16_t i = 0; i < nt_headers->FileHeader.NumberOfSections; + ++i, ++section) { + if (section) + headers.push_back(section); + else + OutputDebugStringA("There was an invalid section :O"); + } + + return headers; +} + +std::uint8_t* library::get_ptr() const { + return reinterpret_cast(this->module_); +} + +void library::unprotect() const { + if (!this->is_valid()) + return; + + DWORD protection; + VirtualProtect(this->get_ptr(), this->get_optional_header()->SizeOfImage, + PAGE_EXECUTE_READWRITE, &protection); +} + +size_t library::get_relative_entry_point() const { + if (!this->is_valid()) + return 0; + return this->get_nt_headers()->OptionalHeader.AddressOfEntryPoint; +} + +void* library::get_entry_point() const { + if (!this->is_valid()) + return nullptr; + return this->get_ptr() + this->get_relative_entry_point(); +} + +bool library::is_valid() const { + return this->module_ != nullptr && + this->get_dos_header()->e_magic == IMAGE_DOS_SIGNATURE; +} + +std::string library::get_name() const { + if (!this->is_valid()) + return {}; + + auto path = this->get_path(); + const auto pos = path.find_last_of("/\\"); + if (pos == std::string::npos) + return path; + + return path.substr(pos + 1); +} + +std::string library::get_path() const { + if (!this->is_valid()) + return {}; + + char name[MAX_PATH] = {0}; + GetModuleFileNameA(this->module_, name, sizeof name); + + return name; +} + +std::string library::get_folder() const { + if (!this->is_valid()) + return {}; + + const auto path = std::filesystem::path(this->get_path()); + return path.parent_path().generic_string(); +} + +void library::free() { + if (this->is_valid()) { + FreeLibrary(this->module_); + this->module_ = nullptr; + } +} + +HMODULE library::get_handle() const { return this->module_; } + +void** library::get_iat_entry(const std::string& module_name, + const std::string& proc_name) const { + if (!this->is_valid()) + return nullptr; + + const library other_module(module_name); + if (!other_module.is_valid()) + return nullptr; + + auto* const target_function = other_module.get_proc(proc_name); + if (!target_function) + return nullptr; + + auto* header = this->get_optional_header(); + if (!header) + return nullptr; + + auto* import_descriptor = reinterpret_cast( + this->get_ptr() + + header->DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); + + while (import_descriptor->Name) { + if (!_stricmp( + reinterpret_cast(this->get_ptr() + import_descriptor->Name), + module_name.data())) { + auto* original_thunk_data = reinterpret_cast( + import_descriptor->OriginalFirstThunk + this->get_ptr()); + auto* thunk_data = reinterpret_cast( + import_descriptor->FirstThunk + this->get_ptr()); + + while (original_thunk_data->u1.AddressOfData) { + const size_t ordinal_number = + original_thunk_data->u1.AddressOfData & 0xFFFFFFF; + + if (ordinal_number > 0xFFFF) + continue; + + if (GetProcAddress(other_module.module_, + reinterpret_cast(ordinal_number)) == + target_function) { + return reinterpret_cast(&thunk_data->u1.Function); + } + + ++original_thunk_data; + ++thunk_data; + } + } + + ++import_descriptor; + } + + return nullptr; +} + +void library::set_dll_directory(const std::string& directory) { + SetDllDirectoryA(directory.data()); +} + +std::string library::get_dll_directory() { + char directory[MAX_PATH] = {0}; + if (!GetDllDirectoryA(sizeof(directory), directory)) { + return {}; + } + + return directory; +} + +void raise_hard_exception() { + int data = false; + const library ntdll("ntdll.dll"); + ntdll.invoke_pascal("RtlAdjustPrivilege", 19, true, false, &data); + ntdll.invoke_pascal("NtRaiseHardError", 0xC000007B, 0, nullptr, nullptr, + 6, &data); +} + +std::string load_resource(const int id) { + auto* const res = FindResource(library(), MAKEINTRESOURCE(id), RT_RCDATA); + if (!res) + return {}; + + auto* const handle = LoadResource(nullptr, res); + if (!handle) + return {}; + + return std::string(LPSTR(LockResource(handle)), SizeofResource(nullptr, res)); +} + +void launch_process(const std::string& process, + const std::string& command_line) { + STARTUPINFOA startup_info; + PROCESS_INFORMATION process_info; + + ZeroMemory(&startup_info, sizeof(startup_info)); + ZeroMemory(&process_info, sizeof(process_info)); + startup_info.cb = sizeof(startup_info); + + char current_dir[MAX_PATH]; + GetCurrentDirectoryA(sizeof(current_dir), current_dir); + + CreateProcessA(process.data(), const_cast(command_line.data()), + nullptr, nullptr, false, NULL, nullptr, current_dir, + &startup_info, &process_info); + + if (process_info.hThread && process_info.hThread != INVALID_HANDLE_VALUE) + CloseHandle(process_info.hThread); + if (process_info.hProcess && process_info.hProcess != INVALID_HANDLE_VALUE) + CloseHandle(process_info.hProcess); +} + +void relaunch_self(const std::string& command_line) { + const library self; + launch_process(self.get_path(), command_line); +} + +void update_dll_search_path(const std::string& directory) { + const library self; + self.set_dll_directory(directory); +} + +void terminate(const uint32_t code) { + TerminateProcess(GetCurrentProcess(), code); +} +} // namespace utils::nt diff --git a/src/common/utils/nt.hpp b/src/common/utils/nt.hpp new file mode 100644 index 0000000..f55fb7e --- /dev/null +++ b/src/common/utils/nt.hpp @@ -0,0 +1,113 @@ +#pragma once + +#define WIN32_LEAN_AND_MEAN +#include + +// min and max is required by gdi, therefore NOMINMAX won't work +#ifdef max +#undef max +#endif + +#ifdef min +#undef min +#endif + +#include +#include +#include + +namespace utils::nt { +class library final { +public: + static library load(const std::string& name); + static library load(const std::filesystem::path& path); + static library get_by_address(void* address); + + library(); + explicit library(const std::string& name); + explicit library(HMODULE handle); + + library(const library& a) : module_(a.module_) {} + + bool operator!=(const library& obj) const { return !(*this == obj); }; + bool operator==(const library& obj) const; + + operator bool() const; + operator HMODULE() const; + + void unprotect() const; + void* get_entry_point() const; + size_t get_relative_entry_point() const; + + bool is_valid() const; + std::string get_name() const; + std::string get_path() const; + std::string get_folder() const; + std::uint8_t* get_ptr() const; + void free(); + + HMODULE get_handle() const; + + template T get_proc(const std::string& process) const { + if (!this->is_valid()) + T{}; + return reinterpret_cast(GetProcAddress(this->module_, process.data())); + } + + template std::function get(const std::string& process) const { + if (!this->is_valid()) + return std::function(); + return static_cast(this->get_proc(process)); + } + + template + T invoke(const std::string& process, Args... args) const { + auto method = this->get(process); + if (method) + return method(args...); + return T(); + } + + template + T invoke_pascal(const std::string& process, Args... args) const { + auto method = this->get(process); + if (method) + return method(args...); + return T(); + } + + template + T invoke_this(const std::string& process, void* this_ptr, + Args... args) const { + auto method = this->get(this_ptr, process); + if (method) + return method(args...); + return T(); + } + + std::vector get_section_headers() const; + + PIMAGE_NT_HEADERS get_nt_headers() const; + PIMAGE_DOS_HEADER get_dos_header() const; + PIMAGE_OPTIONAL_HEADER get_optional_header() const; + + void** get_iat_entry(const std::string& module_name, + const std::string& proc_name) const; + + static void set_dll_directory(const std::string& directory); + static std::string get_dll_directory(); + +private: + HMODULE module_; +}; + +__declspec(noreturn) void raise_hard_exception(); +std::string load_resource(int id); + +void launch_process(const std::string& process, + const std::string& command_line); +void relaunch_self(const std::string& command_line = ""); +void update_dll_search_path(const std::string& directory); + +__declspec(noreturn) void terminate(uint32_t code = 0); +} // namespace utils::nt diff --git a/src/common/utils/signature.cpp b/src/common/utils/signature.cpp new file mode 100644 index 0000000..601a723 --- /dev/null +++ b/src/common/utils/signature.cpp @@ -0,0 +1,191 @@ +#include "signature.hpp" +#include +#include + +#include + +namespace utils::hook { +void signature::load_pattern(const std::string& pattern) { + this->mask_.clear(); + this->pattern_.clear(); + + uint8_t nibble = 0; + auto has_nibble = false; + + for (auto val : pattern) { + if (val == ' ') + continue; + if (val == '?') { + this->mask_.push_back(val); + this->pattern_.push_back(0); + } else { + if ((val < '0' || val > '9') && (val < 'A' || val > 'F') && + (val < 'a' || val > 'f')) { + throw std::runtime_error("Invalid pattern"); + } + + char str[] = {val, 0}; + const auto current_nibble = + static_cast(strtol(str, nullptr, 16)); + + if (!has_nibble) { + has_nibble = true; + nibble = current_nibble; + } else { + has_nibble = false; + const uint8_t byte = current_nibble | (nibble << 4); + + this->mask_.push_back('x'); + this->pattern_.push_back(byte); + } + } + } + + while (!this->mask_.empty() && this->mask_.back() == '?') { + this->mask_.pop_back(); + this->pattern_.pop_back(); + } + + if (this->has_sse_support()) { + while (this->pattern_.size() < 16) { + this->pattern_.push_back(0); + } + } + + if (has_nibble) { + throw std::runtime_error("Invalid pattern"); + } +} + +std::vector signature::process_range(uint8_t* start, + const size_t length) const { + if (this->has_sse_support()) + return this->process_range_vectorized(start, length); + return this->process_range_linear(start, length); +} + +std::vector signature::process_range_linear(uint8_t* start, + const size_t length) const { + std::vector result; + + for (size_t i = 0; i < length; ++i) { + const auto address = start + i; + + size_t j = 0; + for (; j < this->mask_.size(); ++j) { + if (this->mask_[j] != '?' && this->pattern_[j] != address[j]) { + break; + } + } + + if (j == this->mask_.size()) { + result.push_back(size_t(address)); + } + } + + return result; +} + +std::vector +signature::process_range_vectorized(uint8_t* start, const size_t length) const { + std::vector result; + __declspec(align(16)) char desired_mask[16] = {0}; + + for (size_t i = 0; i < this->mask_.size(); i++) { + desired_mask[i / 8] |= (this->mask_[i] == '?' ? 0 : 1) << i % 8; + } + + const auto mask = + _mm_load_si128(reinterpret_cast(desired_mask)); + const auto comparand = + _mm_loadu_si128(reinterpret_cast(this->pattern_.data())); + + for (size_t i = 0; i < length; ++i) { + const auto address = start + i; + const auto value = + _mm_loadu_si128(reinterpret_cast(address)); + const auto comparison = + _mm_cmpestrm(value, 16, comparand, static_cast(this->mask_.size()), + _SIDD_CMP_EQUAL_EACH); + + const auto matches = _mm_and_si128(mask, comparison); + const auto equivalence = _mm_xor_si128(mask, matches); + + if (_mm_test_all_zeros(equivalence, equivalence)) { + result.push_back(size_t(address)); + } + } + + return result; +} + +signature::signature_result signature::process() const { + const auto range = this->length_ - this->mask_.size(); + const auto cores = std::max(1u, std::thread::hardware_concurrency()); + + if (range <= cores * 10ull) + return this->process_serial(); + return this->process_parallel(); +} + +signature::signature_result signature::process_serial() const { + const auto sub = this->has_sse_support() ? 16 : this->mask_.size(); + return {this->process_range(this->start_, this->length_ - sub)}; +} + +signature::signature_result signature::process_parallel() const { + const auto sub = this->has_sse_support() ? 16 : this->mask_.size(); + const auto range = this->length_ - sub; + const auto cores = std::max(1u, std::thread::hardware_concurrency() / 2); + // Only use half of the available cores + const auto grid = range / cores; + + std::mutex mutex; + std::vector result; + std::vector threads; + + for (auto i = 0u; i < cores; ++i) { + const auto start = this->start_ + (grid * i); + const auto length = + (i + 1 == cores) ? (this->start_ + this->length_ - sub) - start : grid; + threads.emplace_back([&, start, length]() { + auto local_result = this->process_range(start, length); + if (local_result.empty()) + return; + + std::lock_guard _(mutex); + for (const auto& address : local_result) { + result.push_back(address); + } + }); + } + + for (auto& t : threads) { + if (t.joinable()) { + t.join(); + } + } + + std::sort(result.begin(), result.end()); + return {std::move(result)}; +} + +bool signature::has_sse_support() const { + if (this->mask_.size() <= 16) { + int cpu_id[4]; + __cpuid(cpu_id, 0); + + if (cpu_id[0] >= 1) { + __cpuidex(cpu_id, 1, 0); + return (cpu_id[2] & (1 << 20)) != 0; + } + } + + return false; +} +} // namespace utils::hook + +utils::hook::signature::signature_result operator"" _sig(const char* str, + const size_t len) { + return utils::hook::signature(std::string(str, len)).process(); +} diff --git a/src/common/utils/signature.hpp b/src/common/utils/signature.hpp new file mode 100644 index 0000000..d5b1531 --- /dev/null +++ b/src/common/utils/signature.hpp @@ -0,0 +1,62 @@ +#pragma once +#include "nt.hpp" +#include + +namespace utils::hook { +class signature final { +public: + class signature_result { + public: + signature_result(std::vector&& matches) + : matches_(std::move(matches)) {} + + [[nodiscard]] uint8_t* get(const size_t index) const { + if (index >= this->count()) { + throw std::runtime_error("Invalid index"); + } + + return reinterpret_cast(this->matches_[index]); + } + + [[nodiscard]] size_t count() const { return this->matches_.size(); } + + private: + std::vector matches_; + }; + + explicit signature(const std::string& pattern, const nt::library library = {}) + : signature(pattern, library.get_ptr(), + library.get_optional_header()->SizeOfImage) {} + + signature(const std::string& pattern, void* start, void* end) + : signature(pattern, start, size_t(end) - size_t(start)) {} + + signature(const std::string& pattern, void* start, const size_t length) + : start_(static_cast(start)), length_(length) { + this->load_pattern(pattern); + } + + signature_result process() const; + +private: + std::string mask_; + std::basic_string pattern_; + + uint8_t* start_; + size_t length_; + + void load_pattern(const std::string& pattern); + + signature_result process_parallel() const; + signature_result process_serial() const; + std::vector process_range(uint8_t* start, size_t length) const; + std::vector process_range_linear(uint8_t* start, size_t length) const; + std::vector process_range_vectorized(uint8_t* start, + size_t length) const; + + bool has_sse_support() const; +}; +} // namespace utils::hook + +utils::hook::signature::signature_result operator"" _sig(const char* str, + size_t len); diff --git a/src/common/utils/smbios.cpp b/src/common/utils/smbios.cpp new file mode 100644 index 0000000..f9f29e1 --- /dev/null +++ b/src/common/utils/smbios.cpp @@ -0,0 +1,83 @@ +#include "smbios.hpp" +#include "memory.hpp" + +#define WIN32_LEAN_AND_MEAN +#include +#include + +namespace utils::smbios { +namespace { +#pragma warning(push) +#pragma warning(disable : 4200) +struct RawSMBIOSData { + BYTE Used20CallingMethod; + BYTE SMBIOSMajorVersion; + BYTE SMBIOSMinorVersion; + BYTE DmiRevision; + DWORD Length; + BYTE SMBIOSTableData[]; +}; + +typedef struct { + BYTE type; + BYTE length; + WORD handle; +} dmi_header; +#pragma warning(pop) + +std::vector get_smbios_data() { + std::uint32_t size = 0; + std::vector data; + + size = GetSystemFirmwareTable('RSMB', 0, nullptr, size); + data.resize(size); + GetSystemFirmwareTable('RSMB', 0, data.data(), size); + + return data; +} + +std::string parse_uuid(const std::uint8_t* data) { + if (memory::is_set(data, 0, 16) || memory::is_set(data, -1, 16)) { + return {}; + } + + char uuid[16]{}; + *reinterpret_cast(uuid + 0) = + _byteswap_ulong(*reinterpret_cast(data + 0)); + *reinterpret_cast(uuid + 4) = + _byteswap_ushort(*reinterpret_cast(data + 4)); + *reinterpret_cast(uuid + 6) = + _byteswap_ushort(*reinterpret_cast(data + 6)); + memcpy(uuid + 8, data + 8, 8); + + return {uuid, sizeof(uuid)}; +} +} // namespace + +std::string get_uuid() { + auto smbios_data = get_smbios_data(); + auto* raw_data = reinterpret_cast(smbios_data.data()); + + auto* data = raw_data->SMBIOSTableData; + for (DWORD i = 0; i + sizeof(dmi_header) < raw_data->Length;) { + auto* header = reinterpret_cast(data + i); + if (header->length < 4) { + return {}; + } + + if (header->type == 0x01 && header->length >= 0x19) { + return parse_uuid(data + i + 0x8); + } + + i += header->length; + while ((i + 1) < raw_data->Length && + *reinterpret_cast(data + i) != 0) { + ++i; + } + + i += 2; + } + + return {}; +} +} // namespace utils::smbios diff --git a/src/common/utils/smbios.hpp b/src/common/utils/smbios.hpp new file mode 100644 index 0000000..e6c3942 --- /dev/null +++ b/src/common/utils/smbios.hpp @@ -0,0 +1,7 @@ +#pragma once + +#include + +namespace utils::smbios { +std::string get_uuid(); +} diff --git a/src/common/utils/string.cpp b/src/common/utils/string.cpp new file mode 100644 index 0000000..27c1a31 --- /dev/null +++ b/src/common/utils/string.cpp @@ -0,0 +1,129 @@ +#include "string.hpp" +#include +#include + +#include "nt.hpp" + +namespace utils::string { +std::vector split(const std::string& s, const char delim) { + std::stringstream ss(s); + std::string item; + std::vector elems; + + while (std::getline(ss, item, delim)) { + elems.push_back(item); // elems.push_back(std::move(item)); // if C++11 + // (based on comment from @mchiasson) + } + + return elems; +} + +std::string to_lower(const std::string& text) { + std::string result; + std::ranges::transform(text, std::back_inserter(result), + [](const unsigned char input) { + return static_cast(std::tolower(input)); + }); + + return result; +} + +std::string to_upper(const std::string& text) { + std::string result; + std::ranges::transform(text, std::back_inserter(result), + [](const unsigned char input) { + return static_cast(std::toupper(input)); + }); + + return result; +} + +bool starts_with(const std::string& text, const std::string& substring) { + return text.find(substring) == 0; +} + +bool ends_with(const std::string& text, const std::string& substring) { + if (substring.size() > text.size()) + return false; + return std::equal(substring.rbegin(), substring.rend(), text.rbegin()); +} + +bool compare(const std::string& lhs, const std::string& rhs) { + return std::ranges::equal(lhs, rhs, + [](const unsigned char a, const unsigned char b) { + return std::tolower(a) == std::tolower(b); + }); +} + +std::string dump_hex(const std::string& data, const std::string& separator) { + char buf[64]{}; + std::string result; + + for (unsigned int i = 0; i < data.size(); ++i) { + if (i > 0) { + result.append(separator); + } + + sprintf_s(buf, "%02X", data[i] & 0xFF); + result.append(buf); + } + + return result; +} + +std::string get_clipboard_data() { + if (OpenClipboard(nullptr)) { + std::string data; + + auto* const clipboard_data = GetClipboardData(1u); + if (clipboard_data) { + auto* const cliptext = static_cast(GlobalLock(clipboard_data)); + if (cliptext) { + data.append(cliptext); + GlobalUnlock(clipboard_data); + } + } + CloseClipboard(); + + return data; + } + return {}; +} + +std::string convert(const std::wstring& wstr) { + std::string result; + result.reserve(wstr.size()); + + for (const auto& chr : wstr) { + result.push_back(static_cast(chr)); + } + + return result; +} + +std::wstring convert(const std::string& str) { + std::wstring result; + result.reserve(str.size()); + + for (const auto& chr : str) { + result.push_back(static_cast(chr)); + } + + return result; +} + +std::string replace(std::string str, const std::string& from, + const std::string& to) { + if (from.empty()) { + return str; + } + + std::size_t start_pos = 0; + while ((start_pos = str.find(from, start_pos)) != std::string::npos) { + str.replace(start_pos, from.length(), to); + start_pos += to.length(); + } + + return str; +} +} // namespace utils::string diff --git a/src/common/utils/string.hpp b/src/common/utils/string.hpp new file mode 100644 index 0000000..5dbcd56 --- /dev/null +++ b/src/common/utils/string.hpp @@ -0,0 +1,48 @@ +#pragma once +#include "memory.hpp" +#include +#include +#include +#include + +namespace utils::string { + +template // This should display a nice "null" instead of a number +static void sanitize_format_args(Arg& arg) { + if constexpr (std::is_same_v || + std::is_same_v) { + if (arg == nullptr) { + arg = const_cast("nullptr"); + } + } +} + +template +static const char* va(std::string_view fmt, Args&&... args) { + static thread_local std::string va_buffer; + + (sanitize_format_args(args), ...); + std::vformat(fmt, std::make_format_args(args...)).swap(va_buffer); + return va_buffer.data(); +} + +std::vector split(const std::string& s, char delim); + +std::string to_lower(const std::string& text); +std::string to_upper(const std::string& text); + +bool starts_with(const std::string& text, const std::string& substring); +bool ends_with(const std::string& text, const std::string& substring); +bool compare(const std::string& lhs, const std::string& rhs); + +std::string dump_hex(const std::string& data, + const std::string& separator = " "); + +std::string get_clipboard_data(); + +std::string convert(const std::wstring& wstr); +std::wstring convert(const std::string& str); + +std::string replace(std::string str, const std::string& from, + const std::string& to); +} // namespace utils::string diff --git a/src/common/utils/thread.cpp b/src/common/utils/thread.cpp new file mode 100644 index 0000000..7d778ed --- /dev/null +++ b/src/common/utils/thread.cpp @@ -0,0 +1,105 @@ +#include +#include "nt.hpp" +#include "string.hpp" + +#include "thread.hpp" + +#include + +#include + +namespace utils::thread { +bool set_name(const HANDLE t, const std::string& name) { + const nt::library kernel32("kernel32.dll"); + if (!kernel32) { + return false; + } + + const auto set_description = + kernel32.get_proc( + "SetThreadDescription"); + if (!set_description) { + return false; + } + + return SUCCEEDED(set_description(t, string::convert(name).data())); +} + +bool set_name(const DWORD id, const std::string& name) { + auto* const t = OpenThread(THREAD_SET_LIMITED_INFORMATION, FALSE, id); + if (!t) + return false; + + const auto _ = gsl::finally([t]() { CloseHandle(t); }); + + return set_name(t, name); +} + +bool set_name(std::thread& t, const std::string& name) { + return set_name(t.native_handle(), name); +} + +bool set_name(const std::string& name) { + return set_name(GetCurrentThread(), name); +} + +std::vector get_thread_ids() { + auto* const h = + CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, GetCurrentProcessId()); + if (h == INVALID_HANDLE_VALUE) { + return {}; + } + + const auto _ = gsl::finally([h]() { CloseHandle(h); }); + + THREADENTRY32 entry{}; + entry.dwSize = sizeof(entry); + if (!Thread32First(h, &entry)) { + return {}; + } + + std::vector ids; + + do { + const auto check_size = + entry.dwSize < FIELD_OFFSET(THREADENTRY32, th32OwnerProcessID) + + sizeof(entry.th32OwnerProcessID); + entry.dwSize = sizeof(entry); + + if (check_size && entry.th32OwnerProcessID == GetCurrentProcessId()) { + ids.emplace_back(entry.th32ThreadID); + } + } while (Thread32Next(h, &entry)); + + return ids; +} + +void for_each_thread(const std::function& callback) { + const auto ids = get_thread_ids(); + + for (const auto& id : ids) { + auto* const thread = OpenThread(THREAD_ALL_ACCESS, FALSE, id); + if (thread != nullptr) { + const auto _ = gsl::finally([thread]() { CloseHandle(thread); }); + + callback(thread); + } + } +} + +void suspend_other_threads() { + for_each_thread([](const HANDLE thread) { + if (GetThreadId(thread) != GetCurrentThreadId()) { + SuspendThread(thread); + } + }); +} + +void resume_other_threads() { + for_each_thread([](const HANDLE thread) { + if (GetThreadId(thread) != GetCurrentThreadId()) { + ResumeThread(thread); + } + }); +} +} // namespace utils::thread diff --git a/src/common/utils/thread.hpp b/src/common/utils/thread.hpp new file mode 100644 index 0000000..b9ee875 --- /dev/null +++ b/src/common/utils/thread.hpp @@ -0,0 +1,21 @@ +#pragma once + +namespace utils::thread { +bool set_name(HANDLE t, const std::string& name); +bool set_name(DWORD id, const std::string& name); +bool set_name(std::thread& t, const std::string& name); +bool set_name(const std::string& name); + +template +std::thread create_named_thread(const std::string& name, Args&&... args) { + auto t = std::thread(std::forward(args)...); + set_name(t, name); + return t; +} + +std::vector get_thread_ids(); +void for_each_thread(const std::function& callback); + +void suspend_other_threads(); +void resume_other_threads(); +} // namespace utils::thread diff --git a/src/runner/debugger.cpp b/src/runner/debugger.cpp new file mode 100644 index 0000000..6fc87c5 --- /dev/null +++ b/src/runner/debugger.cpp @@ -0,0 +1,82 @@ +#define WIN32_LEAN_AND_MEAN +#include +#include "debugger.hpp" + +namespace { +bool acquire_debug_privilege() { + TOKEN_PRIVILEGES token_privileges; + ZeroMemory(&token_privileges, sizeof(token_privileges)); + token_privileges.PrivilegeCount = 1; + + HANDLE token; + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &token)) { + return false; + } + + if (!LookupPrivilegeValue(nullptr, SE_DEBUG_NAME, + &token_privileges.Privileges[0].Luid)) { + CloseHandle(token); + return false; + } + + token_privileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; + + DWORD size; + if (!AdjustTokenPrivileges(token, FALSE, &token_privileges, 0, nullptr, + &size)) { + CloseHandle(token); + return false; + } + + return CloseHandle(token) != FALSE; +} +} // namespace + +debugger::debugger(const unsigned long process_id, const bool start) { + if (!start) { + return; + } + + this->runner_ = std::thread([this, process_id]() { + this->terminate_ = false; + this->run(process_id); + }); +} + +debugger::~debugger() { + this->terminate_ = true; + if (this->runner_.joinable()) { + this->runner_.join(); + } +} + +void debugger::run(const unsigned long process_id) const { + acquire_debug_privilege(); + if (!DebugActiveProcess(process_id)) { + return; + } + + SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL); + + DEBUG_EVENT event; + while (!this->terminate_ && WaitForDebugEvent(&event, INFINITE)) { + if (event.dwDebugEventCode == EXCEPTION_DEBUG_EVENT) { + ContinueDebugEvent(event.dwProcessId, event.dwThreadId, + DBG_EXCEPTION_NOT_HANDLED); + continue; + } + + if (event.dwDebugEventCode == EXIT_PROCESS_DEBUG_EVENT) { + ContinueDebugEvent(event.dwProcessId, event.dwThreadId, DBG_CONTINUE); + break; + } + +#ifdef _DEBUG + if (event.dwDebugEventCode == CREATE_PROCESS_DEBUG_EVENT) { + OutputDebugStringA("Debugger attached!\n"); + } +#endif + + ContinueDebugEvent(event.dwProcessId, event.dwThreadId, DBG_CONTINUE); + } +} diff --git a/src/runner/debugger.hpp b/src/runner/debugger.hpp new file mode 100644 index 0000000..60e960e --- /dev/null +++ b/src/runner/debugger.hpp @@ -0,0 +1,14 @@ +#pragma once +#include + +class debugger { +public: + debugger(unsigned long process_id, bool start); + ~debugger(); + +private: + volatile bool terminate_ = false; + std::thread runner_; + + void run(unsigned long process_id) const; +}; diff --git a/src/runner/resource.rc b/src/runner/resource.rc new file mode 100644 index 0000000..ba86c6f --- /dev/null +++ b/src/runner/resource.rc @@ -0,0 +1,100 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "windows.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "#include ""windows.h""\r\n" + "\0" +END + +2 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE VFT_DLL + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "X Labs" + VALUE "FileDescription", "Steam mod runner" + VALUE "FileVersion", "1.0.0.0" + VALUE "InternalName", "Runner" + VALUE "LegalCopyright", "All rights reserved." + VALUE "OriginalFilename", "runner.exe" + VALUE "ProductName", "runner" + VALUE "ProductVersion", "1.0.0.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +///////////////////////////////////////////////////////////////////////////// +// +// Binary Data +// + +102 ICON "../client/resources/icon.ico" + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/src/runner/runner.cpp b/src/runner/runner.cpp new file mode 100644 index 0000000..e37d67b --- /dev/null +++ b/src/runner/runner.cpp @@ -0,0 +1,22 @@ +#define WIN32_LEAN_AND_MEAN +#include +#include + +#include "debugger.hpp" + +int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int) { + const auto* const command = "-proc "; + const char* parent_proc = std::strstr(GetCommandLineA(), command); + + if (parent_proc) { + const auto pid = DWORD(atoi(parent_proc + std::strlen(command))); + auto* const process_handle = OpenProcess(SYNCHRONIZE, FALSE, pid); + if (process_handle) { + WaitForSingleObject(process_handle, INFINITE); + CloseHandle(process_handle); + return 0; + } + } + + return 1; +} diff --git a/src/tlsdll/dllmain.cpp b/src/tlsdll/dllmain.cpp new file mode 100644 index 0000000..e3ea71a --- /dev/null +++ b/src/tlsdll/dllmain.cpp @@ -0,0 +1,4 @@ +#define TLS_PAYLOAD_SIZE 0x2000 +thread_local char tls_data[TLS_PAYLOAD_SIZE]; + +__declspec(dllexport) void* get_tls_data() { return &tls_data[0]; } diff --git a/src/tlsdll/resource.rc b/src/tlsdll/resource.rc new file mode 100644 index 0000000..bf5ef22 --- /dev/null +++ b/src/tlsdll/resource.rc @@ -0,0 +1,93 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "windows.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "#include ""windows.h""\r\n" + "\0" +END + +2 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,0 + PRODUCTVERSION 1,0,0,0 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x40004L + FILETYPE VFT_DLL + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "X Labs" + VALUE "FileDescription", "TLS index allocation dll" + VALUE "FileVersion", "1.0.0.0" + VALUE "InternalName", "TLS DLL" + VALUE "LegalCopyright", "All rights reserved." + VALUE "OriginalFilename", "tlsdll.dll" + VALUE "ProductName", "tlsdll" + VALUE "ProductVersion", "1.0.0.0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/tools/premake5.exe b/tools/premake5.exe new file mode 100644 index 0000000000000000000000000000000000000000..1a637aa93c942a9268937d8732abf463ebe8bddc GIT binary patch literal 1568256 zcmdqKd3;pW`9D6{NZ7oCFc4H^)Tr?j!Dw89ahZV`xFZt?f`A*uqKGRIW+Yn0;3UfQ zI+nKDR%_KRpK4pXek=lR30ne@1W;MD)o87rFfLIm1Q+J_en02Vl7y&zeLtUne!N~` zX6`-roaa2}*`Mc}TY1?kM~=hc$i-hG;c%?MC;xfm|F8eAAj{!6V(hvj98VA2cHEk* z;I`vtExK;0yJpGaYnNPglY7BcH{ZNC5NGWpEEs~w;JV;)+*9iR7JJm9XcV z^*#BHU4I$AAbG9JalB)2_7P(opA5o8hsxzwzL)QCIOVGc)7Rg#9gYEVDgEiFF4RcH z^&Cg_isVD~v-X4O4?eEDd8DIU0JU#A2Rj3)3t3p=+ zXH$lt-C&2q#OHpr&G_d58I9M?99<{jM)fF%<4Am7fX|G79*3iGe2s1>bHrR7^=MGl zr=4g1#Xj#Wufy>rpLYYtz`f&@zU{^@S-OM^DYyd;Wr21buH7{^E=EJ*(gBm z^@(YXy(l)sVOF%>I&Y1`k>xPPa=}0bv12Ybcf`$#J*F{v5AHAfU>(WNv|5$(>3n>4 znbwp7v!O9`jA_kr2CYWZYEz#*z+2Ous-=Tp&>*@D5R8rInijsqhLi@aO#y3{dWj9Q z76XzSi^@&wjv~{vt|%%stx%E2jBIp!=cT41GxE&TuF0wnUs3rwxoz!LEk+h#+|D`NXj+rprd0qmURDHr zM4Fst#Z;$hOl-2ug2-D&cTG zjEgn^t-jdAY!x}*;lK=Kz2-FH) z6nhFkIUzZP>Aj|K1f~!kVp@e}WJ7U0hhG|YhOi2)YU@{tgm;bLCg!UA?O>p$Rs9VY zWnuJ8=Wno~YZus?&lA|WK*{y-y3N>_Q5@d__SXZ8GYGBJ+O(!R)sNmF(X^V))MO5`c~XJ>DH2tMa65_djPb0!94nUhi{m-#)R61b z3wI9KaEm7MASFSxY{AK&Wg>`S|tgITi*;9~@f#(WGOqy#p zdkV=X!Dx*We{SE(nnB=33{cwaDVRd!T2lbj6sI#dp{9^9wX0JA6XtT+6NB;Gt;M{w z8pPSqXw=8~M9ei4w|Lo*X@a(TOq0Dyx8Q&271(Z9FE{8dhDh%qIP*V^-HVF7DV`i5bomJ!xL>fCx z>tzmb=E5~oFHV1n5H|2&-GA&Qne$T)h3aaUa-nzHG@UJun zLJZahqMp)V)LTpV45zot7?w?(bgTojg6!MXfD;M86n8Lo;w1MFN5Fc8GD3udaMlj% zA_#{IBb~WM{m(JGNM}~)(8~5(<`93w zmeBM{P@p#!NSHZW{1ZZ33&Q97tgVa zqmxU`rnhp{nXiN8qLa%j8xqF-its^aR6S4XHpY4!3sd?)gv-40AW#*^dBa@rDlieS zHWC?uiY*kBLGV^=V#13_nH5b-hXpWYFk6?|^meY9vp#;F7i%(D80Y1VM2q=T^Mv(g zQ%7DP$5Xf}Qd>AYJiwe#0Fx2#YJ z{?85_?TvI}*}c}L&hHU8%iAUEerNheVSH&2my;`R_E`BFvGQm8txdA>#sA5YA1h0~ z$Q^RoOaAv)u;gHC5H;4^T%b&An>RWompD}y?#*`uqEia|(bLR^4~+YlK;F_!sCq%9 z8f=BR!RXaR)gb%em?4k`p(1ys^%)5wNe=<*u7W_$A#=elUvx3}cp{|cRA(i|%UFM? zX8Ba+@=Y1lDtaw^IXP z%^NKyHLV@g0av_9$uOxfIAM{9&sMc>J+I*DNGCu8 zjW)vS$`1ly2&*mv9I&doBDW98x)ri`B3Z*3pO67{q9xLit>-+kQ1}7x);hEMG6diy zLjWP)8s4Yg=ne0=hl6(t?3g|PXA|IyxR&ntxfuWpnsbt9PGdNyUktAU_d&3>3glFY z>eqQ$j_4E^ReeUyNsU_CcT}NcGv^{rH?pp||G}u^Wz<438lh;+=uGhT6tM=*4_MoR zv7t4O4;BHKq<6@!+yXPvPVjCN_f=x*%@cBp@^L z0YuJ@FB4!6uu#wfPf^g!rI}kLrc5#9&6QVPzQMNFLq$$80>QX2q|R>}-P@4*yzF%V z+QXExzMx%mp&4lwyXHc3!7|w8`Rura35xcAr@e)AI(cN zzX1{;E2mLAzo-38_zGvw(Jq7+)aj_C2k<$Bqfy_E=?5VnX^;@^p(6=56p1Hbbp|0$ zOrLd#rdNpq)q8*zr`hyXZlIzGdZQ(SwaF8LxQ3nKyl71UO@UVR_`5b|^)xqVQPH#_ z&(Vkh5?a;OFY2}dYa}dNbaIQ`$>rbB3EYQNCu60Pna+iY$VQ6p$olPGTUE5GiC1J{ zvXh)^7-m_RB`pH6sxC1FjF|T;>fyPOgSnwoBL^WhOjtCh5VTWX*DNUGKs2|iXCQBd z^6|K79f@%Y&63?BuZ-0OC~j0q3xrmpxuG%qVZ#=$@j!FK2esvxwVMh!0rg4M>I_z_ zUkXD3>N-PTPjUi*+U}e%)4Als_|TX?%UrOX&jfO|ljglvb5OfpSSk`g6<6LnZ~nXu z0m}(c(*5;?N7|R|Z`k579@uPcPCY5^n)YXU`=3dp7MySk#Q2FHjU3|eTa&w?R|B!x zK*7O4#Vbbr_d!muV?gBRf0+@6+bQzsdd8`>XR{?7@ws4Mnx#`Ga}#pr%`FxDQ{)?W47x7i<T%pc}nPN3rGYTSa z8>4*mr(rm@}L<--!WGS zCPjYV{nj_lDCsw~s-H>6dP1q0VBvbqWHMZ~)HJAX8oSb7?{Ip(Fk1FgJ(ObEMLm?7 z)^j#&cmNYzg$ep5oDJ`&ArTton{aDxc$larkC4EX^XE}LandjeVgGwP-U*9_+&T!> z3ioomD%l?FAiTt73d+0c?ZjrwQN4`%HQ4aG=d81El;&XQ)W z>g0}Zzg}^0ifQTff(9IMWKwhYroJC;X2V^e2Ycnz_RnDy!5ZokFosl29Ve;^C|q~svUy|M}$TOA%!UeTGh1fM1t)fX9MUeUs4rN z+lV~DRVZrLO~VK#)I^gzP|*S=*+F9!U4VgAxA4?d2#(MhViOD0)X!=RK?dVMrVI+k zykg$Qe~(5TVmRMCB0d~H;0s_0Fg(D6me}M?Yz#y;xf?!!0fi`@VZ+L+V0&=}ux`v9Z9MPskfTrdM>@l=?I9#5u+dxWUp z*hO7%V4QJpFZZ^Gd$TITzd?UJ-H(5QUfwZ=fRnS5p+W8CY757SsLxlQ7{dw>x?x~U z>vSw6t~oQWsROW9uvikLD#3S{D5NaLK!v02SSTl)jGw&*$rdpFv?mawd%Hnx?Bv2i zNhAZOf*m_PnGPjig5bRt-m#~OR>8nESG-@7>p*zUYkfQ+@0asNfmuNd*@!VmC&Jj- zyK-W2tTxMx-c8rsjKcqkPK2DC=njuk7yc|4Ch5@bM{*tN`&Z>VqUT?Q4%CxB&xLu^ zjaZyfKN6w9PYh??mk&TX#DYaN#_GIoeot%x8hk}HD}6<^b+>`FVu7siel~pzx1r#z zybgS^cB5IAMB`dj`$6&zdi@lkC`9|#9eJ{Y>OxI^G}qy?n%A8PH1qe__U{t=_eu8e zarW<#_+1&BT)gfmyMsJjV3@XM-SPI7PcaFRp0S~hBj8Jm{H)ECpJxl8lPU1h1 zo;x5a4I%*S{$>{E?Q+^bYhI^>>0fcu*;%i3r@_ZdpJscx8o6Eh&DiZ7M*W>wrm{v# zgG#GKL8Xg_0yyF;irDC z7KHI#r@!GHqkeE6O+7@_TGeGA!OH1|!FPakv>#Wa@M9o}#7`V@OqN67rxY z!#IajRyT#5CKEsMcNDI%yx~8B1Gjp}C|Jqo2Av6`VVAJZ=LO+T;s)5eWe8>8Og9Bp zpaRtJG+H1gY}=i`VSDSKS#mCX2s82#l%4QntJ##uwRWr9k0wN+DcU|u!IMz89I&Y? z0$4?^OHAf|622PoST1NW5WPp(0Mjm$Zo)5CT5@UK$)KCgb_QfDLxP~+X|$b$h;lN# zWz^pQscF0aolEc?D>3eeq=a_W@Z2B(6`rCIJ@o#;m?EA-JT6pbPi;W>ltA>@b$ix! zfzh#y)I%PGKDAs?3(m%hL?;(?&J-Bh(0RuXh{{|8?(ez2L5c7=@O}%zAH-%H;JO{z zB|?WQuU90Y7Voz)umVfD&czvhj>H1G`Z>BHod0-M;5>prft`*^5lAK&ZS$9tdIa2&*3*1fA7RF36`AV9xk3cfh24_vjPN;A<5H__=-w39CTI)$AyGrriSAL8;+81hGVXVW3Dp39*%MiN4a`$w#LYv zSQKCcc{L5k3>%JTehN5RIq{h5_utp}_|;mWoSXZZW3`5%T3OO}XmUU8JQ@a%T42LK z+fiWfXc#;;3}t{Jeh~mT*9PEt4Zt}z=??!uNVhnH{A)h7$?k6Sxo!l=4myT-eeWj_ zfi(1Nk$280nSaA+@Qym$F<`^~&^R%&RB#`q;ehb5)-G@>dF1v^bf&qsRXu-(=2GkV zMyw%X_w_X6wedGh9)%zkG6svwWf%%*VKey)BZX|Irs+Qe{J(r+gTKLU4|@=41TDX2 zJ={xvEtRf%$}i6KiyuQZTASAm!}R$(j^7Zv^#>A(btTjEwcWTDh+N+J^v_Je=b4_>|>56-n8d=%HbnUu)b>stbc0f#e2n- z8ZM!m(*g8z+KG_QCL zvjr)_>{{_8KAKlF+83Hv(8e8%KfqL+8S&HcKH9`A64*;eX)BvqUZ-VtQ>P#)&iGC# zOAE>w?mCU(uH3Rjd>rV7AeX~Cg^EeX2wK&q-`mCmm6C-(V>3K~aet}+_zfR~#;=7S zaHy6hPO1ew_pXIpq_s)ikJZrkp3?W!)0^@g`pUzp){WA-SyiW6FSlFYgVwet2C$5F zluFz~hpkv@kj}sB5a#(ab7>vyWm3y(h8ct)o7WjICN?G=?A*`@b1R@O#V`TyX>-PnB1!IExYm$uO8?@oA~cxBrXiN6=0}GO5ty zK6Kxz{xF3@&Fm4BG~t<;744zHRzO!U zKy|UaX_H*&wso47+o)cHGWCjMDzzS<=2nG@6WmAOSYV>lkPI8!@$6*%iOn5ex7XUk zNHGF_*2l@1YNuIJioqDKLQvWnh-P_{+2V*7LEffAxh0>VW~BQqj23fcu_hrpZsNtG zYzipc&bk1f)kZV5n8gyiZG&~2svm?Rik;S;*hSf@t3BW0l}S>@Zc|UPzlh)21%Ibk z6pS32$qvbQro`u0yzdq(!doc3AtrsKmU*32OvEoXy{uiYsE8e}$PA9aA?y_#!7N|S zqHUdbb#ySa0!U;5z5wMx!{4YrqFqDV4P2Ba#}bm`X*M}Nx3LfJ1)l7~d*Klc`!UFH z_8mLl$q&QdEsLxsQc{tT+to)cU^WU6HBK(JsI%6y{ze^(pQHvjWbSn=;Zo0Sz*8{g zuGZ`ZSI8Y`ZloU?NHk8YL%~RRKZ`Dgp|~Pm;wIH~d<@r?;865)DIofhTw7WQv7cPEUi6o)fAWy2V`qgN zL*QhXv2kNDfH9WnMBmKVXYy$pxgH8PurVSmZ7>J4fSa?yMsg|~_^;o{mBVy}&g*U~ z$PEuLR(l7t911zcNE1BZU{NXZO^x@;@{(@LIemy#=nWv?pQXTR+rTV`)s4uj(XbE` zPiD&k7Tj&SJSjI+TG4Ja_;K5YZmlHvAdyngO#yTn&q4~-)oPGT0g3tAgL%f?R2F7z z1WGj8lKC%VwQtaHaR5$%FZCvnFDWopwo|8KTh(ib0??-xt0Crk>>inr`sYi;$k#ce z>AcGm|IN0@#Kb0cP41R20LQ~W zqc#O)mD(ec-V=?U^7FF72S9s1w#*hxJH0D2C+We{$MUK@Cp z+m{}T{;)QPUk#E9n)ObsQb7R1DNwPU%hR%SwA>yjwHr-X4Jq0{avOt3<07SzXYIC;kBLd`~VPwR6Trm_Me@(-a;Ipn(g0N=RMFnJcKgQOBLC5-P& zAcUCbtU>DGC;|!QtwuE2u&udP^*$o9R<}0LABQOmlf5BZvtb>s$1T4-jM21}-vt6xCIr36hs3;K(4#zMv?$((3_*|tkdpP@#iT{>+A?b2qo|I?&hIzr!5 z$2^;~OS4n0i>38u)skxc?rP~teYlRFt?G}E2%3}{HiN2|l&!Ia4#|V1NfM-oD4FV9 zI#TPabX1>Lmwdovlh)GrO7~!np`$UhDuorSZ`^E;dn?98xF$O8tWr#p;czB-(%!{O zFJ-tkNYsH5$^*bf?8c&6(?ZPnpt4@36?S7$anNc*;Mi=2riWz3bdZ4nacs#_HGj>= zLan9pH_RpsQ!cqA8K$%B#r#Zv#xsWzWk!(^H1j?O&H&3Hc>jto`c%+bbNJ||T4^;A8Q8lipFJGc%!k}RIQr!N7+-_HwNb&`x5Iu8>Jt`Mb z(1V0oyBhr%sRV7;a9$2a*Ne}K?ucd~kp(h;<&x&cr{ z3#@BND#r7~$BcZQC!HWGA)%PHbVPmDCd1$4x3>8W|0c*`H%3Qs-!^rxA}xRfF<<&{ zu}dnMv3nB3`C@)lRJ5oE?xmaEY`fWQsvf^#E&d#~wC!fMsTy1hSZ%5{%6s*KP9z%K zyy&w!RMqzwnSHtlu`J+rf5>M>A1PXeK^CUt1EzI^Y0WE0xZ>l;7Hz@k_=M|C`TnWd z@Ot=7)6&lbu_o+@12&J!la2{6V*saZ z0*E$a_Z3wWB4R|{Nc|jpK&~Lo9&>%MoD1HrB4X(FUeR=Qt1i!KS5tq^)eII@sc|67 zg~rVq56EFVKQ-QMj4mobWDmRmQqV=vmZq&B(r=_FbHzp>%`3fE%-;aI)G-7?&}6_f z_gpd?1k9S<74J)PSOuo_vA-kN__F ztS(i#lJ}ppNgxsOk_5UsN){;6j?nF5vd4jJSDx{#$!6Ni>@TYRu0+$5aX~nc>(d)`e;2RO&>4HcTFFebn&O*nl1!T2%H=G zENcuy>17@K-Ts$#&cU9`x=c*tKFgX(K^OKU!3X~-B>2bMH3^=5_zwEe#i5@j>7wHg z8Ny_Z=m(oJ5W?Wk!x0CSt(G5NMk3l2WLc&%gof*-8ZA$|cG00a3ZIV`wX2qnP4Gp&m|l=BhJ<_0A5jrw;e zabsa;GX7~smpavpFEbdOYcw#(Oi#HXv3wX6y)Hj9D|RitHeR_R!RRz~r+s5rd_owN zqcg!(>phGLI@Yp9NjuV5BSU8eEqHUQy@M)R?m8vrO|UdAvYyo=C{NoFsMsAE9;o;z zbVShFgh<0vQ)%>tk0D)aEBZC4I9wSm=6h!`j12j<1`}{}p3G^`He_}((%3;mHimkY ziXBVcQvdL^{z?=5iGKV?83a=6u3C~ztI9zQ-#7TT=_;koKW5{@I=HZ$Gwb)h!QJg2 zzLbCa@HCFqBOo~i!wY`mgUpz}i_R94c0CKgBD(e~8A!2>Lee87^NmG?GzQ&tdYMGF zZUc&4%a#!rd(9FAbU%U*lgL$%93e9;gj&CfcR>Nf)>+`U*y1d`&&a|a0^|>&*-3fl z*h>b zRs-wy&DiW5mWU1{oj{-HTGKP1V=w)OD{zM+g2-D{_XBp@zAo|6UrS%#=numpOr|8% z8Et?SY}+9#N3WoiOD0ilj}EyuBx;%Qg>cxNE($eK^||z@vV_i0+mmERm;viSSpce6 zKeH=y!6t@0JoLKEET)Gs6qD_Var_~H*5(b1Tzhn zn?ePCYr8+EF}~GbvHi|@B2Op9a-9#Atl!a%z>T%N_H@`s?uN$Yqs-XkYDzY`LfC&5 za3;1k>_l%n!^ogdMsF>lyx2uq@$52;;>Gq&RBo;J8@?u=wcT6Mc*hg|SWV)2x{#=P zdvOpZ<}GQCbi0h{A5}KI9y+oTu4l}(`4&whXa6Ia*88%VYt%}?vW!YH=K8OtaD^`c z6ZJ*7R*F4DnjZa1b zVy-{ltg%wu$MQjpT!>C`!8=xenZFQJTR(Ep^I-QVD1O_3iW3IKhfaG!7U!RDA9pqM;CQ8N5 z2?6f=jbjH~7$HTZ81Tps@d#o!RAlWS%$Hb^Sq>K=JYGB#Ue8C+lDQg*y|CCSp&rLdIfsrqj#`Nc8`1=F7YO=GI^o#V9T%MeizK#`W&{x z`SSQ)btiVO;sF?);h`8kR`rECiX)$b!mHD_&>GFA+|6^LeSCyA2uI_(4v~K!-{3u9 z>^$6;ve;I2)Lvd})NStsjr3TMv_6yYme<;@0@6#P-enpD%Vj=*eEo{|AJ@y)u(K9B zu)QK5ytaHmWHfY1C8ejxyKn%uc{MM3f~a3*F*Bh1E^sJ(tZvH70*->@)Gf=$WbpA7 zXrkutLGu+GIUGu{W3Ip6ppiT!^Li$9q_3X!3AEaZbuKw}2h$pR)dWn5j<|_PCKqSz zZWNe+P-Xpsl45LC_5ao@)=S@r5g4$Pjs;F?WEc}Mm<6Sf$)lQ4j%a7-;CAqP=L-B+ z_ImWv0#F1)ENY|V2|oyp((805cn^j?!zoJuM%+t6gk?6x8J$~z5-P51yZXsrN%8%~ zddvxP?VZf?E!|F=f6>zc#cS zL-uP8&b0q<&-XYnHa=bEmYSG&b+&mRCnu04lUvC!AE^Er;Cv)E*L&2Tfnl)qP+EVf z-Cjga7b;I+=VQL@2=)|W$9cIF%^2`;jMYFi*QWSM13tsD(vN zw>?<{Y0ZJRN-`m$MoAN(NNe;=8(7!thzo?o-wbha)g08AG85vB+}7;~i@BStx5NgN z)g+tt@Dn%j%2iaD`vjjAFyV0V4u)H zZfQT&EBo0`WG8jCmt-v)%2XJl!6R>gN;?8OerMIa)m@Y`sA=WIfqancy$>QeW0;=e zqPIPn;_uHXDLz7NnxsM+L*LQzGX?_!P=O+5f~+b-3SYjXf(tU$8PB$07nuek*+?kLUK!*$VK4Q=qnRMv@+e8<0c#KUB7Ur7 ze>WhrsUS_?2y_wjHgz|GMk)Q9S)T$Oj#E+gSo_cqQ65&!>p9Eiqe1cXRom2$QH+?3 zxIIkjwetPo88lw(x3<#GO~y+xT(G1ut&fe>PN?J|j*=bR(ANm7;{zPLaok0gue|_j z+Kat>=;f4nvpOR+M(Eu5qk;-AJ?)+niz%0wYxZ?i1a0a9=tk-`0rD3pu}hY?$pyE} zI1_vJ{Owil<{G!caf8f7yrz{YuQBn#HXqUPqlSpN92iagik;!dVE*`Vs^?zofifSx z9`#KQN5zJ4pXJb1IshH{Qz}+@Uf|IxC5Y#6E7SuD)Uz!@DL+b&+SRj2qGn8~_w(;V zc@v|V&+Cwzetd`?Hr0a-|KaEX;DJh}Q(Ef>!IM|f=cz2G%1zugV5FUL74Sofi;|ABR< zhn|ydRzRE@6Ic&TY+m$XXo4HczMWA#MF z-iAx;tpzO*d*f4EY2OWzqem{L(@H-rSFb)eyF{SZE9I|8dp1jx-zv=zE>G-qdMVXcI!CJRI zHZ4@RScR$`v>ddyiP?af0S_)Z6ED+*%R^ab*e#1_MsLP-?lX-J;DA*mC#Fi~Z@`?r z*c1V2&_J6s=GuStV0cw+>g>;w9MNljFt7@>HEUs$vsJEw0D;xEurFC*s6l|d=ft8p zz-jU@A(?NcCf5vS_uqs6dGwBH?PEDEPv4;}l&^CB220&oJqfC>%Ujox<6G(Jefo|V zLa=e>x>wE}#G`ne6cA$e^f`VfZSnlB4q7qhIssERqw|W1%;>yQRmNhG#?YDad~E2y zvF;%6E%Vt5GjE3-HB!140|%pOLq}aMw#am+cfzIJq1=FVDT>ZBtPnS?5XA7O&b3-``71&O7>5}Svs&irr5TJR5rJ$hrg4uJ>I76 zv3{jjY!7NG$m<(IG(TWt!d$Rpn=mqk_87 zr8igRGzMbl;hY)!O2C-Z9jG|CWFaedrOlGd;YqtCmTXSQfdzt0IVdcl#$XUEVEiZ~ zE0lvcWylgPqct3t)p(PMYTDUlB%xC5R|2kcgbM>XEM*Wu=vw|ANSPme0)S~SAZaRx zu4Nb{5^;mRI;cu8te^r`Y>V191&&45d<@xx{n8o3UR_C$^<%Sn1EH6AT4F=pc}GFt zaD6a~m(^C81#k_jZ&5eO0Q34Cfc+O&@L8`my_ncO4x>d3dp`Ge*5+Dauo1t0fSXZANZNv2cB;o@L7rYg?0hnRS(g8 z%`CwC2&T2vRZ68Ah-hH4)bp0XEcN7J2e%;=5_ShCgdL$^AZB(T9i_{wwo3in*XDb^ zcK)oJmHouXx64T*o8=&Y7ImGUG!{nYJZzUe!!W=$+~(MvL+UAPcGKPfDA1$ja!;Xb zBQA-**hKKrMeyLV&E|;|XgHs3Vu8c$&}R;!T1@T-t*seN0@jvfD|jfKCj-7@f22Qc z?=kN4uU8?rk=YnJYQLwz2#;W*Y7Hqrwa)W5#O^(Lvf&_Wm!HpX%LbYy zgIGS7bCBjbn4ne7*+#hwHr9KlhC>}$r^k;-IBF_S=qk;=I zs}blT)!%N&)Odk%!#0i8WZ||RrV*C~GJ29pO`2w9nK6Uwcl2WF*xdv?ut1y2dKO3O z%oh8S^(64=D=#tXzsIW# zt;W~$ER2}zc66;`8wK1Y_|C$pX}?K=!0coQl&(H{3d0nrM}Re~veXGcU+z)Ep9dYp z^3KDP#F-mCI{6(XIWaR!or#XU!Yld_wE?l^HTeLdlR;?4i_2vy>Ucem&rb-SF7<@C zp^m^cdR=*u?m^-ArLp?_cYtjHiZ8A0n|(tV)+s8De15difKAj69vfGWP$5WDN0pzx zT+is0C(|ca6_-zeDQ*8H{QbvXOZ6~v5m>4> zFCFaYtO9fPpt39f2=@!pPcu*uwR6HbwD(vTSVz)Zv60NIi=*bJ6tzf4@V|vq0^l%Y zZJ_i)Au^Q<{w2jIEESUrSHr+|DG<{NCSj3ka<_yJMS@Q-9v<0fGM>x!($p@pr+=Oe zdr1_Orqz|yD9O52!MeI8*@MVOJ3g|9_S?_kU;w_%cmnI*GUJo5^V-#?QZm+md=ht( z@m!p*Nu!tn?bxNjQ=o%(+>*QPGhJYAPDj;!pc~q-!wWMVI|gu0rWd6wB1W|l%9CqQ z*&>zNJC>f1q~EWtKlu85IM%G^7)kkDAo$Q)i*k5xzbXqx^|K(6Uii}5@~EIg=zX0+X!}nXXJKNB_S|!WJX{lxS$a&vh`Ez z>ip78t<^xIr~eocc9R0`XV>y4M4Z?Vg|_6`S5SB zWr5n{!8~Gc4ur{=yIL^}WM8Q#y`h-2DX59Yl+{=;|-C(A6$(Yp5n+ z?-NNh2YJ5kU~Jrd4<-^)680F1+=PT-W9d?7=)(FsT!rau)L)D*D8}!61fLb3F*aon zIK>%1pRp;#?70M|gXgVnC2fpOp}3pOZK2+EwFe<8=y5Im-qu!7&*`ZlDK-Fj%$0m|GD93p@v~;VI0yib9jruoo@$f+a{AYZr zm7az z;JiyPek&=-XkgkG1CB^xEgA0H6Zh%S-Y}c~iJ0AdXS|G~%?CC&c;Y9U)}WFP(Z@&@ zT?~{eJ9XEvm>*Skd(Z+nu=#Ju?EklL=7a|z);OHUDa_(_h*tI6kx~+vXUy3d=RI6r z7%-M^2Z;C2)N?tBzzzIA1`dG<8p1gCFP!I_P=@ngC0!KHLESdYe&j-O2u{qE%MZi9 zUFz2pU{s=egOsiH))&GSP}JPBV%$GPq807x-kVVhajyK>!Dn|%I*{f>@(kx|&?3o= zK`V<}!Qw?&8ThW5jJ_lUAq(ZVpsCWT-}GeI#fRKzcU`JomK|8$)A?f%VQ%W0~2Yws!1?F)uV5IR-q`PR@N#;+HVW}^!sezGU z-Pdq6J_9-15^n{q!SNyZ54IIfK&!M^lh80jV?S>#O;^Y}6#8)2O|?<~8f(RAk@YPd zJ#k@bf8qa|e(el%!;jbtzk5R#SVuXf2ZKj!Od$~_&?)c&tGVe($;!EotO_e>(Of|)K@@ntJ%M# zQDxL$4Q(HYT<9?Bzd+Y?>OBlGnY4nda8TstjdaICMRUC`fSD7%lFu4GSbmK4nQ47> z;0>uiql9l&vvFt-N>H=H*vmGj09BN{c*`@y@Ju(X@-rbY z2u@`RyL1X1tWr+T-J{JhiW+T_$mT`(qwwyhJGFfRT|dRmvMvT?KBjJBBpq)Ku&WBz zVnIqCtRO$&JNw+-!=ut?p@}j|rMuA7br#hz4qo4rS5!38p zYEQjROGbUpdlt()X%#_2V%y;qCurj+GesM~&dl|2WGfIA0(s2TskM($_N&PQ=cmRm zAYHIpV7(`P2F@8RY4b{IZER)AaIuwp50XG`&2^wDRqgUL@-wtaSYw;UtB!|c#4B}u zr&xnn8bpJ!k^?Wop%J87KQl3?=K*WbFlDmVK0k5u-`M+9C+augpUt2r(S@}0u!>zq z!(VYJQVv@Dt*{(8AzF+e(n$Uis$xVOdsy>W8x1Q$B5E!v+GAim3$|JE1qXI>pd4m# z(z|I@d#)wQGmp{j@Ik_W84l&zat*NBN9d9!F=DC?gFRt0HHwt+xn13du!n7FclFwS zJeKkBua(DN8$abVrQm!LjwIV3x-JPpa#FGdcS23(iEVlZ?#u7SX7_hu+hLD%a5Qq+ zn~8wu5%TX)-$ARBn;vWNmHRNc*9u<) zJZ1UUMOD1o+zinoCuW-X$*>t3dGIx89mv?PGpX*5(kz@^cWYMo-`sQOq1BJd#a9>! zb8|7^7?(Qmk6(%%=s>lMPVT8R>Z81acv&585dQ(|fLZcs2v6ehwIF=)3b-;-S_3WD zqW&=+;h-!@9=s{?8ZooF^GfXe1)h3YKb0p>A&G&)g%t~;+n#!C>&-FmzS|3xUVBm(6*GTt4GFK`Nb z08GI0Lr!Qk3z;CA!G%b<4mc_nrR_t&zAH9Xv;)$&xbxtH89Qi`=Q%Qo zvp0Q0PsX`Cucu1yAFm@{_9%BA2f)aFdWv)+3iata=iQElLtZTAT4IuVH>m7ql6#)r z`kpFYZo`&wz9f_g&L=`0K^dq~9r_s5LL=F<%tG`v4HwPm4;me~tPdVyd)$a2x@2O) z2-L4<1&S9krEWW#1y*#g#7B4}GJoM?VeJ>0CCb^E&@jPuu-H+m?6geRI z(iy<4?K6v~5kgNPXm3Q*E>Rr9qDwCu7J3Ql78}OSYlBAF4_+RXP_au!MLwAq)f(|U4 z{f;;eGSUuTdCj0DINiO`P0ym4XR2`Lv5@~^fzgHvGC{rOx^UIEne9p&94B+dbV>RL zCCyip$yYoD&S%rs8MpVLtrxG9OX#pbVpN!0RkR zMp^bA5Bn-MEpM|=gp1vYY)-Q+m>AlHDOUpf`5^H)wdVnGgmr>hurwD=7E-pe#PCzY zFdaRy{GZ6ei*EW~B=b_Q#^aj5@JI{Hq*eVKK_+2dt3Q5y`CV*V@6X)sk6-Wc=#i#j zBw|z!45RP>CiJeIrKR*xS(1WdXG%748xP*(Wbfd~*zxF@xu(<&X|(YKTN>>ZvseTX z4CSD;9@Y*`=e3;>yIu*eC0v`o&%;XbVj9?!r3u%c@DuhPJCc1Ir`h1W`QHSoRgKz^ z+#Zur56dvDwHKRjvec-@*shyPie9e(gQ=@U|Hwh?|Had-W3Epw#GJKEXoYF3jz>(y zKG7nTM(Mjl!+s*wLNfO#c*{|5zeM?r^DSVal?yN*3oze%l)%6jZ38eyJ$9)|YByGu ztrqhZFQSkL*=Q#67`=g6J&XI(TGTzi%1061Gf)=Wz>sROyftzf51PLgTN=O>bD?p#=CHy=Hdb1GFx3BP4q!8gqJ>E6>gfb`XW*b51FZEW1%a0bfx%( z)%CteU0Al0$3_$j=?M`gT)~(elRE_1nQ#FzwtOe1^yXpO9F28X(i(1B*-m*l;Tn;C z?l?ZTow5z~G`^d$`ve&EKm$;ZmmcC8Pp9E!^s4UUWlL3J*T!hlCv3bHb>6+w_N(*J zS3UYdRVPbAhp7|vja&|bT??E85xWLyXI6eXQHek-Ex?`>{(cwkJdGQWgwRi|7}0@$!ujevF@1ZRonjKwywENzWmL{=gl<4g zj?T+5sWgu~+mhxH{btkO@=Efb_D@lk438Gxwzg8$_%QGq>CVD-4b(5_*SCQ|;YVWW z&BvLVXOCOecNZ_{7Yy|OO)8qpLfA4 zUGz`h=J_c}$29M6xQ&teDL z)Udlr=M)~{^2`SY;sJYr$@T!7G6xv=IMnat>`s_WXg3Lm%Xd!>UymK%U5vh>u0)&I zQe-63+gb$QJ?{*L87X*GEdm^oJBrRj6xZ*>`xoYhv1cBPVT*Z$Q1mhT+ySNM+$@0`8HGYOb<9MfAwzaWMV2#Jc-sJ|ykNY52j;Q^tgpGgxQC}z}$ai7A} za{~Aln4k>qN1krHS0q6F(aA@0`gx=|C4zroKcX-#5+P2#^57|oCk~i!{q!Ed58Dx- zh(IdaA6=p|0SQ-#_qbY+r&gl?mmC?NYc-^N5xA`gtI?^*|b zWtuk$*BA^Fgb?(I$a5V#fuz`~Rzr`0q!=(G;#m4Km!By8!N z+8FP1!1fDapBhYCUUG`F_zLzmQ`Iml*+35u&mW8XAL!|0@hB?@VM3%Ayc9Iku@98JGtm z=6n&1F2^ey5ma$gz48kSzA+OSLu6Diwk!)h9bjaSk%VB{0AgeRE<8e%yA!V8$#W?F1C74DAm7pXOLl<}zYsFrRr7R{|r;i5sFmO6UwDn>~XZ3+zc69^u08l!xZuVi2N zZXHH)dn)O9)7TKASa|>;zZEB32UiSAnim^AmusA{`Rdr}MuflQya9_${bbMQ|nk((|haeExyQul(*B--b|A*qpIcJT>4M3(Q0YO?4 zOg^i~Bf>1j0?jV?8bIxhVN@jsz>$ijzJw}d?9VI;unTEZO>f~~8xU8wRN0$A7yhENb z>P?6kG2_u>Ew(WMn5T%uakRoa>PZf(J;W``5AgfL;!Ec(v>Z{*?%yh5qIL*7%q2fzOf=I!_jODb&jOAyK z%we+5C1qf?t6xq{6AAGP16Q;Fgp!cz#V?Rlr9O^F^sacn3i27napc%i9O*3%U~`iQ z?U?JlGK2y}+ThUdlko$~<+DCaxL#i_4$?KkCRFAt*$wR)B5f6aFfG=sZ$Mh5#1$q! z5*;O6kE08DJmLB|zD98J9-3wGoE&IIwdpqn5NBP!*v(m_x~Fs%Y;0)s3_g4Ugq^jA zl=40%3FiLYe2UZ-Gd6S)8eo4cEhW&$AT(sNO=w2YeoD~zj#^#BI#qi6hZbh_j}yZd zY&SkUAMd94b&-kok^{si_V`Hp-FW7zkw9i1Hu4$IbOWhT zP);WB`REX~wfHFL3646nCJ*r3#B)1&ydHD;0XvV69Q+=CAU1cqe(@@V@nF21wL={< zhmUXn+BeC!;H-%>}!j^{bV17^vIm7*SHyPYDJP0Yxtkc`Xo4O z-!$u;pZ;IWy8bjh>vwMc_OpI+N}pM8WGa^w{GZIa^pbC$_1{1FznJx-gtYzUZtlkM{ze^P&B1`w$AVFQO!=NH0;7`hC7CtMHR zMllY->zX6KSKv3d1WK~uG?<>{3D-5rHnZ?+7mSQi6J&eiR40v&=ma}_7>8Aex~y_L zm?LJHT{y+aYDR$%;ekI|4UMj9h5~?+jtt{)e3W8b#{*xb%7?J8X0=BR+S?@_NypPi z%M_+TW)yE4z@^SWevKh6A0A@;!v(tjAv~N=_HeP|)2Xwn6Rrnpp~$cU2)oj!I-68( zq$4Yug#&GDi$Oht9Xz}Rx56-<@fDrjq>j*S1~kLsf!CM}q{1S#r~ZgtuVRC*3m)br zwYoMy?^q43jwLwe6fSqGdg*>*pjG7}6-LWY(?bS|1|u4S1~j3$yGB)DY}&>&1!Y|0 z!KUb-OfOUWdufkyAcsu;OUC!#87yl7ic8{G?23Nk`|mCzo&f-jpoD7Eg zI1Qw1XTs&z0A6JSxcXL-`cx`WE*4=ux=9U^1+=3qbR?3X>J>fA4cj2oOV{+YUb?GJ z*0UOB&nkdmX=+xaclfIe;-yL}koyBPui+p8qv0M|zT2U%TNw$qO9X!m&%#(eeHL=M zFW-n58Pa?_fhbigI2|Q|;OZ&(s3~694C4g$h*&4VXf1}Tag)+BPaER&=rA$$CbiWs z!d$;ljb67Tu|)n_hbTS2t1m3q9u}6AzbxzjM?5X- z4_G>XAzdL@0-$i7zsQf_pv=yQJqCAq8!t@EGF}+e^j5*(7JSc^FDAa_;G4N%i#fQ( z3kAUE0?~p_I)VX9_lc}Wg6&ww?pz=Ddv`$Zd8;Bv(wqaG0o_#r&6CTEAQL@Gb75vjYB3n10i zv$1Z|x>Oq+d*L+OZaxcd*Y4=YaG2VU;Q*3B8aAdlBhsb2Y{^R$H5ba!mKVDmdPhLy@ zJ&NBc;fF7tOR%f?#-hK#UtI&ViaggrgNZ=5L=64`N~gp2IPROV%EigIo|{qsVs%WM z8*<)}hT^GOmn^P3S7LVS(KuiGxD0r>rSBHRdloaC7S3;ItTg=p4o1WIFfon#i!coR z(MO8@%z?OND5EI52rk*zIf21wwK#$J#CFnZh^V{?*J2^y1^QNgXK*n39d|!oU~odU zz3;lQ0-K2-Tj$~s>Sa>m&wv|j7?YsK{EHbXd6K~4ng_7P{D}3zyS6W(OtlTyP~>_w zj4Hb9_=ON3jiBf?qwqHt{xxO~6R6=Nkh@j6ctT~um{JKGE=x2;D;KNts*p&oM8>Y0 zali5S1$!$Pz0>eofA>we=D@9&NO~}pA4C_ySmj+DvK;%kqm_4AFU$CVg`dUz&z*2R za|_a3!i175k|s*zLnUh?H`+H(NeLjcbfz~k%*Pxwq6RPdQ`|2~BO%Nm*gkU|wK7*I&6;@cuLu9n?m z^HzKhSYn`Cv&0Iirt58S9fl>$v!VYbqdguSrH*>N?7Fqp&~(&u9yjv`7eT_&O=EyQRy73i^XuRYMRNoo zoDK#Gz$_53jv{KJAA*~NE<`XUogzEkEGiQj=S@#&->2bNu0^|Y)v=RyRoP4Z+y1L? ze{9Tw7+a$v02^E?W^fDIYqFKmz_G^MNScoV%GYW19F0PJ>{;X&267H2LIV=6frJ~} zd`%#u>>mE2$BAhceI@wgK(MIqmw_N{Qe$C9{Q9yjUL24n$B|}-hI6<)pVbr}QfXm_ zTBGcd1Y)EB0Qy&wC@8{-G?ph3pDr|l)tX4Sj70(wSQY1*BQv8uyzE;_>A#gFWhhd_ zfM3eus>UD%+KK{V&N2r^6(~g}Bu7+%6!TW!N9nbm?-vB})>~BtQp!%`eNN;x5_xFB z$>59S86qAz&2la?{9SKUQ=+_}k>^Du<3q_qbG>eCn4iXRczA9Ke_X4w{k>PqdZX8B zMJf`ZYbPu%2<1hW7Q}~f^K5F5FrRRqB=pRGzaqjr=09-pS zg!ci1gJQ5d`?p5q_2p+VP=Hc04#``0kpS&E;;2Rgx;Z)c@yZ?g|w?u z=T}A)PXnnPX{;VGy6*GSLPP65zamtSXu$@*tlReCcp!PXl;nrNO;zTCZbT0u4b|tL z4{+4oao+TEH~Y@3a)k32HskX&;kha$1yC>|_#9;8!1VZ7;#rS^kP)^q9%#bZ7D>o@ zhzGqsVjqZkt8=LNw~|I!lfh!h7L_l;Dzg~!#G^?l;`B=~r0Y&dAmQn>&i?e9>D3KB?|M;;_9WRZem{daK%XT80TVPzhwI?a8o5a9d!7^^i6^ z^szYzg2zvV56o$Pgp?rKWjuLj#*>;m;l;G7v)^Y@RR{p#6mJK8N!I$|-NDPVSRv35 z5-l5_PhZo{YqCvjXe;ztPu)f&BCEtcfWi)WJDgBbkNp?bK_H2d?A~hv5VEd(G)+2)MuZ;QDWM=o9#nl5${hP5_@#tz5JU( z19&=Hh;L6|M!H?qE+NRYu|kzXle^Tb*xUhrKZi3(z&d6=xG59(J;wbrz_l=$g(1@z z6LVT*Rs5ag!M$qsZiJ6l1fO^{(d;!+b?M%pwjp$_@*A*sbTJI}_XAf*gG1Ta z=D>C}{nxM!0OqZH51CjDybF)h#3ytHo`4kL!D^RYC1uDL^FzvzzeL4|5AVi{xn3K| za#(~fe3Z9s>UXsqQ}t}&_bdla{& zE7jhs7H78}iDNu+pFEOq-6B^*5Kz663<7EADQwL8W`IIRzZ#zj*K_lcbol_Z59%&O z#hGZX`l7kGi7R-i`({Bb0~dI|B(AP?4Ciw<>cMUbTDq|$?b!)VYpq188oib6lxbw+ z8P?`YKMB|67!XTdWH|HYy1+Kisp^+T-cDoP9=x+#^Fp7Rv!#5F+Y6QC--N!DO~9CFX=<{aG$S zj5H@-Ss)VUk)lPs4I2p`DHBxdqlrJqB7^?kHe>|#!!SE+Ra<|U8G)j{;`&eI`hVJI z{cq+o&|A9xu^UT7vBcHE1G@fEnrPYdUXnxr%{P$9#(A1VHYXp+?&pzo3HlH0M}Ch- zk~=9;0*MEO#xN%852a1NG)8w$Xlx=IS6_K}+QQAl&=#)RwB^);XxhT%Z%tc?D^j%e z<&i>LuHiykhw$rgv?XAA0jAJa7g||)*?5Gs^$C0UTH5jq?nzsvA+Ba7Z4vm4*I*=R zikC@m`~+>`BeR;e^I;0xY@tt*TDIEFDf-Nn($w!LU8}}(YSl;S z`D#T!?FP3Xy|zL6I{^m1bdw`*{IKH9`Q@RK5*RU?I3XD5ybIAU*aThf#=&WS{@R_ldw2Y*#@(D&~g|@;sVl%h$t{4%JBM(93Zclt)PE&|7El z(d`rF7G#!Az^j5w+#x6LwyW6oKBW^uYk(hbr9$Zh-q_KnbmFZq{K(M3tE~-0J*B}Y zN+jYBTPFMfU`myG^`vz$m z__e5|cJ+5FC2B=b6n}d`Qc}nCljpA}rg7pdJA1*&bH{MjMTUw`Ys8L)eynl-8s{lbqxl|BCTe*e~N#x4-GdCiQ4imDM)QWwqQc6g-aQJQQQ%cn|wlcn_# z;#;y*aT!IsVQxS)xYRC`5_^uJxdPVz&+?)amggqlShN>$9|$9dt*iE`>?3^@O6KCCh{I_h!%1VV(N$_)JWhefRRxVpvxexoT2l|k^M0dxn@~1oWC3}qXuI;b- zt#02+f85*j5z57O_*UNeK7{8-{ONt+sMXmHT=@W3-s2T~|B#)dc%L1B{#IVuWvu=bKUZFf)?dh%PwY-{h^oVX!|TUY#sWlu zFK4g55#E=M=XenfT6yKCm@FjUmX($N#y4a2j+K?42^RLptB{a;5Bn*>;@BRw53T%h zV|C?zWA!DU;Ya1a@!yr7;_nk<^_>7A+=UC_kMQ4}AL74jKEQuBy&v^2!-MY$qE>H- z-dD5|ON(5jv3h6pfucJ60Lyg^M79Kj#zGD3v2L+k3}A1 zbpmObYJBbo<;}(Y{XTrD!j}X$hMM^Djt|L955CB$*X7{zQuK!2JMp!cIc7}mfGXsf z57w2}nz2g`P?~i6z9oOZIED=$DJlj@YW7^Qku)o317FF*=TgZ+ZEMY2)tA4L?;|Dy zxxH}xA$rw`?~14wKC72Km=ud2dtacxFLIodEf&$GW7j8KtY!Evjmuz;mM#)V_&sw5 z_Wr@uxKHo%xgrk+g18ZjcwmSvwyCRXdTvDhcqy(|ycu4Gpi^iP=qXTfh~gX);7#lw z#pcpCgh6?rPQy&L-4LEiu20t44cRx4vilq}=To!fi*O?c>6&WSP%^AQD7ZO+)5g{W zoZWW=Hn=P;=GJwD6wtg0%@GOTiN9SEuXF=RZXn6=FF_Lbd71c~k`!yIIk7HEZ%PHf zEif=;%3ARPACx93#R+=>Pi$8&>|vM(?*X+Qun%B@dTCR05NyNc<8004z`s61xpNb) zQmKBEy?=X^UMLg?k?5NTV4)BT@VNOCm{tEDZ|4FZRdpx+NhS#)1ZD)H@qtDOij4{t zwZR0Po6LkeFp(fASRdG?OQ~9mFoReSf|F>bx1+R6yY{u!cH6q!ZXatG5nl;W5{N*+ zs#vXp)_UV;joKm)%lyB;bMCy7ptigF=fh;~+(2CzbvbUw&OSxvk|kHX#@;asb)KPgwSg zV|l4(i`QqKPTQmG6gCzd-(G-c!{t&T_)4T)(wWwd@Tsit+9~0JTJfIA!+XZSd#00O zZ>nNj-8^L_$7d%qwURjY^eHraj&4}8=Vm|V$=Fnv%8I#?RB|%(;%_pE@mo1LJJce5 z!6hb4J{KvQ&x?H7K!bc<Zm*$nd7+I}k5Bo2zNtm}t9-mp zlWO0~BFS}08bp5##*b=M74CQNqo@Zj{K_pttG$3e3-iKaQQ=C+F*4^kqGi_Bnv0Q? zS4g^@QNfz6j>z{+5e_LjBHxZeUZim3HTiO#4uC?OK4`s1RdfKtmw2Lr>w`5rJ*~gu z!ZJh!SzG976RSJZ8f*vmU6`JavxCcZNBOnHXUTC#VUuUvQL>dB%BB&%V-_Tw{jZMl?jro$xD$V9+ehiU+DF;@%vLh(5R zWWca`C0B`wt&>7s87sU6eUJjfneQLl3XgP+7(x;A>k!ym)Fd*X#I@-u&$HKm)*0A( z2A(~z&qyrV)R^9^9d1l%YCmmM`d?*IPOlObpG7b1azz;Ao@zP5s9A*Xf7;0;B~(J8 zU9Ii_Z0gf=!CDgsK@MLt6j=hUvSzvGb~M1c5K#idfwPWvwIq<$*wwPL-}!Ai#XOAjFJ z^R_%DWh*5gc>1m1U>^4|S^&@8-&R{~ryU-T*=kIFNCRR%SWREemW}Vpbs{H$jw2bcUbmi)eQU{DEJ3TkP+8$=-6)G0!SH124p@H` zySxf6>pYLQUMRH%tPeR7=EIKt^=?E@*jjK>1l@@5+m=#`=ka3uB_2TUe9E-cEhG74 z5JXo!#qS9`CM}T*PB+<5ebWUMk$+1RS*izOg(hu@WtlWj-j}=2qC0ZRoE|-#A1SWA z*we~#LJwV8F(p#Lv2#lFa9-pDGu|eB^H<+g%^9~gFY?#^B8o}Q0Kj&->F!~h;Njd6 zu5{pKv>cpb5Ji{!oMs%8h9~fp-?Awad2K60a^c#trphXOth2m|e(~Xe3L*oJfKeYU@&JWsbSzXQ2Q2kfi3{AUWD)d3qKX%C^8XX|eq(27~ z&eHR@|6;~z^iJwK?<4CAO<$rcId|Fzh!rJ9f3oHz>4z*h*~_wD)c%DA@^O9L)eb?g zsG#+&IaJU(`I+|Lci``Nd{o?cr8e)@LL6}u?kQ39kK|-j}VB0aQHx6}CQseKHccifON7+{xlBIVbBt&t4I>>;; z7cg3C%kh^^sf^10>4;3pPJ3>h0`qw}@(VM%HJ@oSbQ$NJXd>U9s7i-lF{4NFR(M-h zp9p0t>#089bH|UllnUE~$!S@W#}#r-mlFkVhh6ui z%%bQ?Btq)nFmA%F3%d4%EV}kuxdDj_iF!FBY(6Yd*kzB}qE<%al6X_4{GRxf{(YWV z^EaX-Btstm2LcqM9mDxVet1;NB~v1jM2WFWH`_kTOeMx~86IP_tVvD@k6<`cz}!k$ zMSz5z_Rsza`qlkD_h}N71&Jr0(de_DO`eKgtkA19?|Z&3=E0bj{)BX|Vq<{W!`QTSgG!dM{HjFAv3nSuenRq*f7I|H zSkvuL!IL2lwBf_rxq9ud3|JU!%Q-9-InUakQ34Vh+wYe>cV8>b#>(O<|@ zA~~4F(QUriEO3k@>J{}x^tN)B&QZ3Z6buWSFVwr*NIGoYjqv%)f$wX|pP?&dAR!Zb z{#w~Z)Asa#hfSE~2^1IHe`osEAb+}~{YaA@!}*&>08-h+d0jG%vWZ!5dJ`YRrH+xM zH}QjORI85sy#f-^UjI8iqdI$~1GPhTP`Bu5-6Ok4$Q23;jaDHKBwh&HnS4!MqKB@Q zXIKLv_^t3#XDx9pR8P0Io+3AR(RngUFLY1aFXb*NnlP*%-SQ@}FCN@=`h~^^`$=wO zSnpPC*=@VGblQbCc3fDc_I2lr-0DjHesygCa#doNc1Fer+KY{?zPyWr zWd4B`LpRo$?+6<>u{w>dE^tr>)SGj&By%$`?Zrl`Cn%gJ+#2)%q6<&!J^;OVJ*Cg6 zy(WBW?Rk-jB&p8}*6dl%-omo_8kD%`rwhJED_;(vfAaWkx$%#;>0k$u8;T9b#H7jeaWUyrTzZ zlH8`rbfA+GkW`Rzg^Ab5po2LS+YCv7P8USZJyR=m@DBh ze7qZc+;xe|b-GJx!S0Av)7f%pQsfLIFsmY`WYbq0i<4VKoO9^*$omwN+)+Ic@slED zn!ZUtpA=fxiDH*BrYA1(1wX4FTGU01pFl&y4$0Gu(Jp=LF zS&@;t1uAWnEON?fZyC}E#H7@nH6e6mB<+GN5`QwSBTP%%D$Wk!ykuI^qhXP?GC7bo zGLm3?E@`^bvx?OvOp7GkBN5}v>g+SH0}?`MhcaNp(hX)o){1BY)B?&;=Fr{Cj9t^KAs}8OQ<+K-I<`@Jm zMcyONBqp5*`f~G3&hsum$-!T#PHUyJB&c~?a(N`iWM`XX2!pIXvuMN|(ayCihM7+s zyg^c^ekxcD_NSiCq8rcMpmL((`9Lz^Dr9*5*vcL%Pzm97=F8A@jA&!JIW)0{qLn_v z-)d;IVNO@(bm?1qPMg%Bs^;`>GR@AMPIqo=_&ed6QxD(z;W4M;^qImiXk(!drSHu2 zJ_UW|RcIrnwj6!sNA0^DDea4xeGDt5 z{gGE5AesK(kd7$lRN3cd3HC2^(NOs>>QxU zhA&BN_#A+pn5FL-1h16v_iZJL9*m;W!rv4=@3nuMlrHEsoZ@qY#Zfp)qH(8A2(8!5 zK?>$FkV1}3_#$DUOklOmMMukxZ&}=A4H!J&%{Vjd<{-=%I^moj_Co z&&IENHoVL}+;C4jU#9!{ z}t8bR-}SIv?|FcX{Z(bZ&Yg5wjp2Vv`Yn#U_!Q`x6hH^(yrjCosv19;+qXAir z$IeH2?+<5$`PH*D691$|nE4;FHq+@BjOtS+qo1_E+`H_V4YD|9rrc!)8CUiYmu;y; zBX#U5V=wKk-4;yKrZhO|{E_*@J~Dr@tPxo@lHrNS zObQyr!(yng*W&RRQ{R2|!-^h|4zUP_>BCvs_~ak&kMio5Es(?FDSBA>)2W!;hwKDw zfI1o!Q_y%f8$i9O2sEU2xvwjG685JUIV-nz;@rI^d*}uGM@~iYvIiV`$fYV%`p&Xb z`ZXR|oi4Q}q3`@2V+iNGEz5UGU70Sm+NtZeS*2X6#a?@Ay3}(HmbyEu)Z@0Uza(9% z;%$9rNmi-#d-c6PqQVp~#LND}X|XP=)C#Ar$J3<>oKmM`mAb|$b#J=VdCnLQd_6P9 zOPo^6(xs}MQhiyaDx6ZGbSaEEfHUzT)1@FLFslLiKoyN%-hMpnICgoBL33V6xC9GF zrB&rYCq*^O&}W}oJd_6U!NmT3nqoy(P=` ztSQfM!o<(r782dg3s01S9)=UfXdwKfO#821)j;^3Pc5%UoipVe zB*sIwqe5Z=AtkZFR7&A9!tV6iZ@nilgy*-mM89fd8@6m;_%o;pgiJ(?BBt`nRixKm z_I)V{ii~y+z?8$FhYKF?gzKXR$3@_FrV}I18Uvv)U@w7%6mul(2T0CP>9^W293 zjDutNM3TvLK$r#SJry`I{M;YkmC?c7D*A_6?k-o+uajkmCkdblvx&_UaVF0!aXk)e zA@-q#o`=LH7bqT33bW_gIDV$Z{@{HgtM3##EjTq(G^}OAJv4BL4 zR&h3QMU`kQdO~;DBEK^bpwZFisS`%za!Q-gfOh~jkfJaZd8dia3>D_|7y2nA_SDi} zp96IIdkOZm)_Y?6DLw5?^;ATBLCb4nzDT!^5pd;4gkQ{+=sBXUL9vDE)RrD@+YCN0 zhK(;YEvV#}zu2d@&szvzV7qj9nO8sro(AJ4Ew@=mU?Gb2(-=Vb5*Lexy4eS@VBz|hr>w! zgRo66%~W9h@+%swg|*7+Tp37^|BLOx!Gf!eppSkp0W{r_a-2l--t(N(F=(GCTk<7# z6jK7;Il;4lSlL4h@v^^i$#73(;{F8Hsj78E#u}0M-~|TlH%Fensc9-K`F$H5Ni6z$ ziGm@DMsav2?u_!gH>{({GV2WDpW7m?+W;gbL{+t@3z}4-FcHVd8!4AazqLbb??Ix< zh95s{vTXU3y zqK=o%5-J!&Q4x^X*RIz)4ymfFVj1V>101u0wUKI+NMr|3>l?Dh<7Ms7>cv?8kzG=Y zGTo(@5>hdp)L_!FLll_yjQwO_`Ytu3!>{eYGDdb=28ydx10r&L$7{{h(TobhpN<|R ztE&KfAaRMaEPgXWql-*fl1sDRHLXkKkW#Pcc_m87&(%4^dGvkep8QO|(*QVO*siDM zM24GDyuA44u>i0eqd5hdTwRy5PBOjxj;dj&y`RGXQ=_ma4UH#$gir)TCHStRPZ%!; z%vr1P#$j7Y^)=JVG}Vf#X#h=a2JNZ@xrIUNXo94cYDq4^W>O|0^YVdyH7(K&c{v43 z)gi$61z2v`BK@~=k&(U0mEezZB|0$Vy%z{Dp66-3PcOK8`o_EL8=yu7J$zm6=_PvB zZZ#cCc|7!Bv~N>_b(UNXTvH=fh#|v&)~cQ#Loc@I&fFtZNLG;*DUvm075?xW!ebMQ zQK79yNSFz}1Ks&y>`cp^*+u8rzg54|=g#@;Fdi0!tJq_|e1Sdx)OfY$!zYQAP`vC% z&I^Zssb4@nA}e@V>nIlc5q>NEFfV>dz1U-a<2`W|A_#S|8*8n2 z!CFG!ZRM57i)pMqRni@@VA6xYp}+}=Cx*;na<-Rk-mMq;`JRtjo@rGq@ee@{y!Yx( zJ>bKN7#s}#H2TYsh@HHblG@vULGLANDy!c6c|NV9-_O~cSu=yq8?|yoORG&~tQXWV zoSW#^(A@Bl+_wsT+5FM4^vyhSbHc4}=+jVHeSzv{1p{vDky|%y50CzY zaO?aNRYhl9br001r}YlK`Y)TwuyYKx_V2uaO6l6Ii8#haKeLZfH?l*t!sx|_;B zcE&#^`7Gmw-*ryAubr>DHO}eQ$)BKGLaW=a{!zV`aH@Gt5vzl@MP@>Cl!iZ*ca>`g zx^?)CjOMy(2QeI0mtu8B6HmZGCMFY1QcMs9bX|J!oFx+V*a$|iEDGnKOI4vh#8)J> z#T4i+NwpJSu#XBE^>24D`)6HD^SlBshf&Wm-OT0H)A(Dn>S^y|72fnJM0)$o=EHbh zW(9KJftL;P#o6;iRv!)q2Eoex=?LYs7Ya6y)h`UimN>zMmkbYm1~?{>cLvnC;8=)cOwyZQgV#`^M3E*eBokS%Ch58RRCq4vs7`x0fTxYu_H}<4*gg&&Vt=;rgt; zUW6V?n?@Kx3XQEyV#V5Q6LJ)g} z=YmyzS^nS{7;xScc&mCMBbZd+^;R4H>6w7EjaESy)kL1!G(xT19HB;6Iwou_&bP_% zi*)wv?Rr<=ujtofW00I9;S2i&4%|v-lX1jOR}WjuFvr0e)Q~=&uONbR26rg@makfv zS*#do;mM}b*BLj+Jd5TFaSbkT@YWe7+FLJ`(eU)idsaXFkB>g@tE8Jfbd%I4BMgs) zTtT#1*uec@tffQ78!uc)whP90`ik-R16U^*O2Ms6$&oKc0I)*M@wN1DX0Z@>zn8;c z*&mS=9psmXNIjy5C4R=+a*JgE>e9($|Mn$41yd#Nhr|zLdpPv09)Z*Uls+$Q2l3>I z5Mu|R!|!>3PFhFPE92)pklX*sZ3z)1=@%d4nkDXO{jChByHms~#QPI@67~hY>I+6h zK1kVzVY*v=K{2Xh>>ciCRh6)6@jZ1DSh)jxGcWO!OI=mFQHQggwn;o?gK#z=PtCOZ zJR7ze1WeOMoI0=4Vr4D+!H_M_e(iJ_xuR&M^nf9D-MT8|w{B|+SeyYx0`fbBaSgRw3^`g7eZ@q%N$>{9O_ge#0-{iTY zj+xGD@L5;-{Z@nNw=QEmS2oGMsE8L_thRit!CxOQD33LmM!W!v1(?-XLx@`!#~LV! zxLVGYEcvs>XPAyHgqby?1MaN_#VtpTg>t9X7a47TkCX8Hj;-|zU5SF)Y66#R?9j!^ zT}SIFRxicI$nL!*U9z@1viI2Kg6VR{E;H#9l*vn%v1ZSAs_N{Y&|X?TsAGGPis&I^ z7c3iE@K?hY96hw)ox>I^99r<&bU`5^JNCPse(I7fs}}kqim<(qasp#H`EwGADS3mU zSFaGSqJJk!j>KhR-G0T{;_up$9uiuvbzy8|B#?BCNBYdq2(kX*FkOT>D57r(JX_iV(t|6O;x zfAr6Y=8`F0N-=eprw zXMcJ2AOcZcrZuQ4=WzkeZC5P@+N5O~xHGrmz+L)wyJ6vwq=%i;ZcIP_ntHC=&1uup z&%aLfy}`~mkz;S+D-95WjZxsF_Q2hP+Pz1=w;p^uY`fpk&%ddjr^cJe9q&KuG8=+c zmzsd>!Onz+bl_Xk?8)tcZx3qrU-T>Y9%HoM(T~3?k5jYzW^SY3(?z~dxC#Y`H=P!L zzP|YZD2Cg)$k^J| zRbL>nKtvdeJ>m$F)QCZ}>YPwRD#9ndRXjWcJtj@G3-ZIEiKg~rS)WZ4Jt)r<3M8b33J1p@Pm2BIZK1h?*Uml}o{CFq)K7;G!6o&H5;WF$iq0xBu ztE^|~^);W=@AE|VV#aZY`4eF+Hl2j>ZQ}Qo@=bC@5i}_FlYP+XFi!+-fbEp-UvKZ7 zA^g0jji}e$Da+fa`OIw^oJiccABxA-n_BX}Gm#IWto^-imbaoEP2zd*Yg&{u@&UdL z>qFuDOmW@1PwrdjpdPKfmrJ^FP`V)k5n0!FpG+NAn=}xNH%^VU4R95({^HrF?ito! z+SP?*Ir51m@WS<`l?VGBw00QS;s1)~5+^`y#7}gax z#f?0yu`df+jZ5QSEkVTD`KsGqk+0QvRjDdQIPXhtrKetJ)jp;MPWv}Xg^w3H6~=DA zDHsbZ4O)ESSD>pVUPo<@kqj&`kqnuQu_=wQImLXuf!Lh#U~ExEsAlT2F~Xx>W_IU~ zrHhFG32TCw1~<9`*9WmeW(W~-$Ew}?TwuCcP7+VbpGx@?q-Av*a@1>}&Q;gkd-bd()?+fL;mPHL~{_7@;-Nr=vpk3N}Wgy{m6^t zR=G<@E(ls{E23*pafQEN5+q*7P-C)WQj_&9+4h}pde^=B zWdPIvs5JSpu>R%8!MX<5GzZoyymT%M0|~l8ri#|_H0cM;#;;iK7xm}p<_9^+$6%nP zPE&C()rW^ZRKzt%4jBpkBPR*o<#Ngy1c{W8GQ>J|*`F>FS@xU?5fK*J?j!kR@*2VU zCooaR`D7byLX>m^V&p#xn?+Q@m=o9~o zkzKF@3nORk>f3d4djhxnOMrz__U+$rvsiBam9t*3@zs0sMGKnXr^0BX-;^S+KkWc2 z7Z6Uol)>_+H#o{-*F zGNi4wL+C%b!#_>$_^o`X5G%GxtubGn$7R%PTTA3U6(X(Btg5e;6ejMzc)>`c29M-k z!!xI|W{an>kG7OgOBeE&WIscq&cW-Pt-KYvynkBaL(F1tqpti{XL{X!oM!BAER zXeG}i6smSl2wAv+ijvrvYFf8dG*)#6X*Sfn2M?B`)j|F|4&( z`m##J?>MW$eVorg!Ju5Fz)im$n z424)CwuV^Hd6$b}p6E{u^luO?QA2E_<|_Z-x!x`b$%RS`;F$m;Q>B{EkVS)5XUMv$ zBG|mQF+OVm|N4{6X0!r@KbCBGo%;)dZUPlSnhTV+ z_!8%vmRmuxYCBfQ$A?b~S>WY0~j?OyPZ*j;PiASqJ1pbZ!iAy#1K;1}pxRR&kEi13cyOr?!Jy-X? z`ZEa);+t=@>^oTLHcC2-c4K6Y>`>q-7z8&-R$v97oFoe>UN%Lt{;73E2#`*Jrqds_ zs=HFl55OzP2Hm@z=fSAY>+On^1+69pFD95Trd3I(|o~i)dgVDJ73NnGYRneIr zku@);9_e=aAN^-F5J+Op@#)QwCu?BYW$NHfca~+~>=mCkaekx(&O&dNGo@e0sebLq z^lQuD&BDP~PEW*&@Tb}}QY}pdu+c}a5nG{x&Mtwc)1Q+yEMGe%1xwW}wKV6aAedU4 zL3fi{n<=;@&Tq8xsNm3bc~(|GRbH*;K2_G) zL4B!LxEU{dngn*K8|lg90(aa>!En1qkft|LD-&xn zv23}inTb6$GqHMSXDztx0>RO>(jPH9E>UpfIGd~tji=fteTmapeyVO}`c|dk>CW^m zg?b2|HLF-OMg49G%<%0DTydDrg6rT?k&`m;9sDc{&Qr4BJW=DR95@etRl)n3lUN~x zdL;wOjK^88(mY;X7eP?1N$n%k4UTWj!tqAXatDaJU$sZJ67hJf=P|bzv7Kp^3$FLq^sOCl#Ot!L zJ)E$l*TmY3a)Rsen+A)P}8|)bYn9Td!dO8uN=aPU{Qx~&>9s0+26*| z0@jw8OSIM_tqHal7aFj=yx5s=OYJq!hmQ*pg{>6*j8Iek>z6}=vD>npR2BU>HD31@ z$Ucl`Z-s6!#4lNS;tI{dghF2#`#4Mn#8Rii{?hMc0gLq$-m-%a0H4m@j41-7--Q>I zGx-pbhH@8A1N}J}x#=E}UJw9%&qn~=gio=4@2~oO3h2)b2KrtBL;Wy7$CNq;=v%Xz zRzRN!BH7O3hoqN{-V>5Uft&e@Zk1@=aFmw=r>elql$=fW3+hyy(( z07q3}K#7LEh6KqxRlt8;f7w?Q65y&=tR2+7cW+5ePnN<|^9RW9nI9+(rl-ele}Pxv zOA0l^!ONLh(B<(}X5Fytw*hkp>HPfVW-Tps3uXm1D_>VQ= zWfK!u^I})HNFUgo-0Gll{wV%ni2Z_cO>ahecy22-vCb+QCBMO;$At(bR^$m1&r|JL z_|#|9+cs45GP@QzqGDS>m5OO_$YHGE^R1muicDzXkD@uij?W7I-bZHV0#EDrV7SCV zVO%3QNk;^`g{KuJ|0jHjglWX{@-5joi3sS#f7~p$=15>m)meI}`U}vB93b?2FsHK% zyoqYT>kFs^+Wj05YSsG+x3bI?Zmk)BYH!FzDZ2%aKP$aDp3$|eEG~!?i4AR{z_egj zV%R0X$aKIosuLk?Km<-OWtHTZLZ}%L-cQq;Y*UA?fKx1#e0WaI>n(}7S+q%p=mgkl zq7x2{B&2Gaek_M}zogBROwgA`(Fe9#0_->Q!V{uz=Cgbbk5;EAS_#-c_)PU(4&8_1 z!7LSYW;S9!Ovsj`>E32US8qoweW8dMpcI#GkeiXcj4w?Xvs-Gv$fS{)Tu5}i`XDsvva{cZ^zX-# z6z=~TewWY)i_uK=D%G1|=)-aUKl<}a62vKZT^j8;8a-HfYZa#4@4j#}Y2M3$-sn+uM2i-l%{n?NNu#4AE;mKKirtu+4j|**gPNbgPUld5;Tga*IRAyYrsSG4^ z0U@`L9g5qW(zOW5m0d=j>)Z^Iqf7J4PSxs5@VOIO1Q{z-=pnJ44I|C??+qUl%2ma2 zy`_BGHmfsZFGqku9nW=kdH5ocFnwe^*PCCYPfk47Li>98g7DR#V8u#JB~jL?xk7~WV@apENVG1UYP7V(wX-sL!1h~d6i z@u$v&Ub{uA*O<6l*Pbo^1yuIUyQKtY0KLYN+O=ks951GNk6k24T=gmg@xh^%q^pxf z(%B^SojPoN2OpGHx~OXMq70?x%)iW^^5<8CbFi6X_f5tPn?S(T^yDiCY$XDuQ`KUE z=aZgY*OfB+wQehqH{`Rgk^5k_SY$`v5OK|%`Jh&u2(%9Y-tTji4}rClfIAD71)s3G zzV@XhW^75hc{a*<G^} zlBqgUWzg!gqY%xg-~t49m#o|Mgli7Qc>cU+V}nE*7WH|BA(B=RUeLQ`@ z9j5A2jn-J1e&NSY<{IEDT@3x*?dXq!?mfb#V0 zQXAm!n=dV1|LFPJTf%uM|)=UJo7*epN< zC^C+F(z&*`*A@`5evIGR=_g_yNOR+VDWu5?PBXy&{ByaL%XSW;U1U6J*EDZo4VDY+ zL0sP~0C8daQ=EN{q6>ks$i$SAi)+>q%7i}H$ik7LcH~+V6R5i8XM{=epgl+*y{oR?+RYT4+?Q`Zu z_PYEVLLdFum4Z_G-05Ec&5}BL2Gd71JjDN&HORHT8E8 zeKetfV$K2CD1yZ_eT1;SFY7qRCM5`N3b~<=*vKL1qo5Mx9aBjcYVM;1DiV2%Ba-Un z91VmeWYXfsA!LrmebFr(mK?%E$ecb!=13vPoVnU-o^!HJkvVl)@o4)bZ^SdS<2EE4MlapiH?1*p}RP3u9SqT-cRC?D=!_FXvJ<}4BiME}t07)Z$K z7)Y%Sz&z*(%)(|Vdp^B)UH~+rd_x#_uH;Ws$V{D0AhT@cTc{atp#7kw*^1XDM3px3 zQ5FZo^4eL}Jt5&wXkt4F%!ILnE<5OoKuvTc3NYmyfO9KWjz!Ufh2e9B@?ta8mt#*5 zinaC#;pNa&8abd#3`$G}tXf9si^*ajT8~W&?83+codw}@425zgNj1tqXf(8pC?=nX zLdA^{BcYc4*a($$w%0)^9Vh098@{FS*?`knN@J$&GeifHR#j>+A)q~Y2%tfhDm`t6 zh6`byMVUr73UYQ*qgeEbg8UeqT&P*)1LBPkW^F*K@ILB=qk>gI*i*;M8aUL|9c(v* z&+;Cq1CP`-T9Ru?kC&hlmk%hLC_+0JddN_(J@&3UKu|C}1MHT`U0LHcWZ>xs*$X6t zKjL+8PUv)luxAIwHcUwEs_iD0kvMA zT{cb}z0`AQJj&tEP$kL=qQU8=3hZZ6Ra!L4(Y|+sSS$6~1E;$%ITdA{{2DuzUupZ+ zI^JQhV;3jaNxgREpoRqBh-_5g1OG#OQ;~=IrX4UWn*;?)BDyV72n&>0E&53mQEN^P zHg~e{cYmPwmZ>>uwYRi|iN9u>sP=JcbT*e#?K_+6)AYuu+NN0PL8|RxcGpcbA_3wI zTqER=Y(mfhT)av`fQ2JQ%`275jq)KvkL6lC{XrS2=PofECs<9z=A*z}w8u-qB~#59 zme`_7R>r-tnNayraG8r|xK~D>=CTy3-jaK`Zh9V?S+{uNmc^rb7RTn)J*-5ZLl;2j zvhg}N*u#1ebb6vcQmvzcSFB^N{m6xx)i4FQW@@%&Ep2*7R>tWw>mW`TaAwJ#q1wK%Lb**?PnO3CRFV^I@KcwtI zo@ehAC&%Hji2FU>cRQub*{nkAb|kow7ftKhU8Y;QE#;*)B^sSmoIC*o0|VfB0$bHP zXuO*P3H6?J?JH6$eu0mJuGsASlh~eQzhIuNN*|$iqWRF0Q<{?EMI}?>w4hc%$P+ja zI-9J1MqZmN+W`KRZ9nD$*DGv*I7V7lmgITvSg&tUT_#%tp+KS?-o%U?aZ+?2lHh&h zW2h@fNTHH7tRz_jBQQ@viA=Hv$>h+Pc$N9_{6!G5S%E;t;Te!MoVBLJzG zkVZ(74>m-=B)$P9_;(VriFhB{e6ndRWT~+^{YXixAvwTSAgy0@gArHr10x_Wj?qmK ztZr3QRKeL?RT%1cOHu`I*UGM`5Q~vsyAq(X+iMlC#vU-WJ*B$JtoEm$Mx0xk?ko=+ zd`PH?wCHIXn{Qk6@JP>HJM&n)%~;rup7hw!q_tt)CO^(w?%l~(eeJ6jNC*?9k4c9x zQAk|%kkPc5ZsMM}JGa&^$ite*^jy|$R`npGLa|1Gj3F;i6S28{({~xikY^G&-*gi` ztMi?bp-*|pvvqGI(QpoZN~g-rOsBveo{h^FFbdPXMfxV1u(NQ3yYB#eq*xEnA@49r zC1nG#$>(|PdvT`nwJ%?g2*|-PHP~#Mov)Xe?tZhzHa(3`nN@vySo1_W>BPpA!7SoM zQisXAf}5s#?p`N=S#`yT$SM^YYiMt+M^Fwj3V$pr7lR>eJ+g_r%B$L6(_wfTJ7Q6} zGqfVl#^Gk@31r|PAf`>;NKf42^>5VWx&FrI;`%(-m3+c{zRAbOj4$HzLq0K?ebkZm zh?CMtRNI5)(xafgA4m?h3_Yq0WImDd!IiQiM*5t#=*f{jYoT8)4QOpxFPk-p^}oHF zrNcVw?i^r@#wIUd0V(&Gc~BP4=?}f&Eb~L;DPKLp{@Z0xl+(}wPmzrOR)h~Ui_F)nl*x7o#xELTZEQ|3X4F?UJ*i~5&-o8oenwZVpkPnrT<@eYlpDA0_B zutR}{-1QE@zhLdXm&FXC>I7!Qu9^0O247a1}ncd%~l@!Ns8%@=CWY?@q=$0j7vMq7aVht7T4Y2uei?OL_XlGJ6zmQ6++`MVg z^uY~sUsTrd22g7{`jGtuWK1^l<2oa+a_ooSmn0-=Lelc894%!=PoiwK9X*Mf3GEy( zh_(~DE#n-3s5xG?o+cdYkb_0xnbCu1dfL9vSPU$cJYWB&8dZrlw~Lcd z*OFt|xuXkGu$!edV!#ej!flzEp%fnBYF-5GK$p_)|SE8|BRcB1?T zcAQ_p4NmO1Wzs?MdD@)_>GH1w-jH=72YI<4pn2~3oq~V;LJhn|>zZBxUI?h+lO)D2 zBdO?HcaC=@N?-%aJ*_{L3BmzvKwQI=jwc^-FuWjWU9Kn!Qn6A3A=*_)TDuCux233w zrD=~BSk@l<-7xjw#-wnQFn31FYs&MbOFUoFPZ}{}y@;+TV&&Xm9G(DT1@9TaX^mC% z$_a{jJkI`Mc8z2fP1ljx1P;Bs8hTg!lH#M^Csj|d`JnNLm|`OJ6mg5hEg9;dgeCJc zYhcA4D?)^pushmb0>v@xj@v-wsV&#VIq9SHHb~=kXSM`VgEPaU#rOhEpHTGPuJ}xB zr&yXoX-cSpwMXzWdQQCeFz+Yq3qO*aAh^emvC8?uTFtM?O}nE)I*G2e{W9u(FVr!bVy z0$G~EIZ}k*^?{mRVP|)z1>c{}5_}_#855{_VK`ts6HFp85wSN&ikZURsW}9}8oi-7 z4-TRyQjTjP+WSpg&@EU@+>S=9)}7>BOsYa{v`Rd>+ zXa22qQXqZHQm>_dK5ea&7c;+=oNDEHh;1s?j3Zan^(MKBPZKFlay!|F-;JbiYR8{o z%v_mmG3xB^n}nau#E&~rSC`*tz1t|L@%My|(;)&G<86)L5aR>xF>fX?LK0KO&N^6t zl-nr5nihwX)g#4*uYVUE4I)W&YXc4U_FxQ4h0$MICwz8izv5}Fd}2caZI0p3R$yu? zWCQ1hK)boA5@+9hBiX}hH%)5^9L-^{OgvEPpYHo`?S=jt*X>2xl|f>5VXh>6+4HOS zCvYt#9$^RD`zZ*lj`GO)oU7JJSOamOUFHqdTvrjs6;#43jx?)!CBrPfr>jpBOhNXa z!Vg-;y9}`z#)v_k2G0az#}kQw8bule>A;&|QM0Wkpj?)BL`uHYa$9L$Kr9bmh!8D& zE(MM1pu4VGv^uf;5UhSUneY>yMwr;TjT%|KhVopN)m7MFR+jStIIA@ z5))eQzz9asd^}aQE=nomZCO>CM;;_=9zDm^o1U8%7J2!m zltrxa!IIco`*f+XkqP<+zTUmm4Dt1FjsfERFIc0?0L z-uN59yPL7F#W=KV6c4ife;@CNcKkMa@NCarH|JA8+3yzoV!pE9ZC%fI(EW6BznJJ> zYP75=J~PZBXb|MGMDRutMpOjApxz&@kp>xQeDr->lAdyMTSu(^94^iYdi=eKlR_~z zTYU5~o_5!tBN#}bA!OaLddOf_b9{ESU4`96|LgR%k(hKR7zbv8h&af0*=LXwBvwDU ze;d!#i}K@9Rq#M$tiOHv1?O+uT7OYq`|Jz*f5L5$Rzpd9{RO($uLbF~sLk7FLtLoK z5-GXLX-R^$&8(}eXs`cF{};JOWIV2})lWUG7pe+HW@xl+36BoN;EiCF`w6S!dZ5D7 zCR7>WKfHd=Lv?ld{pNdG^SPza3`n64pGh%@n^i55M!^dH_(INmYyP?qDO?}{{0omV zOK=6^EdTS{$GiF^ij^4nNB3WfN7~`&!HJ%`?&qE}MWt8d;X%;ax|b%X05E<0Wc4!m(9TrMr87p8h6-u9R4oG|+MMkZX4 z1@d*$rsL&n+@?bLD%~_*z6v*$@dee25DN^lp=Y1`j2Aw%nz?5o0Fq*bW>g{uB4#Cu z&F*?(Or=!#iwv;4zF7UF1SQ`F=p314E2M&CH|sXU6&?N@W%ZI}jhozK-M2NV{U&SO zV(}}h2}yV|%83;*{^0mmD2^IV_3JkRwipC|c5`OM(Ht4RIJ(_h(t^^^P} zx4KzSxOn}8^YUB|@p+ujlYDyl?BVkQpM8AZ;PYob7M~yU87K9-@=Ehcb1c{01*L^W zr6Y<*mX?;3l$Mrak|Y>dm`W8Cash#~gu86g7>IM}kj6cb&fqO$5XPPMcFV<=L^#oJ z^;$d3=+*&I_{MHkswH!!X?@yi!0G3-+M-Bd$ht)Q=l-U|agCzm6Iuv(_#NT(UG|Ej80tUR7c^Mr=*&h|^4RVK$TO#Ab(2 z_Uh2=#&2Y!G?e?=Zw8z<)4`cuLEJI{d{@i2W}wBuNsUJOFn!4>Yi^XRLr6U)yq(Ht z5o|u*Y9K@rhh?jvt4Q$WX6Ygo5j`EJM$G&51(d zBgAdc65bMXdJ|@xt3Z@m$m?kh%e5ouMb14Fh-euN?IgY}C&(arNGJKqj+EbM?M6Sw zaT1u83^oTU{qZ?@#v_7_tv4I3ZjNh|a#ujB^gzUxuAjc-!?h>XOuoHD2o+DO3JfS- z3>{D*ovZgZ#x4#u{}o&luwDu9_S>Gj4UkUIilE|{@ygGRCXGj>Zh~bAZ6FwJjDctD zYnQ56mPIT=&&IxJe?fR;pUyrW5T7<~G z$^F3H=(LMCX*xRJIicpDCt4u93lRE7asCYzV zt;|+{EZPF+jy30?9f7FY%h8C-N9pvY57(Yp<8=ti@zV1YP1U>l)u8oCVvHEr2vK%*Vq}v^wdh!O284g!q39tY$qHMlo5OB1c8U0NPT|P^Ig!Pk_}c{6E~p76yX!9Y zPe;KOj3x^s2_|qoMfydY!S&bW`a>3rG#R8xCPy_}OS8$y$*Su>>gi?>LA>xw6sNKN z?Y!YUD!fAONqQyjWA%dQ318tNU^yl+a;D|qP@pCPctais-B(P7HmP(s21Trbq=WYXP?!d1uQW6T+8ne_vMqim->E- zXDR%UicKUkt`0?0hgbmCA>%-O9b4)H1$nGQ%GsOqN+i>Kr4aP-*%gb|Gp5k=Vx2rq zEi$%ZXK}D*&+6A(pdX>z0)oy0Hkw6&>Q zv&$8c4^Kv}!!2f&p*YrfQ_?<*LrcKL!7p3@)N{P-$6;m|4BUI4R3~~FC5eXKFBi#{ zhy#5{3rl;DRYl4mDgO0yNYGI~f&L3G;^o9c*mpv67M{%y^&s&RT~WMn+jUHbu8;E? zQZL0{%2^E(A5eZU{r1scO5-Rbci{14->0||tkL`^I#CFc$3}H>hkYjdT%ZqrMxUSr zL7u4XMxYn;H1t9C6jIP$4~EgDGJn(f+@TkQFF=%tcmso1x&g(|9~q&^xzS?KQ!R&b z(V3zeQ0eG*n4SQJV9(g+tJUSv*^@8^^Ok@%-@%-cQul6ZF{ORn0<8q1f6`z8LWP6@fch3QJbsZ$mh zMi^6B1?||cu||+)b1Icp%kO98clx|@_Ijy~%)DY~iW$QL%j4Amr&BT-h07>XYVz^+a zIe^!zPDOj*CQe^S40}Dtp%&FX80aUWTlU$1MWd7sy_OKMKPsOHgs&XWZP zA~C?%G5T?r^N9??)I_{ewoHADE+qr-o1?I> zh+k1)$Bv`Q)?|2zX%&U6%Ya6)00f0&$Xdv9Z!&{Q1_Dzx7c{XaT!Q$-FLJJgn<@~B zge#b#$)TE_6<7f536Bm|VJ4}BVK?3Jp}*#-@aXhhoI+#5wnGTg&`qol*i27b$mvr_ zcT|CbQJT?)$sa1Gvc=KM>KF%#Ib_w6$uL%Af1y;*>7f09n24EtPmt}y&?KZ8=@8mj z+cR`T&Nrt=`>5N~`WYU^o9M<)JE*35c5&7lV*P+1U@V2qbr_AwHzqIC)_s?#Mi_e%ZU(k{bPMO!r1mbY3&zUSPPww%kJ%;nz9 zrJcDvn7LHvyso!gj(mMNIddsAymMEOi*va!bGamQxiWLvp1Hg?bNN8#a#QBACv&+s zb7^NT4`wbU$Gy{s^30|9zBqTQGnZ!Oa$)9jiF0Yj=UgvqAG9M{!dS~n^I7P!xrQKIx{|KE)6zt0QZ(Fz~W) z_KnQol@xwS;jg)@0dWQnhY>(uFX#}q&Zq#ztTelgmDE5L-I5o8`}iI|E=F$f*QT{r z+vN1I;E`*a_6;2Ji}RL)=cIUqvt}N3^Gc{$sp=7di+Q17n@cGw`(2&Y+H=?0AF1WXCRnGxpsEHL0ZUFvv-$>4wt-fN# zL#qu{nJ;JdhUE(LFY2$mAfL&DFOhQQ{fG(HE+1Xo_mLkwnx}Qj8=rP z#-53uqz5vUfe7n6EZ~(u_o)8BxhffIcjR<^vdL-3@}d(t{d#zv z=2q({mj0&nVh&wGoF`e4@8*L+h9%)%Q@0) zV4m-3eP6B>1KX2$QFvR@w$Dta?Us9tp5 zG-1Z>(kKcaP^-A*`jG?>pS94mzILCK72W(D>MDNM0Gn$w27azI|7u$IsCQ%LL83Z) zGe0@t-y}Td6Z@o&_=SHQBP@@PHaC2xLWV}$P2cB{NbO?5)vMwLxRa>OYZIdhMsa zmwI^x&8OeYyoXdE+3f(L-7JYFk6-qSzj&hA*7oK{-{SUj|%6q56cq6gaj)`CG?lBXGjB58oIRe#uW75@`^tm7?FC-Ar0P> zWe91Y7HfPVF<=_zZ>=vbu5`E8gCH9gnlU)^>lSi=0p@b7O$5C$ZgsN6qL0e^F?1&g z?H9-DOSIXQAW_FU+Keq{Az$4Ti>i}97JYy>eC zAvs6iF8g)xo?3^#D+J`G=GO#9GI3DH3cAklUPwt>4)=zxFgjtYaJ+eJ9_&TcWM=H4U~snZJC0 ztiB19@-M7zda?XUB@b9W8R8)nTTWk=W3aiL%nA>7sLnj7c6Hd)om;6&`Y#U?= zq~xt~BDT*f4Ow>yNQn@&&?Rwd1-}{u*pd@W*i?y62oC?D6f&c$CdY2?;BuW8^MWqExS3wwaX%J`2xN7$8#~?~aK=Cj4v(eVdsGWe0mpUoz6z9XbSB+Kw7bObKH{%A==aPyIDMVKZB4yt-CS;VHb}8oNKYs{T_vhUT_acQO`x1salfxJ5x7L$!7kqF7HluHc z&s0Q+eleVWF-D8A2>a--X7u)QS7e9amx^^qYKZ7Aa03cz_>5&O%7!PTqqmPWL~1B@ zv?TOf)W1S#SA9JQpecS0;Scj{p(sa`DzhIw=v`Z5DP(DApwx7%MZG+`8X3O?k{5I7 zIUVu2&?vo5Wc$9glk8E7OvXf5Op8QM3$`M^DCn5p_S(My=RK{%-0#}PhUvNIE(+NdG5|qG@pV!cMcHbQa5T78IRv>DN9WWPB#CJ{yL!_R7~G(Hmwu8b zi61(s1lF1X%*OgBJ$WCGugd^)5$CD{%nfpu#LF5( z8kl8oIilV{_-BE``BrGVDLHdIPb~96z66^gmEYAFrXMH@S3Z!B=?hyW5TALJ#bh^w ze}nGpsud=&%*nx+NXj7YtY<@(Cx~rv^e9@Zjr34v>fiY`YCa(85*HkfHGf@uF8A;L z20yV92v)tI@fQ+Iw=g;)!VFgJio62~?3XD3!=bNgdwb2Py13tZR-HTE0z|H<^3O-! zX>8sTs@Z*et=L$`=b~Z~BfP#~)plLKAETW3atG2#z7Nrn;>^Q0q)~sq8Fgn_k7T zE;m`~>F^@G_61)QT30RYnq8iIDhp&5=6PAzW)<=iR(5ntkx|pl9`1IQ_4A&4PF2OQ zZ6IWE^yttyi3VXSs?>_pHVC8FKPPie{JxiE<|3}2D*@>!frJLl)>2ih*S=TsoG@E7Rxyp?FXc2j5IM&mzf4l2h;R#kCdJJUND(te z0ribUhtp+ovL4He;W9zgGvk%J0FNCJ{SC(bfz-n;$OR6b{(C%2|bD4VaEfz|yX zm91K+(cyso(7(w1&F1LseU^aufdA+iKQHau45R%lr`AfR;m(B4ak4L1mAzhv6g}>I`MY zriE8OIS52Wp&*h6m9czy#c%qYE+C2E)1i3bzbzEe541$DJ@>WLX(PWT{*@ZzWiJKv zf%9*#>jOvA6KQh$1?BFnXm6#|SxjP&((u%jyX$gPTfO#P))G`;v0R5Ll=U4W&<@X< ze4wF;sw2I2jWm?*=C$wZX4CwNZa?K}?-dBM*Wm_#~)lS9T6 z;!`U~tXT~DE$IGU&qMWf4|u~TEH)-~Bdb8URL>NMNc=82pBG10`I3_2n8R?op**ht zA93#jA60cN{?BBRFoeJf0umMLsIiTWk65%4gLNjEkTWm?Q3UY?w6T=7x0S*Spdth( zkxY-%($=>2UHi1Z-u8OiUc^T=2@(Pb3DPP^Rn*p=ajFg4LcnVN-?jIdM;>~;zw7Vw z&xc{ooU_k*ix)3FFDal*i)|kn%+rY3Sx9__y0|ooTJve^=lW@Bz3x4iRiST z6V{4!YFdCt+@MScJO0QoVh3 zxpd{4GWE9Vr%*)cYaN?OVNZI(#+O|k8(bUTcKKbdmEa~;2D~UUci-vqE;GlhwSATi zML6;%F&Z?r*pd~-Syq?;&6%ppQjJwY2lAb4I)0I}?I#m+$$-LDtConQi4PRl_NeXgP>OHyx4L(UT@ z75FQ|KT+kHi80YJ_CcPcK~{adn+CpCD>NDG6Vfie^|=3J@K#ZRpR@M$w(@($0%t`G zPdvdnw4z*WjOC15iIAa`LmF1A|0!#)wIdc%>Y$o{FB)c1FS}Z(%e7@t9r{aHd0lz`RWesigP zLaEUuxB%FNk`2*glb{jCCG^B0U7M6_VLQEez#(D|6kueS&Naf8iv&8l*sQ5u35$^t zaL@CHYu0*m@@+X?`s|Zo!$+5I&l}+e^6e|sqLtcXKf+`}_1q3huSwqtC{dNwRk$+% zYTqQsGy7_sMukpl^MT})yMdeYAxL3_yLIo_an`qGL7uD7`7>VZK<^boN(IsY0ji@O&LMO=~ zk*N10eaosTAY$6(XWp0fG?GCJE{Ekj@u+y<3&SyD8uwo=)2OPC-HQ?eUXAVc_OwjX zZX~6?VEe-|bIjw96{3HYDH2MqgbV8+Xo+9yF=fv>io#(sc0-;_LGPyvWjn17ixbQ< zVk~2MalIJ~CFsFrG8xDW8og;mTGwEc6{K!<(?PZj5Ew(J?Qu%8b{S!yJedMO0C5uTSSx9ja zOV_*t_J%Qc!dG=3^cH!%eDUP(w;+7wSfzfPlq>d2U2KI@tS7%%I+a}uvLclKw-|JC zhK&zQicKY9h$5%2o5qLTL`pAE{n@6iAGfQv&|loZRw?{VCMCn7agvf@5$G;w6D+2% zhqhfxYt<)MF;%d_Z&p2}%+0aldQi0B>5ElC8A`<$WE86GDJorw6sCD*PfE)m)5TJU z>|27;$$F0c(hZzHFNz=6Jx>N+lYa9OuZrS^aM7wZpB_{8rXnspROkD$1q(BB760^C z8;Gq!BB`)-LVJbLNM%kQDd*XNNk;3R=#YkqW{TVyNUT+mSep-t74}gzIzgf+)~Q6K zc~}_%RB7}Cnw41NrfbdQ-4*Q$#Cz>YD+D0w6$Vq*svbP7CcA2{22AEXk0>LPI7-y^ z#DFMfVevOflzS!g*f0CXYi8!xQsVAvO z)uEg*vMr2Ck2CWCI|G!kvbgC#N?gjx$=0NZJsm31CSoXS{z%~lrtw3C8^A^jH{?PI zH)eDC$_O_OQ;ot5CEU0t)NCT#5JylIM@8gS*dr+UhF`@Q92!ampP?P1eKuO%EbVmE zw7?p_gzqw1_foS2mn;b!?Zh}-BgrhuPiUfR+B~dbvw3!=;gH8K=KVA(=KT`GdGto3 zpAu~P42eaE>HLDxa=bWt2}Y*z6B1ytBaNVkCH+VHkx#&WiH6)5+_7=6Zw#{K&!iq? zyVjz!;&ioGiU?&2b2fK`>9P=6lRt!wOP2*&cDfr-@dtLy@=^?>9De?+*1|IA(`9pn zFk#2J*M8{_dIO%WZtb<}iH^XO3+aF&O1!B&uLHK4yDM6#Je)j#<*#JMkIT-yG-4fA z)^Io@9M$qbtc{Ja{XxHb3k~|=xB%dV!DO3DcX|wH+(fTqMDK>7GwQwZglnp2rsp~gVu*gK@vr_}JLhA>==oLHIb?0E{nA}+sty|x3@u)Kv;7)u2?A@`^{dSUmSb?lO9g+H zi-LZI&}U^xgw6WmZMv=t*}mbooPd&NW-4R=kx}DGW_pwUvEVTy0C(6d3F`#&tx$1~ zeE@t($3f5Un1Y@#PJ8U&lNvoAQMdNkKM`~tf}cvF&~l5Hn9bLgOWL7Z6lK4qtmRg@ zhsuWyuv#9hR1a2`vEGCy`}9-AqH%1}{DhM_UQ(=kNU?5`r0hJzoKdzl+$|269tfMf zW>yWDRsHsP>g8xpdLkzW(u0?9q^{jze7#f7jI<}vn<3DHzYvQCho5!qn|Un$pw?{G z{s|`tAv*!*R(t{dPDJRL-1#nd*ffo{1Q5gJIau2nJ5`#RWPDdO<>;l%>>fJK+$zv@ zxqNWCUFL)Oho5jQoomjXz7w`VcHS;_gC66Xqf{Z=#ADB5^b}u2+tYW-?;ZSJ{S~!Q zu#Kl%*+B3k8t}x<;L4-QbiPAn7wo)kvUp(&Jp2L~r>CILyL9w}!#eu4PUI3JE0MlU zqHiltQF4vZ+R+0jmO|q)12DcndUfR3id}%8t9F_pQU#b|*k47_Hhm|1#XX}y3p?gA zs4;{TwDyT}rCqmC6xq>>MR;hLUdeMWv7SW;Gd4a03iT?#6gX6;6-*eK;(=6E9R2s& z>-sdF>)kg?j~#n|@aJ{GpR2&1p0TuS7=mi)Th)T7D5duJ2N4bq>?MJ9>4a zVcG<{5=p+ow9)29hq#3%_6nwn|E_%i16ME&IjM;Hz_jR@f@MWuS#+v8d*gn?x*OU{ z0+^`Pn17cVeB$ZCe$OJ^|N9oI&mc4{E*rbNPTIGZ=@#pyMOIsr7jY1&(cH1Z8gJCe zgI*xQzeeA(iVpxuTQ?}}%8@|fnr@PnBSVtHc4AK+%4g{%;2I zi64zkJ)`U<^N$U3$5ri&)%P+q5F;!jkA?n$d z`Zn#Za`rfxjqi`r4MCB-$(&9`pdYW^~(RJqyNN@Mj!n; z>6#inOfaLzX(~7R*tP$okrPP$oq+$+y}J2v8Q=?3#qtc$09({vR#BzOf8>Z-K8vtH z9ywdorR;JL52LM`i<)wyt&(rS$TU&S(vuZio*q9PXXWBhO@VRuHf^*CwaCh?giBm3 zzWZl@@ONRgSIPGmobM;T>UMpQ-+TEj-|zLajPl=b-jVw9_d_IB8UK4RL=zwUjLv^4 z@<2xYLg+E!&iLD)tf_MHfq*s34#+xmK`pckpRs8SzXR6X0f!?il!P46kA6YWl=Qg2dAAimxX#t7my z>#%x(Xcc9%#OiR?;na)LiuL*amfLmq%+D!q^>by)A6N!4BHfGWR}v;1hy*o{Yr9R27nr69@~*VK4eOS%w2Cj;oARqShuOr%3qBC#)q+XuAvT zmqAKO5KZFh3QwTDacrQw(L0%~ViB^5aAE^q#BT=@OG>%Tp{6@{VL2w2H)h^0;$zUgMsE&FNO%@NGn~FMlAMd4=Va+=yjvy_=-QVe&{T)? zsm>#dz)?@wKIe9HrJQX5DQ6o5x_!#vO$rRgAgUT+BCMA(wVDD|+dX}OByn}o=qt6) zk%Uu*1B>jc#+Mhe2*s0eDV~gg@Uwor8QHf~>{jhTtfHkoC5?P$yFMv()uMah_pLkf zwo`qc7hO?xM1%&<$T5RMNY>*$MaI*&6oyK80HIOrn1<1chMgrbdV-p{)?H458Yr$% zcZrNH7eeR|E2BMdwv`qaRp%Y;*;(WOo!wbf{x-F@kSAi)y`}JbnCOrz!f0JZRVfL| zB4nOMQxUEs79n;P(e9z>O173cBF-s`eah*=oN>ZLK&!S6?}ypknCr)U$yT8RI=8+< zFV=ro_d*WH{@86Cz{?ui=ae`ZV2xH0cSR5+49x<&9*zTOx>tWBM}PhY`C!q|5p6{Y zA{8?Soh48-q`f_dZo4E+9wHl`Ff5YKT=RXZXf~ZJ0y!87it z(@iEygkM{{jbnLBjbIjX-M#j&y7G}r&g0hO3+5x9&5+>aeKVlCSQoZ4J5EXnAEl4pRglbLd!0R{R``@)G|iL?fR1Xe-VaX>hZDx2xjXr<^PUV2>g$f|*` zrQQl#s;-EYec9?(I`soqcM##s;VVL<1f7?xxFDSPWOaPt{53y<+1Y)QWJ!g+TMB`O zy%Xk6YsftqY?cx63$k8Vky<5SP){ZhwSgyvB>j~K*YQAli78#GSp3{|XQjk0T|yve zbqAPb;mTYRKq66CajaYPM7#J+KQ2f`myG(PMavTZRh-$CEuyryPi$lN%S zn))CwhpnUZG$bQtS|Xl*TFS%595(!9nrPDo-W}~ z;nYk!@1b&%XNvT0XL@o715LJx{;;5YkJ>3NQSRUD2VpTQ=V;$+--`lhQ~-%0x;iDC z*wK2#br*)Lsd*wcc5)@NL&P?E$`(X1s)nIx4b(A$RrsFzD^>)8Ulk6jhODq)f?KTm zETz*lTDK`{VYFeycxcCd;CW>ZbA}E*^*0XG3Y6@flPmtmu*|0p`C$B^*Z||@HT}t; zb(9`}CIQfK7Bl7!GgQF?k!y*Kt@7Ej1i9D;l* zc*H60iv$!4bwLdZ3~Lk^UN>$)WHV$j$(ANS z5SUzCk(x*I0t(a{E|s14{T}%T1PQ7H35@?J&SHSTAhjPWu3=cPRF7z>488Sm-q4p0 z8~SoxaJdZqdR5$>a?V% zDp}rw78%nsx~o^?65PUwD8+n}JfuBSs$B;3J6-Am^p5S$aLlt=u=(gYbZz_wBRm<) zcp1z5_jRumd80Fy&6!?qma$C8jb(HGSnkP`x<|%hKc{9<#&S<)EaTpFEH7hiEMp;1 zjVrb3{iL=^cIu4fhnZgfP{vZHdnxns!~C(_mnn6hjAdGGEca!`GW}i0a;h^HL&oy( z`$;bI$8vxAG>v2T%UD)FD-d^-%vS9F%y>9oMz&^3Zk6$bosz$&cj!d7VrX^C^=ABd z$A)vA;o(X=4C^k=+ni=1bao0J#kegWJK9(mRz1ApmxosT z03`)o$^^uV*stDC;*>@GjtnAn2#6>BNg?$N(4|9x7b`>oZ;yHGpfZTi)6pY9{_7!C z7SmV#_}d&0q`woTzxT1Jyl?$=n28%?AA#JD!(Pmd>z;ef=}auCrO^E0lup~~&@6mg z>eeF?XRtU#l(TP{$BxT^odbAhXnM!(9^(3Ec{|06L?|q~P^s`DAA`lXy)Qk5AO(E_ z64x_om=PF^+xvitCpL~tX!69^0afaN0OOg1s?>*g6gyy4?lmfR*juKKbzwmCx^eB^ zWkKV@PUFsxv)`l^Ihzh~Wn8Hie!Smsx>4ZtY4Wzh+L3HqgX#my;HHi7GL?C-Dy>M( zRaUH>=C?w}2Ex-jZ}$qcJSIvALQM~0+A1iS1(YytxOxhp4hx{3KA=D_M?i2`0qRsP z;n)`UQ?kJpLmZHNRQ!-%Vmc=b|7yq;7Gc#M->Q5jl%3UAjr6;GgYbE zgqZENZ`N&2poH_ZL^ZKr7M}zm&M~vULk69aNgLV$wX&TJ+M8MbUa5PM27qj8-podD ztZyix8j2DV=`a!qXF{k-dJ&j13RyhjlV<51$o~qhUNc7|^ zw@A}Np6zmUvg`kvrM@U=aBmc8N67O>N5nBFS$cuaav}#c?Pz!r3P5F`%8AUVL(WGv zk6bX~RF)^el7re%kf~$aU-4Ew*4=@jdGyv07T!n_Fi+V=Cg0~EW6@=1%_;fT(2YDC zVhyd0+5>=9jN08Jtf5C5wQpzZP_5wEjx}`tv4}}=ByUKaCYZ^>wnEpyV8}ft<)@qZ zOAQf}ihmy>J#mQy3{t^9{|KyuR=1M4Z4i@z5D`9A*M0rV5tmn?t~ z2O?ZW9w^{wH;cRi5c>LO2Ox~MLkq0lWxPlttfw*(F((Vqlj$)I&;%MQ*fxhj;|^(I z2sBm<%DQ`&Q{yYxp{A%&I_X# z-b7&@TGhE_6b>?VYG0>0^18w&TJBz zR-+bo0CzsX!3N2(tC6JWMas5@fXy%|AAt@!lKWIUwNQ9kwlLYLdh?zy=Q($@MXv~9 z-T9Ex1n7SUt)JcS-l6qj4(G$6m6_HNq*+lSNb^r$R%Txk{|I!%%Qz%NN)xh?t3vAmmx&i?8*$j4yqeUdWggl!b9$ z&kb$=DJ%8U>hZ9ZYP6lkZ51*E!zR52e(ZWUiwn3diajLOlVVpPOPAdBlPe-Dx-v=A zNV=k;5ayDeFxE)l?+_>~!>Lx|S^kD6M}ZI)4AsJgsIY^n%PA;F0eG5a0pr3BxyHmn zc=>>_sI+2rF&1h2(uMrL%lMkAyJXb5DL%2ZLjFfpuj*IA$7lZxbx=Jw+V%i0xvs=c zu#@WuY6u)+2tmwIOSDQ@?VvWer-L}rc66`IXKcB=Q0|FMkd854;SRg*yL!g}IeILjE?0{%1x5@nFw{5}lbb(Ifq)+^5C0WbeU%2x!g_ zMSxOmgm_k_@>|GI%7xtvRSDb^93sSio8-`9#f6SUoz!HU#WkLU#LNPo2>;t^&4c2SOK5zN{Od{L zH_5wE|0o|en8*h@vx`x2p^kW8=)2aUW>u(4fmw_O<#4F;&nVsgqF@ZT^92(|>z#dd?@ThA?spt z9Nf0|vt1tvdIo~E>q}REh!8(MmC}7@db|Xx45S=@>ubY8`zId;DVpDCJGB1# zkQ{+Tk@+WVlqi8l&M7o+I&(hQt5ii8$uHDK@*IvbM)EMW7|AbmjO1rwB>#oAA+d5v zvo?-y_)T`oly*8FCRrl)Sy)gwhQpwjv`S(C+%}>=q57e4 zS%gGVdn1WyTBbCMW>ap6cfeXKnw^lfdJ#(7StypmmQ6$-vM@Nx2`P&I#Fu0_1s?P9 ze>k~%Y!IW9mi2?21-E=aG6TZKB-i)_o~Gw}qHq^4m&p?K(cm1BTtOo`=G5QvobF^p z@GPY44!_8|0mKB+f9>#>%hAhB6cfSFtl7{MV{arGoAt%})a`jqX5t~aOe5)0)SYo3 z@XbjSUWjo{nK|eu=)?{_f5U!lA+#lIeG(%9QdfvVHE?v+*uofYsh?jOwv=r^Y5?jd zrUN13SyWAwAT4Y^;sjK+Z~9K6Za}I-J@MDvX7fQK(XKj*2m295UF~EUBb&&E1(pi+ z8+cH{$pmUUjV~9oh|Ma308=COOhrLYXOa|3wfl(vvM*5EcY7)E_Zy_-V+At$Uc2G9 z*%g>)hCr|^*#@0OD3%8ykJ?wA^(J8mo4d)HEs=gsdR`D~TLj-S*?_G-gsXZYRZp0; zyKnc&YM+S9nsN{9A}mMGy1zQOntJBBY}4E~lDqgV@+rs&CJBcnx(^W)GW>lo@evi@ zCvLlAZ=}Aj-ks-5U8!DjzlW3H!)nBwH`#XEzBG_+dpco-j;^`@jV`n?QuVmw&n-Ro z%ITSCS&MAl?tB*WI~Ami=Ywmk+~y02zOZ*jg`vCgdHM) z@d!QsErMB@dto@96Ru$Wa)%3wE(zD1`(Dn!^WQs@wH?IHGFhzcqU5Z>G-5#M?BkNI z&N)P=;O_gC4^OXs|9^?vy3R{XV*GU-4oBFBW9n$)=wM&rhh+E`1Dk+Rxyt6h+YU4s zmGwRRH)m_Unb_j%@f1u>`TG>{tLe3u+^bE+9&>)rbADfVvVMMr^Lx;FexdWb*ZF;h z{8qumq_&OsgE+}4m$@ZENv~a?9`cgSnOXEmRD_&mnv&wN~XxcnbJ zDftj}>5A{WUDZEuyFT(m@;39i`(C%}OFweEp1RNNItRny#E;#sw|_xy=byM;Rros` z3_LhZ}55K0oq3H^I1NhWGguWpPz4Us#780^aR~~rsWf3{}s2HzvJ3BoM4;yS($#gt?8iv$fSayo=h0vf#x;oWCikdWAT#XF zhv}HhE`OW-aj=7&#HB0QAqnhU`?L|?z@u=ot~_9sNj5frfBXeM49iqbde?<4|A68V zngTmqB5O@Ia{C-i00&xL#JG3M?6EB;3S(Cv?es)pXfSo%sp4C!Y7SFPbSfG6>|y=b zjKY*{9A?wR7r1w2TY!|IuGsk@E3`J0m{T1|T)Q?Mi68dIU+_d9R<66$w1>{vsx#ZH zf2JSfEQLMNM%lfH)4)65lFRhT#6RR%x^Z*vzFdl@#td!J4Ju*ppiwD<{o;R~iKZ5| zW>-qc4y+A9(i38X&HhXr4KXK8u5l|P_oo18#>C$nyT-J>GC(V0pCWz++Pz??f9JLN z{+*bB4)gCM6BDuNiQ9ggHzp?TUhyv=9TJR!^483*sJ-@;|AHQg2k4b_0!g=a|JKf? z;~x5~j8;4+KG9diu*W^L+POi<0ei08BYY%&3y|B1yx;Pvv2Sw6XcPNF99cnwZez>5 zaSc}Q{=;EhB=C)hc>01h8%hJXz(s1iR^2Ly#|)PuYcR0KdII@b3E&B0j}1qM_O*KF`b$!5;z_P^X}uF)rTVcA@rvW z1Qe-RG2ZZEvO|;nhNL@eQ@+WFo1l*UHv^gx4JS@HWQq zlM9CICcEtgLtZUgcOXDC*amAqvIx!>yL0x(ypI%QvU}M3Q{;VK36L3?d{DvKee3=h zu$n43hRhuPe$y!L{}IMc$_ECw@qSsb_8EDf`YiusPglU>FH4pN_%RK*#ydX1jq=XJ z61sxer8#25m7@Pnu&`^{XpYN{1)cZCQ$k+%c1 zDG+5sSZ$^^h|7a=>9y+V7*6zJC%3|W1*#ox?ig8!2pnvgRwHY&p6exRTbjqdN$3=W z938PK0kxA2dn-(C>s4os*2gH?TKa=4Sbf>b=UO%_@WvWUouETA?e#OlwH>QuJHpArUBkL6+=Lz=`{hv9rU#X&z>~fJebRi)_YoDzt>kUu*2e0^jXaw< zyHrLKEharmd78}dGCi3L^lEx;ajMfx1KjLc_aL)FpSJtx>&Sjp=grPc5L=ibNje6r zF>Wr;oR7$-LUX(AAoBwqIK`~_?20Hy z{N46Pzzg{mdtH0-s25|sSabeT_e8ed5qmD6)Inb7)U2NnDxu!{CLP$Fa7u!i?94>r$0JZ_L-I!4DcDAM(lfLwT#q$3B$i zh$`Dk^z;A`aKONFMV_3!%bVG|gp$gRb58`v6oeMUXM>Lww+IE<>$f5JG+ITYDu6B5 z3t9Z|L)L&8zTiZ_IQ+SM9KtJQl4v5c3O64J5%wWMaD_n4%F@+A;oVRoggmp$kWxY3 z&joWT^l;c3%hYJ5$Y`#@E-1|wrAFaNe8H<&y1LSpk3_7x@<{ErRg2(L9ry&P2|74z zk45>s+b)rMDl)(jKm-yiyh5u-2gbIQzl>N{Rfpjj+b&SRaMCDX)Xa_gk_~K5(X~?} z1A{$;iBC2#m>^iqH&}LCg|9S|^9Rz`vL%!=w#sx^^O^pcDv&R%FfK|x!Y-J}$vvi3 z*n{*bN{-WoC8MCdOd8l-2==-2th}RH#O%dXa zZF%8Xpxxw%+_2!hf|;H*u+I(TW*VsQlynA2D@7r{q-2m32Gt}jN5P<6DT~nD>CnqV zqZ4t=AT$h;H60hGIWI0zKOIqMH)>p>yqH8BXoiIcB06^UG9)JO01WKkB;JZjRZ3_l zyt|S`lXwUZtV0IHo)vo0gp}ncoKcM}H(n!FaBK>Tj4h8oK__%(5y{{~8e?X8ZkdTL z!p9Q{%PXNM9(2jdL|0Qy2=Fpu)Rr+9vwX|Onz-o`6P-8~RdZ*A;whiqA_5(2uJ572 zw~14C=9P8+cGZZG_eJeDa+;$razF|~=5R|eT5Gw84-~|vhiM7YIv{7RSV@G_GB`+L zdA!F?cqWTqyr+;aIQ2v40lFgkr(+oX>$^i8%AEZeM@WYWyro>6kB^u&Kakmvo>}{Y z`}tmViPFVNg}c~i$u$svOrE=9&+kw{W92&UTo$Pu;AUN5j>DwwaZIfD}brY*|hX+OH&DPb+o6u;Gm{O5i2POqEEX$p=M%qo-Ml= z&h%zBAa_W)8cOCZk?Tu9tDf{r5dKM|4^|}Sq?TQUf%YclhNq+Oh`>YRwy~*~2IS|} zftDA+@IXmdpnVp0xRIry+Py}b3{#;F;n-MFxSU81S`Y_e=uP5&^+NVM(O8a%MkvHV zW6O%Gt=Hl&d*c7}nDH7{)GzUycbJ2{a>Tg^7Y+&hgM-r%Pum_jI2MSWo5+qIg2_sc zs~A8$<}c}PuN!N|YhAI&X`63Io@oSkg=(LOepO<)f_`*EK)+P*f04qfP=bzIkwu~8 zf<+8K!h5#TDd`qiyid#lYrA8wi>^08s}0LTiQ-5Cb!5xjv8X*Bcj6RnBeYPc(%d@b z*NrdSI{DX);pUCMqms}=posi!2pxNYK=xtcyjJZB?Mrcb#r6$TR7;%qTTBlo9M&!Z>qykw+Mb9J=?hgo8A;4X+&sTL?+D}IZ&rSllb+nd za!-YlOBN|`dFX_XOIy71W83BvAiP zSk81Q1Wti{Z~JTwcDnv=6((e&#v?#(0{90)i6sErA^h31tPtE`{S_4PW!C_BBGmVI zDEW0+T*R9UC2w2~{^#ZgavZ|r8SWZ__PSWevW*VQcaoqZ1kWTap|avqWhCFp8U&w@ zs#P1EmYHt}AJ}Uj6|UWR7W-SEyWwh&xdT6EHqP#bg&@U0IaiglLRVbPkv*V*cPtCM zZt?Y|lf!_w!vUT`*(isK4DbRa`M_<YMu}`Op7N^;6!p`tSV^XpS=RYQ5o-PwKJ} zz0XX&>irft_e}5oLwc`-bIiYj{} znZiOA(zcz^>uF?6tTbHn1%I?SoD4Ok11yWCPy+8o63it+O@eRdH`J^skCLhaQII|$ zW`$?F?L}1IfGU%12eoWR3=xY|9s6mxW|eao`zeN+@=H+kHXqUWS4bk8GNEs~?e@Hf zyJg(=%Zg|FS_`9*4VN+%Vry@GZFBCz7ho201mG z?*e)jmUuWl&U#U&;d2Dg5`ku)NZeT`kT}RU5gxJTq_7lf9D>yQ=Kp)WL(_avWmqm!NJw> z+=BvtouF_2;TX$;^83#GrUgAgj=@59oj)d1O=4IjC#qUo^( z+>wwBOVxrFPx9r8Xh1OVDP1JgLy_G^Ihej9>CI3NMS4HV;4|xQDD|L1(LOI%^j9Ls zE|u{pA}su)WdBJlUTV5YGJsle;@0_c=93jFG4_bM9c=&n0!iw=Y-#@8%;>Z9I>#SL zg4H9i{tMt?jZNwZnH>K?Y!5juntyVRi<~9MllZkBflcRO#!VuN4*nO>6dIkl!h=Ly z&3_`^Lb2TXK7rDFv~~X?_lK-|N4_(B@joO=_uS&wNGzyJ3JAZ*ApR}$>~v!#y++xP}@VZKdk zz&4TpaY6%-J50|Uq*`-ePlh&1;Ns;0WvioPOT0GZdFqoQ1WYPo5YUM}ML;;B*vBZQ zPG#~CnHWocXg#Nk&`3`dM_b7(D=b&VKuHhVd&_Nz>S{RA&LlF2B!(lY7E7ns(?v4u zn)(^H;|R?Cz2Bv=vOI^=fE;j@y@*Z8%C}*lV|oVu{fC8{hmP+xq%qdK0BWvY=0Qo+)^M)uMjhCdWCOTeofDN|QkUSQR+(d{DQ2B(n0p7_8NW7E}a zEF6b!IMdOoyJsABBh6{u=;J%==?n}W&I*5!`ZSjyG`S}m99VSfqFWF%MYpnPv~Rtm z7^A&wi=OBMxLiglu#JUtxwJf5CN)q&~zD7NZ_K;kNb zBGr|+)1=F~3Wo_t9H!5nyGDUXz;ct!nsOrt)X%YJNJo*EKJpy)5YMx=`Ht`%thU9RoS35Co_XwS}c8Fl>fVMV!%HD~o3H1dOeiDzjBsM{Xz4e;7Rn!y{ z{zWO3F{6dZD zKS_r2r0Istdc*>_i@?nvN8}u=-MR8F6t3#jP&KwhP$wRy=eM5|CNgeL|E9#*MOI&3 zeBD@HZXE2O(7IHXE@#;u#RUmtuz1^!MjevJ^CV4~60Ey{#9M`ZY6%+?8_Uwn+lxhY zNO?*~^d`^Cd0vovE`e))^!g-N^S$byer4YyS$yYSN&M^20cy| zJ@b`GA|Jlk9rV0TIE)V%Ulz%MjLVOuoJc>+hk4bt|0O!B!VXLPjyEMK1y&;wtJg}~ z%gz_uM>7F~M!)^*eUP(^{F-~okPk$55AdPZP$Fl z7b|M8{w0R5v&ZRlf`R=Q_kE^3Q2X5KMwvJaT*a(T)FxujXYH}?MCfK+!wfc-)$U() z21Erz!xsvxy5!W*$n;5q)0^A_I>9M{)+B3$jG6zEQ%r~FF3qBKa- zVCyByi*<0w`iGpSt|^PJJK5`so*uMz2gw2;{oqXzwUFlUPuN~d8Ijm^mr=vYJ@ggd zy-ZgRRmtRGL_qF&vzhE2Yp=xonIn0bTDr+gUT;Er>N((?H{!Pqz`AIKpM5iOMUfLt zAiR)6Fz$lCHp=RC0=qOb^P2mX-3@Jn>!(DTcfg8?q5yMH8QRCCWu||rOzd*uZdQPX z*$CK6wy9_;7)$K2yWt3&{11EVn)bW}Wm*_)E`q~Z4j;LqJU5>@-==kIDe4&tyBXX{X~B|CQd=?5LfpEtQ24O@!86!hy5a0`~2#nAnEubTm`MC z8;n`|8*01ORE4ZHWqJ8o14)xqZy2|_gEis3UL)9rT1<>lyH@|%ef7WlSTyF~_6E-( zLjIkx{%7nj^Kf!LzwJwt5R(S1)F^+Sn269?->lX z`iMa35z6X0Ft`J2=-9U!JkJg85c6}qE@p)+?8|B3a%o@&4P2bp0OU4%-hL1D3wz)T zc-|(qYy&}Zx9ziowFg#Dvr0I)PY8N;qHtba97LT0@r`#CdJe@71*!%J>J-E)gshn0 zcJjLwKLkKdw7wZc>+|QEVWv(7Uo;u?b9`0d_+&ebkiX7?BTI=;{SOc+@xQ%LXewP= zD#ZFN#N+bt*VK;jbH&nd64i*fO8CU*KpY{2f?$$CFfE83@*evaFsU4CR2Zsp%2eKH z`v{er)?%L=I?qrCQHF?+)rF_yVNRqz_DvUljjmGKmrgH%wD-Qza1 zO8;o&2YUqKX0d0Q<%KWDpd8Ut&QE}+>hOAUCYb(EKLMIf{TV6`0iBngm4lYaC;_Jy<1@Nf=099RKA0ak zy4N4eUS)bZ(=X-tt#uV;*0pdsbx30mn#s$*XO^Jecrq(yxFWMZ$tcjYufnDlU5_GB z&iw65*Rxv=Id2i(v?CkcbiT&NTXlbkZ%V3|;jy!=r*&*ok-q_)2*)05UpmqWrQO7p z#L$al+bXP;Rn}bq*O8X!wL==t9rQvRMl}rHAw3ObNp=R5j$-Q9QI`ImY65&_;R2Rz z(AW?pH9p`r?iA}fSyj3HbY8Nw0L58|bYpp7QTYosTJK9=F}!zxr85sK1Y1>8H2WPu zqJq75w(SfV4IL4q0p&vv`Xw?>6YIupY`Rr2Rl18JPxn~wtoncC!jNJ@omhU?!Kc5Sv8>q249?$EEJs~x$CMrWk*q$DE>0n3=a7;L0(Q$HqBx{JN-!- zlX6mqXeBDFi#I~Z65`9zL+4@U#mVZ$!$2=|>_E0!=T&(N?nnnZ5zU!u|Lkn@k#V`p z>A6b+37s91Ktf})odM8zi}f8nXzqU{+Xn&y-To{~Ni+icU(DXNb`pK%mZ=hoX#Jy^ z$Jw`37@VF_!8+Vd)W71VndsFv)<6YAU_J_2mHi8UUR$N;^Y0h+clZb zc>rBL5w6?$e2vfd`TT;9&F5sEoyjLNhs@s$Ns8q&D&L5oC^a^907MbAB&S?yAk@C= zj_45)Y7=*rh&_>F6a-&j2KhKiSyt0I*=;6+F@v{35)Ug8g5 zGsS%isVnl^(=XehJ|0*08Q1JYy!4cK=B}P7(ExKD6P7>Q%VnD%mhtj=md{K^GsyRA zd?s=I$x%L)+{?lTZjaN&Ncl=rvhH63I2g}^h*^}BB|b3L*z|?~5W9j2B1j9O6`1*k z2+;Ng2493*hneR5Q=LBD*}>Rtd+kkM)m-Ou@+!o=T7_*vZZa;v+-`e`Q*I08!uUaB zsz~}u;ag)OGPUliXptHcZj$Q>tD5>h{3nfiVq=6qtkx0dRGX8&qIS*CBaqV#dSb;~ zpO!7M+wR}2ib$9r*aD;SDeI5+6R@bJ)mqU)&G_58cKB6*L1;7lwFs6b2FMv4!(MSL ziiOlth=(xQ?YjAU!cHHP4aJ-pWfS7uCb*w%zxX65V1x%nLA z^A>Y7{FAw#nLGJb_Dz|1$x4YO?0eW^p&qnP`#;65>F{gk&*Jz6K5?$Ij&aHeTSz{i zZ!jLM4ke~lAOfsA8mx4CqZ5~HM)Tt~2e;`Pu_GeiScE##t-M2Ko*yd;T5qMt&a4Vr zgQn52zvVK3O@l_;hoNe)o$m7%-S@oFHjQ6^bxK3nVKAA>+}WK<(bx z_y$s}-War=W$Q@4TrYhni$+KgE}0(&s$+$N-RX<4AP>Y(d|<;lbm?4oL9{5|*_SSk z@ASn}*DNzW-}#2|atG^V7b~QP6W(Aal}7pADV2VuE?Ic8oOkYGI>kMHRh%(YNV>grSADu}&k?TFz1dh7s>9>EPpLZV*%08*ytU73V zwu$s!4(Bon9M0h|KU*mW^To&(^@PcMm0hDcb$QrQlfNPftKUdv8yu6DrSPM1+tuu25a0f?03=) z+(t~}QB|KTjt*HIJ-)bojVRn;$;98l(+R#4ok$uji}j_i#9ySwT_D?iw84DTLA6rh z%peLo1Mw8*$K5N(t@(5ySvLlG#fGJ@T!fTrp+@mjNfy$T61s^O92LcO8e8;;WPEju zuge*qtniB9j8jD(-y^)kv4gDdkP+-L6KM2N+X?w7C$E`YYpFHAoF4I|@ZT}rwRqX&N zMtLdkeZ45t}SIbCXkEKg2rxN*6m~^MSNU3uG^!@)vF{3mNPC z>^1TvIpr`no$K34^9^v9tw9fM zJlg0+z3nM+-yzQvgD;S_#0xl{eFj-J7TRI}($)dq z_rdQ$S?gM67Pw+ZQzj&d3T9#E)9r06(7pbTNc*7S1PW+q_DI_w!(H7ve7}}Gt}-{^U~2LsiELW zp>CBW`$AQn?TFrWed+NT;7myz6af)x30sDbqffh5|g3tGeJ{Ho)hPGGNmx8rw zPU`QGN*c=~tqI~vmDWTFN-<%lcOB*V0@G~|W&FthL_9K)nyovafMS356Z}>#=(bzB zm7MZW*H{6UeTO{R{KYrjuKP}K_TYOS-*@wQgwJbyD){^qq;_RY*Wcyao%gID@7nA2 z6ncxYH!z1EYX2@GxH6Gukg7tqA&#ShAAWn1&@(wcfBg<8)dU68WTgP3G2=z zdIEcC+3bs;ouO*ufx4PyiNFl#erP%8=(NQ`&i; zXv)*j%Y@t5QZ$~c_CNuIdQuOqA%YE0IzVHS!dl1JZ%%2>Bu;eFy;lpHX@z`)5^ewvQ?hzjivi*^ zl(+1(ctwuWx!&cs=rhDfVyhsVzEt>#2KL`7d|9JV^b?|3AOi!KCKjU2uOoGwS=+z9 z0ZY*8aI#cp#5EfaE3UoB&KX>K>`7- z|73)e8|WjfIn}eR!c*oZE;TptHG)MFn^8spvyZ7L zqi`&zVH)3MzxI)PtXzpWUnvS${UMsQY_xhP^a9gYH$|)-@tiwvs64IC*b*+0&`5`| z@z~|*kqCO&c}zb-9G_J$2CRiM&E~g7K#se$HLKb@n|)zgPdHhD0qLRW1#p_J>v8Sb~K+VD#>pr* zhxR#gnvm*4){WUbU3*lLuD}FAh}UTbMsJN{vgpL)+}9OI;a(j>0EJKM+4}{cZ1=mmFi(F~jJpg1#T$XJg!F z7k#$lk}6SipcWA$?VY*xG}rnrp1XqoU4)A&k5qLTTgpJHQdiZ!*cf_S6`5fhW4N6(1K z^0{zH)itxH8Ev9ICV)g)P$Z-hM*HfD>cRP5(YYxSr1Cg32{RE2b=*bW+x_np?|b9_tI! zth#9+6;VE7C+ji$8IBsW-x+iBUg(w*Y*45iDFn?<)Xgq1v+YvjZBk>bB3GRn+_37x z%}3jguK&Dg9TWSDNRzULD80yDAydb1D>%UmN8$&TGzarAq7o^^Tv*`=rEo2>yVCO^ zrOeE1b;Fv!=8k#{|&0@IO2ttOSaS!s;l0}JOqKr-18EV zcPjvaDrp~5g~q&G6_gnF-wY?uH?p6z$~nSF!bV(y8P90}>uEu%Nor24 zg%BY@W;G_WdHv+X?J}q-BS+1c!`5Hh28}O?!Zu{7%{QMPu~uW3R6h+86TH-0aRvQW zHe7n{hr*b%9o5xYS6}Llzjy`4{?TjVuM|W-Dpw`(SB&T+Ng@2H*;eVLGH;!jkEX9> z^S_kr9jexFU@NCrm&{#y`s>)Y6<#VrA@!^}@7Yv(Q+TP<6>>Dn9Lr03@R?OiYDyg{ zZU*}RKqzAv0tbRIXgD~_R85_N!!hiHmIH&l@niUf?`5#YOKW;Po#MQlH}6u23fS6f z#T==Zk9e<0n8f?(l6F5re8@J`B=_UAKWt5SsX%7=jYLZVf0iU z!(+rgGGy>sqONOJ1O!$W(l@1S_oTd<3*WtF@4G+#-@W}Vm5c9e_1cBl0_F%HTG9ON zN=_y#7EczTD`nrgoZi-+cp}o=CpHo9oJzCRNu`O4Tp0hQG}fDPK}ySx=sb2oNu_Cy zn{D0QcNnbBS%%zWHqXYiSfcOZSL#RE+`@Cxlxq8hCgol_()ajx=a#tgk1&e9s(nmb zZeWucA83eGipL&_HHCFNUkOdd-}>oEk~7z|3Oj{Vs||7Sw)j9}?0H>S_{`{jeN;%E z{>$HtMUe8QVrc@$UJ6*-@Jh&WGZL~3ZU*n(Cly1S}$RuLG4aJoor5`IQ(E?@Ykm_H!6R3$`X{*WRJ z!u{`mG1MF?9o!X0LyYECj9*ZkbN-NRg;b!C8WRALtu*VO8%FQ`VmMi}s*((}=$3SJ zsTbH{#d28#q@!G>JtJCHY^vh#lx)~x^2Cw!Ad&vVvfa^@MIq}Av+4^o2$_n2w+soI zj@BwU8tZ&)Y;2F6)n;N&S=(R?**0tucDR(pEP_Q@?>p+RD~QfF9*B1Xfd@rKzihB$ zSwj6>M!=)8=!OShkh{ot;v2aL!hlO4j@|ZS%S53DRJophSI#+KYD%BEY%u=#km4=G z`rxccRc`eJWyxeSUSHM^`_HKAXJBhj;8#{W+_h$X6?@3?-@Z*w)w}Iyn?!u0g*&_L z!NrOu4dv&f6z6)Kzc@Oq*%oZG#2ufF}!^f}?=_$Rw3>A{PyksT#y zKhDv>LjAmC=+B?2pULs-hrHvLyR3=t7zHCfPdoSITRyMy5jcv#i_s*h$nKvzVtPlO zpM|57NH-k55OlYJmq*ZGBktzpj0K3zamzb6RanyVg}zjpHJkdFRs;i0p#NSwO;lwm z;}|_#PpiVnQb2_!v+7yXy`)?a(w{pLa>QJ+%`xBIYu|c9elK%Nl^!9DBN8W7Hxk`C z;11!4aA`J>^%W9t30Li@tWge-p!}TVG$6j)E{DI6_lWt#vXHePHv3}&?H8kIX=Js@ zp-`<1rF5TS3b0;cP{42F2{%}KyKuBKg6Ln8Q)clr^;2^H{<*gk9cz+_h@WE~7_w9le^^h#xiH%I;7fHj^wdWF+0kjgaMyPXwF zC$CSPtJ}tg;0HI!DsJt}Yr7J$PkO@iC+%%4tguyYqGg91fRj_co~_}p}Y?Dw*()V7$zcPFOk7D_+bQPz4q__F1;3^M1M%)s^EG>ND*U8lQ+JLxIaxy z*3CS;zKM>&QTE%VPt$C2{O8WnhHFMR+0d`nRIh#J9~|;@&JOWa5K{#CLg>x5z+q)Q zmG#yW({<}2<%^GLT7qr*7QZkH zkljXa`XULcClcps7KLvR9f(MRzM}e}Wr0Sk=s1)t5L`?UB}J*=5{>AyIuoAwKnZHe zf$_0V)pkdlfiUesc#uGeZsj&atWSzrt(4BZm%eP2Mr8#$!bg<05{_+XVApBjwcVW4W_=bU;EiRC53O9k3j)nP{{reTD^unDiO>5V}@D zh#u8vyIt?qJAky9F!XXn9+-jM9G@dY1&+=zKFG#9LWVk8CDf?LW+VfMl^v&5J*~RG zDsbR&Yhu87)K%LTm2bbB3ol!kDyK$Z-we;rG!B`8C29u#e;i5<_Hw20b3w+SMbYwV zs|L%2-cDJnCm`o|ef$iOBOzk^5ki(@Imi;j7@axUDX5e`CxS|P4pxAAnK@vz;ffU^ z$JVICG~~;%GpIBnK3E+)1Ilv^ZOh*9WoQzb%H;Uj+z1&#!rdIfx+e7*emx@C$KMr> zfxG0VW);CT6uZ-@1U5&7<|I4FWW*SGNre?^So9`vSc$y|-TN7O<#ZX|t=miK;ZMyDD0wC(PAp zTHhe6CPORgy^PA@eZ4*=q&BF!0FJZ0en3-WC@Aa*VEHqwLiniNeST3(X)_RI~@|lPe4l`{EjsGG`((` zGSk7yM@at>1e)U?AITrU^w9?p z{fM}|NatbwM(H>~<8obZoyUSsmke%yOjb7Ik^N+mwI@(Jcx<21kP?-3#(qom3^!l~ zq-SRPBf?efwQmI2LkQd`^vxHvK2Dgm*R6>S;?8>9?okKLc~G~BAvQ`vm!K_&x;-g- za=qG<_1rAY%#BRN0!1;xs68Y~Z=?K@ZE_fGlRbG%c27pW*=wihqs6^JqqUs3te)S? zXvIwAA-Ul13SKZ;CxMS_jDC;4y$mNshK{-Cpjh58 zqMwtsvNS#Gz1DM3VT}gI+8j8g%fYH6svOGWEoZ)bdscO&yAa&y^T28HAo7%K(BSlOQ;4F9qEJ zr<|V~&2VD5m&_%dwR?=#jWm<`e3nddcFh|pzV>?3IXvf0IN04Gv!A$7X6S>QAIw1V znu28ENoMntX#XM>X$?FR!&RL!&~unNLSPAgFBgs>pBgE2NL(mmz&-Zw-y17)&dK4^ z(82~wj43|FRT%4fd+zgqaI1=^D4w9b_Kg70Ay&V6Q0P~$JzH*N|I~U=JQrLcCaX`p zE)bueN1cR86n+#E@P09gCjJA-DIaN`G>ofORj|^jCV)^8a-wnka6#1d|XlGfpDlqu?(N0V*le7BLUaMOhU3UJZ&|`1pTv3K) ztL$j0(->;}?c0qup_-%jQ&aVGN9)}g+1}wbouTI0IiR~N>o9xJayjHI6>9`vsQK|= z;tKQJfLCu%A{(k?J>Rh8`fVEWXw1RCf(Irc=2XaN^#&6&?EeJ3&RQ+rqSxy8SVFpH_0RbTdM9;Raarx_QGsrihHoLU@mA(*OH7Rxz%YFU&= z=oO|e8iA?Vmx|P~8r+`v7;a#1d5pWNLA}665wN;8T#kmv3`nvnQRG0?n#|@s=DD-M zAi*9@@`)Lh>YieU@~E6_0gCt=sk3=MU_AjpBth?Uo&7%h&#=z6BPtu(S-6-R-kA;$<66Pv z%t@S826%sD$Tx_K!9htc{CMSh1I9gS2!Lw!_K!s(rlVngFfcRea*gXxDK9WP(MdsN~N zrhoP5IQjaSa4%tXZtS)C?K-YV3hC(=Zq1DQy>F*mrNm_%#^9l8&UJYU|E(I^-deFq zDrj)bd-czZe?y*quQu+*Bo^b|mycrC+p5qJ3*V~kCHpY$#Q=6qIQct`q*eb^_HAoS z5~P6mLylDE4-qRH@dFAwhU}(YL^;gzqHLi=iL@q!2D^jK5sSt)+&cvGeFxrRCzn;x z_9nb?*!o??X2zwrhDoWBRNMjm%MR#MrK%Ub_8PEV0XlWFdZc${&@_V=ntexGD5w6> z@%0kk)c9JZ>R=8AO{m$B$=6)VHGYEkL0&mI;_NZon+94-{EkqQYy-Jw&k|IumS(ZZ z$uR?&WnvM_HDEms_na7WwDnxELiZZ2DHt3%QGK4nQS{TpdO$-$;IS>AlkLGAZ(>Y( zc4oVWu4ac_A??qQ_D>zX{e+R8NDp{l9o;TqC0b+XPqsI07%>l~7Sg4otrtiK*~wmG zk_0mk3uc0@^8i(d1GsQr3-x}MoQ*c3$DvQZr2McY|8-LSN#P;%sX&%|O7c|%6CX;w z$oD&tU%;9Z;|yhFd=3Rti%9s85237P8nI)r3((5i7HBH2Qp}+y&UAt8%FH-SUGJQ@ z=l@ExENKk$U|If=VOegY=fmgZomiGZB<}F&IhJMauXUy0P?csF8J}~vMc-A&o#d1f z=k90Z?&iZEDsY`yS>U?kg9WbJ`TT~@gM2#p?BKJP&)a6~=dwP=XaC&e z$MbLGUxD0G|BZb1?swEnoAJEn7sBkh;SwRtaUWl%XZPR>f_--YmsGK$ z07KTOvqDDhX#2CYp@GTQYlKrJJUfSbZgGJvpE&#=e?sd$J?ptYwYLFF8(z{u;)Bl3tAseFwQO$~EPR#g zHAEn+#6Zr;Q0E+$4U9nK)dH~ASg_XEEb$>!c!G~2DS^2os4~Hnaz8wm- zc#SVp+tP~|1{lmqd{b3*0Tlq0?ce|uX3z1WND*KQbZ%)oWI?Fi5{IX@1R4#tLwW)D z{3JolGb3n~fk<87ZU&L#xv}}FgMd$_OcOy`ft>x9%4xV;Po5dB z$s(rOdUKh5?Wx25f6?c^zU}w<;C=M@jC7xWYhQcn@c(Che&)pNWk1|?=Yaob-N|0| zJ4xXT49=&6PakS~wAzZ;{x9!~)3YaN4;X_!$r*ZI`=UDjf+KdvASBz@CU;K@-`I=f z_^KV9I&=Pw9St76ooEHt)0&N~oph${e(YG^`?}qnU<*Rt-77j26w|)TMI$ zOuoDCW6iOo$LyoWh|^tR!@M^kJ5MQD#>7CD~X6 zru3~nFhQi$yFgGT_bvrNR2Elc#P99i!?yAozRg`_!;aWFh#&9$xhAGf39NI>m^E5$ zjQ-^QSE-~r2+cW(F?1PKgjI`g?b2rY5ku^0m>b@1Gc`M0wE(f_ zA6rYVuTkmJhavlA8nok8^Tl>o=kMqib>_#$QD>iYo%es;I=_=u=cBgH*d;qQGYJ|avMzI z?^dH7$0eqORJ#mRvA^5RfND5b0+#wy-EL-lK^TC}Hrs6Qvjula7Hd~^Qu4Y;oR9&d zI^*N|Ds){xMK@Devv8m#IigFLvhcLFa3(JG$aHY7NjCabHv{d63(n;=jAP30{${%&+Rb6Q ze_C5uPq!V$9g4vko~8@$-7f`tLLa_-UZ}%w_hSoz4_nKmF+gC!WuL393z$O8Yr246 z-DH6uDXA>@jY)%F1{5mHA&gYum$ZGliuol&)i%F31hhn*XXdGWUjF<(*@tk%l9dqvLe+#^WmYYZeth?Si^U;L|9YKBSqWjT>Or`+s>wlDf;Ms zCKza@_iN4R1Kpau+Msz`Yi`*;d%`PW=b7zFc-<0GiWltGOPDI+)&YPmF9`?1F5bx1 zsckhZy{)F2bzwJ`Z(AAdJa(^8mo$6Y7di$pBoBgM!3{3*Q#f9hj_AbOt%hi^b~%1) zs}KU93Z;yik*=b$YZcLWN!KdI`BluN3gvt9tI&aOcV~^hXUD+97RIkFtpB^0EO?H2 z>a;Utos2Celu*B-aeK&0W~~7$c>yOFa~$?GAshWCYH(J{Va;qkSaTBKU zS;$RkS&`2R!^PXc#oUf6GAFYt)rtI*{W-gvqgYvz>OZs&NOSM$=s|ZZQX7+n)W!jG z%Rp*tl4o>7YJ?_j2_NZ4Y#pbpW;X2RwHB*&&uSKL2V8SV%*`s}BY^Q=Vv zG5#Fr~>>N6oGQ95niu>LI*h4qVKNTsWKtlP zN=rvr&#@f-bWxV0MuK17c-iH5a18lV*k*E)`gBxLJWP6Xuf8K-<5?PgMIf3IbB7KS zjDJcLw!)U2aIl8cVog+A&AMrLmgkBF=>)5NIqxCX{y5uUl0tCjtJV}r1@IuHuIL?BQ?>0L!Qa8B|svzwV9XyN_fU~ zx(YLAiffrDzWT>90>=NP%{>{nP4X&QEnsW6F3%1L2~CFPq)&>7E# z0EiH*l>o62_S@KhUjYArg?VhN1`LnkFJvqg_P}=lfu10ppJO2$zWCUb{e^(27Vz0l zgsRvK{JUps%^}6AZ=;&WQu^kPHHXl4j)=h7K3u^J&N?X)ToXHfJL34+$7J^Rbf2l1 zYQ|K$&Ao_fEs2_pLLEbOzbLK%LXl(AT*`^~&&k87=F2l(MbT76mOO;wn?F!guS3F6 zy`jnA;c)y#kt%a!xjO==T;SDj2M1IorfU8|@xPeE);ex+vrq$zGy@xx;Om}E*J(Km zc!&sxPbR*CAgDV2S8M&ckMp<6MziS3U5x3*U1%}anm;flb}Bnp5ZelvdVStQmZ3;q z{}sGM1YW|PADDr-Xw_Xg38xS6&yTNQCte&j2aV^qnT#|y0b$!Q%kEjx>~?fMWx>j( z*``_o{Szr|G_gU#mc=0eGNc4REx%36>Fi9749Pc@^b;Xcgid=gGOaUwq#QeONS%|4 z$GpIuZ`auK&Bk5#)1B^2z8#5wi3eLwte=hC&X%KZglBI$ZskbJsd1)j;_X>ZDhkJ} zx#|24fT1lk1MR9#WQfadz>p{|`;kNzYfV`%VJ>(0tu?y|2P~fG+j9lmYfW!GP5){C zq6|s<3t`-MekzCO=)|1P_-@%FC62mktG?b8`jhpC%)m>hL-+Vtg7m85J4~N#U*5hkAl`P;Hqq(bTZ1E4M^~e{uc=GJ|iB21TfI=_uqKt;sojHmaye7v}wl1Du5J@O5g0F zGkz!9F^n`fBK8}dks*ZQ_!m$lv5o~$lyvpW9DpjK=w1LC7H^XPHlpHf9Duf)143CV z1{`DnwB4>40u1x%pVI)^ZvM`Vq*f^aU1WjL0%*HA@I<>}Pueo64Z$}53_!;UK#zb- zN)6OJ2^kd4jM6;9eX>A;lr5q7>!I?^^`E1*oDW8*|NJ{M4v#71LJjQp%wz^5 z!Bw$u+1*}lcl#Cx{x5kA3bD?y?lr{ierz|Z&(vgg%+syg@T)YR4%jpE`4Db6sY3G~ z+sD^QaweYt=D#-+u_H2j zx!qi7xgTVMqDK z;HRVGpOM!L_kef@;Xpb=-l&g8d!x2hd82mmoBHZ%#D2j~L-7`G)TiYyE;BuYEwc|Z zADmCv>Q(WL=7s@1z(ZA~Cs)O{R0Y0MIL4wR)SGG%;eoP%}NlT zD6JEmgAzHwFD{)Sil`DnW>_R0)~({LsN9>d=aVuX8`Us)q1F~X-z`@3NLT!@qwe+eBK zwM=L2e55Y>;)OF(yGnBqyu8>|X)v5b66ym4FZcEMEU;h8HiFRc+nGCmZg?Tb5rl2R zdGv~`z@cq47`tWGp`^Zw4JJRbH+x`;Pcy??rC#V!J2#xDhIIdUR*4I^k+RPaO(HjE ztG5|89{q*#lM-#hQ7|Fm9h*54u(3o+D$e@UNS%QTz2y$~pP}KmnHM_0v~q?on$n`q zHZ$Q%3R7LN5`;B-D9Qe_^p=h^Mxs=po1}ci7tA{Oqi1|#A@zeE8xLYv;ixy5f5kfn zD~00;uX?w<&!l;c@9=-w(2#Fz+)&ynFn2%CdJ=RI9*gH-cTtoRJMr>6z)gi>lbEsrh#=A;l%DXLTg)56o%IWf z5C|+Ns>SpJ_RukQO!*}%6rEUM#D8~9FBhp;)r`}WQg}Uux<6g_aENbRZSQ$f_k&)@ zTincRzDodU%MvoU5HLLA=Wq9dO~00%wJBO&LE&Jc5|RIJ4{mOim4rm;n>)LAB#wVP zOmT9ArTXoDSpQb%>iW0xlzlJ~s8ReBo7{uJTwj#8cfymm6f_X%uB3a(Idl&o57TFH zZ8hd>=EHKORlyzJtvBdQ0XSt!o)w=ijXGHbClnl2LSUpp;c4v_DFk5jSEBzBlb@_v z*tzkkZJqP`hNqF$iEM_%a2Z~UC8pM`xiZO6bDq*0Eewn5}mD3Q;u{Md>0yHJ-a zAi3lZT0b<8-5_bhVq0Xt1gR)Ep5o$N+ec9YSf<4H2V?E)HT;HJgciPG$#v8EvjShu zkm$GNX0js2mlG_(PDzzuzJINvo8*u|jJd9px%>VIu3JnMzt$4u+ zc{2I(EJhG?o|5~f0C^LEN5OUR8yJ2y_^#cne-IFf1lM{EKjA{em3Q;)TuC5N72i|K zX3uDvYRvB;D}`rkeNjS(fFlBQLSiV^d8hlN06~Ypr0uI zMkD@9pxX!u=HlDUW#f9FFBo2?SZ8I#pzn>OQ6kQqWd88-S_0XkUhZ5;)Oa&E(1Qq8 zv1t-)c}qMqxWL{Qde8N&Hx)^|r9AU&ZjYRLb6W7l8woJFh7U=byf!**TQop2anJk} zX9+^C$nEZ@4O+8y^A=`);lR%7_?}^ODpnZTu{jwC$M=j+zURGUwBb z?DI*7Q^#$36x<+o_!ajt3m6-!)E-x8`akzbWXtT3*oHZ%xPpZo|!47VVjwg zD|v*Lj;?ZC1bT5bA*$u-z4Qe6Lq#62JH?wR7AlnmIrH??j+8$o&-DF

;_4+oFv3C9dqCDl#3j%tV|ih!MYWXHQb_fr>$l;rOks4=^D~ z)`hW$Z5T9NSeJqm!cD!IoNwK zFIqtjKfgR{CV&4A&17c&bQX&Kuz&%AK}ktAj)MBXF^pgo7|kqRm_-965oNQJu4SZD4KWG(wfwFTuJdFnxoQHHWkw`%1j3t+27V${W2rL>7_w@~ZgiPknSA z>t9eCOVoU6`f(31#Ad^_0ImZd_yAYzoeuqKdndgqo2SILw_#cY&0e!fJHMHokF0+^ zu+d6%N%L~T3ZZRxN#danUgWq_3&?-ag3{m5FUwlx{_1jlK}s~D?`Ae&rQLv7-OFBNFaD>?{`+uK7t~?_(snoB?`|~JU2_=$+%$mGRg%)Q zR;w`kuUr4`N05sWW-dzTmv7W&Ex6$jemM3kpm(H3szMhivSk>1rYgP`_9F7&mvY8# z03ao3SP?C6&d8tl9sPOOxOhYR;OmP?*RhOn=(a-X9g~ENZD##LiJDyV@p1_aHrj_e z%R8ziXbp0a(;Cx}(Q)HCzW?l0xm;7*f?5&}|D z!2#^Hcx~aEolG_5t0-T^%bIx7OZB_2w_p1Wg{?<0fU&%xW;e~C%ACSnW44%)L^nCN*T83`px$(&i-C_@^ zwTz1i`S5x|=G}pqT=WJLeF=yDAPqTDfUFlk$vj7haOT3YI+IMT&maFH)RZPlq|8Ot z%N$sIMNa`Cs>xYuH?YN~7EkdCYG=2rRnHH)*24^?s>VU zb7-q(G(D%lpdaypmbELqCHm#7A$y!bk^p*X(=S#uIY_%#F(J)gj}UVcBWOvLw$i8~ z;<%?KH`=67bh3Q3Th7cyL^@;@IOXnT_&fV}ICZZ6Eki0;wAF1rKK!G@rr)!3mgtAc zB$Hi8{dV@XIYj4lne)*4ea*Q$shD_$8?wRj)Wh!c&g8s*aTe@5Z zCL$%t6R}_4g0d4!O>6;fU1i^@oKzjJEP*&Bf*Bi|K;!kzgT02w^icK%K#o(e=89*S zBH-ITvar%?5ZS;<9qJX@-VAY3Z)+R4ePpkI5(JMLTsPFh+r|jD$clsHy+>u8FGY${TPP8T3=+Hn%*6W`950{wu8b)TM2MO( zk4W23ESvdW7FNh!zzqN2MapU#{s53}=V+{qZ%rRE*HB2&81xVp%u+2x(E?6P{yP02&uoWC&{%m;ll+1079j)7fKWa|h6x>OCcSW{pa+|Lpj!{L{Wis9AUr zGyA_ZP_JPca4c9#37XhiA`Q^He9$huz@o{jGsR==6AdMhm;;_>`F^4uM-?r#^0ZtV z!Izkq+aP^WzYuJ58N6BTfs*i6fL27&HT9GT$DYc>(aD%Bz0G70!q~1sst+~3&`k=z zG#ZcQ{i9_$4Ng(6T4C}26^q>-_EZV36bVdxF5Fj{VhJi>ei0&#j=zfn7Sk9PohSrx zFO(1+Hr*E@wZ~L4tHesZ;{Dx9w@c_j<+)a3At};SD@B^h?wvl^Ql2uModGbIGak1a zrWZ2aK8z%JWE$oJCJ!<$l|}9(3umc@)a}Y}a3x8n(I^x;*_R(=k!VWK=d=9ii?kEG z(K`|o_n23H2cB*GFg9EUMdA31Ns^Q_^BlS|&-?_Mgq`IzSfMB4-wNx>FQG3Mbj6Za zBa}?e<=ex7>?>wvanCnWF&Nv?GtSP~uXU7a^)3B=Oox&Z(=$`zu%|i#-?twvsv|FEdyV~o_BM=~=PJww-C8$wS2*9jULAO6gSpuBp^ofIH+0OjV)>QCbAKq*{ z?2OFi`@aP>3J(%DCNt&|J7(e*Wav4S$RA~VksG9$;90cNxPxA1O=hmyzC@EL$5a<0 zF!_k~Ffqj)neu+o<? zR!YhtTP+`Kunp9tiqKKs$~I$Q>av$AU`~C9l>sIW`<@e+oca&F(Ss)S{-ivo3)Iqe zrO)ClT%zC9)e?=!?*&9`onF}K93=5X-dRAkZe*30Xk(WWF806|&2MVg`T%CQwH zf-pn60IM*z1lZQlv_|ElhEg(=j8u>7ou;v6-Vz(0t1oPUEz`HCG`uIrj=cQH<(Kzq zy}W6{NQ-#B3gIYxdIsUh)i4}~LrS9(v$`OIbHk6vC2R-Y`Xxk z9~&(nKh(va;k?4y4Asj}AB)N0yF}eIp#jZ*`@NT6L;v=J`?(p3?mppXq=%`9k<*al&cfrEu7%))e4_jjKo&~$w-!G9fG{h@)!HG z&rU=@HN4k4t2E0$5Hi&(>ZMc}H12aNRQz@9xl{1YdIF*Ve6ug#UY8hyc&jy9{<2ig z(ehQ@0RMUBBiwXN1wg+>RxV!~=%Y&H#Bg`Ni=MXAV&0NwNJnKujw# zk1URu9W^@&5AefR)rjnY{i8HAn0>%83TW3<)?Y892;c7$qlhk!KJ{BgT9_ih694-w3!2^>t$Qv7FzqMUq_x*H9?Z4r`qZ#f=o4E(b%SOO!_>c z^<}UV^j6wdh0LP@zp#R=CN9V|BOi183+^Q%TUQFxvsjfp%oCS9$y7ch0tpinXyqQE z#FX6RF+MHcZcc{clb-`L!octj95`EM=MQ-;*(2P!A{=wkKWDhpOnsa9}IxYLOugQr~d=2)^OnZo`TayA40*gd&E^ z|KRo?X?d}i+=G=I0d5bkP8@PL+2t4RuH(VXshDH|r`wlT#!eVTQnA6r#A!yC+PSQ> zd3c@I*u+aDj6{L8Y)g--_)ArN)&*YX?b?^?-&%kzYt#C-s`|W)7Ammd(vY%$7Uf(w zX-shcn`fVctz0y)k@Tp!u`!YOYoX4TNIA~2uY0$_dNMQ;Y~$zGlxx>4Ex5O4i*|CD zZ_RMFl?UHgvWK_n7sDD4?zLawKHk(jMe(U9`4sSR=jCb5WxF|a1IurzA!y-%`56)H zM2_92cbxRK-RycL3q<7KVkJk<=-jaYqL4Wsn_0fiE2}9Ay{%OYin?*^ABdd!k+3teKK+_}Yx~Nd4JLSVsDC$s4>}z_2UtYKKy!zt$YCc@{Ka>KVb+=kEqur( zjf}51ztR%3?n`*;Z`rjb_ph$-7b)+!s08oI3-a~_l)H&O2WbFF23UxX~%Dna;rJpvhxJCw>8MJ zPw3d~ODZdoZEp?!jdSxO;9`FT*O;H)FVM!r(k+?t+5tpjCuQ_&^Jiipb-0D>=|Z}VuPxY`oRTW@8m!!aUX;4{9efaS zug&kBdMO6pZpoeVcJdhcNaF>5IIY}xkh7<%IvhJIyK`cnxW^0LWWtKnzQ>c4uBB;k zvM1N{jFWpbydcxU%rYgKh>{fAEW2c~)byp0>**Od;ANJ}=Lwa2IbiPA0{S~)jXBMy z@q1bte~lTdP2m2tY$cXn5iU$Imb=XU5I!k!nKP{%%MwdKVwd>-r&3Ei!7lNT*HQrj zijoKWOg2PttGTLB$HIA~L&>Y+Rjr500C7f3E8(=`>yszqD(NM9F;a454q~2`+jSV6 zr9a3jXa4lM5{)9o%pVj@95M(TQ^)-*+!8k?udRx&4{dL*jGa^+Z*%q&;I~L_bs~~0 z{AFwR8kG%22<+`1eKw5_H0ulUUDt2X*>`7X{gzOljiLJ80q=JCS}cSjSFrEJT%+7Z zeDf0C-@!u`&Yqh(31`qqKpl@=?xLrRN`kl+wWUv267}*T6mh zWEbIpud4id8aThV&Q7hrdfVmC;!~eK-k1IMKhC9T*>B$rP^9d)PfPCS+ixrSkk=?P z#;*3;e?=DlKeXTO;oEP&wfO7UZ!1~{?8o3Nxz(kUef#b3=L6ZOZD!k#+@bp#s|)d6 zL2*tjC@heH=Pdd=gy7E7y*~X78QmX+RTljnTH0S#C5nGL#nIIyT;UU#`z~~~XlL6s zUvq6u%q?mC+{Jo7O*A1l}yAPQa&fn6J*_ z-gokTybX}8lBllI^xF5Jy9AFaQ}5QHybQ&CX1v#=i7KL96 zyNb-3692wOIB`i)64FNr*9vA0*B)D5DTZN@mCWL%!wZNFeD5`MUAeXS!zyCq!c74` zZ%6>!*5tv~CY5+RICq4}Hro{##sZ@O1WGdod$--InV^9sc=TEuSbG25#q_x;Ko^$k zN(^$l`3#%6YW%Dd1&`Rmbt>FKVK^Q@;Jb}pZHXd6QqH^JOGr#o_C(IVJtbg)5%vAs z*ZnK~E}h&)2rK4Qt6VZeN%fVD@ z-@{J(^Zz^Jjqj(JTMCo~2imkBYroDMCOsGvAu3HE27!jS^vW`bvs2jqiFpXAI+hqjoL$VD&|FF4G`4*JAyGdtZ@Z#{8?R%xO+5;i$Q2N|POhU4nins9xR_9x3O1q6m%VEi_-?t7|_e#Kk2 zSMIEgouVgD0wb-lMC@oXByQVYiKPSk+FpMATCRIGym=@D0$Z+E&=LUK4Od9zls^~<(JrDsH6;N7}Lk08w84CZM@cFT$0 z(K8@=dNGq$P=mcFAtkP&(qf}fBF!+a_uEjz+EkI4T?JMq&ww}y_pylH1qE0gPK6g! z8t7C!8S+2xAMPe?dYcx2il-&S0GF}3;mi>=o3TIBLbrAnUvMk9nxbt|4mtVfD`A)* zFL9pz#`a$0(40e))W1+dT-`)*|I_XHVV)y4@ZRuTn1z3t`3f*>H+Vj4p}y||&xY8! ztR(RKlW7*7*=8w_Mv!2w8t{5N#L9Ta7Wpw%c3G3%p4L8R3xZduSJGHBoE2sAozYdZ zEr%_rJpr;xWXIah;`8G=q&8|RgXw#l0@S;Nf=ga3s}LB#@1iWOyD{guT1<7uBHmnyHoQYEdb0Smx((+s<8Ny8+345vZHPD;WLk#sNvRs;hvNIqb5Yy*bS zbKgo#-M8earKD%J0DG22;x^Ar)9v2p|I*45nEq1_VWrBqgzART3({2(#9vx1&W_47 zX=8nCEnah7#kFg-)dtB*?C=S5*Y144tPtjl-WEySc`AXD6xmbgR##VK!c9} zC{G7j2le0d673*1yLSKZ%9YxNcOV(68y?K5-4PCaZbR0skCwA0Yt0bYVnj)Vm7@yc zbQElJ=Ps7+?mtvUb}L@>?XJ~U;WQz4kE`ZR+88E&Yg*&)AEvJPr&c~M`3%`-KWKnIyRdGEf)zo z+3vD7bN`isnl5bPaT9Ej{Yq9KSU1E@0MosHssJ5AwBM~2T!|wRKwK$}phNslA^?@5 zjh`q!@NA0{&D`uUWrh-wFnbq)scW$RloM+R!=}o@Bo=$Gm_J%;ID`^iaj19)i6c@@ z%E%YaQuDOz*25A>7AQH20G&>gyb~KJolWhWhZdMNQ6h8)WeNb{flz#VjU!*%mkEFH zWo8BTl2_cz*ABd6=Ye_}g#Q6WR%V@k!nnVA*k4<3+XRB_Y+)iU5Vq(|n+Wkn< zpgJi}8*bWTQTdA{4`qKoPNRoMQaiUZv|d58M9ky-N^ z4$_Htf}2sZJQ=8PkWMF4|Lu5< z+8G>c=&KKBt~Vn|^7DG8Zc#Oqj>%JaY1V_$$lEOk)T5 zuGkeB77IQi9pP+1n$5CtzLzJ1-B>O7EMkCfA=JUY;Ir`fhE+-PS2|N*a6PZ#Q#y;C zY;BJ!d~W0zB*ww)w4_^iDWET&9n9(#MTgB9?3C-zh6RGzP9|GiFkHL8i8V&7tB0iG zNShFz-e8S&Vq_G&p(tH?*Ueh+*ntEtbyQJUHsbx^kvm&DRthgC#%}3E^*gGl14~=l zbdwq;M5N|D8h2AJ`P&@sk+M!=jc`|)8^ym*_Lp>MnWrST7d)SQxupT^gYu*UTR`34hS;$uhbrItC<*st{W zbGzfyG966f*q2wT@fCNePBG`F)IA{3eZ}HYSD&*q$0x1L-0R-syOf-7Ae@fZxB$Q; zl$zH#n+tr%HIsV3O|+Lg+H!EP+gtjZz3vXxS<&x`F?t!%FOryWV%#=i2GQ&g>PKhU zgZ$g{nd%PNeV&eG@jj=`ub= zjIqx2aYR*#9q3oQGtmm#YbR)+|1qpY!>j5{ZYlXp)lPXM0tKbS6gf z*2orb$=SWOFVByaZy$vm@F-@@c}x*-A1e>yju2}l*v^uNSR) zsU=((4E`+`IoDgYNTT1J@SIk|HUY*drD6MPdrHH0IHg|Wf&5=;8OwQP!0Bov>fVy^ z0;eI{y9G)bKdCBlR!_Iy0%igXmRS{B(+q-Mz%CceA+8XT*uj;HXQH&2X<@oMTpfb9 zfL1Ldv)>(ZYPLhq-Xb*{`K0DJ0qW1;^TNYUIbFr#krj}&#yV!iPD$%0m~Iz8solJk z&=v>slyU|g0Q$C{iLx0s3z)sAsP-@TY5B|~>t{LQiLB{}AC8nU{3*BaV`Ix(0Y*l? z1$sr&r~tqc(y{w48O-*p0AKVlXTWCp^TlkrU5A)Dz2TXkTp}=XW5$4($V4PQ=U%&MJ5%FU zk?mfIU+WXBC+&{-1_BpFaMG(YFc8wKl=oA&`9j4_?$vShE&b}~%&V_bo_ckPg_5y| z$+R&uMxNuennhhg&5dw*);$@R-XNa-y1Ts_$*KXicVv4U68DXr$%y+HcgT8`ti1Th`&;2U4J z8zz|Qh6R8wvwz=j_XS@J-pnS-6@ed`)wF^_K$A#N_=z{AU~}t!{0`VF1Q7F=S-QCey~3uoa}#4 za8*xs+&}x~0{e}G28Ca*k)!MfFtq9J@alFP15k>smlE#h{^6tYjm#YjB|=|Lw%k`QgN4rT1(Bip2NhuV-Zt7LKCv z4l~pu(gppWv8wOHi2WH;@|b9%@t(uslhqO-*32h2rjUf!@Mn=C@%!~WVr?PGoK4M= zGfd@I%38~GR2R+q287ThcZvjSjTPI7_@3Rks)c7dnDO0`k=}6s~$0-NKB-?>!OKbS`8h@L^g9W)U zukn}mDvz?CautbBhGn4fG|OWs!Jy zPje(5ig#iSjYO0>+NWZ~wnSvtXohh@Q_kUS<#HPMAWL_@qRTk^ZpS!gp2l13j31?3 zv1sh206==HR7Thj$(!uXC!FnnH40Ysw;)nyUVL+RSc#eL!YD3w`5=gN-L z0Vcn5BX-kKuYRGro9g1@DpPmt!*oCIuwU7Jy031UuabTC^u8yudb)sa@72@abmn*O z>9|CGfbLmST+8`X#Xm=`@py1Q>@@o~tnwO^&@)0L{b`?ul@V#1ce{*s>UPbm?T5)N z*6SEM2DT+%vQcg=L-bHU#yzn@|H+ejl1Ti-!tMrhl$ z6v5O~-7kDW$RITNl8YugEwSAc=!_zda-=}N3}EVF{olIVBL zZNeMG{+`Ue0{411pUag+NgU~B!34epNua;v4QF~WyI1e9Y1EOx%+Qc90&rBDq+{MFiw)4XNE^0`6F5QV46?%5uiZ@RHdGmVv|8awn~HulVG z|7>JGRb%}$vPZajsxMHP8r$yE(qk)2HTPQ)KghzmPvr3;kdP}(HBsAK?Ey^AQ?`OO zDsQ-&$~!K$!_oXEF!amJZnMh$32n+W`ps0M!}i(efMll84Xy)AFz_L=4)OeOsUJ3HTdcr2 zSRi$^HdP{pC1N$N<#UKy5f3ymkuUq8Z%g*(41VJY&S01TtWOn+Ow!m`=?rHRC%VrO z!j=y~Sv4IlqsH2gz3)b5-ufkbJhe5U$@5K)O6Yy_DR%6jlrwnOJmnYvI$gY(EAyaV z{2%G!BE22=ix;Ge|66az{Nk(9#c!#2vR{0Dy0~7&V^mE0vvo7fziHCVH~pK7b#u6X zbB%5W`ZptWQ{dmIUbFKdH?DkcSPkmET*Ytt#qXY+DxRR?)qe5nbn#FX|3Sss^tL~B zyUbIM!Ri2h)GZye`8D^JLuxbU?9m$GKn9d>!AT1lFTxqL1AvIehDE>(BmE~-YgPRv z>G~sA3V0U8hHQ7O*aI65_FI(0dY?n@cwCE!5EnZF@9jEAs)$w29uF7daQXTSe)X1M z(v!bmd24M?%zD^lTY21!Rp=6ro&&H!akD~7J=ocb~6+ULmTmNC$-m@e)$@U*k z1CfQFl;G%afXEjdkzYuV17y8lq&06dztKHd@*H>1lWqMG9Q{besdy@qw5L)WZ!*&% zdw}}bkyeNSc|8>N*1~Rzo3vP(F8BdNX$F7{m}`Ev7eJEF(D{dkoTgYrbqGBb0)$*O zV@>h*TfdQGa=kZ)_42iXcns?^z1)5Q~1 z{>3Rz&^^AV7xqM#TafM*S=nrlxs+>hoB7crB6Niw<_^Mu#dj?(0D&ZXz->eWEs@|J z1|IREc!9P=y$J**qvc3&=Yk`n0{G5tPUYkRG}iCSQ@? zZRo}K`a{ni@3w9G9`B=9{cnx;1X!=HG2V~JKJYKbTV-eNYmfJ+pZepiJU2AaNtN<4 zqZOZ-hTf+kD^hXPtb{=pCw|US=UiD?w=YZ*jaRsMY>B%{7i;2?r}l4m$mA`+PF$`n zXPpK1DV!l8lo(!f>17so^ueGeany!_R6bOFlX}-2YCE?DEaElXOQnJYSE)1OK>M=* zsd4c=d@f}D0|I*f3vA%s_DPN^YBLomUpwBlH;(s4&~cg~NZlm+_#rPZ1*I*B?AVTI z%vFDkv&mTo58NNz1zg;OurQXI|f zjzJdry8hYlZ|byf`Qq;uwPez_ zLJtncPxOwX2Q&5{)`~jhMMXU(!n0H)!vk%XL9P}kW4uQ3WGwAAw|oqvgqMa^ z@xS5W_#By(tdm_Fb47ZjhQVq77J{aP-uZ~g6mF5=BcEZsmsa0hque1(@Q!bez?}@{Xafs%OyI9TC z%z$VL%*Fd&->b5OlqK<9@%Q7a&5idKQUGyz375Zfm*;VL-p_4mgv(v-@(eD2_JA!N!sV!6 z*vm35jk`RQ%gOiI(t%vw#Gy{TJsUgYZ+LgD09GHTBADUA#@8ynyISIJ;I+|v$oAkz z_Ks~YVz8T0^&KbE?`Hm;$-i;_weHW)y4Jn^P3=~8W!C*{|9YYSdn>;`_OBo0*WW(f z@kKg%5hg-2b4ihqJLE$Q`9pPkrjQE{j@TRhYKR;d?B+;t3X?Hw9NN=;tlT4ep%3Ihh|^8QbJA!^}Ub z5vJxv8B=z5G_z@GBuA+ve2zO`s^XE7YMmyZMB^XhB-Yu4v2G)}folr15m1D(2WqsH zF$J1eI#uyoIa{tOEs|;vftq7=dF$nb*_qO$g0*Wn2Cgk*ft{;j|lr(vrt7R{) z_r1lhgV>Yr(9~F*m7Z&^Z(diw^HguqLh23Q<1J|@JMV?OocOJcRs4hlYdYVIBqosE z7||!BN&U-w&HD7J8rt7$Jdc}dqz7Rv=_x!r*V@<-``)V`#v}48gie3C_F$T=h0mBl zyl>>YNAM(4zcRn0h>nF$f2lUFb6L2vS!u!7cI5FeRJS1SBCqilcNv%xNn8@Bbu7uN zUc+U!V%@UtL}Pw+magl9lWVs`f~VHzpVXYpXL@u5L=qFpJF>#C(ZzN)KFl1V!$}q2 z=!zR|qd1zlA-6+jsF8SUsJ^+~TYQL`*F0A-oJ4=_U~t=UZViM3&5`&aaEG5WyPxrK zL{m`S5+=>-O(E{dXyQ0(mw1eaa8b)C z&C_Z&#acL*M%tBKnco5m=}aDJ-+Ng-AR6P|FRA`L%jrRA@dX&lykg!+dr)|dXQQ((c68}f2b4&@;uJYuefB=Q+w3;O3TodK0#HUoJaHPlO=3jhb z3FPS&w{oUO;%BK~_TdyTEXK;+d9*>!r&b@1G?jJi5A(}5@^M#nJb!sa@f^=*Cq)wZtGU@z zdo%$A*iYvSj+Eztjmh=E8J0G~sUK;z31v)n4R4LZet~+Qy>w3}gcC<~amS&I@Pk|I z9Pl(zyoGr&uc;vO=hMq6ddlYy7)6O2#kO$#eO!zi@Yr(-D~6J%Q})8aj!lhMTQ=wP zA+N!x9&m?(cEn$lbbGDYrcJvdxOpBmK-+*@02&y4e1Tu{?Aea(EJ5W0)43ygq|Z#QG5>w1 z&o(yC?eBQT>yAsYi#z5W9+4|saNGO?6(VBDYa~2}{;`p?I+D~JQB>NyYzK$DW*vYi zl)v;<7CjNb3?rRH!3);xds$^Fb{WC!*~q;@!S>p7h7GPgD;j^hi~aBT#PDxIhO^qe zwfwI`6WcAVV=e52w1CpkLweS-hOYTY=L^xmmT2&;+30TEG)Bv}M=-EW%s~vfC(M%f z2V-~*XHiK<6T5??hu)$}RS69eE#KzOA4r$c&>lAae7iZ~ZMdX3ejZMGGmy8VRIe3@ zB+kdlyd^?VbHL=lw{#ZAzF|KPm+y%Nn3+AbOEhoHnwzr!Qe&wO3pu9NyP9}+J5yY= z4kfIv68Q(%uWWdY?%}O4`RTYUtF}~CP+#9=Ja)*Tx-X{GBBp*Z43!3hQvn61-=SEd z9H)y)(UD@fYNU|KvS+A{zqt6~QVh~Ji2JE97k`#I263%q{XxJ%>Y3HUHh~9D))-e& z)v)_YA7zG=z-%-ld)7g9`4jG!uhYpX{Soq(%`znwu(xEMnwF912LJI|^FE&95}!5m z0$Y^K2CHn>ki^H=n<$5m-J^zcH(8BzqVzmAdjacR8>rGoXPh?Y_8RkmUsHmbMpKpI z8C&l|28x7=+V*gQbgl@o<=+F?t&bIhk&l%&m?Thkb4e1#eU!um+L(xJ>-Y&>LMXYE zjAMhjtPwJaevYVf|MeC{!UY-tT_~s_1*OD}Kxtuc7!H6@R9;^=FyMjwOuJ z;k+R)clc#esFYR}kMk8lvI%eDQAJm0*ASB}`I^Fq4z+SMpL5=1{(io&7P#BF(2F?K z3-CPHu-iE`E9@)IGvCH>wLWJEorWOFv}2I$$r=h)*whRMIC=qjM3;0FTXD;ilMnKU z&{K9btq8EEc^Us3r!w4@HrgY~#00o61TxXdim{wQSQ?RzxzY;6fw(W8Zy&7+BeoRQvheUC<1af+-L8wc1v zp;`@|TR3x2NK+^!Sw+#*{^I38Hs7dmBBQS!vPT@|%wN8(>b%J)d>hNP~|9Kp+0 zj%}rGFKm$1O?hnR!IX0rkTd%x{7894V{p`^Gh;#DhZP)dnTfO8WnmfT|1IW6*u_|D zgf&n^^i_pOC`d%$cxoj6u?y5v-%$`-fJh-m$fVU0OLul$>Q6l`$V)F5Jjovz zzKe5FYri^*&mb=|t{&FuM>_?gsFdmP9U+~lPU{2>Ijz;E887GLX*1UlV;Cg|;E-$c zlh}}Kp}Ol!bFS-S8`*#&HhEfgd}M{FQ?Ef0c`RvqcqBfuOk}C{D%EC@rF0Dh@KDwWiPCl?eSb&x1ee^S9F~V4~ONY37^PVVJz0{AFkaU26h%(3_|vDxsAKo5vk<{V4V;yW@&w@vO|Lco zxyVw%@r1ssj(-8GIy$F**_ZYZS!{zq?Svu9Y{47d?9vX+>S7uxLZwQ8Z3Z|a!^WG4Sq7?5L`f26C1nZQ@SD02#158 zd-Y$~yM*my{C@Q@9BlJ$`n@e)5iWqYoqHJB()tG zq_?>Q$zV9{K5hD=oofF(4q|&x;HSm;{llI9$2#{3==3M8^^{nzXmF2rD>#A))FhN| z7G=4fRa8~x>?U800(x&XpS~o7e!uO6|H2)xaX=?K-a)76K|!VHKntbNe}ZcguFDEq z;OYCYh?N7;5P%!nP@9IhgSh3#{h2D>lZ3__Fi+c&p14ptC*7c1`(b>oJ)=uh0?9bN z$d64dc)ek6YHOzPb4e92FqrcjLaGK2)VoUWuxq;ea_@wf1$Z-vU`Vu0?^rA^yj#LF z$&=y>@7^!x`W{}xQ2+i?|GtcSZz3sfPuOsM|JuHwg`RYvV=%=!o99?P3JrK=%e`Z< zcrg#$swkaa*|y8Q6L-$`yosk=Kvh;%)Y9|#cnf)8x1&QSYiY?3ReX%8VFC5I&y!H$^*pjBp$d|#)x&i&q!xBh(RU(@q0J#ya3Zpo{RH|_1fHZkC1Kz?O zaPdG(e(n+OtXpO^Z;c-!W~NEWOYrdpH*vzvpgC^|D&sZ7kBH44esOH(@ZPbj*&C14 zOY!41EaVHk-*e5Fh5||K!KKBg@e!uNQh-Lh(XW_i-l0)w^%6hAn)c)Hp$f1D$91Jo zOT7Yn1FrJzgj>z*wT_xfj_Wpr|Ki2W5H1#VX3t>JahZWGvTuRyahPHZkxF!#urs@~c7&}3?e#_IX;OdKvuT@EM5b*-vLrdtE;Fgp zaj0jqdFu^Q?NjYV9=KXolESKudL|ZTy6FuUDyNa@j!4!qeaYmDI*t^YVj*gtevFOA z!ERT@Jl3EIxUR(31WRQ4gluDt+gS@@r^BGN&QQaKeH9;UMl@-pEzSbDol8 zZgA85ejE=GWy%RmC`t~m?M;M$!IAo9l}X@eP`4>5$pah0cOg*QlTB5G&|S+nT?*+9;8NDR0P)<{C>WIYYqzlKwAlKNfd(qU^Op z_^=?zyL}Jjyv4zL8k%D+zk~POI`+aioKVg8mrw^}EC&6EIXhP(rhC)&kYkS&qxFy5 zuRYUoqfVO`>d2KkEnm&t)}47m?Geai^tD-@Dc5U%=z9B0d+Rlhr&2iGI_LU{0jF&dqrf-Su4y-`OJF z^-G;^v3;~zW9>H*jgyQ~i1H2_r&UBzo{r}4LfAzP2 z*1jE}?SWUejzP-0z1dts+OdwGQS0dV3wonQ9k~MSV8^W#g6f(9L%%<>Al`v#+Alpx zL~N9lL%(C=C%@yX5gh)3`DZ->tVjHh`da9zQGAn&p{La`kN?2}ZtXxqF@I;KU)MC% zg#ZNeA0Gggy#~90NA9*NNy~&u;yaYRDX`ARqoPJE9wer;b+Lp55JrSKspw zJkV}Hhgg>~!N9MNa-kE2g~eDT>n7{5GjVLf zlit0Ny3cxrIt#OF&`s9k^cP*4u`gwnkY*||Ze883Ue_hM=+6>;>mr@Yz2}x!Hw|EK z4@~3}+hm>pYR?gEfBtjd`L8K<$}Z1a^k<-}V*=QMH+$E0R8XC_NTR`v|5YSDfGWM` z@~DWgXSq~{T~yus6_KW1b-R0A=U2HgRpp(kvTv6vuM1`Am;R^qNhXpkSgPT(o_22h zsn6>21YYv(HNS5CRAwcD2lHtf)|O{EHtV6kmV|9cJ!~3PXgigHgHeU{ z<*bEG_wWB`{PM?0kAGC(tTrQLsz?;Sle-^`^a}IBm25Rvw2-3EQ$>78Rx9(LnFrIm zJh(ISU_zG%bM*iqWf2j7sF8_0H&Ga+liy+d9!1$e{{4Tvy$N_!)%p0Jl>`V*KqAp(CA*s8dnI4Thpf++L* zyyx6m5+d6F@A-duo-i}_o_p>&?|Jw4J@5HDzkkT*XMA?@w}bD$=Kihxjit|&)Vy!} zmzI{!y$pRnb3j&Jw$n0;&wAvbVp8?dj2a(4Vrksn~w09jHq@e;u*R)DWkAaS1m%t{U9CS@!jYD$F9S%SCZ zE)YNT5&F46JiPg0Kd1uihdZ9p_Ja;jmUib1cmt&$d`mHqKlP(GugqR%C#I(@qiVoUT3vd z-kCz93M>e6ey=SY=PAv0)mK1Y8eH-C4?;hec9r&fB8S}~K}*yJWGh*0 zH}rHi-#x)-R)8{`I7%rz@2an%H=dVUNe}-I4|B@4tNu)GSJ?lQ+d$q`e;mI(ES~FU z$1pKEqs`%bt0*Ixs=_rz{txNq9#+-Uu*KDI1dnin$2z9M^HDheOZGUUc1f8&|crRU1N1EepppYiuJtvlru;ea&^_Z{STy zZEv*o@9GCMbjMV#^?x5##n?hS=8I-DeVt^t8Ia#8RqS6>e_J3LZ6!A_i>9v?5A5qt ziQZ4!P(aq^PC3LOuy#Yn5$0;N#R^SdC(yZd0^Gu9>nTMj@I8H~Fg36yK>b0YqD(sHx1}d;@bKTh_zHxP=r2Tyk zWAFWzhtXG15aliTyaiZ0dy04q-3IHWfAPXsuT>{ua_d)wr?9275-OIZ(W${` z>dH&F;775B_GcJsPRP%`^lzoESl4xx*s1d5aR}!F7M*gkh@+1Rzeu8g-TsHt9>nlT z&JAw)7OSjv;i{OEUjG6Ujvk>g;Z5CGTFJ3}H+Jfu{USoAhCn}vaKB!F%5_PI@Dc%& zgAoCbwyYcPK7zGVQS`lFG$W9++jVi%XJReP7Jra@!pBOnLkJcI3ULHZ5>sKeRlHq$ zY>_eERM{!_sV_CKuFJwu&MZ*;leGqSs3#B~GtSBxN=2VvD3NB}Gyu$;*=>DP#5TewXQFba_1xvRQi3 zYYOYvi(Y%wX|X|vR>bLb1@!7NQz0vwsmLU56nfPL2@vUe1woqxKI|$DzFDJ%>zf>l z&$S_q$EtsV+3gDcMz_!eW7%)0-HfgunsGOd)NOfjW}jJ`8iEFiNL**7YR1&{I{Z6n;xnCz&l#1#oBhBhZd7BxH`k5J z7I!vIWSm(r`BrI=j7L2zSOSlJ{a8PEq|xTT#hGe(Q4-FK*T4J4nJ>`E`o)#u^+g7W{Zd};;I$@1wj{kz|>kI`cnw$umTa}OT- zcs+KJPrdPd1PfKUuF@v9Lb6+3X^NjjC$r?6I4MA5#^3ca8Kp$qUy{$&20N2DUniep zcZ+Hx@xGn>_s@U#{ID&S%7ZPgdZEvPiSF3b>OFL|`O8 z@+ThA3ZQ6Z;-HbV_s957V#~@CIEmT+{W4$Ssjeyf7oHkz*y?Kdo3v~>VMB4-37aBm zqc*1R(|d2N+780%%tO51i)&E&f@~zIzf1b!T=IJ3>1Ku?sH=gxywGeV>bf|f#Th|n zq_CONSX5c&ZSo?6&$;!nwXfrBapHZO)$B`HjMy)Yl5bq9*9$;^5Ia7Lq2v#xp#VWH ze;B`9AeXtaF1gdeaxwAmo9!hwR@LtC{0og2g4tbJMiGloE9{pmU6U~(mPN_fA7$0z zWMQl6CM&uzX0JEDoo(4I2m>M{&62JfZKmK$iEnVHB=GO#*sAOmW5--uSmQsUJe;#R zSsCx;!ia#xpmcXCF==6gUAnb1M&ZMT`9a?jy+pCOy_aSq30WA>u<9+eKWzE@cd|K`VHQ)FI;PW zrQh&Wp={F-drdG<46{1@xnfsqrRUGgDq1Z(dDvOctp`kF&1Zh73_t- z&_bINUt&&pDf>fDiL^1V)JE#MpZ?@ong&Bxl4z(-Z(anzHC)+e@0-?XRh4JsO#dkNG3tnYDPiK z6Qp1yDA{rZF`y#tM22#-GZaz{8I7RHk4nh*ntnr9noQcRe03C4o4(f&tf%bX6|Twu zt`6svc)}M%sR}yIS1TKlyv1$MYSQ|1aw7EFT#1F{s%(-B_-HfULn0J|dvI_peN(y) z?jN}PY)H&owq?cX68t4yFA4-I#FBxWt9csgLxJDw?r)q}$l$$!wr&NA|huQD(h+aY-`Gq_J zA?@PEv7f{^_ll&eXU4ByC0FqR!l%CCqP+1Dr_a$0L*N(A`*H*F`fj=W%P-PW)YAIPb?TRGDR_ zV+V=Y>|2J*)C1-*xg(FF|8=MXZ%b$T6oH)-Hj|?gNORzw|BFW^obvpELmip0{}nx7 zsmk}jzsVa2D!>916UE6*G4@Wqg{wg_2azM9=Q`(L{4+0>9N*dJ*aDp&FK$6H{wf4Lzmry}ef z>eSO}$@wnzw60VFhF{etWhoEBl^agU5QT91Cp+j8X2yGn98+A0O~(gr|^^j{#@6z z%%5Ioig`QY#Q}??X@hCK3V@}l>nY`zn5%qqC+$ty$6OyNHFK4N2280qnOvW7thq^# zW3)34jDk`*jaIqXl7*y8*JEg%kW`fr9nh(%=jgvuGcQfOG4v)i;diA@yI5=b4&sgHOhH8PBU6aRuHSv|hU&{4d9I`nQh9 zuTORS7Whd#3aYA4o&!SMd2=j#HH^Sbp|Ds51?5xz)o#4Wz3;YEnqG z^cUuAiCj7&U+%3M#J$V~S5qB*h`GS6`w!f{{NZ3EWGniNCwsC+QNKE zmMze^xSATn$6UnuzRqzHaf-A_6P?6i$!)A@v!H~l;Tf$hv_P+6JBWyXx9XoGCh>YGA^v(JaR*06=*Q&c!}OE>xjaRH)Uccl>Z7L&%S`4n z23Zlg@GcxP+7qsMlHoki?Z|f=<42g=MvLX^#g3{b$rZ7GxDSe_smUtLOkb6ZXLuN@e#zfx{ehJH4eupj-l! z-F@_~Jp$qc{6IGiKX_xs8ACQz zTvG{4x{8|BzBe>Fn1icZs~inX@7d#tel)^M<0CWUbLiKp&u<1A9)Hj2GD=F3QIPsz zSp=b+8LyRJqOLZhWiNpM!=6AVLR?@s`md{eUvQNnt`U(VV=_w6aHM&xTu+ zZt2AB`gv1AS%!$QCiIm0DwXYOyeM!E=C-Rd4pQe5`?1}ID~(@&nx2}*-+t$3)*_CA z_A-Nl|A?cYOi`m@(mWSlZk2WTFVg3oToC61V+P#o(kg%BJ3$9?pPflQv z=n;isu=qIn_92MO-W^v_t9p~KoZr(O87w!pnj3^F4B)ef`C zc-F)uXlXjHmMh8s`q~G#pPGcPx|DQ3_Q6#@)%bdlzIp3E{!9JtnaV!H>7!qShh!v= zrw{$a?WR}tDO>*2pdU$q)l_~_X7enL-!bA{B>f>p{8_Pq^ww{}L+Xo@;PFlGpV9C8 zkNYp)|IZ2s5DEDjH{AZEDMG3Q+Fe#LM81oC1JR7K{mZB6O_EfeNl7U?u>5$5#CWuK z8ebG%KaxgQ4AaGR*qhhLrs&YsDL37bgQ z+`jiU<2$-ta4XKp=bR_M44${Eneq!Xypy)^i|KB2@i)mAKRK6+z5ey3-{*et9q9KC zeL$A~7{fngs%^@CI5S0E%zv>=;@C*ENst*sJ)u`~{&-C0YeIE|=&K9o;$n5n7|J^R zm)hl0|6^Qw;C%Lc9gc_U{T;(n{Om-`dyg-w`*Xp2mg5km$VZ8)_}FIl-5Y30KA|RC zJv>!C(AafHqZ_d92|?=6dW^z<`L`s)?tya>P)wdrfBwosd}`WXIRLH$yz=?WyXxYY zzw#AEf_j89^jyz( z4&f3g-S&dxue7c+I9HHv=tFXv@mH2``B47K`8Wkk!GZXB0OuUfrDT7lK8WtA?ezad z{%IA{_8&LUtxt??kExC_)L;|C&FZw zL&|a9$)pq4}B;?a(sbubFdiJx__MKA~SJ@An6 z!9F9unc5uln>!f~;)A_EfnbI{9a`F z(|k|Us|c)IM;`YM5@jj->jOGSL^dfwB6CJJyZ7Tq_Ubdb!OximjWY*Xl+(%8h$L2Y z32?76zo08Qd?p?PI*Y+mGe4Gz~z0(SN2&N2bYn+sPhW3X~3C-(+ zvnLjb_(NHWb6rPY1q>g&l!PDeBbNj@JO)LERE1&hdJjm%ET{Q<;wyh#+bUjDW4l z;g)yMiL9A){NiwyEu2}9{IX;FoyONM#*i@zUCT7%(?Iv`H4QDBoM~)`Jtl8E%bCU( zTvUx?2{bQ{l8D*mx?)*fnb~Vpwh5zpxpc?IrNpqe(EBV=b zOU)SK^gbeScZWK{>G@b7s($}PhLLV~D$FsqvQ}Ngm<7GQxh;+d?P{{qYeGeF=rvX^ zQ4_7M-Ge3ErB2sHPq*t``dh44XaJ@j&g2AXsBJ>Fy8JUz1w-iqb37b^h3M_zqo|l# zw5#rY87YkM?yuz##5Op}dd8!ZAvdc60eYW*?h8!$;{vT_qKS&#utU9v9+6a9e*_Yf zx~`%VTdFHXi_u%R>cNeF|AA~$SgsU56eY4q%2adNXHMBZ*`P`S6>(Ilu|@6%yUMfb z@$N_oQ!3wthx~aftG{g-a}uY|-CU-wYcYfV6*qK&1rLR;IUpg`O5Y`x%jJ!kiCoY+ z+Dqy}-MEu=KB%rI&>Xl3=t%^AYRx2dxT2@4g3Nl`)L@GI?@oc48 z)a(*n+?Laq)6`qpB1I(o)?d_h6idMB{*r;kwbprO0Z)^kXTPF$pUtn>J*_0}lq-Gy z#qsO0&N!azP>({$@*W5?TMhghg}*z6k~CiZni2EnHHr4^YLC2G{}a}aUWBvC9P^XB zjQiC0nS!q4X7ZaP@l7uyNTZIAevQ*<)fE)2KH+{5-vqhAC?)$ZEZGP^Nn6hSWH5qp z;UVQ33C}}r3f>u@ZV;e$s1ZLDplVzs-9=+#9H^HYkjj~0Y3gTL0#d0x6u6b&JX;ZV zXQ;<|0rF4r$uYxZeRQ8XOplE{y|VN|8P!5CLK(w3^2Jbwt3iCP>VrL?Rc$^3BUkH3 z`T-GQYW0^I;pEWfgAWzEwo68co3@t@u7#f@LCBrN+3aVu#2O!|_prr$jiz~ANc0V7 zC!<7v{6M(37bsCsL}Jw0Iz^()o9hb7yfHs_9fha8tixnQdc+Cky6G?6@=)bU>RR<= z_|GQGD^TUNx2g|cmqGT@j2AcSO9ejh_r*no4~I6}_YesAeo9tQHN9O`L&^~k=$E}E zj;`%03q~U7I@hq{MMg`GnYh@?3TZ16kg7>^(&W@yPSXt-7!uWnH8mG8&2Wh~!#Y}nyriH=O}XVI zF-RM*#`)O?oTwJpkKc#$2?GO1jx;z@IBJ_(2e9K71(80^y^KAi3ePkv`Yu=0Vp(4E zuXm`afQVZGl@UJ~0o3e$l$vCn*nF%_EaDHDoGu&44PDK&L|xVKn;AT$8;Ec!#dckI z9j*Lx<-FOzk3@52ARqHugPp`nwEJm>m}tY~GT|dvZaM7Dp_EN#n$*pMf4PPZ(8{6u z46em|UG+kU)|k2MmXn<2$Z{=F%#nzfgg2wd1#;KH&J7hAB_+DGJf=p*p9nTR@TWKBbwiV0ccgxu7Q3VVJ!dW3rA}9^j4{Fs`y0SJ zoU~-7qH9n`HmRj!nQ<-2>`=?;tM|zyRvZ@}dSW1dia!}$AGt#+YUpiuMd_bag3kjy z!Jg9ti_G)Ov-IuARsD4HBf6oSG?1aDd(@w$j+D`6s@-D}!zglw@x6YYKc43qz%$7M zkm`97*lQp$Fmq#@=C2#%!&TYI-gS;!@DFi4Q=Tg4E;QUkL#O|xx__&7qbyQlrq6zy zks<>OTQBcz)(d=w22k(GB?gyR-UjDM_KzLUe1Pc8#9FN&kkuC1D4U{+^ytM&THvAW zp8s*??uD*4Fct)aY-By1WI&ynN=HWs$J7+$C0#L+r@M(fg$!UmCIwZhQ2w@1(3+En z3cU70>Z&gzH~t;YU!p>UaJ1g^;8c#23POf3{!-W^yMWyVXfU_k=?TK84QWC2PFlyX1HBJxbQ> z@Je;TpWxDysC@jP8)wQDwr99SGL-d5$r@)9>u^*)lw&zD{zbKyA5yZ0C2Z3$<&HZ3 zM&S)W(HY~Vg+-IYqg@{Ra}FmE1$_rhO*Vv3_MKXA{$b^fNB>YZJhfV@qcX1{ryTq1{cGz@_tE5_VcN9_=^4@BnQAgt9_w$XKC17DoUN-?9Q zx;{SD6b)>+6rcU_)cEYV?7Hz<`Q7i_^R;wy=DwdF2hIJY)d$VJoK1j(^qv?CbS+W; zK!@tuBBRs$WbWmsUb%m9$!kx~wI}ri-#Rzg#eNlWjz}cp#9&vN|A^qeA+83wWZ5E= z+__!B#E<;QQXiKqZ7YYfYy6X|?V4Oq*vtObjg@1r+>{*{N9h*!bfhji-RKt+!o#z- zei)u4Ej)I`rtF5M3Rh)|$5px2ZmFOyY;hCNSiIe1H$}ehCBtXT>;kbpJH3$2L#=pD zFbK-Kali}~X+I!#O51M>-36kMJ_jX00ShUyx{O_+ni8a73e_0Hd5eE7!fumVbBYl; zS2@2I%kP-{*XMD?>}AK&F$6Mil_n7MG)*8b1C6jL zp~bSddW)MRm}Vovcf<%p*wT67jA4Sq#qC!3H@chE`}Buv!gdhl6}`cClLj|rvfg?0 zMkzbypvuPHWb*N-Br@qlOFalx_OC>=_a+l+9dZo9ld1ITd0bwve*ICbQF@!6nXb0t z&~`xAvMCihF(lGOUO0@H?M13uC=;IKrkDOtLt`1b@04ZOs8UXjgWZ9CoL}_||LzqU z{!;MU2Z_oKF&QnE1I!!4U%V2C^#V>%6UeXbk-LlBkEgf=dG}joz;t2{wNV!=#b#H3 z2UdN+)2;rqLS`=ANl&txC`LI0^f3`8$4;%#2e9ckGG#GZX9!I?v&NffCcd!1?fT{O zpka~C|JUT3!{C_yr+47;%|J<#N%yhG489rW%$XLBU(ILF&#e>#Z4)&JeZ>?v{sjBr zK!&>hPUHyggWxBrflED(y7jWkqPCFT;|T}gJDXMYdl?8OSG^obpxlc2)xzH<sMlm#v}=&+>vG?@+jTC#J>d(7tC|nRg2!>f1+7eY>@TQYfKb0vyg2RZ++En^ z@=c7vh02X$Mvvkl*{m*kUjX~E-A0jqwMVSyaNf^5jc+S_G9c( zqc`Phy;@&+i`$wdiFfy%qGPukdNEL1NzFzRs<%%d=5zkMNVbl~%W8P^z4$&{Pn?6nY*fZ{?^cQH0<= znf$&ie`X~ItmJU8tT(u!D3Z>X*t3J`mJUjjXPZmp+0Bw%C>+I-EWqRp!&_zw2Ee%* zn!K(GN`CXTdJJbc)!$&qu)x@X1^P^b;cEpIDq^_coUceitD(P#-ZunVA& z3*}bXQVAX~tU*jl11c3j>7yr_+!|07wmX}Bmacj!kN`wd0|P6@l)CC~lt(2il4Btk z9%IJS-+ZKZ=EMpRa67_}-z-Hh1vM|`Vj5Q(=EG{g^DnUZRqb4WG6aubKS>Zp_D1?w zqN@<=K$+Bg!hNBo!a}r19&&+ZB(VTGiW81j5pI79P!K+<&q^X56v7CFyW=;29kj}|!OW%9+elY!$Grp3+z6h804^=n^^hXpU( zrzQudxQKIeNxu0y!&9tW^^-_w^o7S?K|vl0r5pJ9sHPs>+z?%PxmDY0&h8`RGBMY6 zqa2$cTb&DJ$+xKBZig+($#D|#x&d8V#9u*7_5(Lnxfw3afiDHFhAG_F!|1a3wmK@s zWmgVy-eRRs%#D-MP!qq5T&c(Pr&Ja{k4HiAJt`JiN>>4!!+^Kurs`&soGWX9O(A! zy~I(#-r2GX`RwRd(Jm?6{=YrYbgAu61Dw&3CIKnyJl>2Zpf}8 z?wB}zIBzgxmtn6u@Kuy8uG#Q{TmKHn!C;KGN_}Rs0=W@buKxa}s3VBQiFnN`LbH)^ z6j4``-_g2=#xL02>}-k;3tQTv#%&XRIT=+U6&oNs*yav-%tIO#x#Jr%TkrncqEZO7 znznu1<-CF#YcNSjUC!)4kj_Jl$g#zjdoJaOS4T8z!nygF810IT>LnjrAA?yq@-e;V z|5-lnlsHy6Ga$XfZ}?EJ_j-B!{j~bv(Iol!{&AYP*?cT13VzO1f{)044&x&aXP%ZW zZeLu*q>}5iSK6I}CX7yzBuFnYgJ?{2->&w44-hb<$G9l$tST|8xV)Z`cwmRRP{w16 zymr<9U4)Sg%T+HR7YSG5gsn={koR;@Xo)YJH&&)?4@rNNks`ZFIc8mip(R;zx9}k6 zKvA>&sTaP|C6{9Rf2-{lUvYDyo(#nbIo%~AwYXD`yle(dKW^COFFnt`WlKp{4(BH{ zWADcj?;_1wsWaiXAAKx*yi<=^RNk%|;788kX~=_j^+4qW?IH1tv(T!f=7Zf?Y1jYk z&K)^SV2jF(8h!g$;Fs$Bk05w|`u0zD8XQNw#dU25&D+&<4yOMmEmBTaBEv8!S~0s^ zInRTDr@j;#YqZF6lbvIfPCzNnShong60Iz)mr?#hqEbdr)szsAC5h?@q%&`NB&JIB z9BG#SajvNI1Q&oh=umgFQQzkp2^fn-shI>h%LZk0Vn|fAy?EUS&d%M zRdU-b$;XXmNnZX`pwtv=rp_ASEP%E*ozxwzU_->}wDpP}P#$u6O*D_k>^81H1=U@&m@=XnpIrPSd5nPY! z`$xcFM29=c@UzkA!0IQwM#t1)DoJS&gUt)J|2_UV{7GiZyRyt%)g1z$KJU9f@xTuC z$D_^rF1Nx%UK3}Au2Yy7)z1qbm5etK07yX|>aq6zs8h#0MGw{XohX}X<-KH9p*``O z-fI@lEJ?h!UH$He__&cTSYW?@+m~3C+0bGZ-HEkab+{Cm-?xtSqppLtTM4 zLE=t)_u1*-=uUO|J}w29$^Pw2WdC+JZ|6g%??+f-85g*A#c%Z`SFXF8D5f5)&QWC0 zk`eh~&)0fe`7u{inn#!JFvGe|GoJBYE*mN3KV!~X_-brCTR%ByJonI7@_2{>c8}Vq z9+IkKsIa((Uf3?Kv9lUbcw`>o%+F-NAyO#jfgyU6zZoS7Z90aCI-#nhTV_u4JO4&= zrY-;};qns+ zI0K}j$x(bQ3uUj9)R(8EKt%{cHwa9uF;jCF;2oWss{x{Ref@Pj0A3{V@9Xb@OX_tl zbVgv_-3*Alxb7YJEF1~EzU&cB)8;?PBzcU>3ZR1zl=j+9=NS|#&(`zw2Hh-2^32VZ zB>o;>pJV>(_{UZejbj~M;*QTyn4P)bN-OifIDogsOr*3CYVY+8fQ=?~K z-}`#HC_V#JwSbwC{c<&{FMt=R@PI3}`Y*hIV;zJH)XF--o)EB2JK4h8jV8+4FFZz0 zUg3|Ui-x9g3ZrCL43zYcY7U`zheN#u8Wa7B!44Yz86%@~`@NIi@r&z(;qA0H5Lr@J4H(sk)=9uSo3`Uua&D2y8y# z2lH}R3U4b*!7hf1#s!0Yp#{7LO(r3>W9o`;%)ET#UGMx2$?+FxB;Bn3e7-hMT=fe? zEE4O%65A#Qx%eOFWk-$_us*00(!SZ*4OL3-+DchK@5XRx0mCyt`;&;3c6AAws<;(q z%8$$ci~f%9-QS;`{sv2b=&-!v0l7q?hR;eI_b4kZ#uMd8;2Bzy?dXm_ag*~z&7q&T zUq2yX;)6l*8=dR+-9R$y*S$cJ?@Ym>`zNn;*5QPydL4u<=}GN>z)Z?I^bj+okATz1 zn>Ef_iciq#=UMuZYzX%B#mZW-0tW%-DXoO*H{azvG5yd_+?;sg2A=TP8%iq*FLeD< ziX({f5+W#d@O!55)RWgc<2@rbUcGl;#~BX>^vEUw-gg7^o;!O1`kng??!Bosx@p*5 z2Y3JCv){e@J9>A&*6F^E?w|BKbGl@TS;w=5fz5lU^!5h<&_QcZ zD*gDJehzo~8Acyf`bF9c{Ro+=PtI}L?3!%ebsTNZNVHi?n}~Kd2n8DvN_n#;o|5S0 zIz9SS`AH^51UdZk(Kpgo&{RaHq za`JP5B^pHdtlxBttS07CY6V-7A4_u=7F%TpP&cZK;5dd|hn9cPsAzabdiaJk~`Cm0d0YC@Mg>AaB6xpC2IEiS2;S&fIz^+^`i~3qeOM6wik@>yO=w5t8!8UNBPLg z^V;rGE4_-uhiq>s#VVds>J3??a*&T(Lgj8iLD_slhu}+x`kc&YiCSP}4>v{@?X;*P zcM*fm^vfOAt6cX>zz4-o`ej>OX|>2H@kkR+_iNJy)q-T@xN4!%%d2BaYK?4ZIRvRf z#EF>bB!a2Bad>Js`shwnVzi-V$tFE!&RXrZOwLaQj}`f;O_FcAN%Bq6e-inoI(wBH z3qH_hc-L$lsEzyE^dP%91x-w-p?Iy$LS+pAi9z~~#e$>lYDNO76ZkAjQGvv8dPNf} zB}cRuR*NqE;K!mB_4GyVOppDwM9j{8+Gs<8)Qa$mXk^&aMkCtq(V^!G;`pL>e40yi zT>{WjsQ+Dlu;+mYbYq=HryJtv)FtS2T`qz7J*z&I5cMo+pwWpS()s-Gm~i3R4oC5x zs(Y9~2KGFo)$;QA8s-TDG~Q1-ASxl(K6!* z<-?Iz^KIB#BZoc7JUi5s%s7(fX*-_0l^SE$qvT_2Cu3<9SPG{0#nOOFw~Wmrab-Qn9%6|ko9bF+RfFpt;6j^48*qD_InX_nkTlV8=m;PKz0n) zkH{rZYB`q#r7{G?_?M(#$C)Ge6CSdRBV+B|vT>aFv#*RZqKSe@#7ZK_W8#~?OVlKe z>JVbQSBMdxVu`aX?dorvksBw_ zAn@q(cGQU(1{@}~+VwsZY0MDgFLw0)9qM&hpPo(BpM!^s4ln6qA%%QL`Z2MDj+B+= zbmqVp^DmZ9q&;hrxu`tCns%t)G6=^2=vJ%fUH<@Dfx-%VgZg;C1`mbnnMjFnPwh#U z-2!?t&hY0r3;zD^Vl3pjR5J!={ALw)U=yaQt8p+&bf!W^AORW-zsy^@zzeie9LFTj zW4dng*xqc($lEu-e{^u)Nqz}Eoa_mgC&f{{>8X(;Xzr1GI%){&Qn|R5Dz+9N0yM&U z@X~2+q77z&m*Y4w;MMpCd}8}K9dt1RMZt;(KlC>xxP zlI;QBvTclGlRY&%_~j9<`nOq)Ag2=7@8C;ycmf(lbG5Fw)r9*cxQ`}c^9T3QL{9wl zhCy?(<*0e!D(}=sLbTDo8qAlRdV5+Mn!~uZ@I)!0>lH))Cvw=`=(YgWkjmj$X#p2u zA`pb#1qCW)z2NR-{1sCQtSDhZn@`yVfvL^*_`_N~`DR`80b3 z-+P#L3}mWV^9?U35eFrXdxHbu-T?8dIFzO~608-C=+nEoCsn4Io;%M!WK=$qt*?acW7~3g`T}1DJ$YEL%TlQxa_CBsv+XFqePOFeq=y@W) zmUzQC9Ko~66?~fKh^LzUg=SOK|8Obpj2McJsW-!!IOt;DBVzohHiw0=1oOFOlds1m zJO!C#bwq|36(nPzmhVs2(xWeY+Vl92C8C};fgp%{gJ)~{c2)L-Yv!x3%ZrZ^llnoh{wug9?g zO~id0GcmOiz73CdL<7Y>P7d^*{{0+RJj&YR=h#p_n2d>o{2V%Blc}XR`FFAKM7w(X zWoIP9`nTJdyxV^k%CsAYW4UoSoOA=U(r}D{?#Q+rUWPM5~Brs zAY{qo+i({~D`g$jn7_-w4`ui!Y13bYq_OdIKqnUkjph5^n}USm2Gl_kAKjV4$miv9 z=5tR<09 zxQgpqr~Ah*4AkQ*Th)objo0^H;m-drE4)+IwYuSBe@4T{fy_}KYa?P}!5(*cnjfj< zE@C=Ga%y}X+(6E{eDDEb3+SRtDnfsJitl_h=}T~_(1UG!g?G9opGA(BkEOGyXDDXx zs9eH|9+ID+)(1Zk?%A$x*l&bX636YmAFf0j?*t|7lDOBm5JK6qQvlZO&yVp~m*%k< za2dvbw(!}#mVJ|q+BTzujT4}63ZU0}VwuJ|hS6ooqK1dO*n_4)^uxpWI({Ws+o8^V zP}ZQYJkn7|kx4?^uAhmMNgAh7+_-DMK!WNEjPa)d5v<5kEmVb|V??i|>mP29OGzDv z!xfQ0xC@^)2qy0>1Lc{{D}1>LGF_MQpQwS*+CZte5O!VMFEp?2vH z#G@bM$A{cs*(~;MYO=qdPz0xZmo+c=KwCZH;B%9G`c|qIBy6;3E3Il?r)8z9{tM}rlg?-B&%YGTbJ942z%$l2AQ~7f2U`a|>YA?~ub`C?k-XYD zgm^7&-KD3d2KJ&s7s&W&fs;lgDau6w)A{vb!k4zF8$S@73!LqfY&XUNf9|GQD1ZR>7P9aQ#p9yETrd;{_~31|Rv-j#W!DE+PKzE@)4UT^NH_PeFc!~)r9LBLI? z`3@HULAv%Hq@$e=Uht_*#0m{I-8Py>S;+$|A-$h*8!I^}-t}Ck>v?p|N?ydz-YdEH z9<&e1`G)-$vAkR+<3YPTao4}I1u?|0 z1DBCX=2LSQ7JAEG@*iuL8*k+iB)wbq7XdikNFC6s2ro`0w#EAZ3$d-msai2q`!|SU zCsiH-ryx8EB-2&0S+&P<;RtWp3;toc%wvv`JH@b`$k~p^<_*nvnO8$@u|C zF|%0y$*YIO@=s(RpsV3s{_m~g1^$_=;vJ;i^>=d>xE`P>NAi@7LoJxYFq<1LU5zd`fawWK1F z-dcreXiR|}k7`CRiYK?Mm6>#?v+tMLVo8Zp+GN3&gMN~J6BC48KW2gImgS@bCJCBp zg|QgAL_APgpkX6>n8SH*1WbSL|55roq+spJqd%-G+`VIAem;Vzd$;Rk?$oN>hL2aC zXmciuo6(6(J0Bq8f6uK*Lkq@Cmnd^kr3T)r;4y>Oe<+a3ajA=N`oHO_ZxJ$~88Q*Y zmOhd^huDT}u@Rgy6CpX}8cGNj#d71r(^J(y|EUFZ!)jXXeYxS|C1>ciwJ-PaXAa|X zZany5@&|BdMh**Crs7l3q?pPG!g;}44QSf$J0xhF;3?;~P)b;jG%{YCqi6eS+4a>F zhtULq(Q%SbB)u=XenQLD@TvycP;7eRUa2nD+Y{NXqIiG1x4DN36K!g#&P`$uNskku<6x=za(hK z?dly8h#h**moxDSoN@{~#QxVk;t#kF7>F|t1XxIl7^%CKeZUH?jAimILG$CP)QM^WLdLcaTp{jy8p{hZlHF|3*cKV#q znho?DTBB`|&|+q@s>TYf5fgyc?#3!SL~H)WFL&cZFYqxZ^w4vB*g<)~JZ1-_|B!i$ z9W;;X9&CLrw5Eys*cJL6w$+2@t4G-5V|uTeFg@YslKgerOEBL=@|Sjp;ZRJ%ZfF)` zkqf<+{utcjxLg?u`~Rrsks#Ojet{i|S{zXarNepC zHO;lF6=(xSKx?!{9_W0qsRa`8l3F9hM6e9Yp5qBVE)YstG>lLm+ezDeWpy%h|Amn% z&jvSMDLc(u>@M9?UY>>vq12xx3-w&ldg>j>iCeAZ1@br#BLYx4iks;J38EdB>K%fh zVhcuYKnMHdS0F1t4x7i1yW~ggUvK&f4|!>uNHs?*0@`?g4fB!m43aMIR&M`5t{x}WqE*a+ zX?e%;TQpn?N=2wkQPZA~ux#?-wPMRs_HtYH6SH`8Ni1X=V=9-?Mck2_@}a|2Vw2}n zoQ$KI=8Rb_OX0e`DU_y{ueDs~HfRgBmr5lAMhOW?4R}kyp!4)dYSamTV;W@vH5U{| zJp@UgEuIkYbW$9}-x;g-+Mhm_aXs+wtB+M>ew#k_9$RA)F1PQbk7YUf*zW)HUG%Zr z5r=S%WQW^)$^~nEZ06Bsol+i*>thvM>Z^}kp&c~6^s&>4XnhBLEP6?jKK5%_MX+NN z7X>?Rmfz@OBh7E_bY6r$w$LoL!Ecj|iMl_~XG@8qJ!_zY+wPDl4K^{RM~I&bTIe|V z&t+kaV>*`Oa1oxcZgy)66XyhKHvXq;dr|oG$?zq%*J8oJfeNBB!#1w_r|6A}@~zSe zrNfL+=`O%7pq~R4*$u9$9<+y$1 zkYdH?XEJ(mToxdsl2BQHm0=f5zc4XuIor}L1D5@xrWQ1BNFFtBNgg#RX&k^Uqn>oA zQ3ucIZ`9gBAw#c`q0j6!^miEg-8Y$`{}|@^UB+v;@FB;0L43U4Lyh;v@%@dLsj_JO z4)ZtE*iT7X>FA!QeV)^fUiaf0AIs#H^L>e9QaCUDE)#d1yKo;XsnnX$BOf` zG@ine&oEf=hQW&MR7p`M=5@I5%-G^X1szAX1u-O+Xss^K9DTl-Tz~L2Ytuh~1s}ro2Efx%&Eoiwornk3 zNJ*z6=Hhy^$qLmMHVS;l%bsOZ2gqv!oA6)s_2kK5E(l51>oXvGefo+XHxK#r+NUHU5yg&*m9aDDLO_g>qj{h^f7QpXY3h|FTJf$Jk5aHBdr`AD(i zm*%5lX4tc8)I-=pA~k4D;abvA2+`oR%qJI>BqE)QDm!;k|3Wi!#5?ZUP%$8%pv=5n z^&&MXgu|bg z%@g!BYFq3PM^{c=$cEiL)uC#)Hym(#LMup^d4nCfQ-aa71(Qs;+8fT;=quZ@SSrIU zJlk$Pk!7!2krizVwjGEz754_^f6;SRfZW*<0YmcwC$t$~^gFAcFxKqKQ z+Vxi1^D7QF_Vi)C&}fcJ#prr|`KK1UXMc7#lk(aJv^-&*WWpD*Mw6DXP6O2-_8cX) z`j{XZy8LZ2oXB&YMYkVD23L8&uIaFNX^?{1x*1 zR6gfg_5dq196kGpYP*tO!@pENkgy*6D$Blh-ExgKgmeVAf0xr`>$R>d@V+6Xm#!=e zFYC=x$Ip9m;=Bcx{UzJt)z_pj`s}k=9iObUEc2xBsZX0_CjU>CS=M+ofbyRaUt{qC zI%`}!FSf>;oi(PttNt7z&(v#B%h2^ZL1CEYmWt3SU~^@mTjfbKf)TIK?>|Ssf9I%e z)lyvQBX9Hj88DW7Hqs}JK!`Xof{z%Y9zlot(+y?>G*2FZl=<<2Vp1Txs-_}zRUzTp zl~-Vo+Ak&cw_={uSYZr<(50!}r0jEAu$+s`&~|GAn^Hp!T2dCasBL=4Q)}#n>>0jz73VwGXUtxZPP)P^^%kGr^cSLU zc|yxi&yG;QlK87>>vPGc7%{ z*T0PP1o>(H%2ZJ@E=)>YEvdHg>yd5PWwmYq=us=Wp>EtrUFMqH9s3ip2Il%GcUB<6 zv(^%8rViMq2+ZU5%xu_Sl09?2Xmhh^;kSCJO^PU#NFv9cxq75ln|$ffxIMEgaKDuA zl}N3~iTlsaVux|yqzH=g$ARL=JEDTm6%fu7Pw5iiXlgf5={z-mhH9Sy#M3F{CihNkUG>yv|{ncUEpevtXTCQep5qS{}8av zep(zqqKiQKi?d~;d5Mq8V+F$4Fk%Kc0J%`B@-rp;~`wu>r1^GpHA_kHP~S*e%PWPnv13Ecnqk-r!+$dqRJGb4Nas6jZ*_+3bK zK4A**+A|pJxC~drBMdP@eLS`vNm^Y59^avc$<1t6!$uiDztfz?|8{=w{?y$6*!lgo z^V<~s=}>QfrXgdEUvi;n(}M&$-{%@9jb(26oZ#rq8C-HT9MI2eU^uz5rBZ*Oghk@K zFyOs!3C8s8-DY(%mdY}8sCxa|CgUPAPcDV?9+qau=&(+wwD^(p#LZln-{&Wu_&_dE zk3gP?5cbyrPWHE45QXYMRa0HD7|M*5FK1Ib6B54i%dfd{IhkMl zitDPEORgB((qYKjpy=$auEw{emslZdIDc;bj^?kFzuEl3SFD+wI6fz24QjOTC|foB z6^5)+`Izf~sVZOHg!FOP1@TeCG2D7*hS+BH$!jOyWB$+`>S5*r|C5OPt8_$|M9tDU5nyk-dWo%G(q7m^wk$e|m29e{{}S;L z;w{2iBoXE%FqTwGXcbXHOFX8TchMVXNrv;*$@oC3Y`P`ZD+o}a*<{{5&Ye%{^%wwu zr}~k8W1m-f>@KMudb(~t2nyubyxUo<{cRnKJ|N^vX4D3AF=%zxDM9)YBzgvjf*v= zTF3#{9@Iko#p8NxWhsW@98YLs zDT)ib)r%*Njy8>NW1g;CZ{~li_QIU7C#|eyxz+@?~Pr>3_*y$}5)?87lnYd6oMp0a9+Gd7tzY9K*w+4HV7 zBAP%3oGS7ft2DTO)$&1t2*Uj$LqG&7D$qo^d)PFd&5;V?#SyTWVv-_ux=BkkO2TiD^#c-}aV>FDQ^-~{Z_ z$1%56b`i)H%`H7IchM#GgzRXu zRFj_y+HLhTzdb3a(kMdDYDMT(S6Jc>$iH#JjQs0y`Fa@t`BLW7J{&zL9pJdp ziPF`>Z14#!%MnZ79&Ck&!&j&}Oyiejvf|lC(o~1gZtcMnaX00#ejp?nps0%?1h8;*~B@!JmgEut_Urpu}CaHYici|UPzIomDg&CbjJmdz)_U+Nl<{yA2}TJ569w` z9uz_J+WFu?mrt@IYG>w@U7o*UoB#;^HtrIu`2&0wEXrhb?E%)9440hJs5I-#v9pvNHmQ@xj&r_H0};EM>8z zCcMX&3X0?#9QT&0ilw3!gV*E_VMNC}mHC1GSaqCRf^Fa<{G!c*`S`@nP4O@H)U6tt z;t!|`s$gXVV`Lj)wAtKJZUp?E=C=kA!Y-Bh)>5f2r$Lsee05=}py9-Uk}5*A zVmG*%k=m>dJ58e?9Sn@Nq<03tj0V~yWiWg}5j-I@p-@IS0ZWc|vo1i??W%vC9!X6u zrE=rA^JVAjmyiFWFJ@YteAK)@;`#fd}( z*ar6Z6t;%|!Wxvf31f@fQYWFeO&IGL+q`JJj<*~*Z>(HMpD^00WpE;TEnb-FLu0K0 zs%X|+sR4Yr*qaeF`r*ZGjT4XolV^IUZV>Vm$x^!N-(*VCg|~JUQ5G=FXV07IDO;KE z3jaxNg-5Tln%@U&lj*jYVg)zfZGxRZcFBRYbTe;FnpnmHcxaS+SinUdzzDXR8_{UgHDnL z)Z=Hzt%JA3m~7U`eDGOGNEL3ZS#^x*ib+R(%*+K>X`Xw+WIm9#e<1alW$7btocv@2 zt;pM}OP@R`rHc~)EJh+S1WsJH~VUZur4SC*l7SeOnX-&a{&E&sLWx~bst$L`JN$mrS!<(`+WqYFy7&mBRcWr730cc7LHAH(?J| zWm@q@6Apolb|tEfQ~GeTy6Jr3?)|6_34f7;Ut}oSEvJcj>MtQf+FvaHofK3q|8c>d z9N8P#zWU2yayv_voC!+9+GNvvA>Z}4Ue>W$FXW@+TB-?-9jFbA`HXN!AlohT$5Ai6xt9Qi}&fvcAppV5R2 zOdPRDCKR+zaC}A+a>Y$`0V|HbiyS=QvwE2}a$F66g_fLWrHMTuZr=3U53eL&-}Ld{ znkq{x`ZrZRJx`k|LIJa7apnpc%yTT4jBI1Oh~<(nRb&)LeUv1gWAqTShhr9-{iPUe z_Ktqdv>fd^Yx$jHssYP(_3n}AOjTewzZSAMTVx5wsAG__$%}Goe~Z#)fd|8!MX^O= z&s6V1d=$pKEKuEhh4AY2S|JB3FCaXS|GrJ&h92xjHDz{-SoQFc+)(GNU4UjQ_`j~&bGBbXGp7w@@8Mlq!X$0E{a zqOnjhOpTjctW>d1)g9&1ndwv;rI@MiWOFsb$w%0!YBKtBw6cI59OGRLV*IUMWze@O z1A|r2x2mAE%0b^MjlTL|X_d!7#JefI20+vIk4VY)kVy1A^^?*nWSro56;O_Ej{l94GaaI1HvlmsTPT>&fv9N|@#&m;oXM z9exXbiJqn7%Fb~W_D4XwM&uwAU12X3bi>p30GBS6%4Lp2+FEu}IxUy#x5P+=OC+Jw!v)UlWaRjq}vCXmE5G z>^U{?gWf~0uVjjSu)j;NB-m5tf9c5;jIB}xm*ngpP%kNt^|Gsb;>hkzpSJ81;f$5gDtLLb4K%r z8Rpu;UBNGN7vv@KIifAm=B*!cap4!?oXy!h7HsJmycH8=aya8Yex@|PJpzrgRJ3=z zx+&!Yho{=pyX8HTocA0(C()n0Z^NPAw;}$%FOuIUI9daK7R1hxlebpewWZB(A67nU zc9wSLyl42f*Bp$RIH{$7yAC`_KSjCmHc)eX!Srs z(dy5;s5N84OyRtRv#}8uvDNE^Czk;&;jMGuPjKwM`b*4TEOex6MO33rHZC3%S~ThS8}cQW8W-`E%S_LL)G9^cKVliQs$2( zia%Cn3Y+zeE#BZs_lQBm?)}_kgN7O_jzPmwzuKb7mNR2E33DFn!T-mX3&&zMO&nKk zA5j_35w=~PQ&HBoXc#BgiWh0&n99aUIl76+6}Kl1YL4lkp2iEuiJ&nVMA*q+Un<&X zySi@`3#tQ&;k>Drv%QRYRhbl?oLy0az zd4&B{wprmytVO=#n{S-{C9JU13QgZRCp3LOpC9qr(^?51fTK`h)~=e()$O6`&tdL7 z=b5{~laq!hDMBInva#}Sjnf~tY~fAiGbs!ls(!$HL;b1T&g<6kx^;Zg!(TR3{+-D9 zEWw+&0Fs@@>lnBdo|WIPFd~bK^pOq~BJUho#A#Fhi_K1c0M$)2MQ+}r^XwT!huZqC zm|{~(JO?~uSqAS|)@*co^Fhm6QFEZ5b(J1Eu*aC-$*zVL29_A=A&2*&#K{nqJbx^C zLH3l4CkHT5pwI+=g}J6nIF`Hf-(gW?DeRd*w;jbkx(VJA+;pm%Ge#bG#cG|Xr51Nv z2Z-PbP0UvR~GIv8p&nda{VC()!A`;Q>#c?EJb=e(8Tn`U~Q; zz?^xlw_>TOM0vHlNQlxLdH7u^?0t!)iQ=@3*-7M6O&bTZI43JGoY;Zu$+xl>48~#@ zTh_Kb{lFAF0V6Of#zmWjSfG``4ylwkPRcn@#qC$nq2#ke_UG+5#{dVic+iE6e7@@v zVF==(l4M2go)SkDbR^#7Dafk4VjbT;DwQ^5t<1fJ|F=u_G$u65L#W#qnCDr`lLG^>hf2B{V?7Cj`CRk{f*Zk} zAyR`P%c`9wzCNpTb>VH%bL*m!%Yr?J1!nfWg8-J5Y2Ha3E8{jh=QiWn9o$UxOO}+4 z!{MnEY}RpyMX|U;a0tLN@qsDh4m3AT8K*H*V)$D9h^px*WcWpa{;X`HdMsLu+VK-d z0qsy3W5Fj@JS&h#yV8SD>JTsgJ@ZbyT=xii5gF{LXsjA17`7N>bv?RxT=8ek?~l+- z2QfVOmDQUH>(DJXo+WE;wCw}yJum~Wqg{GhvxW#z1$OrkPFT~!Pi*n(ErQbyMRYk-3#B7OhN_%>>xp+ zAViHC1vQG*!~vO2X2=YgKomjh1!J)(RjU+cxD*jEiDb@pthV;_^48Y2r`7iKVsG3k znsA#yfPkW)R0XeV94|;uxp*Pp@4xn*$po;+^FH7EJ@51JFxhMGz1G_6@?Zb;zb^sO z9&XleeKQXjjhv>5NbHUPP4yT!Fg48q5P$5Or%;;N+}IT;R`iP1+}L!Gjh>Q#g=|PD z!fv(xRas;Z&Pcu<0HB4+RORD7qr=9ExqJ+PP}xGxb2TXo*!NWh+ z){`sl3GR zq*L97!4|-Y3xUnFhpPV z3JPRGS59Z?_K8o*wU=%OOIK4bMw8gmnb;OdmSyV^^Y0LvMI)rgslWX#1S~rWRr_0> z!h1aJZ}n-~-XG=b_h5bO<$6wLxuSOF>mBzN@%2m_w=tbMDyxRWnMhc(;p~CmiDsGg zG$#zYU)aleLgLD5eX5|d=sq?$@P7XFte@HQ^$L@)Aw!C%@!$q|(D-m)fbr-L-LCkL z+%6BlG2FZIgV*mmGz#ctv<2q6HqHvzeL=ZaEm5B)!6ebnwPFVbz{$C&`aiV zb4gZ-moM-zA4)1?g1khhFr@rg$P3NVV7jI^r0c_B94&*OKfO5-@Im zV;zaJ6GTTd;aD0&6UQub&K-kZ@y0Qr%yp&PkQUr*Rb_>1a%T{paHrK3g=^O zqNPt0{;08g*=DA?vFc&D7%L?BAd+fNAHUaA7=o4ayI84wHme|If`3TN4~*+;8}spRH2_}Lw(F=1@O{avUMBNecR`5 z%a0M1kI-%AYFlgtQrw}cG_^Yu+Ndjlaeo=sK#`I1ryu8vN5&-oNcDO@>{QQyO_M+4 z-i+VCxvU9-EInV-m$#kjTy{b%I$D}~az9m}_lIzN0moE0dvTd)>;jk?WrX0JYQ~t% zrqZc~K@G7yvOqaPHu&sii_A z`D3>~@+p>GO>O(eeN1bN6>gy>;^*zZMevN!4|yH`VS8W9;i|naG>ejai0nEzbh24e zGO)>SNlIgedFurEr0!ZL7$)`Ab+WUiX08(qKgpny^lWIptjk z=i^FUu}+A&)Wz#$`KQib2e08uja)ZKE+w3+%Vp3y?Yhx#T`_lB9~z$ZSv3v5x8vUi zx=bwX9vaKkFTYQVRQ=X`CVRe~?1`m`iH@9=lS2`WOfQkS{hcV^CW0wuRy2K9Y^>08 zIct+1gT23$F?h6jBiE37clYbgBp-tiNPd?FIQPj*fLcQU;v6}!{;Z~Bp2*;I@DRPN zCa$FI{ZMUi>Z7pt;1Ja2Z8AxBT_Ey21o225MdxjGqViGGd77vxmb`*0btUHr6pXaN zB-&p-m>($;2(*bY=9>&PG8S7Hi!>3Y7K`@Tnv9bG6{fG8TZOmzvbt+7s?ZKKw4>Xv!h*vK*K&bML zOk&gj&hwB24~Kv5cHPNu0>7R7D*4^Q?-%_3$ZtBox%?LKdzRm3ez)^`h~JO-t>*U| ze&6G_jNb}=!vRWH&X6HPa@|AnhUAmT{OdEMAd^0I!gK1!&eOg_`u)rI|DU`p?ERJg z_U(XyLpTZbw86y>xBbHH`ZK?={KEWp^UMC{P*b^XFfiLwav@Y*8Y%b4A4Jq(o4Pev z6VPM1-vphkU7$NCw~t2C@FK&k#52W$i}^nfXxJho}Er(cv*^u9#hMvdLZ-dsbAO@Ge#~3qG*Z%q-ZNXs{ z?h*;_F$6$ZrTNzv?o@ZM)`YkYS_9#`a*#(NKWv*n#9V$<9yeAzWi8+)v(B=$z!op684UXIh!^@2%QrINsPOrhgC?*gVFW_>0JI(9MGq! z1vRk?2-dnPRVc}xf2V@y3hV26e(O-|>&)^?s0YPWDEbWtZcnyiwITKw_cQcaJm%Fh zXST9A!((18JmyK_@fYczpz_=78j^w|osY@N@qOMGFSGL_5f>w-1s97E)1l8ZVmgQ= z4n|Dh#PFk+Jx0~+sczoh zYr4|<#kBoo8VT7l^bC=9NNcl?i9+{Zh}aG;)2qe0yHr+O1E?-`H<+PItq?h|xc4Xx`O+dcP-3(c39MuU>!*}fLvh%AgV$~}FStIJ zq!Em%NOa{^8gV^Yzf2=AXyGm>jS%yd5_OT56LqQydj%`(P-{nmv?rH(lhNYXWP;;P zXKkVpvJCrJg{SukEmOhEdyh!=C*|ohVb3Ks(o?h-}NF(Hr zO)OJ?9U*HvEd;-*2&4jHnU{rF*2>VxWZc-94FT{2Y4Sc4n};R3J@aC0&8}m;OC7O! zWil+xP4=+JWMmCXdTx4#B^0Y}BY=OK3<~8Zq=%KcwXNhbbDO@+p4;jY%0Ef@C#C!s zoy@z@e%P#^`o-UYdWlh}rK&QBpQ`SyX#e341q@{&cP zix{E9X03kI#5ST-W9r~I08wQQ=?7A2Rb zMaeKRqMfKkGNz5_v*g&0jr+XOX&d+B1S_UC#)LK9>BqQH#K;xr1Nm%C;33~l(4yLm z{ks#`RbHIMHlzP(d9FxH@jpg`XY-|Bt}t~}rGWJjjH&p+edKpd)%r;RLUYvmFKBP+ zF(o2G=kog;#Lxf%~D{>Cn5?GO@r^_A(Tgga=i3BW4gUD&t3s5b~ zx0WyKUaHnI4H(=!Kg>p9z}r!2WWajSMr3K|mc;@hOW*becEKTOM27Jj{6PSvtf=@V z_SQec38Bp!wf>7MX!Q`_N;Fk_Ld5%@P8E1Tbl?SHi!|diSS7YdbE=@$8(kCPd6#Pg zRe}gVUA9d3{yy>YaL}R%VY1L-`ZgOaiomM}E#h)H_$2|mE;R}^M4;|mt{J1^gkx0v z0aj4y0gn_SJzc*20>(IXrP=;A#6zdQ@Smjmm`yt_B+{)Kf0oRPyJ=G{HiV@*`$c3I zrg~!RuH~N!dDf}UAQyh<0bJ+&5V6IvTCng`uyChf;l+G1H6+W!LGPsMcBYf6HI-&F z>h?f{EgJ^p8&Gc*Algd5XgM_bX5NAf)<(2D)JK~@v<}oiHXf+o-;jp--t-a{gD394 zSoX+fYm@)xYT?cy(N0ygiimW75ufQf=NyV(VE_chl@ZE z2+Fe0QX|Nld`kDr-p#*3J>+2zP`UE%QQiryTcNd$G>8#^1%eC?id2-{Q+;N~v%KCGcoaScMn&DM;9ka7z_q4jVF8S}93Z2-2`B2c0W z&{uLNo(xRym~lYb{F!M;>!HWfrqgMYF)bq!co-`{^%52t_l<>NDpVl~JFW;1ZNv&H z9w=a~kaHn9)u^7gbL_V$Jml>i@^(Pa+v|Aih)QZCDNJkQ!=lX)&Q&B=UsT=n1Jo7S ztU!SPR>tmBLZb>FFha~^P?bC8r!>kK#OWBFj7|5Z)Cyr5c&2Kpj9gmR*QtJ|-zFQ$ zGp;|?8ZE1{8a6Kvj}+M=dfDG#YU$L~9mTPkOyG2&3WBLq{q{An8*9_j9leLi!wa^E zZ&M!-@AR=v>%|>S+|cItw_U~NO&8Gc$Ll^5c;NHE!)E7DidT-xATn|S6bnVpvyAr| z8tfoDX}Z3-T>wJ5ARnABcaFKtIbP=Ft2a9U;lKm-z|+KD(>5Y>==^ZnYE|_9|ANl< z&~5sxiHd1TzV|Dv710I`)+0DbHrdSd$kd!Pf*Dh&brD^a?27Se>f&4~_%*)y+G(M- zLX9Y6Qw_Y%vSRBA?1#~3=dmeIY-%!hC9%NYHwO;Tb=h_TJF&FciD6HP75y|RammG8 z6pfjjV7WtWWtm!aO5}s*ihOW{$OnrZ`5=vuJij`JO`)F^IOqrnnNiwzR9@ABBe3%O zGz0~X+W{2z4*app)EJ&80tojo=K2CHX4F2f(bJBqm8gY9)Hmm0h^D4v-solj&4BJr zgXCSPF_@cFVtG;GJdw1if@$pL)`z>bS%79_9)5V{@!Vvv-v|OtC$8smWB~K&ovYU_cRCw0Owntv*ZWBrZhf0x9^ zUX1ccIFv2+NALi|QD9XePBEGC%AcSu$iG z)SlPKq?-1>)zonwq9z$I<{5z-N4{8_2zHji=Xm7u)2H-PdS@@s@VxJ@3w?@pUKUGQF- z(KRczObhD~cEJ-hV4G2vXbsq6)H9p1)nDU8NouSpBm^CAl#=n2igHVjc}g=;XWk@ zS6z&FNf1FG0rxEn0AC`y0Qa4*mj4YZR4}HNT?8_i^B8KTi3hA7A0lbj)P_9SPBY+=Z$hvKDX&qgNRln>s%2loec$4PDr}{FIxkwz0Y0E^d=sD8jIoAK*|pgQzKmzH74%9s&MG zHJ-vbU61}YM0LHpo~t_0Kgp!dfuTu8&?(wk+hwA@%Iz2J(oQ0-$wbAcJ;g*5I#V47 zN$4hC5H=O0V8y3(Xj_?1^-s-J)*_`A zv)*Y>slUM1!EECdSYH~nNFtnzJo0JsuV_ZUXnRZT_A&*1fn=lQ6IT2eE&Jx3+0!R5 zgI2HCw^`x;jh*=8b{)>l}s zb++4Tfn(*(RxfU=p5%QJc!} zXrogd0ea*;+Ue+1;dtFsK$WfJ{l+?H&|QnJZs|6f=R@1}lJ`T)V=tfh;^G(r8Ai7z zFZmzP$UppgHYjl#c(1bmJs5r2F3${A0EaUOHiUO2fmvqN2tBjpqA-Vg6AHIBp63g3 z+HAadeb{@s(Okx7Oo^n@j=q5y2wUz|%)RidM$5oTe2Aslsj8j@z05jjuYa4~jd+$HlP^X4NroUyQ0i@mpe+_!R%`eB2|;@X<99}{_}N2tl|!-sEaQp|9sLaMzWwa{aKES>UQv;Vj3yzZsTx>3>%gmOv^WtqwPrOt3H+7XCP%u#y|2m%JXK?p4r?Y|azAc=ZX zXb=EUYy;-Bnq#%00BEn$F%95gt7T-Fc@x3kZBu~vE`kzT@n>Nc)2w4i?x11Tj21xv z^MRLK&)ZSG@}8ydWNIX*A$J6t!ehOyE{-~e&|2ct9k9aBp~V~W+9*DDN2P>-o5FnT zRL}g${?tldNCi9U_|(G({^oYA-Qac&!+_;a{5C%0c9lHsc15rh`YY-Ayz9^NPuktC zF4C^T|6lye$(3%n^K$YF`;aK`@Tadl(*OF|JW>yTB&xZRX_(DP z4@oG!kBFa3>@ytE%b~gYr~#9(ibM8`C;EPK+3RjjlJvLM_a#6#Qmoz~pl1`dyI)Q? zHXFjMrYIaMP55-QKDFjI5~}akl0dw!a?EpqcpzWm`2IO`a#-p7ljwDtV@;h%2G$e zPhax@)-vA!9J@LzVg?qNpW$*sXvS3w#>`f%3o;#)X0J zTY>L86GE`z__Ut}<8>>P_bY5qf$yi|BU>HLK69DuGo$6t1+ve4oqZ;9mXsK$z3=;} zKcPpX#?*H8q@5ZkQyul`T3>*$4RQ9`K~c=f8ntx=8_~&DV(h_2t6e4~gq{=sTqf|I zUl3zqtyH5cdFppy%M<=N_#mw>u;VYx!WS=oMQ;3V_^YFSu@`#DYnI)2XIQo-T>OHS zHJ1O8Pfe?>Z2Z`~=u{G>)q(klv2tg7a;ST&-}~~t0|*i4_wK!~FE>joye}>tZF-;g z8{wC|+aYo`7?Zcd!<(Zz&E@;Y3qSH{YH0ihCae>)9<%UyvFO>F zr+x;e7XBSj&cwNDk`Qp&T{4MNV>B-X%%+O}RX|$&lHbae=h43Y*lFqJd35$Cw0^SlJoc8FzUWt3*|y;c55^&)QOBa3Sp5l-hKms;CLZ6#7! z&+r@HZew)fxD}r;1+lzmQW9*2w~;dhD2ICYMvANrtd%kC=d}T4W7<Iv&Av&E2oEt5<8VDH|Z5osbA})e5?LT`9 zfv>ej=-4?x!|i^c!FizM!BlwweAx2W3_fxEp)35B38{X_y0+X_jRvjDMDqy#Emgte zV7@7(h;vvCHF`Ce&x*w{aU6*XmqYl`8i%J$ham0mecp&aO%^L9VOEJj`XMn$Kh!Zu zaeABH6A|Vn6MTF(J25d%C1%V-z;lZ~c15e)&6+;kuHQVN{ys!EUEoAFeT|x5OGh`I z9wbzY9cv~>YMx2B;EC8BQM2e0wD?fs=Fh?uYcfY`v-1(+6ha*C0ho!Au}LBq$%zJb z_|mOsLk+}-6c#Xu4}BYiZ9o3A{rJE7@OXhdw*Sfa7KwgWoYpeulwf*a1ULt+Gl)&9 zUD%*Wtl4aB+to#9$}WBoVyRV53>8xlZRhoZ1T7yoRKMgj?ZMG61!rAD(52B!AY=9f z+h6C<*r^rPB#${}isx|q_~;N0f906mi`w+5S_M|ZJ~MOHV(6sX3C%XEk#Iu9o_#Md z(Staa*_&EyqAS(&hiVFxspBVgyS*Wa|PB3Q&YJ;%xXDk1qmU zP~G>*ya=X|Lk~|N0P4sPVKtU5nwGPmK)vxk=im;+t@--0qY#DtI$CS{n%2gwbs#t- zy%@ALv>n%ILaCm=+I%|*~#u~y?J||0GJjhWB z7Ks>yGpV`57&*@{YZAK=gd38yjBuSExX@G@l;QbWIhs#qiJ7yCQi98ZE+S>K;zj z1Cj2bV_2GSi%F@S-*|Q^{>`=`w#)_gVbs-7St?TTPC;(C7Mz5)Jd*bkg0(JfxJ?FX#qlPh_vtI@f0)wft_ z>ChI*AM%p(GK!o~H(J$198It;--Vzqho&MPJrz6F38}}4Dr(2Yk<1k~ea?y#Oih7G zNE9(`D3=wk?(Qk5BSs*H2+iWe0jAz(tlSJ(qCS$qaD9_F+^W_6g ziWOLe4&K1V{*i)9B5-Y?P*>v2DhHwMP#clKAXE@n4b$6UG|zQNi288+ESDTg4vK^S z<5&puSuk05z#v2d+4#?toFKi|NBvQ-dki^*M4fPhv0!IfZ}lzX13|| z@yk9wH+rXOW#S^5-UM+G+ua@17i|l86GpT6gzAcel}JL6pe<+FfIJ~IG)ZCCmuvNF zIxv3Ov2&xttqf%(wJk)<=66d~(YDl`bXE3?8PR;x`jEgybasJsR-roKd?`SMM|ikR zEL*PM*`j8Q<&{V1YLTp8OtdCm8@N~aw)rXVt32P<<_m0?1 z-fggMAovt#*Pz`~Ujx25kC=D7z&%NzZ-=^;ry^*YEjYHpo_WXd+aFutc+LU=*c{_} z;!LQfFKjMFPHcKf)dGUz)LhJII{yPx!;5+plk9fA4GpC!c6_QN=b^KCYC`^^GeMHy zfR#^!mcC}%6&|q@|uZiy*w!9vgQ^aX}o~>R;m&S<1Iz zXaR<$Lfey6AB(rt0I7ozgfL<;3rnFp`zY&PhUXGzcrMExo->?G<1v4rx|2&EX54ze z=+D5YJ#N>>{O%`xBfkn6tlszdHMS++(?oJW5X`GvM{ ztGp5Y*N%|2)9~-r@p1|OKi%G0*i9$)Yk%D%drY6g=TlR(dD0HGnsow55_qMT-=9Rk zbNBfD?NAMXZpKmjT)HF(Qjp_djmpLGTm6=`C3Oi%MyI4^62-w7ff1x||p&o4S{871nJ`Tl>3%*0_8qdGLw!w-@eA-O+TkAi|~) z60^}P`Xp`7_Vs_UAk_o*h@N_pb6TZr^z4=cmv4Oo{zfFhk$*_{I_;&bM~K0>HMs;s z7-v1-cslF(v8z6BJp(DSm{kfa#k`qKD%WVfAE=NNVR9vo;(Yyg4#*i-J&}dku)UfM zCUq+&q>ME)7p$Bd?{8!9VWt(r(uZxK9sidnZ{dt^y*qGr1pF|9$z4aa4Kv6vCD@I1IXgIS>DZYUQeh1e^WsY4$SUfp)Ewnsq*fKw!T z&imE)vrurek)~Sy!54!+z+L4p=Y9$}Hs3$z6>*MSk0W}4?EJ~+_>(A*#h*;@Cp?QS z6r+voPO{IZJE?p3bkU3|2)ZxW!_>T{V;WFSG%HC1%Dw*zP;Q|&pSv5#v8EzZg5(>f zrXpn1@fn2H6bDTr2Hj8;yP;TYJx^yuxyt~MhMgQ9Ih%W?vXg0aa=iJ z)e)UNOr8pTglk1=sE~;!6uiu>uBsv|vebCZXTqgd8aEtnI@)i+y|_I8;B48AIJ|9n z!)pQ^Te=T4eLOhYFHFR#hbf&pN1O6JY9DrrYnxBy|4Nufqxt8&7R#qf*396@r6=S= z|Mg4Bhi?L}qaNdiwnHJ~qV*gBwfS4Qk=eFMDy}oy98!~{vIY4>w@S?Gr%pRA)~+R zc)#HN(D-oTRk!OEesY!Hf>ZqDy*w8J!I|&0JS6Q8B_b&z$sc3I>vNo6Qh#Rm)Ulng zB0s2p$sOUHkTs!#>+X)`vooY}tz81!Zgv6huKPx&*`kbhxF&xt5?d*6N9wGTiJ=p{ z$?-H1TiZb44pIaCh1-z@DKBWl5wIc)!ll8ElqHK?`trW+NxNY`04^c$#gvg861cMY!kgcauosUm4{{B=cbOSi?7LZ{0c#@O z(?U&lsuAx>$i)H<0PMq5PAQV304EnE?Wj=zL8lsPmk?Yi%U8XJCFv-i1N{+8e@Fm!kw!94z8qYk)T6S*e#yIsflW&g{`)&Jai znhWUp(;L5+;nR*9Tba4ADI*u5!u&cB@7dqab0K`FIcaVa1xmw~ z3PE>Ax7Km&qAABd5R>eh!_`HeXd#4SWK6IMd-;o%cXJ-GH6mr|^-*~)Il*H?3HnFm z1qt`*v?W%Xmu%&ZB2hyo`uo!mrL-j%@vP4KuCd}?T8v0h&eu}4{qt!2etj6-R5DoA zqn|{yl|z8C^kKYk z9Dj5@Q*@R{fql9tt++}jy40myt<4-B9$W0wGa9Q#BXT^*|EhWQ^T%^2XPxz555pfe zR7J{5qG#86Kbt2zS#S9ygedIb0wpnf8SIcB|02A{hCqwFq~y(+63kGkQcY9edMy`S7c>l0$?$p~Gy8>)uu zb4O&pI@T^@b~u+gkC_yA_GihAC!YT}1owZwXE#g8^st`&=$F*Q3)8R}>1#_FflD&q z{|~8eyPChjzOL*mv$`$03k`=@BK)X`avf`twYb!)2T2P+MlOQRY6Ih&tBd$Z$U<7b zO^xTf_UppK)#W*2$nJ_jd?OmaUdSEL8Y{_Yeo$c7+9(7PxUD>F{WBQ*ZCQs@)c$sU z*gdZyR5ibdD9S9=p`01)2@>}v|8PMLkqrN$je$~zJWe$08~F@5jF#W)rd$%AGF#=* zi!|VGCxe`a?KO%5E@P0(D5@(m1_g__Ej0%Du%fHu9G_qX_df1@+}Cqo&lVnNfb#M+ zq$b4XA3mh{(+$PQ;KCY8k6hVXIkx1A7>%eqKhrLMm%4V+1sO8qK>Id~B0A2H0_@@5@KQ z53OyqNrq{GK*R0lKqr4=^^tBH?KGZUQv^yeSKGRMNSQ8`gUm+CHBq77pmkUN*A%G* zbaR*fPAw;gwP6X>8WI$_Fv=MeVmeWu+y)I0LLh4|GhzCiWtRNJo@S%@kR<5C<7cyy-{MA1I$vO4BefT}XKw|# z2~IRQFS&_(8QPkF0L;^6vS#Y6O%NWOOUT%XU~$#?QlTtwqxC!Fm);L0|KaMNQJMm85a;}C=gZ;vgBql% zMboDUG1W^W?J*igc4YMWJ>28gheCN6#MgH z%=t2z69v-q*p$5FHm++$jHJs04j51!Q+`%^5Mi#-JPHU`gL+E;SeIrG(4`-ef=r^I z`GM;ANJ`;5W}muBU)p$WvugSTq^|BEi_h0*7*9~olg6<@vP!aAdkZX=#XOcY#Yif0ld#@dEpBr<%rsk&J!GIHoOixibMD=h+i*x3q_$ zl4hvKbfwPCUUIC~Yqx3RY<=dEoa#99mYW;_ZdjkZ#UBrD6PoV0A&BYOE=5B>Hc`gP4E|=82*{v@bLmF%@ja#8+a!$=1pQKza!4Yf&tR! z0hou|d`8PMskUj0m=k?}%NmOolz&qkI68-S_1ir89J24vfZF(r>J) zL-sSRIBZSpj!(!102UNAN-TIHT(8qe`(r^(8VyoJF5~PVDj%@xXMGptw$&2(0SACUr`xf^I96S+%tNCPZ=IeH!pKkYA z<{BEt*FeiV)W@3SJ17vSH^gw&1!7i=zner=xW-@gwc(Kx&@ckQE%Zd-M?i}l0=K=M zGj*BgUFxwM7MJ%mqxoW)@Rof>a~TQgZ1Z3e{;FBJ;;AQ9+}SN^)a>VW#rE?~<)`B0 zUU-P0b%e8pmRd{bNT>Sicv-}CU(@GIz8DL8 zrafS=c1luxL-D#2ReN_HDCMpxY3j3PugjFb!jPRJNM6hT)|QML9|*h1JX@G<3z4CpLOv%ZC@7hLi}R73M~`1 zw$~Xo2~BmXy==i^Rl*i?qtF|6o;LgCtwJ1nH%H5YqmD<{jcF63MfoPOv{C{bV1FU5 zv)W?u)(vXF2)$vkvi%9S?0C-;uo&aeSDCCoAO)R!R=^8yQ2?D!TLTo!~Bn6l>(6-~lSr zIx{-|oPH_G>1s&p`=&CuGKR=podF)^kugj}9#ZcQw>Na`;Teaq374i3f_bUSpk$l6 zj~kD+bz@*rk}614m&jHXOyDgC*wY)h`IhcQaN^IapO?5?&&YG>f>2`8rwDvrp~km8 zJsChxa>e+2YxmAn3Ck^w!kktYs-cWeq8fAu`@C5uS4Nh}Wfzp#V{c@%wZNYhV%1{r z!VvWd9(j3K+XkVe^N7T@A$iZNyo{ngYrZ@g`FJT`55^avQNYS#SI~QH{oM0~6KNjJ zP$saL0&!dI{#a=E35p(+VEaAMAt7r*gUoUJ0Zhqn_6YDqzpfv)zs{54%-lXKS9*vy zn-^~n#3r3oqrWO#R1z5_LI%6UlYBiy#ykic={c7>e!H{r@ar&>i8aj-^j5 zox_`b(Hs3$wf&?0L~zil214BXnh!7PXI1wX4RFqaK23}J=V6*9>K(p(wXtd{`dYE8 zE`)?u1L_4n^*h;gde<*}FlG8Mh_vv;xAuU`(qMf^5Fi)<;x*|=A@8z0^a*r`Z6RB8 z)rI3Usw}a|Tj8Lba1uI_glKg+F8*dBZ#7hjcqPGSu_D`{9)o~(_IQ}6?dnTI1Z`|c zHZy<0*la*!LvkT$1l{ub5@L$j*&}l__q0RZq-zjF6TOS``KlIs=AUaF$=JWjDs=Bq z=habApBpIh2hUtqcA*M?jQ-bJT*~}LP$?VAs~;c)xm+i@)J6K*sm{^Y?dso)h1|8z z1Yq!D6B}fSbFJ4C5SuuIYbp2ep_u6lul;N0A3~jvATkpgzOiYM=X9gx5&fJ)goga^ z<3Z5s1G!f_hRQHT7wTHTWtKTm_^(Q$5}Wr5J{igPRaQmuohQf-Mdnyjfm`Iq+U&xG_6P*iuZsBI(Y&U~OuU^_g5g4*CnvIush!&h8Pm9@L7Skfrbx zsf*wCZrHtlp=Y_bzBa#4WLOZE`EeNwaM#jcLfRxl`~rxoX>p#bcZQi{02(C2U&w%a z-Frdr3v-_O! z_5~qm*=hRdP^wk8dW;92(?ruh(*DyNz6(5lZxWSsbKdJ_;PF=AG5McltMk5YJot4< zu+i28HwZK!^iA1y_@en z(;NjdwnMpMa^~KY?oH}yIM%TBhWhDdAnAtT;Co?Vr?FJ!8Xv4Fh?e^pdAWb=OL;DD z&2XdT8$7^<1Tal;{sQO)9^}!oWimcOMjt1^fs|qEALhDZ8P<`0sh|z~ZZsd@<(k?2 zQ7<1BNbAr=zAt5Cfa-%~%Sgs%Af(tRo;3a83lhG8Lf&L#KQl^VGgxag%K26BW6jO* z@#8eprF!FtUne_$glbjR3nI}zzVoX_o90fQp!@AB8R$q)jWUD zvU`)Pk=+v0wb*bD?v*)}u0cy;cjgTJrXUY`&8Ns7sD&eCF@%*kBLW$PX~;mGqY=Vi z?TUKN&vNREo>ZSjP8t2~L7Lndst$vTgxonC8ET7Dkfx;ir{PbQk+gL_)N>j>N>8jb zRdq7J&OeU=C$;CTniKj*J5~RG%FNvgMD7#(S*SkwFL_W~qz>ssC%Pwj(4}7I3Yo{I zFh?*7`0cl4tX2J|KSA-eg$!9^3yf9%vTGWvYA}Vp zn*zw>{8cr@M$2siM_NKxRa0WLXg>z4Mw%KqPiCRiSQSLzU+XbiuGCov6fV1P(eq5u0- zAOGwlw+PK7pC@v@SX|8!%7RTvoKZ)rS9mXr;RSvDL@2*Eo&0&iRJFf%<+qSS!t;n%y5I99EGi@4Wq4tFM2o>w; zOGau;ax1IQOcNkrriC&TS~R)#BB%~?HSb-1FNe>CcO7|IU3s}y{X{QRcNwHAhefD{ z#Vi634ki*Yukc@4)kxnOF3EGPk?No%R?7hH`;dvHkv>O%b(XH=c@_wjNOw=F;u!K& z=mO13o2#WRA&tMrzQ6~xxL&=C@{Sofm%1Va)MHCRwyPWY*a?ji3)>(*;DR+f_*`gt zw^XTVnoxp3YREfuxP1v+H$z}5U`+S`!{D&{efGZ)atT1B93@BQ4rtZI-{JCbW7QowL7Wz%{d|?*#DY#RjmQ#4 zt+z`zwS8LW-lXy~HAJ@yIm&2lR}X$5tDQZiu7zE}ZoU!wh@lJ4!ptWaA8>s6AXiiO zum$~C$2a?{u2>Vr$ojB68PGI#O-{5xJv9J{CS0{GGMDjko3Zh-4yT4uF3%qp5}hYJ zM3*|?6HKx>D44`M&*33Fw4oOdapZk@01xqjPIRfa^|e#I%Jqb?*F6cx83Ab1r|7vv z^_>CLA&^lQuOo;ZMz`!;wm*`G-Q1c_U>OYBi+Blx_>)V4*d&uqj(pZ^iHRL<+}AZ_3ZIO^#d@| zK&M}Q^i|BMtk>$ScT(4ds}^|X<2rL#^!*M!^Ggxbrt7{(*KMe6@5xYc^f?P3`eC5@ zn|^>o`%gNtL;Xfy5%YAYpXwwtuK_mMEQne@_;zxUPC`p(Ewv01I01k47#)@3W)YgT zHyAe|vUi2N?Z%2u#u1tyBR6B^+(Q0L=!-pSKO%2?g6;b~LH9=?HldLbob4PZ;3bOZv31o5F0w&b{-zd zt0KuSub0!m?xn_xV>BX+<`rc-Mz$|z@#EM%hf0~2oc;1g$)AJ#z#D|l<=FzzI5=g2Cm6f6 zGf01xLg0}{w_g$u}oc0a{lAm|KG5JP7Hg3q1*28OsFmdi}ISa81-!fPh% z-pkXzJxPzT@;W2f{<CK0AkCz)TJH8+9QN*7I?x=o3!hnl zFZpluS&QR3)yh#C$Cs-2kpzmYAj3x+%`U1zrI$R!UL-r{=GA#FyJGs86s3#$sBwg#zrB+Z)>GDe0?mm#EJm3h%Vd1#1gm5Tl z0={!F!dqEi2)Hmx9kPVD_vK{nUzdBAb1Sd<1U1W0ek8^(S>x7WuV((bl26;K*>{?JX)u3g z4`nsa8JVd=uUg+A=iXV}zM`z}ozAM4?+)o%@xJ1$^qHh-NK(EqEUVlZS?Q9j^avX@ z_|9@rgVa6TNpk_EeU!l#Z_tMfwh#mmisxOD2F1PEBpucVAuB`PjAwVEHF5$}Di>?&JveOKr`_&!8J^oE*7a6m1gZ z95apiwJz7F*J6EI_APy;m%0Sg<8;?BKUS}!UGLQ<(eFFU)^3kRikaSnAB7QojCM;n zgo>s`BKm(xr2c(1n#q#-2hiUBOR2xak#MB`P!uN=FF|RL?-Um}z-{ZMWapbOceegO z8kx}_d<}#tDCs|WuXFaaTKk_u5}g^gkccA!KztsuCKUzZwRwR!vRH`318HAjR>T$e;CN_bUmf&i9gvUvaEfP{8(YEI`4$mJN~noah`PY zI1~0JGtTMJl)>8I3>2ugXP|!1K=sO`_d9qU^jRW#D9twA#F+q9-cjwXgDQ`C*Rm6l z#)$<(*gK)#XgZzL;SC-!O`Om`crLI{ez56YPmwEHz@@|$8Hy1f=9QnwCXm3Mi}oZx z;6`9stxNpFLJ_kgPa^sI|1oBt-%6Q>HVAYSyc2WQ(iT-S}Q^}c9$pUT~#aO1Lh1+oa;( zSjs!X&y=Y32QrxX3_+hFRkrD??dm(cOD>YyV$AalEKKr$ahcqSFc#wJo}#2gLl0U@ zfzxgd7?!4n^w+gHX>uItH4FKax{0c68%3k}BE9ZxOC71Xh2|~HP!^$B%?wA*V8(7O z3L1fS9yRC|8|5%67~3P2D#xFL)Rc00Rxi&goC zQ^wA1cJC%*1QbG0LH(=9igMhLw>v?~?+O2L)3J~mx*N##* zvygRiv^t|p_P#xYkTC32ymqw8%RKyeNBZ@_OzQ1S>hGDxUm6d09Ut)OtAkwXhf4Q?_THMQbXq1=n@O2=3ZhBf zZCATiervvM-a`l}RN?>A69S zeS~?Lhlj?hgt2Nboi$c=swa5go??OTp+!GRXXci?jYjoBW7VsYZCQ4JnfA!E0xVLT$9Mo$I( zvL5Ifj%_1H`+HIaGHmrOw}Gm=gONTVYrZd)$KOi9lld(6yWuWYy+TH5emfa6z5EL| zl4}ULCZb2^LhfLbURxnl1;&4J6ftgFvPLI5)gQSMXF=!g zv!(GJR$Qw`(rpPo0%C z{2zhZ>O>74s=93MR|P-i*IBOA_^^cuOx-(rl4*8Y^(Cc z4YUNGE%>*bx_G^u-i?{|`hf8V1kcl+Xe0zws-Vu=39xmc#;lb9D&ecW*fhWjh5?cgOmfyWzhpp<{)K(u0Jg?LFn8b{1+Hd${ zfzIxZSfERyOBKcf2|`L77}>7!-CJTW0InpLc<%XKp=W!z=;_irXG7fJg^CTIs>!i8;B#XQc(YUa?-M*}sOP#wt9IGx* z=X47Gi!$-+B>a+74w__TE}3s63fVLn5c%96{?2bVlY_J;m&;Cn?3Q~7I-Bc{O-lzCjDI#WOS;EFA;;5Y~dSe&Y`Z5MJxqky&C&sE#)#aV-N+5c1BRmijdU zWi-W}P~b1u_`@#AV$bLGyz}`D zk`j?@Y?b$t42jG|E>Li_4Isl#H|JfhS}zl_YPT3NWC8WGKL}}cwzWP~6>!b#SwJaG zYujSO*EFdRU5ZgMTf2y%h<T~%H)r! z0(;5e={s;MK|W8fb3%!`5p1NQ(EL3DrAc-VX{!$0HSHee z8*`N|v2jENcbdBH-|Y7A0jV;_L)#bFG?Vti07&QwCHzL9P3Un598ISaQ1e0=jOUAwgSBnny z?NS-xI%a6Ux>UXrn-zq9wyiZ*+fzZP5_>Ad;o?37$$BcT)pb=@u8q!-DmvAF(T}iI z9b6lor60(wDgh$%Z-V2v4Vq62Jrl0FsUl+Xw>;v-NVy^8eLiwIT{D_3ak6J62uTR-yt>hPj%plwPAY! z`(3-9ku}2IrLK{FncBa@N?2WuglX8id~v-H%97sL=$9^dfDCaJLIw?|J*#bnWn~}n5 zTm=ra1;gnNmdl*C^w(DC8Vdf8eh~yXwZWN>=y~a`eLnh))z+uw`VY(&eUkuaCkcP- z{KQ19iby`qt(L!(YI+ajJ+Q%EcurZ@b-<+N%&O}9M~x#skBI0sG?ozX+!9tZ`Ud)I zp(wTff~Z!j<^XPdXAos!-iox$MwWYH)A4-c{*QsPWmO12J|Y1;V2_BULNNYy_ByOA zjFn5=?eBQpNAZBkNhe%7ff^Dj5a)LEQ)1czOc#J6itutHyi|)=VKp{=0EUf|()_); zVwWJQqck(JSdKUHfi4e+;*)dKnexUK0;5mqQipdU@V!nP(&E!_Dgs}(NYMgwb6y{u z_XylngWn=OB9@a}ajns}X}WYJ*MXDdZ*3Nf5LRvC%riTt)u z-a#w>8@CU3VV-~pmvOFYH15fFha@cDfYH3*cEFn)KKu`3Y5s8TV;5h^U+xBs;Hnlq z1j`W1zlgL@;A=ojuEa$8Aiju`ixLxyMLdYnXG!dC$ius@kKH{($n;WM|7jb4?C+9Z zb*a7jYSZVM9FN@%P4AH8f734^$^WDio$5FGD#i}6yMxkg`YxjYf$oSHG=HHj9sOeI zkWHW4XKi8O9nYV<6ZX+M8jJ1>Tgm0`2!bTaX>5rvY`xAPT*YfBa({eco)FR;pJTnM z*1qI+Var1ZZuR|hMCMo*l*khn=~!T|)nPUr&ox>ert8`g*?8cmB*Ruh2?g?9T49Mm7a?9iwF1?i$TQNn3S$5lwxISa#8<6k8)Z1?7UOTynB#TE+yOyM#qLz2<6t$%6 z6t%o(r>F%mmJ-wg`zpw=`sjRcZk@li z!0x%HwI;_-6}8sn+NqM(8Y211NS3zNz|TvnytRh#?~Z<^6@?x8)0g4QA3*bs!U3NwHceXlTv*pmVocxIn14QQyV(RAgC$dZ5c>`r$=Mo6$PzsxukD8YFfNi9yuIPmjG6~q$ ze6E51#wrX#cKeK#UFrvaLs0S|!@8TcTii${c8DeLqN{MQwR6qQ&h=GpczF#km%k&& zyXuOjWM`RRXIVlVBfEmjvfq|*gK;1d>^iz1*sE6jP#)|SLq@ikg~jZGMI`3*ZzP08 zqdS;qxk%;jIttBXtU9K@_uAU5hCjzmquKsW-s&8-SopEyRLAA0Jj`zlxN*%~)ve1t zkzMXb+?du9R*Burf8$<)CGQ5VM1b|Jo_j5hx;AI4_0ZSa}}7)!~N0gSo2M4b=7Aojp9+#U1}vayj)VBe*4Sp zw?A;+UY~xuBKz&Pc+9@!EpJ?5Eeh!uIYji6_pz)UX zgCeE5MSoClP};*_cL2r%VRM>6E>NL4+?1Le|mgwu(^O^_;P}O)l+{F zr3rm{UT6lv?LWzWqSxMo*-uI|{?C3=DoRjY5x$q{dv(f2q`bb zdvY|-rGd6RL)z}*w1lZWG;L9YR{IMwgs=07Fh^Ek^kP|JNOUl;81tNXb~9tKEiz*O zjL#8bNM2oB{V!w&C>2pN^m>acsPHj%CUFi2|BKOvR4Za5?J};Yd(k&#O#y@6ss+O% z0_2%xa_ zwW)bFCws?wSz||e86AYJYe`124&2mZgFvJityFi^^3-xT@}+ofsk%%GQp(V!&T&MD zm?p*tTq#WyJ$wumD)h?rjqZ|-+!9__t zsivh^_{4r&wu}}V%}??q+bv+PvEqC3NTd!AN&?3+9K4un@FLzGk5fwgnCmP;!*9iy zOT3f?N{rUqb-DMAmh(s?3)tz~^7Fepmz@|di@gQ$RYsCT7gzO0T($PB3)!)N_ z)l$$iF(NB~e8kZE1)E35)BzW&Vd zhQ@C%(T1$4JGD}6>8Gt!iV#HTCE>hyOky#JeNY9>KOts;1ZwDzZpS7$6(2jX;-m=c z4!7rtEfxN^bR-zLLOP)(c~|l>n1jaxB=!KNu$q;yDR}`;t=bYDIr~Mm{5&>9`^7+B z&^-1H>A$o)`3ZlSUY3Z3sc_6!VofM9V?G+IZ%Z*)Tkd&}0zAB;$6BEWHpu7+#lV&) z51}C8OP|#)TPJ~(&h1Qs?b7YQTI0jJF3od&!0+&7d9LmJ`T?Zp@v|Y_{_C5nJw(d^ zZM;DRe_(tor^%F?x5}|QeMPubT1OxXh>fDghb5q}7~aWfM-R#7dtVkh6wD;{4@3@m zGc6w&6|%aGRrC7W_l;Ex`bTlvsu|emtsV$o0M+S0Xjtg)oG(sMg44!}{9t!Dc5Wy( z0)NFIx@{uP{aNfDW;iHHu#=!r5ks-K2xVqB8UNq&WJB-EGKrl_du{o|!F7UVpnvq$ zrhigT*!T+`PvQ-vi4@3+kBn7^G^@#`jmA`M)}>@yj(kPXuMfB17``(el!$ObF)bL3 zu&EGs>Tsk;ObfoNiyV|;;=U7&OOd*hXJ9pKtn);SRqtXC>P{j=!h$6X^X=VkG~FxUDFlnTP9#i*_V+|@74&X0 zR=gvih_D%DTzw9SdN)eA7tm?G0C%ucOJGrkiE5VdI8^68820|tSh0js0jmpAX{%}n z;$=iG7s3^T^ghy&y)fnC>E-?B+(#XJ%Z#0P5{FQ5kO#IujiACus8_cyJzu`3?fI(I zS9`t~x<8~#%Bq#`-jpt2I0XuN6-X|Yh3$MTUFL#b`g$8acK*%&UWdM>zn2_K@$BUS zeK1{OFS0k3WA1~Foz-9xuT5w<>4ZSX3|RsV=F=i(({3W>vs&u{l+_!ns{1!e(Enoo zZj8W=9VM`c_6Z#(CXS=RUch}*I5vu)i#W_3O!x0nr-2t_HBf*JDf1LQ zo#^~Rq6!F!N0}^*ndU7s3F@R9`YYYgOrQ;+#$5e%(J59z(?Z(Xa)6Xo-=ImSkf&+=nd-)Z>m)QUBO;-@P(^eH`3g0EmaOGWPQ*Ap3W2L|BI+omfjc#Q$ zkI*l#FS|Avp9zI4#(Itc++mK(`HPvq8NcC^_CxCxK7fKt5zG8Q~AC-g&1<0cP zrv!6Kn&6^>H8RQ?7ZuB*+3kdgi%;xMzC>w)ov~&$czKVXHG>Z8TQBpu89YYBaG!P-8!J z1NFzNyHnSzI#Pn7e@I9iP3Y_-7>Q5ah(nFs#!MgcnDA-+DzpH^?sJjhP2b9MMPUXD zP{=@&Pa;o^$H^ol>&^BuXh>ty9?#}e(R-yRi5gH6p)rF^gg*&MxW1rO3~rv=V7;hz z9n+&wqC9)_Buj5)H8K84%^PFkxmIjp(JcTM@2JOhfrVWfQk;k}^5!!&5jex!gF^<@ z-%yE*etBQy7JEpcKx&bV>ZOp;FKGNIaKYIN;j%G^+elxI9?woyG_{Rzw+G#uZKs0y zdZq`Uj~2fi8%pc}VR>ch+$IsoP~4j3P5W~;SmtQCWFtI{FD?V9^znS)J6owGOpxqU z5C!?_(UmfBwRAx4azz9oXX7r>kFje2{ld%|>Ms3&jeeF+bg7%{98}}vn3T?8IytKJ zwYC9NOXXFY#9*EXn+|0-?K=PkUT zx7MmVXV1Sz^guoGk?J`?tN%{ImwKu$#HyLkuruXQ9VMN2u?wy0*%E}&yK^pb0eFv} zNyV`{OSze&9@SszR1fN_=)yoaY7uoFOqPz7f%F3&L$qEBo4RzSY6WQy*gkYeE*$f|xqQDETt_CE%a4kV zCsHMeA`<0df>sbpHFC;S-@BQvRITQb!-%TeEd^0kqtGp4i>} z(d`v+0-dPauQA0xW`{Z-P6xIx%1%2_{gTQgyqfy4PV7*R%2iyAFVlEWhdD|T44m2B zoE*tDYYe3UMZ#KQZA{SMy+8%-j@oSkY}3na!l&IPrdc6zn`jh|iBTuIOhkZprt>ye0g2OJKBVdrNdja$|;|qg=ecflw_6utCA$_nq@bpe_#D zaE;$~{(^~c#G~3j=?=|m_gl@&8whoV@tE2D|1kF^@KIJ*q4ySOs>Ot z<#FmF2JH~Gfa2E5>A8$<;`bm9JI9(F$s8$_FlVG_8Z)tm!}A?Jb-b#)mSkdwCT&Y~ zJk~5&3R6ENF5Im9=JrcYUvBE5fX;x8+xJ_r9oX8*IOOC<-%z(_!19*RzoNDX6Y0QGR* zbqa|BgEgrH$9kVsD7?K2fMS*#3z@#4qs7wEFaz2D(^t9nal*%HGMD@=dAzq zCeTxVqA(Qy8te?VfOiyS{uRL>?4_OzQ7*$%BiNpGCeNo(Smq)Dg!OSa{{1QFl=ARd zBKEhO=pbH33Ma@1T z7-BI$kHs!K=2Xsxv9n$j9^XvdazO2z2y;QYX<;sp(wR~^6n6h4=x34|5;jTeGN%4z z^ghpkf)OpO1UW0i&UMbv!_iT(-G?oHxiP0~te6kyf=LFxt6gRlwzi&Oc8X@V z{omGXD1h_jK*B~;i$J7tk%iI_8ijhq354RQ}ZzWvc_0fSm z)+)nY{0-hty_}6zj-2)hA|BeXLR!t@5rc)sin%%Z7F~8xp`#Vo$^1j=Ev#J_%kxfH zaB#$I?m~aLWk&Xbg9~O%#jK~fS}2;LUE{@KUVOsg{hw+lzUuKR~N2+dnN)zIF+&ECc?j|yh4ox+ga`kq3rH+oq<={x zpYHKJ>Uy&GS94Xwc4HreYBabsip(@EA6C&sIt2B(XU7lL8a*(0K$-Dd?xIHLvSD?% z4{1ZD;Lt!V7Q_3iwkHR`d3gP#rdX55gH};<6)$5&cQ6}vKP9(rGKr$c%Fz)5O)0oh z-hK4+*zJVf9_Ez-$mh)cvauW+LK~_*a*3Q5DBnDj&Zly&q{;1iv)ybi*mW^aiUtO* zHTm(_q7lJH)1B9(M~DlVw zgms){Wc_0j1bY@x%wK>`oIdV@uQbt`zK>Hcfy(`aQU5G;RyKtPIW~ojMPeLq)$~Fr zlh!9?6{v0hIL#OkK|JTep|cJc?wf`Avz*x9+>ycd#4(?=)3(@dH-@3D%ajqY5t?wF zr?P63PDX>W$8CoQqfO?=VjQ-!%Lx!U+hU2QzW;^9{ITPr@57sVD$ znam}(r!}>UBI5TH6iQ7NhO}3sy=(ETg@x+FZ7nR(p~ZOiggns%OgzEutZ-mNg{svv z$R(U~Z)X)HsVk8R0A-!=NBk~pf0_)`l(4l>GO?bL95w$~HsH7|wdmS$()QRp-o))^ zi7IF|uaM1tho_=V`++5MRF&UMy%T#$Qo6J-dhCuISLBbem!zJq=+5Q|>opXy?pKp4`WZtdIlB zhOGMiOi6y69V;r7-mFB^C5MK)I!~7E-g-%zXW3HE&OAkrVL=qt<%3wh5nD3afb7JA z#Iy3Y(J8GH3j`CYIO_Mr!x9c>$mwU>mR=D2HBIo>6qv&^!SZWE{$`mp)0rg|CWe*P z*q*K(p_9~1>JD@UJu#$A(JQ?YRM|P2Rug;eal+awDjqa*X8D|gZ}-bjU1oBGO!^BZa#7)rkk&RA1N!5h(9N zAaT|{*4b$1A~3W5;FU`F5GT{4F2ovHgWR;q8ti-f+N&31@=Wes zb7mBVx)++*?bw*u^b2)8bxe9erEhk7@K8~w#4;r3gFmx|o(+3lLm9toa8X<%Za}ry z^==Q>K^$>!J7G#|F>U)z-J_I-(+>b}*CyjDbh6r$WqP4EBK8EH01Vc*VVO|r^FJ<8 zTD3mE%->f_&2Pw?70UiYqJVZd%ppV^#5h94i7!G#-LYklnLhSyxvk-_1u4zZft6lt zzPxnKSI6m_n^&xxf+Nj8@;!tdK7jgt0PCj#Yl=_rN029G>9C7<|42yJC2DFWd)%Ku zy<+Ai{y@Y}7k0l7*U1O88+d@uo_TC}!7dq-xc_o1V48mI~aQ$ga;pdUTVS zT5H;b-Imv!C~$I1yoazBDsbqClQ>}2`a-CQ*9#pw#kmurS#mK1xlWr|ypiFW9(n&U z`U+y?)NXZp)k&NIUg4*nohxQ3*_YXW2OS5WMafnu8H?#)`t%5NXCpYdXL5~EE3Up0 zo}qd}q}h2xM6jfs8SS@>`b9$MzzAiVPaA4KQ_v%CiC}UTMY5~^&XgC__-%>F8@G{) zs#b5&U<&K}CPC&Z1mt=cZyCoXlO>7pE|B11=Y3IG zdNbK6Ib}Pqw$Nd|FcKPVbva!608R1zMxOtx%=hQmWUKa$L zs!k%zH^~)Ey$0=}+DzK9=bXxd^ZXq|6>r{7|^dM{J zU-T&qBUcw!+-tq6H@Q2HeV%759Hkgh@Wrm~N~5MQ(k(LnVurs-`Ff_v=5aKJ{d6XN z<~ft=c~BkBo!!40i5q19;h1ks zT+HK~`l_K<)U+29h z%_tTz!?(C0WQALID5UL37paq81jZ4U66(!tq0qtKAs%Luc&b{|A6u&J#-aj(#AY`) zDsXw^P82>+6{LH${S6<3W;C?WMnNoShl{x(yF+$TIpGLm}3V9?DeEVH^5llt^g8ayg;rn9u{3BekurzWpAh5 zfwA626w}Q2A{RSNaO?zc5J^kB$;m)N|6UF`|8Wj^|8Wk!|2T)Cy*h#H(*4H>>~aKq z>DB+CHw*sbdJMyML1CsY&d@L*?e^j&GMxISg0YJqmI0L+!lE3zSPf?=mW0?$h(amz z+sCZ&&bS6%U{!NxmZtZZFSO?~%y^55g!H`WQHqnjQ`k{UQE#X&M{z$ge5uUY>i89I zbW%EVn7Yi{^rU^aYn$EN_X1Ybq(s&zrq*B;$Ak5e+mZIQE+1oEJ`N!W6*9%Te3(_k ze|WAng#na6WSQ_L@Gf`2stAYTbs^}9kTp1D)h&>mEOQF(TD!%%Jg?Op>LQRV3vm^# zbvxJ)z-6x1x<3JdT2gCPvqz@vmNhHI?|Db8@V_J9&1E;@$Z-?4g}&vM_v~#GhBdT*{gW?|m94Aq<7UC8Rg5;jpwlGB|cuv4O3BIU!w1iQgm2MtJP-`8klf z63b|WeSi+iPiFs78YD4Am{ua+QY?2jO2Jjh5oB5-*eSE$DWAR#opnCGiru+NB#RIs3Fp19*x}IOUQzMJcwOh(2*+WZyAH4%MO$ z#3jgJa{8kTMF*xZ_+e%VbpDB0B*bV{m46>~PWY?1MXekYux5@+UTIIJ6W;J2EdSh? z^f^yvNKDWAM1SJ=KNPdMlS>h9by9v5QYo!l#wAa5-!aav99LdB25tCtRwW-Le9X-D zv|5$iTvH+09^^)=Po>2uO`j)!iD-KxBr+h*rz_KAgy^hgC8pVnV+oegJ z0s)@Bc#NoY;y8ijRv`dQzZ5@qV1%*gd*qHNT73B2UwoPhJra(eTkxQ04A#Mb2S>x_3kX~~LQ zTKD+~8%EXo1erA7TgXi`>>emuMrCR_TZqq{>a{RPYoK4`!nvY?i3)?38h+Bk^OSO*0^PgWUW*Qe5(-+`;G2-swcBp?w`@yz zTACByTbf3cw;2tKrL?t0#`v7b;A$&cDCJ;X&DHrfNWr9>VlZ6uUN0|t?>3N&VS-ke z3{$b9-Dyt8E@_a|bZFwG3tX<|y*X63>vdK4*x#~vNG%-OJixTZ6w#8-*<_0WWUf@R zU%!7a@4N=Pi<~BSD4yNWH@t@MOh-3hGwA3YZGuXC6$?J^+mgW~?^^5H1s6q(@y+U+ z{YPvBRrFnGWX(lP0wGC2WbrVT2>Rne$N zEpZFaJ!Zy?j+7tijATD3j+rBt$~;-eQTQm;FPs4?U{GZ|J=Qd@*+sc7(nmt7pmeGB z+H_%ztTsBvxnJrfW9@6+D{O$LoH{*?pLp|=-gOe%N$QlH>Cv%AuM$(YiZ)WE^^xP4 zO>4Ppus5q((oI$G{+~4fyqM!!!iqY4>V$u zOeO{T_Fd(z0Uj9<+Zf8|j+#TlzG41M2qSVMr;f6KJz-b?bEhVjru@(b>o6Ey8P7Y$ zEazjrF$vSr8YkWDj@tu|7)R?qJ!%FsC z>f5K^6>3xUh9BnCo0=N+cRTg2lVo<+zp8IZ&-#}BAJzBg+?pJvzBxy&ZwXpIYJZWg zrh^$oc0ObEI|F83CbRi8=Y1)){^6({eLgGJQ$cwG+cNR&kM8Y_84|J z|3oT65SH54jyrmN!B@6yFS~qoyIn{zc$mz8;d^%ucz82i(zF^!pFugQ+=}PQk+1n$M*) zwHdC55+v9OVlKKmmlH&SWfwaM0!7#IGa(O6f^y&_K5YQeswi!WeBG+>2>B_KcXLTB znaib|&bPCcAbX?JuI~NfAxNB~v`6}Xt+8TrS36k0yiILvdl&bfGo1xe3VStMNScIT zs1=G4q<&rbR=YK5?>8nko8>JTR3?;_#xoF-iNr;o?s4%SR&yule}knL_OzwxDiDw& zzk;LC#Oai0SJQJ&y}cUy^q85aaK2XapYc3OdybL$6kD^ud2cob?d;dti~0iy+M6de5Kgcl>v?85ac5pD zGeynnilf(pS)!uTv9*ju^IngPxUr(Xa@uEkTt8Tg1C5d;xNlx}zB87^4jeo4^xCC5 zC=)$sz1$-@Q+VF7GyYVCs=&0Wczux^x?0_W;Hu+`ix%L^T)DQ&a#ukNN-+{EhwWPI z=W>`~E5@#F+&nfhj_62sIq4$a0d_4QmJ$=Hn30K{-T3GVZN6H5y z%n5?DB4UHEEL=3th&DkfLA{D|xT)3hzQY9e22cI-A&>lq$IzMtRk{1|%^Xd} zXC9+cAI^+QP)55`)EtfF+oLyPH?Vx?OcdZ3&{{SBCLU2frI+uV@mGER9sh zUbLpj_?`YFWR4{-jtjH+!%sLtjYs=P-hv zKvAT;ZT2+PoZ6r>ZB^d{;}z~8<1#PSBCN2U10Ud>m4ymtus6gG4L9mHP#kT1xu{Vn z*{IAkpVenZ{fan*?`Z53elOwad2V*2!}_8HWK|u1Sxs#{gt8pX zNlr=2B`!R>=d>46{^`Djo*;#?l}Q=0(r%SD&q-&ekuf0=tTF~#-9iu|wxg=z zLj#G|O1k%=?sX;we!Xvj&#_nb*gIuGiFj)))o;cuv+j_{X3hAnT$ZunwpUrzKAv0( zT2~iTSy7j1-I*iwE9WWBsEL!$V?oBo7h&C@8V($BY~t9&$(&>L8P_??8V#isZnoAJ zr8zO3XGj2rO;g+jwMIMMNo}y#a$7dC4Sb}cs)gF7_@e7soh35u&Y~}RPg}Jtky3M3 zWhVaY_IlRF?`h<+eMZA?@a;BP=a7vN7LYm?$}y^)fc3&W^{i*bnjO2q5@xC`FmkQg zk-+9irL1+ym3YlT5At;o{A56$y@Vlf0m=}@d7t2|eMfXbVo@!FCw%lJ}1hy3mQ8synLo0sz@u28Df>_hCTazawHvJ7zoa{t?aW{I`XCWGhem*B9l?IYH%_Oup zM@Q-djymgj+VIln8_~6s&jQXq<&>;&!jlX8%&7ZB%1pA_W<|cLW-(gj=lFWVA<*D(C%%Hc8y`}q&K_hpkR5l zAi{ejYSjv zIxpysG6Nz-!}R0{fN#e|f}*ZfA(^Tv!C9qyJ{&9aK^Q8>Q($8CUug-v;&lnv=`txu zZDuBeqJoZ%42&H*CX&rL72$7XTv!&Vw`<4B1ytyy^|9R*u|v75fn7$R-Hdxt&NW$Y z0n@rVgjt{HU}_W1Ll15xciAZ(Q#l~BF=+%~{sO2!_%p&RhBPQ%^nBwR_th>mlN}R!dBM`BP$lHK6mG zSd$5fI3ZJ<5X$Xm{h@$bcKl7VTdm*9ZH3fy;xs1`wsh=!B~)w##=UXMamg)v+58%# z{w*2?G{vajs-bB{{aS%U(p=s#oELTheu!}ht^ zT|2oTY}mf?`}`_zl=2rV+2}3^gSXXq5Q`^rEBLY`w(8`l3~~t_8X{jc>Z|TK>dM!( z`nUHFs^6yR-yVm>!*8O;N4kCbw*`DLH)^d_KKjyHHI%=J@zB{J`?}(>+wIDLJvri` z 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≈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 literal 0 HcmV?d00001