[
  {
    "path": ".codeclimate.yml",
    "content": "languages:\n  Python: true\nexclude_paths:\n- \"tests/*\"\n"
  },
  {
    "path": ".gitignore",
    "content": "# Ignore Database\ndb/cuckoo.db\n\n# Ignore logs\nlog/*.log\n\n# Ignore analyses\nstorage/*\n\n# Ignore Python byte code\n*.pyc\n\n# Ignore certificates\n*.pem\n*.cert\n\n# Ignore OS generated files\n.DS_Store*\n.AppleDouble\nehthumbs.db\nIcon?\nThumbs.db\n\n# Ignore development files\ndocs/book/src/_build/\n.idea/\n.project\n.pydevproject\n\n# Ignore Django secret_key\nweb/web/secret_key.py\n\n# Ignore yara rules\ndata/yara/index_*.yar\n\n# Ignore venv\nvenv\n\n# Ignore sample data\nsample_data/\n\n# Ignore Jupyter Notebook examples' checkpoints\nexamples/.ipynb_checkpoints\n/data/monitor/\n/modules/signatures/\n"
  },
  {
    "path": ".travis.yml",
    "content": "branches:\n  only:\n    - master\nlanguage: python\npython:\n    - 2.7\nbefore_install:\n    - sudo apt-get update -qq\n    - sudo apt-get install python-dev python-libvirt libffi-dev libssl-dev\n    - wget http://downloads.sourceforge.net/project/ssdeep/ssdeep-2.12/ssdeep-2.12.tar.gz\n    - tar -zxvf ssdeep-2.12.tar.gz\n    - cd ssdeep-2.12\n    - ./configure && make\n    - sudo make install\n    - cd ..\ninstall:\n    - pip install -r requirements.txt\nscript:\n    - python utils/community.py -wafb monitor\n    - python cuckoo.py --debug --test\n    #- nosetests\n"
  },
  {
    "path": "LICENSE.txt",
    "content": "BSD 3-Clause License\n\nCopyright 2021-2024, Zhengyang Li. All Rights Reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "README.md",
    "content": "```shell\n                  ____        _     _       _____     _                 \n                 | __ )  ___ | | __| |     |  ___|_ _| | ___ ___  _ __  \n                 |  _ \\ / _ \\| |/ _` |_____| |_ / _` | |/ __/ _ \\| '_ \\ \n                 | |_) | (_) | | (_| |_____|  _| (_| | | (_| (_) | | | |\n                 |____/ \\___/|_|\\__,_|     |_|  \\__,_|_|\\___\\___/|_| |_|\n```\n\n<img src=\"resources/test.png\" align=\"right\" width=\"256px\" height=\"176px\">\n\n# 毕方智能云沙箱\n\n毕方智能云沙箱(***Bold-Falcon***)是一个开源的自动化恶意软件分析系统。它用于自动运行和分析文件，并收集全面的分析结果，概述恶意软件在独立操作系统中运行时所做的工作。我们的工作是二次开发开源cuckoo沙箱，包括**更新项目结构**，**重写整个前端的用户交互**和**添加基于机器学习的检测模块**，\n使恶意软件分析系统可以**思考**。\n\n![](https://img.shields.io/badge/GitHub-Bold--Falcon-000000)\n\n**`说明文档`** https://powerlzy.github.io/Bold-Falcon/\n\n**`开发文档`** https://boldfalcon.readthedocs.io\n\n#### 下载源码\n\n```shell\n$ git clone https://github.com/PowerLZY/Bold-Falcon\n```\n\n#### 开源资料\n\n+ [cuckoo](https://github.com/cuckoosandbox/cuckoo) Cuckoo Sandbox is an automated dynamic malware analysis system\n+ [cuckoo-modified](https://github.com/spender-sandbox/cuckoo-modified) Modified edition of cuckoo\n+ [cuckooDroid](https://github.com/idanr1986/cuckoo-droid) CuckooDroid - Automated Android Malware Analysis with Cuckoo Sandbox.\n+ [docker-cuckoo](https://github.com/blacktop/docker-cuckoo) Cuckoo Sandbox Dockerfile\n+ [cuckooautoinstall](https://github.com/buguroo/cuckooautoinstall) Auto Installer Script for Cuckoo Sandbox\n+ [cuckooML](https://github.com/honeynet/cuckooml) CuckooML: Machine Learning for Cuckoo Sandbox\n+ [Panda-Sandbox](https://github.com/PowerLZY/Panda-Sandbox) Cuckoo python3 (Unfinished)\n+ [HaboMalHunter](https://github.com/Tencent/HaboMalHunter#readme_cn) HaboMalHunter is a sub-project of Habo Malware Analysis System\n+ [cuckoosegg](https://github.com/chrisante/cuckoosegg)\n\n#### 源码分析\n+ [cuckoo技术分析全景图](https://cloud.tencent.com/developer/article/1597020)\n+ [cuckoo沙箱源码分析上](https://bbs.pediy.com/thread-260038.htm)\n+ [cuckoo沙箱源码分析中](https://bbs.pediy.com/thread-260087.htm)\n+ [cuckoo沙箱源码分析后](https://bbs.pediy.com/thread-260252.htm)\n+ [腾讯哈勃Linux沙箱源码分析上](https://zhuanlan.zhihu.com/p/54756592)\n+ [腾讯哈勃Linux沙箱源码分析下](https://zhuanlan.zhihu.com/p/54756845)\n\n### 开源样本\n\n如果你想要获取更多的`恶意样本`请访问查询：\n\n**推荐：**\n\n-   [Blue Hexagon Open Dataset for Malware AnalysiS (BODMAS)](https://whyisyoung.github.io/BODMAS/)\n-   [EMBER](https://github.com/elastic/ember) - Endgame Malware BEnchmark for Research\n-   [Malware Training Sets: A machine learning dataset for everyone](http://marcoramilli.blogspot.cz/2016/12/malware-training-sets-machine-learning.html) ([data](https://github.com/marcoramilli/MalwareTrainingSets))\n-   [SoReL-20M](https://github.com/sophos-ai/SOREL-20M) - Sophos-ReversingLabs 20 Million dataset.\n-   [Virusshare](https://virusshare.com/)\n\n**其他：**\n\n+   [Samples of Security Related Dats](http://www.secrepo.com/)\n+   [DARPA Intrusion Detection Data Sets](https://www.ll.mit.edu/ideval/data/)\n+   [Stratosphere IPS Data Sets](https://stratosphereips.org/category/dataset.html)\n+   [Open Data Sets](http://csr.lanl.gov/data/)\n+   [Data Capture from National Security Agency](http://www.westpoint.edu/crc/SitePages/DataSets.aspx)\n+   [The ADFA Intrusion Detection Data Sets](https://www.unsw.adfa.edu.au/australian-centre-for-cyber-security/cybersecurity/ADFA-IDS-Datasets)\n+   [NSL-KDD Data Sets](https://github.com/defcom17/NSL_KDD)\n+   [Malicious URLs Data Sets](https://sysnet.ucsd.edu/projects/url)\n+   [Multi-Source Cyber-Security Events](http://csr.lanl.gov/data/cyber1/)\n+   [Malware Training Sets: A machine learning dataset for everyone](http://marcoramilli.blogspot.cz/2016/12/malware-training-sets-machine-learning.html)\n\n如果你想要获取更多的`良性样本`请在如下等网络自行爬取：\n\n-   [portablefreeware](http://www.portablefreeware.com/)\n-   [onlyfreewares](http://www.onlyfreewares.com/)\n-   [snapfiles](https://www.snapfiles.com/new/list-whatsnew.html)\n-   [downloadcrew](https://downloadcrew.com/)\n-   [chocolatey](https://chocolatey.org/)\n\n#### 项目结构更新\n  - [x] 整理工程目录打包lib：（common，core），Modules（辅助功能、虚拟机、处理、签名、机器学习模型检测）\n  - [x] 省略\\CWD目录：添加 analyzer、db、examples、Mal_sample、sample_data、storage、log等目录\n\n#### 最近更新\n\n+ 学习内容\n  - [x] [预训练TF-IDF模型加载优化 100s -> 2s](https://thiagomarzagao.com/2015/12/08/saving-TfidfVectorizer-without-pickles/)\n  - [ ] Linux沙箱及检测方案\n  - [ ] ATT&CK Navigator layer for Cuckoo's TTPs.pyattack\n  - [ ] 添加 《Dynamic Malware Analysis with Feature Engineering and Feature Learning》 动态分析检测模型\n  - [ ] 添加 MaliciousMacroBot（mmbot）office宏病毒检测方案\n\n+ 设计文档\n  + [x] 参考文献记录（设计依据）\n  + [x] 国内沙箱深度调研\n  + [x] 图标+起名\n\n+ 家族签名模块\n  - [x] [cuckoo 社区签名库](https://github.com/cuckoosandbox/community)\n  - [x] [cuckoo的行为签名](https://www.secpulse.com/archives/75180.html)\n  - [ ] 添加挖矿+使用自定义签名\n+ 机器学习模块\n  - [x] 数据集：kaggle microsoft 10000个软件、挖矿软件 6000个；\n  - [x] 报告显示内容：模型检测图展示、使用特征展示、预测威胁得分；\n  - [x] 静态检测引擎：string、malconv；\n  - [x] 动态检测引擎：API调用序列；\n  - [x] 定义基类Dectection、Instance等；\n  - [x] 添加Smaple——malware，200个json report样本；\n  - [ ] 添加 《Dynamic Malware Analysis with Feature Engineering and Feature Learning》 动态分析检测模型\n+ 后期需求\n  + [ ] 环境打包，Docker\\shells安装\n  + [ ] blog解析文档编写\n  + [ ] 虚拟机管理：libvirt+高并发虚拟机\n  + [ ] 沙箱内存管理：MemScrimper: Time- and Space-Efficient Storage of *Malware* Sandbox Memory Dumps （2018 DIVMA）\n  + [ ] 3.3.5 REST API(Cuckoo docs) wsgi应用程序\n#### 常见问题\n+ Machine * status gurumeditation\n  -  找到虚拟机安装目录下VBox.log日志文件\n  -  在日志文件中找到ProcessID, ```kill - 9 ProcessID```\n+ python 2/3 joblib.dump() 和 joblib.load()\n  - 不同python版本的pickle.dump()和pickle.load()是可以相互转换和支持的\n  - 在python3中，您应该使用较低的协议号来编写pickle数据 ```pickle.dump(your_object, your_file, protocol=2)```\n+ Pytorch Cpu 导入 Gpu 训练的模型\n  - `model.load(model_path, map_location='cpu')`\n+ Sphinx-readthedocs 开发文档自动生成\n  - `sphinx-quickstart`\n  - `sphinx-apidoc -o ./source ../Bold-Falcon`\n  - `python -m sphinx -T -E -b html -d _build/doctrees -D language=en . _build/html`\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "__init__.py",
    "content": "name = \"1111ScorecardBundle\"\n"
  },
  {
    "path": "_config.yml",
    "content": "theme: jekyll-theme-cayman\n"
  },
  {
    "path": "agent/agent.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2018 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport sys\nimport time\nimport socket\nimport string\nimport random\nimport platform\nimport subprocess\nimport ConfigParser\nfrom StringIO import StringIO\nfrom zipfile import ZipFile\nfrom SimpleXMLRPCServer import SimpleXMLRPCServer\n\nBIND_IP = \"0.0.0.0\"\nBIND_PORT = 8000\n\nSTATUS_INIT = 0x0001\nSTATUS_RUNNING = 0x0002\nSTATUS_COMPLETED = 0x0003\nSTATUS_FAILED = 0x0004\n\nclass Agent(object):\n    \"\"\"\n    Bold-Falcon agent, it runs inside guest.\n\n    :param system: platform\n    :param analyzer_path: analyzer path\n    :param int analyzer_pid: analyzer pid\n    :param error_message: None\n    :param current_status: STATUS_INIT = 0x0001,STATUS_RUNNING = 0x0002,STATUS_COMPLETED = 0x0003,STATUS_FAILED = 0x0004\n    :param analyzer_folder: upload analyzer folder\n    :param results_folder: results folder\n    \"\"\"\n\n    def __init__(self):\n\n        self.system = platform.system().lower()\n        self.analyzer_path = \"\"\n        self.analyzer_pid = 0\n\n        self.error_message = None\n        self.current_status = STATUS_INIT\n        self.analyzer_folder = \"\"\n        self.results_folder = \"\"\n\n    def _initialize(self):\n        '''\n        initialize agent.py\n        '''\n        if not self.analyzer_folder:\n            random.seed(time.time())\n            container = \"\".join(random.choice(string.ascii_lowercase) for x in range(random.randint(5, 10)))\n\n            if self.system == \"windows\":\n                system_drive = os.environ[\"SYSTEMDRIVE\"] + os.sep\n                self.analyzer_folder = os.path.join(system_drive, container)\n            elif self.system == \"linux\" or self.system == \"darwin\":\n                self.analyzer_folder = \\\n                    os.path.join(os.environ.get(\"HOME\", os.environ.get(\"PWD\", \"/tmp\")), container)\n            else:\n                self.error_message = \"Unable to identify operating system\"\n                return False\n\n            try:\n                os.makedirs(self.analyzer_folder)\n            except OSError as e:\n                self.error_message = e\n                return False\n\n        return True\n\n    def get_status(self):\n        \"\"\"\n        Get current status.\n\n        :return: status.\n        \"\"\"\n        return self.current_status\n\n    def get_error(self):\n        \"\"\"\n        Get error message\n\n        :return: error message.\n        \"\"\"\n        return str(self.error_message)\n\n    def add_malware(self, data, name):\n        \"\"\"\n        Get analysis data.\n\n        :param data: analysis data.\n        :param name: file name.\n        :return: operation status.\n        \"\"\"\n        data = data.data\n\n        if self.system == \"windows\":\n            root = os.environ[\"TEMP\"]\n        elif self.system == \"linux\" or self.system == \"darwin\":\n            root = \"/tmp\"\n        else:\n            self.error_message = \\\n                \"Unable to write malware to disk because the operating \" \\\n                \"system could not be identified.\"\n            return False\n\n        file_path = os.path.join(root, name)\n\n        try:\n            with open(file_path, \"wb\") as sample:\n                sample.write(data)\n        except IOError as e:\n            self.error_message = \\\n                \"Unable to write sample to disk: {0}\".format(e)\n            return False\n\n        return True\n\n    def add_config(self, options):\n        \"\"\"\n        Creates analysis.conf file from current analysis options.\n\n        :param options: current configuration options, dict format.\n        :return: operation status.\n        \"\"\"\n        if not isinstance(options, dict):\n            return False\n\n        config = ConfigParser.RawConfigParser()\n        config.add_section(\"analysis\")\n\n        try:\n            for key, value in options.items():\n                # Options can be UTF encoded.\n                if isinstance(value, basestring):\n                    try:\n                        value = value.encode(\"utf-8\")\n                    except UnicodeEncodeError:\n                        pass\n\n                config.set(\"analysis\", key, value)\n\n            config_path = os.path.join(self.analyzer_folder, \"analysis.conf\")\n\n            with open(config_path, \"wb\") as config_file:\n                config.write(config_file)\n        except Exception as e:\n            self.error_message = e\n            return False\n\n        return True\n\n    def add_analyzer(self, data):\n        \"\"\"Add analyzer.\n\n        :param data: analyzer data.\n        :return: operation status.\n        \"\"\"\n        data = data.data\n\n        if not self._initialize():\n            return False\n\n        try:\n            zip_data = StringIO()\n            zip_data.write(data)\n\n            with ZipFile(zip_data, \"r\") as archive:\n                archive.extractall(self.analyzer_folder)\n        finally:\n            zip_data.close()\n\n        self.analyzer_path = os.path.join(self.analyzer_folder, \"analyzer.py\")\n        return True\n\n    def execute(self):\n        \"\"\"\n        Execute analysis.\n\n        :return: analyzer PID.\n        \"\"\"\n        if not self.analyzer_path or not os.path.exists(self.analyzer_path):\n            return False\n\n        try:\n            proc = subprocess.Popen([sys.executable, self.analyzer_path],\n                                    cwd=os.path.dirname(self.analyzer_path))\n            self.analyzer_pid = proc.pid\n        except OSError as e:\n            self.error_message = e\n            return False\n\n        self.current_status = STATUS_RUNNING\n        return self.analyzer_pid\n\n    def complete(self, success=True, error=\"\", results=\"\"):\n        \"\"\"\n        Complete analysis.\n\n        :param success: success status.\n        :param error: error status.\n        \"\"\"\n        if success:\n            self.current_status = STATUS_COMPLETED\n        else:\n            self.current_status = STATUS_FAILED\n\n            if error:\n                self.error_message = error\n\n        self.results_folder = results\n        return True\n\nif __name__ == \"__main__\":\n    try:\n        if not BIND_IP:\n            BIND_IP = socket.gethostbyname(socket.gethostname())\n\n        print(\"[+] Starting agent on %s:%s ...\" % (BIND_IP, BIND_PORT))\n\n        # Disable DNS lookup, by Scott D.\n        def FakeGetFQDN(name=\"\"):\n            return name\n\n        socket.getfqdn = FakeGetFQDN\n\n        server = SimpleXMLRPCServer((BIND_IP, BIND_PORT), allow_none=True)\n        server.register_instance(Agent())\n        server.serve_forever()\n    except KeyboardInterrupt:\n        server.shutdown()\n"
  },
  {
    "path": "agent/agent.sh",
    "content": "#!/bin/bash\n# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nFILEPATH=$(readlink -f ${0%})\nFILEPATHDIR=$(dirname $FILEPATH)\n\ncd /tmp/\npython $FILEPATHDIR/agent.py >$FILEPATHDIR/agent.stdout 2>$FILEPATHDIR/agent.stderr &\n\n"
  },
  {
    "path": "analyzer/android/__init__.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n"
  },
  {
    "path": "analyzer/android/analyzer.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nimport os\nimport logging\nimport pkgutil\nimport shutil\nimport sys\nimport xmlrpclib\nimport time\n\nfrom lib.core.packages import choose_package\nfrom lib.common.exceptions import CuckooError, CuckooPackageError\nfrom lib.common.abstracts import Package, Auxiliary\nfrom lib.common.constants import PATHS\nfrom lib.core.config import Config\nfrom lib.core.startup import init_logging\nfrom modules import auxiliary\n\nlogging.disable(level=logging.DEBUG)\nlog = logging.getLogger()\n\nclass Analyzer(object):\n    def __init__(self):\n        self.config = None\n        self.target = None\n\n    def complete(self):\n        \"\"\"End analysis.\"\"\"\n        log.info(\"Analysis completed\")\n\n    def get_options(self):\n        \"\"\"Get analysis options.\n        @return: options dict.\n        \"\"\"\n        # The analysis package can be provided with some options in the\n        # following format:\n        #   option1=value1,option2=value2,option3=value3\n        #\n        # Here we parse such options and provide a dictionary that will be made\n        # accessible to the analysis package.\n        options = {}\n        if self.config.options:\n            try:\n                # Split the options by comma.\n                fields = self.config.options.strip().split(\",\")\n            except ValueError as e:\n                log.warning(\"Failed parsing the options: %s\", e)\n            else:\n                for field in fields:\n                    # Split the name and the value of the option.\n                    try:\n                        key, value = field.strip().split(\"=\")\n                    except ValueError as e:\n                        log.warning(\"Failed parsing option (%s): %s\", field, e)\n                    else:\n                        # If the parsing went good, we add the option to the\n                        # dictionary.\n                        options[key.strip()] = value.strip()\n\n        return options\n\n    def prepare(self):\n        # Initialize logging.\n        init_logging()\n\n        # Parse the analysis configuration file generated by the agent.\n        self.config = Config(cfg=\"analysis.conf\")\n\n        # We update the target according to its category. If it's a file, then\n        # we store the path.\n        if self.config.category == \"file\":\n            self.target = os.path.join(\"/data/local/tmp\", str(self.config.file_name))\n            shutil.copyfile(\"config/hooks.json\", \"/data/local/tmp/hooks.json\")\n        # If it's a URL, well.. we store the URL.\n        else:\n            self.target = self.config.target\n\n    def run(self):\n        self.prepare()\n\n        log.info(\"Starting analyzer from: {0}\".format(os.getcwd()))\n        log.info(\"Storing results at: {0}\".format(PATHS[\"root\"]))\n        log.info(\"Target is: {0}\".format(self.target))\n\n        # If no analysis package was specified at submission, we try to select\n        # one automatically.\n        if not self.config.package:\n            log.info(\"No analysis package specified, trying to detect it automagically\")\n            # If the analysis target is a file, we choose the package according\n            # to the file format.\n            if self.config.category == \"file\":\n                package = choose_package(self.config.file_type, self.config.file_name)\n            # If it's an URL, we'll just use the default Internet Explorer\n            # package.\n            else:\n                package = \"default_browser\"\n\n            # If we weren't able to automatically determine the proper package,\n            # we need to abort the analysis.\n            if not package:\n                raise CuckooError(\"No valid package available for file type: {0}\".format(self.config.file_type))\n\n            log.info(\"Automatically selected analysis package \\\"%s\\\"\", package)\n        # Otherwise just select the specified package.\n        else:\n            package = self.config.package\n\n        # Generate the package path.\n        package_name = \"modules.packages.%s\" % package\n\n        # Try to import the analysis package.\n        try:\n            __import__(package_name, globals(), locals(), [\"dummy\"], -1)\n        # If it fails, we need to abort the analysis.\n        except ImportError:\n            raise CuckooError(\"Unable to import package \\\"{0}\\\", does not exist.\".format(package_name))\n\n        # Initialize the package parent abstract.\n        Package()\n\n        # Enumerate the abstract's subclasses.\n        try:\n            package_class = Package.__subclasses__()[0]\n        except IndexError as e:\n            raise CuckooError(\"Unable to select package class (package={0}): {1}\".format(package_name, e))\n\n        # Initialize the analysis package.\n        pack = package_class(self.get_options())\n\n        # Initialize Auxiliary modules\n        Auxiliary()\n        prefix = auxiliary.__name__ + \".\"\n        for loader, name, ispkg in pkgutil.iter_modules(auxiliary.__path__, prefix):\n            if ispkg:\n                continue\n\n            # Import the auxiliary module.\n            try:\n                __import__(name, globals(), locals(), [\"dummy\"], -1)\n            except ImportError as e:\n                log.warning(\"Unable to import the auxiliary module \"\n                            \"\\\"%s\\\": %s\", name, e)\n\n        # Walk through the available auxiliary modules.\n        aux_enabled = []\n        for module in Auxiliary.__subclasses__():\n            # Try to start the auxiliary module.\n            try:\n                aux = module()\n                aux.start()\n            except (NotImplementedError, AttributeError):\n                log.warning(\"Auxiliary module %s was not implemented\",\n                            aux.__class__.__name__)\n                continue\n            except Exception as e:\n                log.warning(\"Cannot execute auxiliary module %s: %s\",\n                            aux.__class__.__name__, e)\n                continue\n            finally:\n                log.info(\"Started auxiliary module %s\",\n                         aux.__class__.__name__)\n                aux_enabled.append(aux)\n\n        # Start analysis package. If for any reason, the execution of the\n        # analysis package fails, we have to abort the analysis.\n        try:\n            pack.start(self.target)\n        except NotImplementedError:\n            raise CuckooError(\"The package \\\"{0}\\\" doesn't contain a run \"\n                              \"function.\".format(package_name))\n        except CuckooPackageError as e:\n            raise CuckooError(\"The package \\\"{0}\\\" start function raised an \"\n                              \"error: {1}\".format(package_name, e))\n        except Exception as e:\n            raise CuckooError(\"The package \\\"{0}\\\" start function encountered \"\n                              \"an unhandled exception: \"\n                              \"{1}\".format(package_name, e))\n\n        time_counter = 0\n        while True:\n            time_counter += 1\n            if time_counter == int(self.config.timeout):\n                log.info(\"Analysis timeout hit, terminating analysis\")\n                break\n\n            try:\n                # The analysis packages are provided with a function that\n                # is executed at every loop's iteration. If such function\n                # returns False, it means that it requested the analysis\n                # to be terminate.\n                if not pack.check():\n                    log.info(\"The analysis package requested the \"\n                             \"termination of the analysis...\")\n                    break\n\n                # If the check() function of the package raised some exception\n                # we don't care, we can still proceed with the analysis but we\n                # throw a warning.\n            except Exception as e:\n                log.warning(\"The package \\\"%s\\\" check function raised \"\n                            \"an exception: %s\", package_name, e)\n            finally:\n                # Zzz.\n                time.sleep(1)\n\n        try:\n            # Before shutting down the analysis, the package can perform some\n            # final operations through the finish() function.\n            pack.finish()\n        except Exception as e:\n            log.warning(\"The package \\\"%s\\\" finish function raised an \"\n                        \"exception: %s\", package_name, e)\n\n        # Terminate the Auxiliary modules.\n        for aux in aux_enabled:\n            try:\n                aux.stop()\n            except (NotImplementedError, AttributeError):\n                continue\n            except Exception as e:\n                log.warning(\"Cannot terminate auxiliary module %s: %s\",\n                            aux.__class__.__name__, e)\n\n        # Let's invoke the completion procedure.\n        self.complete()\n        return True\n\nif __name__ == \"__main__\":\n    success = False\n    error = \"\"\n\n    try:\n        # Initialize the main analyzer class.\n        analyzer = Analyzer()\n        # Run it and wait for the response.\n        success = analyzer.run()\n    # This is not likely to happen.\n    except KeyboardInterrupt:\n        error = \"Keyboard Interrupt\"\n    # If the analysis process encountered a critical error, it will raise a\n    # CuckooError exception, which will force the termination of the analysis\n    # weill notify the agent of the failure. Also catched unexpected\n    # exceptions.\n    except Exception as e:\n        # Store the error.\n        error = str(e)\n\n        # Just to be paranoid.\n        if len(log.handlers) > 0:\n            log.critical(error)\n        else:\n            sys.stderr.write(\"{0}\\n\".format(e))\n    # Once the analysis is completed or terminated for any reason, we report\n    # back to the agent, notifying that it can report back to the host.\n    finally:\n        # Establish connection with the agent XMLRPC server.\n        server = xmlrpclib.Server(\"http://127.0.0.1:8000\")\n        server.complete(success, error, PATHS[\"root\"])\n"
  },
  {
    "path": "analyzer/android/config/hooks.json",
    "content": "{\n    \"hookConfigs\": [\n        {\n            \"class_name\": \"android.telephony.TelephonyManager\", \n            \"method\": \"getDeviceId\", \n            \"thisObject\": false, \n            \"type\": \"fingerprint\"\n        }, \n        {\n            \"class_name\": \"android.telephony.TelephonyManager\", \n            \"method\": \"getSubscriberId\", \n            \"thisObject\": false, \n            \"type\": \"fingerprint\"\n        }, \n        {\n            \"class_name\": \"android.telephony.TelephonyManager\", \n            \"method\": \"getLine1Number\", \n            \"thisObject\": false, \n            \"type\": \"fingerprint\"\n        }, \n        {\n            \"class_name\": \"android.telephony.TelephonyManager\", \n            \"method\": \"getNetworkOperator\", \n            \"thisObject\": false, \n            \"type\": \"fingerprint\"\n        }, \n        {\n            \"class_name\": \"android.telephony.TelephonyManager\", \n            \"method\": \"getNetworkOperatorName\", \n            \"thisObject\": false, \n            \"type\": \"fingerprint\"\n        }, \n        {\n            \"class_name\": \"android.telephony.TelephonyManager\", \n            \"method\": \"getSimOperatorName\", \n            \"thisObject\": false, \n            \"type\": \"fingerprint\"\n        }, \n        {\n            \"class_name\": \"android.net.wifi.WifiInfo\", \n            \"method\": \"getMacAddress\", \n            \"thisObject\": false, \n            \"type\": \"fingerprint\"\n        }, \n        {\n            \"class_name\": \"android.telephony.TelephonyManager\", \n            \"method\": \"getSimCountryIso\", \n            \"thisObject\": false, \n            \"type\": \"fingerprint\"\n        }, \n        {\n            \"class_name\": \"android.telephony.TelephonyManager\", \n            \"method\": \"getSimSerialNumber\", \n            \"thisObject\": false, \n            \"type\": \"fingerprint\"\n        }, \n        {\n            \"class_name\": \"android.telephony.TelephonyManager\", \n            \"method\": \"getNetworkCountryIso\", \n            \"thisObject\": false, \n            \"type\": \"fingerprint\"\n        }, \n        {\n            \"class_name\": \"android.telephony.TelephonyManager\", \n            \"method\": \"getDeviceSoftwareVersion\", \n            \"thisObject\": false, \n            \"type\": \"fingerprint\"\n        }, \n        {\n            \"class_name\": \"android.os.Debug\", \n            \"method\": \"isDebuggerConnected\", \n            \"thisObject\": false, \n            \"type\": \"fingerprint\"\n        }, \n        {\n            \"class_name\": \"android.app.SharedPreferencesImpl$EditorImpl\", \n            \"method\": \"putString\", \n            \"thisObject\": false, \n            \"type\": \"globals\"\n        }, \n        {\n            \"class_name\": \"android.app.SharedPreferencesImpl$EditorImpl\", \n            \"method\": \"putBoolean\", \n            \"thisObject\": false, \n            \"type\": \"globals\"\n        }, \n        {\n            \"class_name\": \"android.app.SharedPreferencesImpl$EditorImpl\", \n            \"method\": \"putInt\", \n            \"thisObject\": false, \n            \"type\": \"globals\"\n        }, \n        {\n            \"class_name\": \"android.app.SharedPreferencesImpl$EditorImpl\", \n            \"method\": \"putLong\", \n            \"thisObject\": false, \n            \"type\": \"globals\"\n        }, \n        {\n            \"class_name\": \"android.app.SharedPreferencesImpl$EditorImpl\", \n            \"method\": \"putFloat\", \n            \"thisObject\": false, \n            \"type\": \"globals\"\n        }, \n        {\n            \"class_name\": \"android.content.ContentValues\", \n            \"method\": \"put\", \n            \"thisObject\": false, \n            \"type\": \"globals\"\n        }, \n        {\n            \"class_name\": \"java.net.URL\", \n            \"method\": \"openConnection\", \n            \"thisObject\": true, \n            \"type\": \"network\"\n        }, \n        {\n            \"class_name\": \"org.apache.http.impl.client.AbstractHttpClient\", \n            \"method\": \"execute\", \n            \"thisObject\": false, \n            \"type\": \"network\"\n        }, \n        {\n            \"class_name\": \"android.app.ContextImpl\", \n            \"method\": \"registerReceiver\", \n            \"thisObject\": false, \n            \"type\": \"binder\"\n        }, \n        {\n            \"class_name\": \"android.app.ActivityThread\", \n            \"method\": \"handleReceiver\", \n            \"thisObject\": false, \n            \"type\": \"binder\"\n        }, \n        {\n            \"class_name\": \"android.app.Activity\", \n            \"method\": \"startActivity\", \n            \"thisObject\": false, \n            \"type\": \"binder\"\n        }, \n        {\n            \"class_name\": \"dalvik.system.BaseDexClassLoader\", \n            \"method\": \"findResource\", \n            \"thisObject\": false, \n            \"type\": \"dex\"\n        }, \n        {\n            \"class_name\": \"dalvik.system.BaseDexClassLoader\", \n            \"method\": \"findLibrary\", \n            \"thisObject\": false, \n            \"type\": \"dex\"\n        }, \n        {\n            \"class_name\": \"dalvik.system.DexFile\", \n            \"method\": \"loadDex\", \n            \"thisObject\": false, \n            \"type\": \"dex\"\n        }, \n        {\n            \"class_name\": \"dalvik.system.DexClassLoader\", \n            \"method\": null, \n            \"thisObject\": false, \n            \"type\": \"dex\"\n        }, \n        {\n            \"class_name\": \"dalvik.system.BaseDexClassLoader\", \n            \"method\": \"findResources\", \n            \"thisObject\": false, \n            \"type\": \"dex\"\n        }, \n        {\n            \"class_name\": \"dalvik.system.DexFile\", \n            \"method\": \"loadClass\", \n            \"thisObject\": false, \n            \"type\": \"dex\"\n        }, \n        {\n            \"class_name\": \"dalvik.system.DexFile\", \n            \"method\": null, \n            \"thisObject\": false, \n            \"type\": \"dex\"\n        }, \n        {\n            \"class_name\": \"dalvik.system.PathClassLoader\", \n            \"method\": null, \n            \"thisObject\": false, \n            \"type\": \"dex\"\n        }, \n        {\n            \"class_name\": \"java.lang.reflect.Method\", \n            \"method\": \"invoke\", \n            \"thisObject\": false, \n            \"type\": \"reflection\"\n        }, \n        {\n            \"class_name\": \"javax.crypto.spec.SecretKeySpec\", \n            \"method\": null, \n            \"thisObject\": false, \n            \"type\": \"crypto\"\n        }, \n        {\n            \"class_name\": \"javax.crypto.Cipher\", \n            \"method\": \"doFinal\", \n            \"thisObject\": true, \n            \"type\": \"crypto\"\n        }, \n        {\n            \"class_name\": \"javax.crypto.Mac\", \n            \"method\": \"doFinal\", \n            \"thisObject\": false, \n            \"type\": \"crypto\"\n        }, \n        {\n            \"class_name\": \"android.app.ApplicationPackageManager\", \n            \"method\": \"setComponentEnabledSetting\", \n            \"thisObject\": false, \n            \"type\": \"generic\"\n        }, \n        {\n            \"class_name\": \"android.app.NotificationManager\", \n            \"method\": \"notify\", \n            \"thisObject\": false, \n            \"type\": \"generic\"\n        }, \n        {\n            \"class_name\": \"android.util.Base64\", \n            \"method\": \"decode\", \n            \"thisObject\": false, \n            \"type\": \"generic\"\n        }, \n        {\n            \"class_name\": \"android.telephony.TelephonyManager\", \n            \"method\": \"listen\", \n            \"thisObject\": false, \n            \"type\": \"generic\"\n        }, \n        {\n            \"class_name\": \"android.util.Base64\", \n            \"method\": \"encode\", \n            \"thisObject\": false, \n            \"type\": \"generic\"\n        }, \n        {\n            \"class_name\": \"android.util.Base64\", \n            \"method\": \"encodeToString\", \n            \"thisObject\": false, \n            \"type\": \"generic\"\n        }, \n        {\n            \"class_name\": \"android.net.ConnectivityManager\", \n            \"method\": \"setMobileDataEnabled\", \n            \"thisObject\": false, \n            \"type\": \"generic\"\n        }, \n        {\n            \"class_name\": \"android.content.BroadcastReceiver\", \n            \"method\": \"abortBroadcast\", \n            \"thisObject\": false, \n            \"type\": \"generic\"\n        }, \n        {\n            \"class_name\": \"android.telephony.SmsManager\", \n            \"method\": \"sendTextMessage\", \n            \"thisObject\": false, \n            \"type\": \"sms\"\n        }, \n        {\n            \"class_name\": \"android.telephony.SmsManager\", \n            \"method\": \"sendMultipartTextMessage\", \n            \"thisObject\": false, \n            \"type\": \"sms\"\n        }, \n        {\n            \"class_name\": \"java.lang.Runtime\", \n            \"method\": \"exec\", \n            \"thisObject\": false, \n            \"type\": \"runtime\"\n        }, \n        {\n            \"class_name\": \"java.lang.ProcessBuilder\", \n            \"method\": \"start\", \n            \"thisObject\": true, \n            \"type\": \"runtime\"\n        }, \n        {\n            \"class_name\": \"java.io.FileOutputStream\", \n            \"method\": \"write\", \n            \"thisObject\": false, \n            \"type\": \"runtime\"\n        }, \n        {\n            \"class_name\": \"java.io.FileInputStream\", \n            \"method\": \"read\", \n            \"thisObject\": false, \n            \"type\": \"runtime\"\n        }, \n        {\n            \"class_name\": \"android.app.ActivityManager\", \n            \"method\": \"killBackgroundProcesses\", \n            \"thisObject\": false, \n            \"type\": \"runtime\"\n        }, \n        {\n            \"class_name\": \"android.os.Process\", \n            \"method\": \"killProcess\", \n            \"thisObject\": false, \n            \"type\": \"runtime\"\n        }, \n        {\n            \"class_name\": \"android.content.ContentResolver\", \n            \"method\": \"query\", \n            \"thisObject\": false, \n            \"type\": \"content\"\n        }, \n        {\n            \"class_name\": \"android.content.ContentResolver\", \n            \"method\": \"registerContentObserver\", \n            \"thisObject\": false, \n            \"type\": \"content\"\n        }, \n        {\n            \"class_name\": \"android.content.ContentResolver\", \n            \"method\": \"insert\", \n            \"thisObject\": false, \n            \"type\": \"content\"\n        }, \n        {\n            \"class_name\": \"android.accounts.AccountManager\", \n            \"method\": \"getAccountsByType\", \n            \"thisObject\": false, \n            \"type\": \"content\"\n        }, \n        {\n            \"class_name\": \"android.accounts.AccountManager\", \n            \"method\": \"getAccounts\", \n            \"thisObject\": false, \n            \"type\": \"content\"\n        }, \n        {\n            \"class_name\": \"android.location.Location\", \n            \"method\": \"getLatitude\", \n            \"thisObject\": false, \n            \"type\": \"content\"\n        }, \n        {\n            \"class_name\": \"android.location.Location\", \n            \"method\": \"getLongitude\", \n            \"thisObject\": false, \n            \"type\": \"content\"\n        }, \n        {\n            \"class_name\": \"android.content.ContentResolver\", \n            \"method\": \"delete\", \n            \"thisObject\": false, \n            \"type\": \"content\"\n        }, \n        {\n            \"class_name\": \"android.media.AudioRecord\", \n            \"method\": \"startRecording\", \n            \"thisObject\": false, \n            \"type\": \"content\"\n        }, \n        {\n            \"class_name\": \"android.media.MediaRecorder\", \n            \"method\": \"start\", \n            \"thisObject\": false, \n            \"type\": \"content\"\n        }, \n        {\n            \"class_name\": \"android.os.SystemProperties\", \n            \"method\": \"get\", \n            \"thisObject\": false, \n            \"type\": \"content\"\n        }, \n        {\n            \"class_name\": \"android.app.ApplicationPackageManager\", \n            \"method\": \"getInstalledPackages\", \n            \"thisObject\": false, \n            \"type\": \"content\"\n        }, \n        {\n            \"class_name\": \"libcore.io.IoBridge\", \n            \"method\": \"open\", \n            \"thisObject\": false, \n            \"type\": \"file\"\n        }\n    ], \n    \"trace\": false\n}"
  },
  {
    "path": "analyzer/android/lib/__init__.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n"
  },
  {
    "path": "analyzer/android/lib/api/__init__.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n"
  },
  {
    "path": "analyzer/android/lib/api/adb.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nimport logging\nimport os\nimport subprocess\n\nfrom lib.common.utils import send_file\n\nlog = logging.getLogger(__name__)\n\ndef install_sample(path):\n    \"\"\"Install the sample on the emulator via adb\"\"\"\n    log.info(\"Installing sample in the device: %s\", path)\n    try:\n        args = [\"/system/bin/sh\", \"/system/bin/pm\", \"install\", path]\n        output = subprocess.check_output(args)\n    except subprocess.CalledProcessError as e:\n        log.error(\"Error installing sample: %r\", e)\n        return\n\n    log.info(\"Installed sample: %r\", output)\n\ndef execute_sample(package, activity):\n    \"\"\"Execute the sample on the emulator via adb\"\"\"\n    try:\n        package_activity = \"%s/%s\" % (package, activity)\n        args = [\n            \"/system/bin/sh\", \"/system/bin/am\", \"start\",\n            \"-n\", package_activity,\n        ]\n        output = subprocess.check_output(args)\n    except subprocess.CalledProcessError as e:\n        log.error(\"Error executing package activity: %r\", e)\n        return\n\n    log.info(\"Executed package activity: %r\", output)\n\ndef dump_droidmon_logs(package):\n    xposed_logs = \"/data/data/de.robv.android.xposed.installer/log/error.log\"\n    if not os.path.exists(xposed_logs):\n        log.info(\"Could not find any Xposed logs, skipping droidmon logs.\")\n        return\n\n    tag = \"Droidmon-apimonitor-%s\" % package\n    tag_error = \"Droidmon-shell-%s\" % package\n\n    log_xposed, log_success, log_error = [], [], []\n\n    for line in open(xposed_logs, \"rb\"):\n        if tag in line:\n            log_success.append(line.split(\":\", 1)[1])\n\n        if tag_error in line:\n            log_error.append(line.split(\":\", 1)[1])\n\n        log_xposed.append(line)\n\n    send_file(\"logs/xposed.log\", \"\\n\".join(log_xposed))\n    send_file(\"logs/droidmon.log\", \"\\n\".join(log_success))\n    send_file(\"logs/droidmon_error.log\", \"\\n\".join(log_error))\n\ndef execute_browser(url):\n    \"\"\"Start URL intent on the emulator.\"\"\"\n    try:\n        args = [\n            \"/system/bin/sh\", \"/system/bin/am\", \"start\",\n            \"-a\", \"android.intent.action.VIEW\",\n            \"-d\", url,\n        ]\n        output = subprocess.check_output(args)\n    except subprocess.CalledProcessError as e:\n        log.error(\"Error starting browser intent: %r\", e)\n        return\n\n    log.info(\"Intent returned: %r\", output)\n\ndef take_screenshot(filename):\n    try:\n        subprocess.check_output([\"/system/bin/screencap\", \"-p\",\n                                 \"/sdcard/%s\" % filename])\n    except subprocess.CalledProcessError as e:\n        log.error(\"Error creating screenshot: %r\", e)\n        return\n\n    return \"/sdcard/%s\" % filename\n"
  },
  {
    "path": "analyzer/android/lib/api/screenshot.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nimport math\nimport filecmp\n\ntry:\n    import ImageChops\n    from PIL import Image\n    HAVE_PIL = True\nexcept:\n    try:\n        from PIL import ImageChops\n        from PIL import Image\n        HAVE_PIL = True\n    except:\n        HAVE_PIL = False\n\nclass Screenshot:\n    \"\"\"Get screenshots.\"\"\"\n\n    def have_pil(self):\n        \"\"\"Is Python Image Library installed?\n        @return: installed status.\n        \"\"\"\n        return HAVE_PIL\n\n    def equal_old(self, img1, img2):\n        \"\"\"Compares two screenshots using Root-Mean-Square Difference (RMS).\n        @param img1: screenshot to compare.\n        @param img2: screenshot to compare.\n        @return: equal status.\n        \"\"\"\n        if not HAVE_PIL:\n            return None\n        image1 = Image.open(img1)\n        image2 = Image.open(img2)\n        # To get a measure of how similar two images are, we use\n        # root-mean-square (RMS). If the images are exactly identical,\n        # this value is zero.\n        diff = ImageChops.difference(image1, image2)\n        h = diff.histogram()\n        sq = (value*((idx % 256)**2) for idx, value in enumerate(h))\n        sum_of_squares = sum(sq)\n        rms = math.sqrt(sum_of_squares/float(image1.size[0] * image2.size[1]))\n\n        # Might need to tweak the threshold.\n        return rms < 8\n\n    def equal(self, img1, img2):\n        return filecmp.cmp(img1, img2)\n"
  },
  {
    "path": "analyzer/android/lib/common/__init__.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n"
  },
  {
    "path": "analyzer/android/lib/common/abstracts.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nclass Package(object):\n    \"\"\"Base abstact analysis package.\"\"\"\n\n    def __init__(self, options={}):\n        \"\"\"@param options: options dict.\"\"\"\n        self.options = options\n        self.pids = []\n\n    def set_pids(self, pids):\n        \"\"\"Update list of monitored PIDs in the package context.\n        @param pids: list of pids.\n        \"\"\"\n        self.pids = pids\n\n    def start(self):\n        \"\"\"Run analysis packege.\n        @param path: sample path.\n        @raise NotImplementedError: this method is abstract.\n        \"\"\"\n        raise NotImplementedError\n\n    def check(self):\n        \"\"\"Check.\n        @raise NotImplementedError: this method is abstract.\n        \"\"\"\n        raise NotImplementedError\n\n    def finish(self):\n        \"\"\"Finish run.\n        @raise NotImplementedError: this method is abstract.\n        \"\"\"\n        raise NotImplementedError\n\nclass Auxiliary(object):\n    pass\n"
  },
  {
    "path": "analyzer/android/lib/common/constants.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nimport os\nimport string\nimport random\n\ndef _rand_string(a, b):\n    return \"\".join(random.choice(string.ascii_lowercase) for x in xrange(random.randint(a, b)))\n\nROOT = os.path.join(\"/data/local/tmp\", _rand_string(6, 10))\n\nPATHS = {\n    \"root\"   : ROOT,\n    \"logs\"   : os.path.join(ROOT, \"logs\"),\n    \"files\"  : os.path.join(ROOT, \"files\"),\n    \"shots\"  : os.path.join(ROOT, \"shots\"),\n    \"memory\" : os.path.join(ROOT, \"memory\"),\n    \"drop\"   : os.path.join(ROOT, \"drop\")\n}\n"
  },
  {
    "path": "analyzer/android/lib/common/exceptions.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nclass CuckooError(Exception):\n    pass\n\nclass CuckooPackageError(Exception):\n    pass\n"
  },
  {
    "path": "analyzer/android/lib/common/results.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nimport logging\nimport socket\nimport time\n\nfrom lib.core.config import Config\n\nlog = logging.getLogger(__name__)\n\nBUFSIZE = 1024*1024\n\ndef upload_to_host(file_path, dump_path):\n    nc = infd = None\n    try:\n        nc = NetlogFile(dump_path)\n\n        infd = open(file_path, \"rb\")\n        buf = infd.read(BUFSIZE)\n        while buf:\n            nc.send(buf, retry=False)\n            buf = infd.read(BUFSIZE)\n    except Exception as e:\n        log.error(\"Exception uploading file %s to host: %s\", file_path, e)\n    finally:\n        if infd:\n            infd.close()\n        if nc:\n            nc.close()\n\nclass NetlogConnection(object):\n    def __init__(self, proto=\"\"):\n        config = Config(cfg=\"analysis.conf\")\n        self.hostip, self.hostport = config.ip, config.port\n        self.sock = None\n        self.proto = proto\n\n    def connect(self):\n        # Try to connect as quickly as possible. Just sort of force it to\n        # connect with a short timeout.\n        while not self.sock:\n            try:\n                s = socket.create_connection((self.hostip, self.hostport), 0.1)\n                s.sendall(self.proto)\n            except socket.error:\n                time.sleep(0.1)\n                continue\n\n            self.sock = s\n\n    def send(self, data, retry=True):\n        if not self.sock:\n            self.connect()\n\n        try:\n            self.sock.sendall(data)\n        except socket.error as e:\n            if retry:\n                self.connect()\n                self.send(data, retry=False)\n            else:\n                raise\n        except Exception as e:\n            log.error(\"Unhandled exception in NetlogConnection: %s\", str(e))\n            # We really have nowhere to log this, if the netlog connection\n            # does not work, we can assume that any logging won't work either.\n            # So we just fail silently.\n            self.close()\n\n    def close(self):\n        try:\n            self.sock.close()\n        except Exception:\n            pass\n\nclass NetlogFile(NetlogConnection):\n    def __init__(self, filepath):\n        self.filepath = filepath\n        NetlogConnection.__init__(self, proto=\"FILE\\n{0}\\n\".format(self.filepath))\n        self.connect()\n\nclass NetlogHandler(logging.Handler, NetlogConnection):\n    def __init__(self):\n        logging.Handler.__init__(self)\n        NetlogConnection.__init__(self, proto=\"LOG\\n\")\n        self.connect()\n\n    def emit(self, record):\n        msg = self.format(record)\n        self.send(\"{0}\\n\".format(msg))\n"
  },
  {
    "path": "analyzer/android/lib/common/utils.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nfrom lib.common.results import NetlogFile\n\ndef send_file(name, data):\n    \"\"\"Send file to result server\"\"\"\n    nf = NetlogFile(name)\n    nf.sock.sendall(data)\n    nf.close()\n"
  },
  {
    "path": "analyzer/android/lib/core/__init__.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n"
  },
  {
    "path": "analyzer/android/lib/core/config.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nimport ConfigParser\n\nclass Config:\n    def __init__(self, cfg):\n        \"\"\"@param cfg: configuration file.\"\"\"\n        config = ConfigParser.ConfigParser(allow_no_value=True)\n        config.read(cfg)\n\n        for section in config.sections():\n            for name, raw_value in config.items(section):\n                try:\n                    value = config.getboolean(section, name)\n                except ValueError:\n                    try:\n                        value = config.getint(section, name)\n                    except ValueError:\n                        value = config.get(section, name)\n\n                setattr(self, name, value)\n"
  },
  {
    "path": "analyzer/android/lib/core/packages.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\ndef choose_package(file_type, file_name):\n    \"\"\"Choose analysis package due to file type and file extension.\n    @param file_type: file type.\n    @return: package or None.\n    \"\"\"\n    if not file_type:\n        return None\n\n    file_type = file_type.lower()\n    file_name = file_name.lower()\n\n    if \"apk\" in file_name:\n        return \"apk\"\n    elif \"zip\" in file_type:\n        return \"apk\"\n    # elif \"DEX\" in file_type:\n    #    return \"dex\"\n    else:\n        return \"apk\"\n"
  },
  {
    "path": "analyzer/android/lib/core/startup.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nimport os\nimport logging\n\nfrom lib.common.constants import PATHS\nfrom lib.common.results import NetlogHandler\n\nlog = logging.getLogger()\n\ndef create_folders():\n    \"\"\"Create folders in PATHS.\"\"\"\n    for name, folder in PATHS.items():\n        if os.path.exists(folder):\n            continue\n\n        try:\n            os.makedirs(folder)\n        except OSError:\n            pass\n\ndef init_logging():\n    \"\"\"Initialize logger.\"\"\"\n    formatter = logging.Formatter(\"%(asctime)s [%(name)s] %(levelname)s: %(message)s\")\n    sh = logging.StreamHandler()\n    sh.setFormatter(formatter)\n    log.addHandler(sh)\n\n    nh = NetlogHandler()\n    nh.setFormatter(formatter)\n    log.addHandler(nh)\n\n    log.setLevel(logging.DEBUG)\n"
  },
  {
    "path": "analyzer/android/modules/__init__.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n"
  },
  {
    "path": "analyzer/android/modules/auxiliary/__init__.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n"
  },
  {
    "path": "analyzer/android/modules/auxiliary/screenshots.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nimport time\nimport logging\nimport StringIO\nfrom threading import Thread\nfrom lib.common.abstracts import Auxiliary\nfrom lib.common.results import NetlogFile\nfrom lib.api.adb import take_screenshot\nfrom lib.api.screenshot import Screenshot\n\nlog = logging.getLogger(__name__)\nSHOT_DELAY = 2\n\nclass Screenshots(Auxiliary, Thread):\n    \"\"\"Take screenshots.\"\"\"\n\n    def __init__(self):\n        Thread.__init__(self)\n        self.do_run = True\n\n    def stop(self):\n        \"\"\"Stop screenshotting.\"\"\"\n        self.do_run = False\n\n    def run(self):\n        \"\"\"Run screenshotting.\n        @return: operation status.\n        \"\"\"\n        img_counter = 0\n        img_last = None\n\n        while self.do_run:\n            time.sleep(SHOT_DELAY)\n\n            try:\n                filename = \"screenshot%s.jpg\" % str(img_counter)\n                img_current = take_screenshot(filename)\n                if img_last:\n                    if Screenshot().equal(img_last, img_current):\n                        continue\n\n                file = open(img_current, 'r')\n                tmpio = StringIO.StringIO(file.read())\n                # now upload to host from the StringIO\n                nf = NetlogFile(\"shots/%s.jpg\" % str(img_counter).rjust(4, \"0\"))\n\n                for chunk in tmpio:\n                    nf.sock.sendall(chunk)\n\n                nf.close()\n                file.close()\n                img_counter += 1\n                img_last = img_current\n\n            except IOError as e:\n                log.error(\"Cannot take screenshot: %s\", e)\n                continue\n\n        return True\n"
  },
  {
    "path": "analyzer/android/modules/packages/__init__.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n"
  },
  {
    "path": "analyzer/android/modules/packages/apk.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nimport logging\n\nfrom lib.api.adb import dump_droidmon_logs, execute_sample, install_sample\nfrom lib.common.abstracts import Package\n\nlog = logging.getLogger(__name__)\n\nclass Apk(Package):\n    \"\"\"Apk analysis package.\"\"\"\n    def __init__(self, options={}):\n        super(Apk, self).__init__(options)\n\n        self.package, self.activity = options.get(\"apk_entry\", \":\").split(\":\")\n\n    def start(self, path):\n        install_sample(path)\n        execute_sample(self.package, self.activity)\n\n    def check(self):\n        return True\n\n    def finish(self):\n        dump_droidmon_logs(self.package)\n        return True\n"
  },
  {
    "path": "analyzer/android/modules/packages/default_browser.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nfrom lib.common.abstracts import Package\nfrom lib.api.adb import execute_browser\n\nclass default_browser(Package):\n    \"\"\"Default Browser analysis package.\"\"\"\n    def __init__(self, options={}):\n        super(default_browser, self).__init__(options)\n\n    def start(self, target):\n        execute_browser(target)\n\n    def check(self):\n        return True\n\n    def finish(self):\n        return True\n"
  },
  {
    "path": "analyzer/darwin/__init__.py",
    "content": ""
  },
  {
    "path": "analyzer/darwin/analyzer.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2015 Dmitry Rodionov\n# This software may be modified and distributed under the terms\n# of the MIT license. See the LICENSE file for details.\n\nimport logging\nfrom sys import stderr\nfrom hashlib import sha256\nfrom xmlrpclib import Server\nfrom traceback import format_exc\nfrom os import path, getcwd, makedirs\n\nfrom lib.common.config import Config\nfrom lib.common.hashing import hash_file\nfrom lib.common.results import NetlogHandler, upload_to_host\nfrom lib.core.constants import PATHS\nfrom lib.core.packages import choose_package_class\nfrom lib.core.osx import set_wallclock\nfrom lib.core.host import CuckooHost\n\nclass Macalyzer(object):\n    \"\"\"Cuckoo OS X analyser.\n    \"\"\"\n\n    log = logging.getLogger()\n    target = None\n\n    files_to_upload = []\n    uploaded_hashes = []\n\n    def __init__(self, host, configuration=None):\n        self.config = configuration\n        self.host = host\n\n    def bootstrap(self):\n        _create_result_folders()\n        _setup_logging()\n        self._detect_target()\n\n    def run(self):\n        \"\"\"Run analysis.\n        \"\"\"\n        self.bootstrap()\n\n        self.log.debug(\"Starting analyzer from %s\", getcwd())\n        self.log.debug(\"Storing results at: %s\", PATHS[\"root\"])\n\n        package = self._setup_analysis_package()\n\n        if self.config.clock:\n            set_wallclock(self.config.clock)\n        self._analysis(package)\n\n        return self._complete()\n\n    def _complete(self):\n        for f in self.files_to_upload:\n            self._upload_file(f)\n        return True\n\n    #\n    # Implementation details\n    #\n\n    def _detect_target(self):\n        if self.config.category == \"file\":\n            self.target = path.join(\"/tmp/\", str(self.config.file_name))\n        else: # It's not a file, but a URL\n            self.target = self.config.target\n\n    def _setup_analysis_package(self):\n        # Do we have a suggestion about an analysis package?\n        if self.config.package:\n            suggestion = self.config.package\n        elif self.config.category != \"file\":\n            suggestion = \"url\"\n        else:\n            suggestion = None\n        # Try to figure out what analysis package to use with this target\n        kwargs = {\"suggestion\" : suggestion}\n        package_class = choose_package_class(self.config.file_type,\n                                             self.config.file_name, **kwargs)\n        if not package_class:\n            raise Exception(\"Could not find an appropriate analysis package\")\n        # Package initialization\n        kwargs = {\n            \"options\" : self.config.get_options(),\n            \"timeout\" : self.config.timeout\n        }\n        return package_class(self.target, self.host, **kwargs)\n\n    def _analysis(self, package):\n        package.start()\n        self.files_to_upload = package.touched_files\n\n    def _upload_file(self, filepath):\n        if not path.isfile(filepath):\n            return\n        # Check whether we've already dumped this file - in that case skip it\n        try:\n            hashsum = hash_file(sha256, filepath)\n            if sha256 in self.uploaded_hashes:\n                return\n        except IOError as e:\n            self.log.info(\"Error dumping file from path \\\"%s\\\": %s\", filepath, e)\n            return\n        filename = \"%s_%s\" % (hashsum[:16], path.basename(filepath))\n        upload_path = path.join(\"files\", filename)\n\n        try:\n            upload_to_host(filepath, upload_path)\n            self.uploaded_hashes.append(hashsum)\n        except IOError as e:\n            self.log.error(\"Unable to upload dropped file at path \\\"%s\\\": %s\", filepath, e)\n\ndef _create_result_folders():\n    for _, folder in PATHS.items():\n        if path.exists(folder):\n            continue\n        try:\n            makedirs(folder)\n        except OSError:\n            pass\n\n\ndef _setup_logging():\n    \"\"\" Initialize logger. \"\"\"\n    logger = logging.getLogger()\n    formatter = logging.Formatter(\"%(asctime)s [%(name)s] %(levelname)s: %(message)s\")\n\n    stream = logging.StreamHandler()\n    stream.setFormatter(formatter)\n    logger.addHandler(stream)\n\n    netlog = NetlogHandler()\n    netlog.setFormatter(formatter)\n    logger.addHandler(netlog)\n    logger.setLevel(logging.DEBUG)\n\n\n\nif __name__ == \"__main__\":\n    success = False\n    error = \"\"\n\n    try:\n        config = Config(cfg=\"analysis.conf\")\n        cuckoo = CuckooHost(config.ip, config.port)\n        analyzer = Macalyzer(cuckoo, config)\n        success = analyzer.run()\n\n    except KeyboardInterrupt:\n        error = \"Keyboard Interrupt\"\n\n    except Exception as err:\n        error_exc = format_exc()\n        error = str(err)\n        if len(analyzer.log.handlers):\n            analyzer.log.exception(error_exc)\n        else:\n            stderr.write(\"{0}\\n\".format(error_exc))\n    # Once the analysis is completed or terminated for any reason, we report\n    # back to the agent, notifying that it can report back to the host.\n    finally:\n        # Establish connection with the agent XMLRPC server.\n        server = Server(\"http://127.0.0.1:8000\")\n        server.complete(success, error, PATHS[\"root\"])\n"
  },
  {
    "path": "analyzer/darwin/lib/__init__.py",
    "content": ""
  },
  {
    "path": "analyzer/darwin/lib/common/__init__.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "analyzer/darwin/lib/common/config.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport ConfigParser\n\nclass Config:\n    def __init__(self, cfg):\n        \"\"\"@param cfg: configuration file.\"\"\"\n        config = ConfigParser.ConfigParser(allow_no_value=True)\n        config.read(cfg)\n\n        for section in config.sections():\n            for name, raw_value in config.items(section):\n                if name == \"file_name\":\n                    value = config.get(section, name)\n                else:\n                    try:\n                        value = config.getboolean(section, name)\n                    except ValueError:\n                        try:\n                            value = config.getint(section, name)\n                        except ValueError:\n                            value = config.get(section, name)\n                setattr(self, name, value)\n\n    def get_options(self):\n        \"\"\"Get analysis options.\n        @return: options dict.\n        \"\"\"\n        # The analysis package can be provided with some options in the\n        # following format:\n        #   option1=value1,option2=value2,option3=value3\n        #\n        # Here we parse such options and provide a dictionary that will be made\n        # accessible to the analysis package.\n        options = {}\n        if hasattr(self, \"options\") and len(self.options) > 0:\n            try:\n                # Split the options by comma.\n                fields = self.options.split(\",\")\n            except ValueError:\n                pass\n            else:\n                for field in fields:\n                    # Split the name and the value of the option.\n                    try:\n                        # Sometimes, we have a key without a value (i.e. it's a\n                        # command line argument), so we can't use the\n                        # `key, value = field.split(\"=\", 1)` style here\n                        parts = field.split(\"=\", 1)\n                    except ValueError:\n                        pass\n                    else:\n                        key = parts[0].strip()\n                        arg_prefix = \"arg-\"\n                        if not key.startswith(arg_prefix):\n                            # If the parsing went good, we add the option to the\n                            # dictionary.\n                            value = parts[1].strip()\n                            options[key] = value\n                        elif len(key) > len(arg_prefix):\n                            # Remove \"arg-\" prefix from the key\n                            key = key[4:]; parts[0] = key\n                            # Add this key (with a value maybe) to the args\n                            if \"args\" not in options: options[\"args\"] = []\n                            options[\"args\"] += parts\n        return options\n"
  },
  {
    "path": "analyzer/darwin/lib/common/hashing.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nBUFSIZE = 1024*1024\n\n\ndef hash_file(method, path):\n    \"\"\"Calculates an hash on a file by path.\n    @param method: callable hashing method\n    @param path: file path\n    @return: computed hash string\n    \"\"\"\n    f = open(path, \"rb\")\n    h = method()\n    while True:\n        buf = f.read(BUFSIZE)\n        if not buf:\n            break\n        h.update(buf)\n    return h.hexdigest()\n"
  },
  {
    "path": "analyzer/darwin/lib/common/rand.py",
    "content": "import random\nimport string\n\ndef random_string(minimum, maximum=None):\n    if maximum is None:\n        maximum = minimum\n\n    count = random.randint(minimum, maximum)\n    return \"\".join(random.choice(string.ascii_letters) for x in xrange(count))\n\ndef random_integer(digits):\n    start = 10 ** (digits - 1)\n    end = (10 ** digits) - 1\n    return random.randint(start, end)\n"
  },
  {
    "path": "analyzer/darwin/lib/common/results.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport time\nimport socket\nimport logging\nfrom config import Config\n\nlog = logging.getLogger(__name__)\n\nBUFSIZE = 1024*1024\n\ndef upload_to_host(file_path, dump_path):\n    nc = infd = None\n    try:\n        nc = NetlogFile(dump_path)\n\n        infd = open(file_path, \"rb\")\n        buf = infd.read(BUFSIZE)\n        while buf:\n            nc.send(buf, retry=False)\n            buf = infd.read(BUFSIZE)\n    except Exception as e:\n        log.error(\"Exception uploading file %s to host: %s\", file_path, e)\n    finally:\n        if infd:\n            infd.close()\n        if nc:\n            nc.close()\n\nclass NetlogConnection(object):\n    def __init__(self, proto=\"\"):\n        config = Config(cfg=\"analysis.conf\")\n        self.hostip, self.hostport = config.ip, config.port\n        self.sock, self.file = None, None\n        self.proto = proto\n\n    def connect(self):\n        i = 1\n        # this can loop forever, if we can't connect the whole analysis is useless anyways\n        while True:\n            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n            try:\n                s.connect((self.hostip, self.hostport))\n                s.sendall(self.proto)\n            except:\n                time.sleep(i)\n                i = min(i + 1, 60)\n            else:\n                self.sock = s\n                self.file = s.makefile()\n                break\n\n    def send(self, data, retry=True):\n        if not self.sock: self.connect()\n\n        try:\n            self.sock.sendall(data)\n        except socket.error as e:\n            if retry:\n                self.connect()\n                self.send(data, retry=False)\n            else:\n                raise\n        except Exception as e:\n            log.error(\"Unhandled exception in NetlogConnection: %s\", str(e))\n            # We really have nowhere to log this, if the netlog connection\n            # does not work, we can assume that any logging won't work either.\n            # So we just fail silently.\n            self.close()\n\n    def close(self):\n        try:\n            self.file.close()\n            self.sock.close()\n        except Exception:\n            pass\n\nclass NetlogFile(NetlogConnection):\n    def __init__(self, filepath):\n        self.filepath = filepath\n        NetlogConnection.__init__(self, proto=\"FILE\\n{0}\\n\".format(self.filepath))\n        self.connect()\n\nclass NetlogHandler(logging.Handler, NetlogConnection):\n    def __init__(self):\n        logging.Handler.__init__(self)\n        NetlogConnection.__init__(self, proto=\"LOG\\n\")\n        self.connect()\n\n    def emit(self, record):\n        msg = self.format(record)\n        self.send(\"{0}\\n\".format(msg))\n"
  },
  {
    "path": "analyzer/darwin/lib/core/__init__.py",
    "content": ""
  },
  {
    "path": "analyzer/darwin/lib/core/constants.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nfrom tempfile import gettempdir\nfrom ..common.rand import random_string\n\nROOT = os.path.join(gettempdir() + os.sep, random_string(6, 10))\n\nPATHS = {\n    \"root\"   : ROOT,\n    \"logs\"   : os.path.join(ROOT, \"logs\"),\n    \"files\"  : os.path.join(ROOT, \"files\"),\n    \"shots\"  : os.path.join(ROOT, \"shots\"),\n    \"memory\" : os.path.join(ROOT, \"memory\"),\n    \"drop\"   : os.path.join(ROOT, \"drop\")\n}\n"
  },
  {
    "path": "analyzer/darwin/lib/core/data/signatures.yml",
    "content": "system:\n    is_success_condition: \"retval == 0\"\n    args:\n      - {name: \"command\", type: \"char *\"}\n    retval_type: \"int\"\n    category: \"foobar\"\n\nprintf:\n    is_success_condition: \"retval > 0\"\n    args:\n      - {name: \"format\", type: \"char *\"}\n    retval_type: \"int\"\n    category: \"foobar\"\n\ndlopen:\n    is_success_condition: \"retval > 0\"\n    args:\n      - {name: \"path\", type: \"char *\"}\n      - {name: \"mode\", type: \"int\"}\n    retval_type: \"void *\"\n    category: \"foobar\"\n    library: \"libdyld\"\n\ndlsym:\n    is_success_condition: \"retval > 0\"\n    args:\n      - {name: \"handle\", type: \"void *\"}\n      - {name: \"symbol\", type: \"char *\"}\n    retval_type: \"void *\"\n    category: \"foobar\"\n    library: \"libdyld\"\n\nfprintf:\n    is_success_condition: \"retval > 0\"\n    args:\n      - {name: \"stream\", type: \"void *\"}\n      - {name: \"format\", type: \"char *\"}\n    retval_type: \"int\"\n    category: \"foobar\"\n\nopen:\n    is_success_condition: \"retval > 0\"\n    args:\n      - {name: \"path\",  type: \"char *\"}\n      - {name: \"oflag\", type: \"int\"}\n    retval_type: \"int\"\n    category: \"file\"\n\nfopen:\n    is_success_condition: \"retval > 0\"\n    args:\n      - {name: \"filename\", type: \"char *\"}\n      - {name: \"mode\",     type: \"char *\"}\n    retval_type: \"void *\"\n    category: \"file\"\n\nfreopen:\n    is_success_condition: \"retval > 0\"\n    args:\n      - {name: \"filename\", type: \"char *\"}\n      - {name: \"mode\",     type: \"char *\"}\n      - {name: \"stream\",   type: \"void *\"}\n    retval_type: \"void *\"\n    category: \"file\"\n\nrename:\n    is_success_condition: \"retval == 0\"\n    args:\n      - {name: \"old\",   type: \"char *\"}\n      - {name: \"new\",   type: \"char *\"}\n      - {name: \"state\", type: \"void *\"}\n      - {name: \"flags\", type: \"uint64_t\"}\n    retval_type: \"int\"\n    category: \"file\"\n\ncopyfile:\n    is_success_condition: \"retval == 0\"\n    args:\n      - {name: \"from\",  type: \"char *\"}\n      - {name: \"to\",    type: \"char *\"}\n      - {name: \"state\", type: \"void *\"}\n      - {name: \"flags\", type: \"uint32_t\"}\n    retval_type: \"int\"\n    category: \"file\"\n\nremove:\n    is_success_condition: \"retval == 0\"\n    args:\n      - {name: \"path\", type: \"char *\"}\n    retval_type: \"int\"\n    category: \"file\"\n\nunlink:\n    is_success_condition: \"retval == 0\"\n    args:\n      - {name: \"path\", type: \"char *\"}\n    retval_type: \"int\"\n    category: \"file\"\n\nexecve:\n    is_success_condition: \"retval != -1\"\n    args:\n      - {name: \"path\", type: \"char *\"}\n      - {name: \"argv\", type: \"void *\"}\n      - {name: \"envp\", type: \"void *\"}\n    retval_type: \"int\"\n    category: \"process\"\n    __ignore__: true\n\nfork:\n    is_success_condition: \"retval >= 0\"\n    args: []\n    retval_type: \"int\"\n    category: \"process\"\n\nsocket:\n    is_success_condition: \"retval > 0\"\n    args:\n      - {name: \"domain\",   type: \"int\"}\n      - {name: \"type\",     type: \"int\"}\n      - {name: \"protocol\", type: \"int\"}\n    retval_type: \"int\"\n    category: \"network\"\n\n# Signatures for tests.\n# Please don't remove them. Thanks!\n\nrb_isalpha:\n    is_success_condition: \"retval != 0\"\n    args:\n      - {name: \"character\", type: \"char\"}\n    retval_type: \"int\"\n    category: \"foobar\"\n\natoi:\n    is_success_condition: \"1==1\"\n    args:\n      - {name: \"str\", type: \"char *\"}\n    retval_type: \"int\"\n    category: \"foobar\"\n    library: \"libsystem_c\"\n"
  },
  {
    "path": "analyzer/darwin/lib/core/data/types.yml",
    "content": "# ===============================================\n# Basic types\n#\nint: &int\n    # We will print it with something like printf(\"%d\", value)\n    printf_specifier: \"%d\"\n    # Is it a native C type (on OS X)?\n    native: Yes\n# Alternative name for backward compatibility\ninteger: *int\n\nunsigned int: &unsigned-int\n    printf_specifier: \"%ld\"\n    native: Yes\n\nlong: &long\n    printf_specifier: \"%l\"\n    native: Yes\n\nunsigned long: &unsigned-long\n    printf_specifier: \"%lu\"\n    native: Yes\n\nunsigned long long: &unsigned-long-long\n    printf_specifier: \"%llu\"\n    native: Yes\n\nsize_t: *unsigned-long\n\nchar: &char\n    printf_specifier: '\"%c\"'\n    native: Yes\n\nfloat: &float\n    printf_specifier: \"%f\"\n    native: Yes\n\ndouble: &double\n    printf_specifier: \"%f\"\n    native: Yes\n#\n# Raw pointers: just dump their values (in *decimal* since dtrace will output\n# JSON that doesn't accept hex values)\n#\n\"void *\":\n    <<: *unsigned-long-long\n    cast: \"unsigned long long\"\n#\n# Strings\n#\n\"char *\": &char-pointer\n    printf_specifier: '\"%S\"'\n    native: No\n    template: |-\n        !!(${ARG}) ? copyinstr((uint64_t)${ARG}) : \"<NULL>\"\n#\n# Arbitrary buffers\n#\n#buffer: &buffer\n#    printf_specifier: '\"%S\"'\n#    native: No\n#    template: |-\n#        ${ARG} != (int64_t)NULL ? stringof(copyin(${ARG}, ${SIZE_ARG})) : \"<NULL>\"\n#\n# Fixed length C types\n#\nint8_t: &int8_t\n    printf_specifier: \"%d\"\n    native: Yes\n\nuint8_t: &uint8_t\n    printf_specifier: \"%u\"\n    native: Yes\n\nint16_t: &int16_t\n    printf_specifier: \"%d\"\n    native: Yes\n\nuint16_t: &uint16_t\n    printf_specifier: \"%u\"\n    native: Yes\n\nint32_t: &int32_t\n    printf_specifier: \"%d\"\n    native: Yes\n\nuint32_t: &uint32_t\n    printf_specifier: \"%u\"\n    native: Yes\n\nint64_t: &int64_t\n    printf_specifier: \"%lld\"\n    native: Yes\n\nuint64_t: &uint64_t\n    printf_specifier: \"%llu\"\n    native: Yes\n\n#\n# Structures for tests.\n# Please don't remove them. Thanks!\n#\n\ntest_t:\n    native: No\n    struct:\n         hash: \"int\"\n         base: \"test_internal_t *\"\n         description: \"char *\"\n\ntest_internal_t:\n    native: No\n    struct:\n        abc: \"double *\"\n        hfa: \"size_t\"\n        sss: \"char *\"\n\ntest_extra_t:\n    native: No\n    struct:\n        foo: int\n        bar: uint64_t\n\n#\n# Your custom data types\n#\n"
  },
  {
    "path": "analyzer/darwin/lib/core/filetimes.py",
    "content": "# Copyright (c) 2009, David Buxton <david@gasmark6.com>\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are\n# met:\n#\n#     * Redistributions of source code must retain the above copyright\n# notice, this list of conditions and the following disclaimer.\n#     * Redistributions in binary form must reproduce the above copyright\n# notice, this list of conditions and the following disclaimer in the\n# documentation and/or other materials provided with the distribution.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n# IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\n# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\n# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\n# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\"\"\"Tools to convert between Python datetime instances and Microsoft times.\n\"\"\"\nfrom calendar import timegm\n\n\n# http://support.microsoft.com/kb/167296\n# How To Convert a UNIX time_t to a Win32 FILETIME or SYSTEMTIME\nEPOCH_AS_FILETIME = 116444736000000000  # January 1, 1970 as MS file time\nHUNDREDS_OF_NANOSECONDS = 10000000\n\n\ndef dt_to_filetime(dt, delta_from_utc):\n    \"\"\"Converts a datetime to Microsoft filetime format.\n\n    >>> \"%.0f\" % dt_to_filetime(datetime(2009, 7, 25, 23, 0))\n    '128930364000000000'\n\n    >>> \"%.0f\" % dt_to_filetime(datetime(1970, 1, 1, 0, 0, tzinfo=utc))\n    '116444736000000000'\n\n    >>> \"%.0f\" % dt_to_filetime(datetime(1970, 1, 1, 0, 0))\n    '116444736000000000'\n\n    >>> dt_to_filetime(datetime(2009, 7, 25, 23, 0, 0, 100))\n    128930364000001000\n    \"\"\"\n    dt += delta_from_utc\n    ft = EPOCH_AS_FILETIME + (timegm(dt.timetuple()) * HUNDREDS_OF_NANOSECONDS)\n    return ft + (dt.microsecond * 10)\n"
  },
  {
    "path": "analyzer/darwin/lib/core/host.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2015 Dmitry Rodionov\n# This software may be modified and distributed under the terms\n# of the MIT license. See the LICENSE file for details.\n\nimport yaml\nimport socket\nimport logging\nimport bson\nfrom os import path\nfrom datetime import datetime\nfrom subprocess import check_output, CalledProcessError\nfrom filetimes import dt_to_filetime\n\nlog = logging.getLogger(__name__)\n\nclass CuckooHost(object):\n    \"\"\" Sending analysis results back to the Cuckoo Host.\n\n    Currently it only supports sending results about API calls via send_api(),\n    see `apicalls` module.\n    \"\"\"\n    sockets = {\n        # Each target process has its own results server on the host, so\n        # we setup as many sockets as we have targets to analyse.\n    }\n    descriptions = {\n        # We don't want to explain APIs every single time they're about to be\n        # send to the host, so we explain them once and then just refer to them\n        # via an unique ID.\n    }\n    launch_times = {\n        # Since Cuckoo host expects us to send relative times, we remember when\n        # every target was launched.\n    }\n    human_readable_info = {\n        # Here goes all the additional information about APIs like category,\n        # arguments names and so on. See date/apis.json for more details.\n    }\n\n    def __init__(self, host_ip, host_port):\n        self.ip = host_ip\n        self.port = host_port\n        self._load_human_readable_info()\n\n    def send_api(self, thing):\n        \"\"\" Sends a new API notification to the Cuckoo host \"\"\"\n        pid = thing.pid\n        api = thing.api\n\n        # We're required to report results of tracing a target process to\n        # *its own* result server. So create a communication socket...\n        if pid not in self.sockets:\n            self.sockets[pid] = self._create_socket()\n            if not self.sockets[pid]:\n                raise Exception(\"CuckooHost error: could not create socket.\")\n            # ... and don't forget to explain every single API call again\n            self.descriptions.setdefault(pid, [\"__process__\", \"__thread__\"])\n            self._send_new_process(thing)\n        try:\n            lookup_idx = self.descriptions[pid].index(api)\n        except ValueError:\n            self.descriptions[pid].append(api)\n            lookup_idx = len(self.descriptions[pid]) - 1\n            self._send_api_description(lookup_idx, thing)\n\n        # Here's an api object:\n        # {\n        #     \"I\"    : (int)<index in the API lookup table>,\n        #     \"T\"    : (int)<caller thread id>,\n        #     \"t\"    : (int)<time (in milliseconds) since a process launch>,\n        #     \"args\" : [\n        #         (int)<1 if this API call was successfull, 0 otherwise>,\n        #         (int)<return value>,\n        #         (any)<value the first argument>,\n        #         (any)<value the second argument>,\n        #                       ...\n        #         (any)<value the n-th argument>,\n        #     ]\n        # }\n        time_offset_ms = int(1000*thing.timestamp - 1000*self.launch_times[pid])\n        self.sockets[pid].sendall(bson.BSON.encode({\n            \"I\"    : lookup_idx,\n            \"T\"    : thing.tid,\n            \"t\"    : time_offset_ms,\n            \"args\" : self._prepare_args(thing)\n        }))\n\n    def _create_socket(self):\n        \"\"\" Allocates a new socket and prepares it for communicating with the host \"\"\"\n        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n        sock.connect((self.ip, self.port))\n        # Prepare the result server to accept data in BSON format\n        sock.sendall(\"BSON\\n\")\n        return sock\n\n    def _send_api_description(self, lookup_idx, thing):\n        \"\"\" Describes the given API call to the host \"\"\"\n        # Here's an api description object:\n        # {\n        #     \"I\"        : (string)<index in the API lookup table>,\n        #     \"name\"     : (string)<API name>,\n        #     \"type\"     : \"info\",\n        #     \"category\" : (string)<an API category (e.g. \"memory\" or \"network\")>\n        #     \"args\"     : [\n        #         \"is_success\",\n        #         \"retval\",\n        #         (string)<description of the first argument>,\n        #         (string)<description of the second argument>,\n        #                       ...\n        #         (string)<description of the n-th argument>,\n        #     ]\n        # }\n        self.sockets[thing.pid].sendall(bson.BSON.encode({\n            \"I\"        : lookup_idx,\n            \"name\"     : thing.api,\n            \"type\"     : \"info\",\n            \"category\" : self._api_category(thing),\n            \"args\"     : self._api_args_description(thing)\n        }))\n\n    def _send_new_process(self, thing):\n        \"\"\" Sends a notification about a new target process out there \"\"\"\n        pid = thing.pid\n        lookup_idx = self.descriptions[pid].index(\"__process__\")\n\n        # Remember when this process was born\n        self.launch_times[pid] = thing.timestamp\n        # Describe the __process__ notification\n        self.sockets[pid].sendall(bson.BSON.encode({\n            \"I\"        : lookup_idx,\n            \"name\"     : \"__process__\",\n            \"type\"     : \"info\",\n            \"category\" : \"unknown\",\n            \"args\"     : [\n                \"is_success\",\n                \"retval\",\n                \"TimeLow\", \"TimeHigh\",\n                \"ProcessIdentifier\", \"ParentProcessIdentifier\",\n                \"ModulePath\"\n            ]\n        }))\n        # Convert our unix timestamp into Windows's FILETIME because Cuckoo\n        # result server expect timestamps to be in this format\n        filetime = _filetime_from_timestamp(thing.timestamp)\n        # Get process name (aka module path)\n        module = _proc_name_from_pid(pid)\n        self.sockets[pid].sendall(bson.BSON.encode({\n            \"I\"    : lookup_idx,\n            \"T\"    : thing.tid,\n            \"t\"    : 0,\n            \"args\" : [\n                1,\n                0,\n                # TimeLow (first 32bits) and TimeHigh (last 32bits)\n                filetime & 0xffffffff, filetime >> 32,\n                thing.pid, thing.ppid,\n                # ModulePath\n                module\n            ]\n        }))\n\n    def _prepare_args(self, thing):\n        # First two \"arguments\" are always is_success and retval\n        result = [\n            self._verify_is_success(thing),\n            thing.retval\n        ]\n        return result + thing.args\n\n    def _verify_is_success(self, thing):\n        retval = thing.retval\n        errno = thing.errno\n        if thing.api not in self.human_readable_info: # fallback to success\n            return 1\n\n        condition = self.human_readable_info[thing.api][\"is_success_condition\"]\n        result = eval(condition, {\"__builtins__\" : None}, {\n            \"retval\" : retval,\n            \"errno\"  : errno\n        })\n        return 1 if result else 0\n\n    def _api_category(self, thing):\n        api = thing.api\n        if api not in self.human_readable_info: # fallback\n            return \"unknown\"\n        return self.human_readable_info[api][\"category\"]\n\n    def _api_args_description(self, thing):\n        api = thing.api\n        # First two \"arguments\" are always these\n        description = [\"is_success\", \"retval\"]\n        # Try to parse argument names for known APIs\n        if api in self.human_readable_info:\n            args = self.human_readable_info[api][\"args\"]\n            description += [x[\"name\"] for x in args]\n        else: # fallback to arg0, arg1, ..., argN\n            for arg_idx in range(0, len(thing.args)):\n                description += [\"arg%d\" % arg_idx]\n        return description\n\n    def _load_human_readable_info(self):\n        signatures = _description_file_path()\n        try:\n            with open(signatures, \"r\") as infile:\n                self.human_readable_info = yaml.safe_load(infile)\n        except IOError:\n            log.exception(\"Could not open %s\" % path.basename(signatures))\n        except ValueError:\n            log.exception(\"Invalid YAML file %s\" % path.basename(signatures))\n\n\ndef _proc_name_from_pid(pid):\n    \"\"\" Parses `ps -o comm` output for the given PID \"\"\"\n    try:\n        ps_output = check_output([\"/bin/ps\", \"-p\", str(pid), \"-o\", \"comm\"])\n        # The first line of an output is reserved for `ps` headers and the\n        # second one contains a process path\n        return ps_output.split(\"\\n\")[1]\n    except CalledProcessError:\n        return \"unknown\"\n\n\ndef _filetime_from_timestamp(timestamp):\n    \"\"\" See filetimes.py for details \"\"\"\n    # Timezones are hard, sorry\n    moment = datetime.fromtimestamp(timestamp)\n    delta_from_utc = moment - datetime.utcfromtimestamp(timestamp)\n    return dt_to_filetime(moment, delta_from_utc)\n\n\ndef _description_file_path():\n    return path.join(path.dirname(path.abspath(__file__)), \"data\", \"signatures.yml\")\n"
  },
  {
    "path": "analyzer/darwin/lib/core/osx.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2015 Dmitry Rodionov\n# This software may be modified and distributed under the terms\n# of the MIT license. See the LICENSE file for details.\n\nfrom os import system\nfrom datetime import datetime\n\ndef set_wallclock(clock_str, **kwargs):\n    clock = datetime.strptime(clock_str, \"%Y%m%dT%H:%M:%S\")\n    # NOTE: On OS X there's `date` utility that accepts\n    # new date/time as a string of the folowing format:\n    # {month}{day}{hour}{minutes}{year}.{seconds}\n    # where every {x} is a 2 digit number.\n    cmd = \"sudo date {0}\".format(clock.strftime(\"%m%d%H%M%y.%S\"))\n\n    if \"just_testing\" in kwargs:\n        return cmd\n    else:\n        system(cmd)\n"
  },
  {
    "path": "analyzer/darwin/lib/core/packages.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2015 Dmitry Rodionov\n# This software may be modified and distributed under the terms\n# of the MIT license. See the LICENSE file for details.\n\nfrom ..dtrace.apicalls import apicalls\n\nimport inspect\nfrom sets import Set\nfrom os import sys, path\n\ndef choose_package_class(file_type, file_name, suggestion=None):\n    if suggestion is not None:\n        name = suggestion\n    else:\n        name = _guess_package_name(file_type, file_name)\n        if not name:\n            return None\n\n    full_name = \"modules.packages.%s\" % name\n    try:\n        # FIXME(rodionovd):\n        # I couldn't figure out how to make __import__ import anything from\n        # the (grand)parent package, so here I just patch the PATH\n        sys.path.append(path.abspath(path.join(path.dirname(__file__), '..', '..')))\n        # Since we don't know the package class yet, we'll just import everything\n        # from this module and then try to figure out the required member class\n        module = __import__(full_name, globals(), locals(), ['*'])\n    except ImportError:\n        raise Exception(\"Unable to import package \\\"{0}\\\": it does not \"\n                        \"exist.\".format(name))\n    try:\n        pkg_class = _found_target_class(module, name)\n    except IndexError as err:\n        raise Exception(\"Unable to select package class (package={0}): \"\n                        \"{1}\".format(full_name, err))\n    return pkg_class\n\n\ndef _found_target_class(module, name):\n    \"\"\" Searches for a class with the specific name: it should be\n    equal to capitalized $name.\n    \"\"\"\n    members = inspect.getmembers(module, inspect.isclass)\n    return [x[1] for x in members if x[0] == name.capitalize()][0]\n\n\ndef _guess_package_name(file_type, file_name):\n    if \"Bourne-Again\" in file_type or \"bash\" in file_type:\n        return \"bash\"\n    elif \"Mach-O\" in file_type and \"executable\" in file_type:\n        return \"macho\"\n    elif \"directory\" in file_type and (file_name.endswith(\".app\") or file_name.endswith(\".app/\")):\n        return \"app\"\n    elif \"Zip archive\" in file_type and file_name.endswith(\".zip\"):\n        return \"zip\"\n    else:\n        return None\n\n\nclass Package(object):\n    \"\"\" Base analysis package \"\"\"\n\n    # Our target may touch some files; keep an eye on them\n    touched_files = Set()\n\n    def __init__(self, target, host, **kwargs):\n        if not target or not host:\n            raise Exception(\"Package(): `target` and `host` arguments are required\")\n\n        self.host = host\n        self.target = target\n        # Any analysis options?\n        self.options = kwargs.get(\"options\", {})\n        # A timeout for analysis\n        self.timeout = kwargs.get(\"timeout\", None)\n        # Command-line arguments for the target.\n        self.args = self.options.get(\"args\", [])\n        # Choose an analysis method (or fallback to apicalls)\n        self.method = self.options.get(\"method\", \"apicalls\")\n        # Should our target be launched as root or not\n        self.run_as_root = _string_to_bool(self.options.get(\"run_as_root\", \"False\"))\n\n    def prepare(self):\n        \"\"\" Preparation routine. Do anything you want here. \"\"\"\n        pass\n\n    def start(self):\n        \"\"\" Runs an analysis process.\n        This function is a generator.\n        \"\"\"\n        self.prepare()\n\n        if self.method == \"apicalls\":\n            self.apicalls_analysis()\n        else:\n            raise Exception(\"Unsupported analysis method. Try `apicalls`.\")\n\n    def apicalls_analysis(self):\n        kwargs = {\n            'args': self.args,\n            'timeout': self.timeout,\n            'run_as_root': self.run_as_root\n        }\n        for call in apicalls(self.target, **kwargs):\n            # Send this API to Cuckoo host\n            self.host.send_api(call)\n            # Handle file IO APIs\n            self.handle_files(call)\n\n    def handle_files(self, call):\n        \"\"\" Remember what files our target has been working with during the analysis\"\"\"\n        def makeabs(filepath):\n            # Is it a relative path? Suppose it's relative to our dtrace working directory\n            if not path.isfile(filepath):\n                filepath = path.join(path.dirname(__file__), \"..\", \"dtrace\", filepath)\n            return filepath\n        if call.api in [\"fopen\", \"freopen\", \"open\"]:\n            self.open_file(makeabs(call.args[0]))\n        if call.api in [\"rename\"]:\n            self.move_file(makeabs(call.args[0]), makeabs(call.args[1]))\n        if call.api in [\"copyfile\"]:\n            self.copy_file(makeabs(call.args[0]), makeabs(call.args[1]))\n        if call.api in [\"remove\", \"unlink\"]:\n            self.remove_file(makeabs(call.args[0]))\n\n    def open_file(self, filepath):\n        self.touched_files.add(filepath)\n\n    def move_file(self, frompath, topath):\n        # Remove old reference if needed\n        if frompath in self.touched_files:\n            self.touched_files.remove(frompath)\n        self.touched_files.add(topath)\n\n    def copy_file(self, frompath, topath):\n        # Add both files to the watch list\n        self.touched_files.update([frompath, topath])\n\n    def remove_file(self, filepath):\n        # TODO(rodionovd): we're actually unable to dump this file\n        # because well, it was removed\n        self.touched_files.add(filepath)\n\ndef _string_to_bool(raw):\n    if not isinstance(raw, basestring):\n        raise Exception(\"Unexpected input: not a string :/\")\n    return raw.lower() in (\"yes\", \"true\", \"t\", \"1\")\n"
  },
  {
    "path": "analyzer/darwin/lib/dtrace/__init__.py",
    "content": ""
  },
  {
    "path": "analyzer/darwin/lib/dtrace/apicalls.d",
    "content": "#pragma D option destructive\n#pragma D option quiet\n/* apicalls.d\n *\n * Copyright (C) 2015 Dmitry Rodionov\n * This software may be modified and distributed under the terms\n * of the MIT license. See the LICENSE file for details.\n *\n * This script prints results in JSON format, each log entry is a dictionary:\n * {\n *     api         : string,            // e.g. \"fprintf\"\n *     args        : array,             // e.g. [1489124712123, \"Hello\\n!\"]\n *     retval      : string OR integer, // e.g. \"kkk\"\n *     timestamp   : integer,           // e.g. 1433765405\n *     pid         : integer,           // e.g. 9213\n *     ppid        : integer,           // e.g. 9210\n *     tid         : integer,           // e.g. 269040\n *     errno       : integer            // e.g. 22\n * }\n *\n */\n#define SCRIPT_NAME \"apicalls.d\"\n\n#ifndef ANALYSIS_TIMEOUT\n    #define ANALYSIS_TIMEOUT (-1)\n#endif\n\ndtrace:::BEGIN\n{\n    countdown = ANALYSIS_TIMEOUT;\n\n    self->deeplevel = 0;\n    self->arg0  = (int64_t)0;\n    self->arg1  = (int64_t)0;\n    self->arg2  = (int64_t)0;\n    self->arg3  = (int64_t)0;\n    self->arg4  = (int64_t)0;\n    self->arg5  = (int64_t)0;\n    self->arg6  = (int64_t)0;\n    self->arg7  = (int64_t)0;\n    self->arg8  = (int64_t)0;\n    self->arg9  = (int64_t)0;\n    self->arg10 = (int64_t)0;\n    self->arg11 = (int64_t)0;\n}\n\nprofile:::tick-1sec\n/ countdown > 0 /\n{\n    --countdown;\n}\n\nprofile:::tick-1sec\n/ countdown == 0 /\n{\n    exit(0);\n}\n\n#pragma mark - Following children\n#include \"follow_children.d\"\n\n/* We may use `sudo -u` to drop (root) privileges before running a target.\n * If this were the case, we wouldn't care about API calls of sudo itself, thus\n * no probes.\n */\n#ifndef SUDO\n\n/* ******* **************************** ******* */\nself int64_t arguments_stack[unsigned long, string];\nself deeplevel;\n/* ******* **************************** ******* */\n\n#pragma mark - Probes\n#include \"probes.d\"\n\n/* exec* probes are special: they don't return on success; so catch them early */\npid$target::execve:entry\n{\n    this->retval = 0;\n    this->timestamp_ms = walltimestamp/1000000;\n\n    printf(\"{\\\"api\\\":\\\"%s\\\", \\\"args\\\":[\\\"%S\\\", %llu, %llu], \\\"retval\\\":%d, \\\"timestamp\\\":%lld, \\\"pid\\\":%d, \\\"ppid\\\":%d, \\\"tid\\\":%d, \\\"errno\\\":%d}\\n\",\n        probefunc,\n        arg0 != (int64_t)NULL ? copyinstr(arg0) : \"<NULL>\", (unsigned long long)arg1, (unsigned long long)arg2,\n        (int)this->retval,\n        (int64_t)this->timestamp_ms, pid, ppid, tid, errno);\n}\n\n#endif /* not SUDO */\n"
  },
  {
    "path": "analyzer/darwin/lib/dtrace/apicalls.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2015 Dmitry Rodionov\n# This software may be modified and distributed under the terms\n# of the MIT license. See the LICENSE file for details.\n\nimport os\nimport json\nfrom getpass import getuser\nfrom subprocess import Popen\nfrom collections import namedtuple\nfrom tempfile import NamedTemporaryFile\n\nfrom autoprobes import generate_probes\nfrom common import sanitize_path, path_for_script, filelines, current_directory\n\napicall = namedtuple(\"apicall\", \"api args retval timestamp pid ppid tid errno\")\n\n\ndef apicalls(target, **kwargs):\n    \"\"\"\n    \"\"\"\n    if not target:\n        raise Exception(\"Invalid target for apicalls()\")\n\n    output_file = NamedTemporaryFile()\n    kwargs.update({\"output_file\" : output_file})\n    cmd = _dtrace_command_line(target, **kwargs)\n\n    # Generate dtrace probes for analysis\n    definitions = os.path.abspath(os.path.join(__file__, \"../../core/data/signatures.yml\"))\n    probes_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), \"probes.d\")\n    generate_probes(definitions, probes_file, overwrite=True)\n\n    # The dtrace script will take care of timeout itself, so we just launch\n    # it asynchronously\n    with open(os.devnull, \"w\") as null:\n        _ = Popen(cmd, stdout=null, stderr=null, cwd=current_directory())\n\n    for entry in filelines(output_file):\n        value = entry.strip()\n        if \"## apicalls.d done ##\" in value:\n            break\n        if len(value) == 0:\n            continue\n        yield _parse_entry(value)\n    output_file.close()\n    os.remove(probes_file)\n\n\ndef _dtrace_command_line(target, **kwargs):\n    # dtrace must be run as root on OS X\n    cmd = [\"sudo\", \"/usr/sbin/dtrace\"]\n    # Use -C for running clang's C preprocessor over the script\n    cmd += [\"-C\"]\n    # Use -I for adding a current directory to the search path for #includes\n    cmd += [\"-I./\"]\n    # Use -Z to allow probe descriptions that match zero probes in a target\n    cmd += [\"-Z\"]\n    cmd += [\"-DANALYSIS_TIMEOUT=%d\" % kwargs.get(\"timeout\", -1)]\n    cmd += [\"-s\", path_for_script(\"apicalls.d\")]\n    cmd += [\"-DTOPLEVELSCRIPT=1\"]\n    output_file = kwargs[\"output_file\"]\n    cmd += [\"-o\", output_file.name]\n    cmd += [\"-DOUTPUT_FILE=\\\"%s\\\"\" % output_file.name]\n\n    run_as_root = kwargs.get(\"run_as_root\", False)\n\n    if \"args\" in kwargs:\n        target_cmd = \"%s %s\" % (sanitize_path(target), \" \".join(kwargs[\"args\"]))\n    else:\n        target_cmd = sanitize_path(target)\n    # When we don't want to run the target as root, we have to drop privileges\n    # with `sudo -u current_user` right before calling the target.\n    if not run_as_root:\n        target_cmd = \"sudo -u %s %s\" % (getuser(), target_cmd)\n        cmd += [\"-DSUDO=1\"]\n    cmd += [\"-c\", target_cmd]\n    return cmd\n\n\ndef _parse_entry(entry):\n    parsed = json.loads(entry.replace(\"\\\\0\", \"\"))\n    api       = parsed['api']\n    args      = _stringify_args(parsed['args'])\n    retval    = parsed['retval']\n    # Convert milliseconds to floating point seconds\n    timestamp = float(parsed['timestamp']) / 1000\n    pid       = parsed['pid']\n    ppid      = parsed['ppid']\n    tid       = parsed['tid']\n    errno     = parsed['errno']\n    return apicall(api, args, retval, timestamp, pid, ppid, tid, errno)\n\n\ndef _stringify_args(args):\n    \"\"\" Converts each argument into a string.\n    In case of integers, it's a hex string. Other types are converted with str() \"\"\"\n    new_args = []\n    for item in args:\n        if isinstance(item, (int, long)):\n            new_args.append(\"%#lx\" % item)\n        else:\n            new_args.append(str(item))\n    return new_args\n"
  },
  {
    "path": "analyzer/darwin/lib/dtrace/autoprobes.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2015 Dmitry Rodionov\n# This software may be modified and distributed under the terms\n# of the MIT license. See the LICENSE file for details.\n\nimport yaml\nfrom os import path\nfrom string import Template\nfrom sets import Set\n\ndef generate_probes(definitions, output_path, overwrite=True):\n    \"\"\" TBD \"\"\"\n    if not overwrite and path.isfile(output_path):\n        pass\n    if isinstance(definitions, list):\n        defs = definitions\n    else:\n        defs = read_definitions(definitions)\n    types = read_types(path.abspath(path.join(__file__, \"../../core/data/types.yml\")))\n    contents  = [HEADER] + typedefs_for_custom_structs(defs, types)\n    contents += [probe_from_definition(x, types) for x in defs]\n    dump_probes(contents, output_path)\n\n# FILE IO\n\ndef read_definitions(fromfile):\n    \"\"\" Read API signatures from a file. \"\"\"\n    with open(fromfile, \"r\") as stream:\n        contents = yaml.safe_load(stream)\n        # Now convert the root dictionary to an array of dictionaries where\n        # original keys become values for the \"api\" key.\n        # FIXME(rodionovd): yes, I know, it should be an array..\n        return [dict({'api': k}, **v) for k, v in contents.iteritems()]\n\ndef read_types(infile):\n    \"\"\" Reads types definitions from a file. \"\"\"\n    with open(infile, \"r\") as stream:\n        return yaml.safe_load(stream)\n\ndef dump_probes(probes, tofile):\n    \"\"\" Writes the given list of dtrace probes to a file. If the file\n    already exists, it's truncated.\"\"\"\n    with open(tofile, \"w\") as stream:\n        stream.writelines(probes)\n\n# GENERATION\n\ndef probe_from_definition(definition, types):\n    \"\"\" Maps the given API definition to an actual dtrace probe(s). \"\"\"\n    if definition.get('__ignore__', False):\n        return \"\"\n    # We only need entry probes to save arguments\n    elif len(definition['args']) == 0:\n        return return_probe_from_definition(definition, types)\n    else:\n        entry_probe  = entry_probe_from_definition(definition)\n        return_probe = return_probe_from_definition(definition, types)\n        return entry_probe + return_probe\n\ndef entry_probe_from_definition(df):\n    \"\"\" Generates an entry dtrace probe from the given API definition. \"\"\"\n    template = Template(ENTRY_PROBE_TEMPLATE)\n    mapping = {\n        \"__LIBRARY__\": df.get(\"library\", \"\"),\n        \"__NAME__\"   : df[\"api\"],\n        \"__ARGUMENTS_PUSH_ON_STACK__\": push_on_stack_section(df[\"args\"])\n    }\n    return template.substitute(mapping)\n\ndef return_probe_from_definition(df, types):\n    \"\"\" Generates a return dtrace probe from the given API definition. \"\"\"\n    args = df[\"args\"]\n    retval_type = df[\"retval_type\"]\n    printf_specifier = type_description(retval_type, types)[\"printf_specifier\"]\n\n    template = Template(RETURN_PROBE_TEMPLATE)\n    mapping = {\n        \"__LIBRARY__\": df.get(\"library\", \"\"),\n        \"__NAME__\"   : df[\"api\"],\n        \"__ARGS_FORMAT_STRING__\"      : arguments_format_string(args, types),\n        \"__RETVAL_FORMAT_SPECIFIER__\" : printf_specifier,\n        \"__ARGUMENTS__\"               : arguments_section(args, types),\n        \"__RETVAL__\"                  : retval_section(retval_type, types),\n        \"__ARGUMENTS_POP_FROM_STACK__\": pop_from_stack_section(args)\n    }\n    return template.substitute(mapping)\n\ndef typedefs_for_custom_structs(defs, types):\n    \"\"\" Returns a list of typedef statements for custom structures\n    defined in `types.yml`.\"\"\"\n    def flatten(list_of_lists):\n        return sum(list_of_lists, [])\n    def deep_search_types(parent, types):\n        result = Set()\n        for t in parent:\n            description = type_description(t, types)\n            if \"struct\" in description:\n                result |= deep_search_types(description[\"struct\"].values(), types)\n            result.add(dereference_type(t))\n        return result\n    # We will only generate typedefs for struct that are actually in use\n    obviously_used_types = [x[\"type\"] for x in flatten([y[\"args\"] for y in defs])]\n    all_used_types = deep_search_types(obviously_used_types, types)\n\n    struct_types = {\n        k:v for (k, v) in types.iteritems() if \"struct\" in v and k in all_used_types\n    }\n    typedefs = []\n    for (name, description) in struct_types.iteritems():\n        fields = []\n        for (f,t) in description[\"struct\"].iteritems():\n            fields.append(\"%s %s;\" % (t, f))\n        template = \"typedef struct {\\n\\t%s\\n} %s;\\n\\n\"\n        typedefs.append(template % (\"\\n\\t\".join(fields), name))\n    return typedefs\n\n# -----------------------------------------------------------------------\n\ndef arguments_section(args, types):\n    \"\"\" Returns a serialization statement for accessing values of\n    the given arguments. \"\"\"\n    if len(args) == 0:\n        return \"\"\n    def serialize_arg(idx):\n        return serialize_argument_at_idx(idx, args, \"self->arg%d\" % idx, types)\n    parts = [serialize_arg(i) for i in xrange(len(args))]\n    return (\"\\n\\t\\t\" + \", \".join(parts) + \",\")\n\ndef arguments_format_string(args, types):\n    \"\"\" Returns a format string for printing the given arguments\n    with printf(). \"\"\"\n    if len(args) == 0:\n        return \"\"\n    parts = [printf_format_for_type(x[\"type\"], types) for x in args]\n    return \", \".join(parts)\n\ndef retval_section(retval_type, types):\n    \"\"\" Returns a serialization stetement for a return value of\n    the given type. \"\"\"\n    return serialize_type(retval_type, \"this->retval\", types)\n\n# -------------------------------\n\ndef printf_format_for_type(t, types):\n    \"\"\" Returns a format string for printing the given type\n    (either atomic or struct). \"\"\"\n    description = type_description(t, types)\n    if \"struct\" in description:\n        specifer = printf_format_for_struct(t, types)\n    else:\n        specifer = description[\"printf_specifier\"]\n    return specifer.replace(\"\\\"\", \"\\\\\\\"\")\n\ndef printf_format_for_struct(t, types):\n    \"\"\" Returns a format string for printing the given struct type. \"\"\"\n    fields = []\n    for (name, argtype) in type_description(t, types)[\"struct\"].items():\n        printf_specifier = type_description(argtype, types).get(\"printf_specifier\", None)\n        if printf_specifier != None:\n            fields.append(\"\\\"\"+name +\"\\\"\" + \" : \" + printf_specifier)\n        else:\n            # Yay, recursion!\n            struct_format = printf_format_for_struct(argtype, types)\n            fields.append(\"\\\"\"+name +\"\\\"\" + \" : \" + struct_format)\n    return \"{%s}\" % \", \".join(fields)\n\ndef serialize_argument_at_idx(idx, all_args, accessor, types):\n    \"\"\" For an argument at the given index, returns a serialization\n    statement for it's value. \"\"\"\n    type_name = all_args[idx][\"type\"]\n    return serialize_type(type_name, accessor, types)\n\ndef serialize_type(name, accessor, types):\n    \"\"\" Returns a serialization statement for the given type. \"\"\"\n    name = name.strip()\n    description = type_description(name, types)\n    if \"struct\" in description:\n        return serialize_struct_type(name, accessor, types)\n    elif \"template\" in description:\n        return serialize_type_with_template(name, accessor, types)\n    else:\n        cast = description.get(\"cast\", dereference_type(name))\n        return serialize_atomic_type(name, cast, accessor)\n\ndef serialize_atomic_type(argtype, cast, accessor):\n    \"\"\" Returns a serialization statement for the given atomic type.\n    In case of pointers, values they're referencing will be used instead\n    (see `dereference_type()` for exceptions). \"\"\"\n    # Do we need to dereference this argument and copy it to the userspace?\n    if dereference_type(argtype) == argtype:\n        # Nope: it's a value type\n        return \"(%s)(%s)\" % (cast, accessor)\n    else:\n        # Yep: it's a reference type\n        real_type = dereference_type(argtype)\n        t = (accessor, cast, real_type, accessor, real_type)\n        return \"!!(%s) ? (%s)0 : *(%s *)copyin((uint64_t)%s, sizeof(%s))\" % t\n\ndef serialize_struct_type(struct_type, accessor, types):\n    \"\"\" Returns a serialization statement for the given structure type. \"\"\"\n    fields = []\n    if struct_type == dereference_type(struct_type):\n        memeber_operator = \".\"\n    else:\n        memeber_operator = \"->\"\n    structure = type_description(struct_type, types)[\"struct\"]\n    for (field_name, field_type) in structure.iteritems():\n        fields.append(serialize_type(\n            field_type,\n            \"((%s)(%s))\" % (struct_type, accessor) + memeber_operator + field_name,\n            types\n        ))\n    return \", \".join(fields)\n\ndef serialize_type_with_template(oftype, accessor, types):\n    \"\"\" Returns a serialization template for the given type\n    with all placeholders replaced with the actual values. \"\"\"\n    template = Template(type_description(oftype, types)[\"template\"])\n    mapping = {\"ARG\" : accessor}\n    # TODO(rodionovd): add support for buffers (ARG_SIZE)\n    return template.substitute(mapping)\n\n# -------------------------------\n\ndef dereference_type(t):\n    \"\"\" Removes everything after the last star character in a type string,\n    except for 'void *' and 'char *`. \"\"\"\n    if t.strip() in [\"void *\", \"char *\"]:\n        return t.strip()\n    try:\n        return t[:t.rindex(\"*\")].strip()\n    except:\n        return t.strip()\n\ndef type_description(name, types):\n    \"\"\" Returns a dictionary description the given type. See `types.yml`\n    for more information about keys and values there. \"\"\"\n    return types[dereference_type(name)]\n\n# -----------------------------------------------------------------------\n\ndef push_on_stack_section(args):\n    \"\"\" Composes a \"push arguments on stack\" section of\n    an entry PID dtrace probe. \"\"\"\n    if len(args) == 0:\n        return \"\"\n    parts = [\"self->deeplevel++;\"]\n    for idx in xrange(len(args)):\n        parts.append(\n            \"\"\"self->arguments_stack[self->deeplevel, \\\"arg%d\\\"] = self->arg%d;\\n\\tself->arg%d = arg%d;\"\"\" % (idx, idx, idx, idx)\n        )\n    return \"\\n\\t\".join(parts)\n\n\ndef pop_from_stack_section(args):\n    \"\"\" Composes a \"pop arguments from stack\" section of\n    a return PID dtrace probe. \"\"\"\n    if len(args) == 0:\n        return \"\"\n    parts = []\n    for idx in xrange(len(args)):\n        parts.append(\"\"\"self->arg%d = self->arguments_stack[self->deeplevel, \\\"arg%d\\\"];\n\\tself->arguments_stack[self->deeplevel, \\\"arg%d\\\"] = 0;\"\"\" % (idx, idx, idx))\n    parts.append(\"--self->deeplevel;\")\n    return \"\\n\\t\" + \"\\n\\t\".join(parts)\n\n\nENTRY_PROBE_TEMPLATE = \"\"\"pid$$target:${__LIBRARY__}:${__NAME__}:entry\n{\n\\t${__ARGUMENTS_PUSH_ON_STACK__}\n}\\n\"\"\"\n\nRETURN_PROBE_TEMPLATE = \"\"\"pid$$target:${__LIBRARY__}:${__NAME__}:return\n{\n\\tthis->retval = arg1;\n\\tthis->timestamp_ms = walltimestamp/1000000;\n\\tprintf(\"{\\\\\\\"api\\\\\\\":\\\\\\\"%s\\\\\\\", \\\\\\\"args\\\\\\\":[${__ARGS_FORMAT_STRING__}], \\\\\\\"retval\\\\\\\":${__RETVAL_FORMAT_SPECIFIER__}, \\\\\\\"timestamp\\\\\\\":%lld, \\\\\\\"pid\\\\\\\":%d, \\\\\\\"ppid\\\\\\\":%d, \\\\\\\"tid\\\\\":%d, \\\\\\\"errno\\\\\\\":%d}\\\\n\",\n\\t\\tprobefunc,${__ARGUMENTS__}\n\\t\\t${__RETVAL__},\n\\t\\t(int64_t)this->timestamp_ms, pid, ppid, tid, errno);${__ARGUMENTS_POP_FROM_STACK__}\n}\\n\"\"\"\n\nHEADER = \"\"\"/* For some reason either dtrace or clang preprocessor refuses to identify standard\n * C integer types like int64_t or uint8_t. Thus we must include stdint.h with the\n * following patches.\n */\n/* (1) fix sys/_types/_int8_t.h */\n#define __signed signed\n/* (2) cdefs.h throws \"Unsupported compiler detected\" warning, ignore it */\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-W#warnings\"\n#include <stdint.h>\n#include <stddef.h>\n#pragma clang diagnostic pop\n\\n\n\"\"\"\n"
  },
  {
    "path": "analyzer/darwin/lib/dtrace/common.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2015 Dmitry Rodionov\n# This software may be modified and distributed under the terms\n# of the MIT license. See the LICENSE file for details.\n\nfrom os import path\nfrom time import sleep\n\ndef sanitize_path(raw_path):\n    \"\"\" Replace spaces with backslashes+spaces \"\"\"\n    return raw_path.replace(\" \", \"\\\\ \")\n\ndef path_for_script(script):\n    \"\"\" Return the full path for the given script \"\"\"\n    return path.join(current_directory(), script)\n\ndef current_directory():\n    return path.dirname(path.abspath(__file__))\n\ndef filelines(source_file):\n    \"\"\" A generator that returns lines of the file.\n    If there're no new lines it waits until the file is updated.\n    \"\"\"\n    # Go to the end of the file\n    source_file.seek(0, 2)\n    while True:\n        line = source_file.readline()\n        if not line:\n            # Sleep briefly\n            sleep(0.1)\n            continue\n        yield line\n"
  },
  {
    "path": "analyzer/darwin/lib/dtrace/dtruss.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2015 Dmitry Rodionov\n# This software may be modified and distributed under the terms\n# of the MIT license. See the LICENSE file for details.\n\nimport os\nimport json\nfrom getpass import getuser\nfrom collections import namedtuple\nfrom subprocess import Popen\nfrom tempfile import NamedTemporaryFile\n\nfrom common import *\n\nsyscall = namedtuple(\"syscall\", \"name args result errno timestamp pid\")\n\n\ndef dtruss(target, **kwargs):\n    \"\"\"Returns a list of syscalls made by a target.\n\n    Every syscall is a named tuple with the following properties:\n    name (string), args (list), result (int), errno (int),\n    timestamp(int) and pid(int).\n    \"\"\"\n\n    if not target:\n        raise Exception(\"Invalid target for dtruss()\")\n\n    output_file = NamedTemporaryFile()\n\n    cmd = [\"/bin/bash\", path_for_script(\"dtruss.sh\"), \"-W\", output_file.name, \"-f\"]\n    # Add timeout\n    if (\"timeout\" in kwargs) and (kwargs[\"timeout\"] is not None):\n        cmd += [\"-K\", str(kwargs[\"timeout\"])]\n    # Watch for a specific syscall only\n    if \"syscall\" in kwargs:\n        watch_specific_syscall = True\n        cmd += [\"-t\", kwargs[\"syscall\"]]\n    else:\n        watch_specific_syscall = False\n\n    if \"run_as_root\" in kwargs:\n        run_as_root = kwargs[\"run_as_root\"]\n    else:\n        run_as_root = False\n\n    # When we don't want to run the target as root, we have to drop privileges\n    # with `sudo -u current_user` right before calling the target.\n    if not run_as_root:\n        cmd += [\"sudo\", \"-u\", getuser()]\n    # Add target path\n    cmd += [sanitize_path(target)]\n    # Arguments for the target\n    if \"args\" in kwargs:\n        cmd += kwargs[\"args\"]\n\n    # The dtrace script will take care of timeout itself, so we just launch\n    # it asynchronously\n    with open(os.devnull, \"w\") as f:\n        handle = Popen(cmd, stdout=f, stderr=f)\n\n    # If we use `sudo -u` for dropping root privileges, we also have to\n    # exclude it's output from the results\n    sudo_pid = None\n\n    for entry in filelines(output_file):\n        if \"## dtruss.sh done ##\" in entry.strip():\n            break\n        syscall = _parse_syscall(entry.strip())\n        if syscall is None:\n            continue\n\n        # sudo's syscalls will be the first ones, so remember its pid\n        if not run_as_root and sudo_pid is None and not watch_specific_syscall:\n            sudo_pid = syscall.pid\n        elif syscall.pid != sudo_pid:\n            yield syscall\n\n    output_file.close()\n\n\n#\n# Parsing implementation details\n#\n\ndef _parse_syscall(string):\n    string = string.replace(\"\\\\0\", \"\")\n    try:\n        parsed = json.loads(string)\n    except:\n        return None\n\n    name = parsed[\"syscall\"]\n    args = parsed[\"args\"]\n    result = parsed[\"retval\"]\n    errno = parsed[\"errno\"]\n    pid = parsed[\"pid\"]\n    timestamp = parsed[\"timestamp\"]\n\n    return syscall(name=name, args=args, result=result, errno=errno, pid=pid,\n                   timestamp=timestamp)\n"
  },
  {
    "path": "analyzer/darwin/lib/dtrace/dtruss.sh",
    "content": "#!/bin/sh\n# #!/usr/bin/sh\n#\n# dtruss - print process system call time details.\n#          Written using DTrace (Solaris 10 3/05).\n#\n# 17-Jun-2005, ver 0.80         (check for newer versions)\n#\n# USAGE: dtruss [-acdeflhoLs] [-t syscall] { -p PID | -n name | command }\n#\n#          -p PID          # examine this PID\n#          -n name         # examine this process name\n#          -t syscall      # examine this syscall only\n#          -a              # print all details\n#          -c              # print system call counts\n#          -d              # print relative timestamps (us)\n#          -e              # print elapsed times (us)\n#          -f              # follow children as they are forked\n#          -l              # force printing of pid/lwpid per line\n#          -o              # print on cpu times (us)\n#          -s              # print stack backtraces\n#          -L              # don't print pid/lwpid per line\n#          -b bufsize      # dynamic variable buf size (default is \"4m\")\n#          -K timeout      # timeout of analysis\n#          -W file         # redirect all output to a specified file\n#  eg,\n#       dtruss df -h       # run and examine the \"df -h\" command\n#       dtruss -p 1871     # examine PID 1871\n#       dtruss -n tar      # examine all processes called \"tar\"\n#       dtruss -f test.sh  # run test.sh and follow children\n#\n# The elapsed times are interesting, to help identify syscalls that take\n#  some time to complete (during which the process may have context\n#  switched off the CPU).\n#\n# SEE ALSO: procsystime    # DTraceToolkit\n#           dapptrace      # DTraceToolkit\n#           truss\n#\n# COPYRIGHT: Copyright (c) 2005 Brendan Gregg.\n#\n# CDDL HEADER START\n#\n#  The contents of this file are subject to the terms of the\n#  Common Development and Distribution License, Version 1.0 only\n#  (the \"License\").  You may not use this file except in compliance\n#  with the License.\n#\n#  You can obtain a copy of the license at Docs/cddl1.txt\n#  or http://www.opensolaris.org/os/licensing.\n#  See the License for the specific language governing permissions\n#  and limitations under the License.\n#\n# CDDL HEADER END\n#\n# Author: Brendan Gregg  [Sydney, Australia]\n#\n# TODO: Track signals, more output formatting.\n#\n# 29-Apr-2005   Brendan Gregg   Created this.\n# 09-May-2005      \"      \"     Fixed evaltime (thanks Adam L.)\n# 16-May-2005      \"      \"     Added -t syscall tracing.\n# 17-Jun-2005      \"      \"     Added -s stack backtraces.\n#\n\n\n##############################\n# --- Process Arguments ---\n#\n\n### Default variables\nopt_pid=0; opt_name=0; pid=0; pname=\".\"\nopt_elapsed=0; opt_cpu=0; opt_counts=0;\nopt_relative=0; opt_printid=0; opt_follow=0\nopt_command=0; command=\"\"; opt_buf=0; buf=\"4m\"\nopt_trace=0; trace=\".\"; opt_stack=0;\nopt_timeout=0; timeout=-1; output_file=\"/dev/stderr\"\n\n### Process options\nwhile getopts ab:cdefhln:op:st:K:W:L name\ndo\n        case $name in\n    b)    opt_buf=1; buf=$OPTARG ;;\n    p)    opt_pid=1; pid=$OPTARG ;;\n    n)    opt_name=1; pname=$OPTARG ;;\n    t)    opt_trace=1; trace=$OPTARG ;;\n    a)    opt_counts=1; opt_relative=1; opt_elapsed=1; opt_follow=1\n          opt_printid=1; opt_cpu=1 ;;\n    c)    opt_counts=1 ;;\n    d)    opt_relative=1 ;;\n    e)    opt_elapsed=1 ;;\n    f)    opt_follow=1 ;;\n    l)    opt_printid=1 ;;\n    o)    opt_cpu=1 ;;\n    L)    opt_printid=-1 ;;\n    s)    opt_stack=-1 ;;\n    K)  opt_timeout=1; timeout=$OPTARG ;;\n    W)  output_file=$OPTARG ;;\n        h|?)    cat <<-END >&2\n        USAGE: dtruss [-acdefholLs] [-t syscall] { -p PID | -n name | command }\n\n                  -p PID          # examine this PID\n                  -n name         # examine this process name\n                  -t syscall      # examine this syscall only\n                  -a              # print all details\n                  -c              # print syscall counts\n                  -d              # print relative times (us)\n                  -e              # print elapsed times (us)\n                  -f              # follow children\n                  -l              # force printing pid/lwpid\n                  -o              # print on cpu times\n                  -s              # print stack backtraces\n                  -L              # don't print pid/lwpid\n                  -b bufsize      # dynamic variable buf size\n           eg,\n               dtruss df -h       # run and examine \"df -h\"\n               dtruss -p 1871     # examine PID 1871\n               dtruss -n tar      # examine all processes called \"tar\"\n               dtruss -f test.sh  # run test.sh and follow children\n        END\n        exit 1\n        esac\ndone\nshift `expr $OPTIND - 1`\n\n### Option logic\nif [ $opt_pid -eq 0 -a $opt_name -eq 0 ]; then\n    opt_command=1\n    if [ \"$*\" = \"\" ]; then\n        $0 -h\n        exit\n    fi\n    command=\"$*\"    # yes, I meant $*!\nfi\nif [ $opt_follow -eq 1 -o $opt_name -eq 1 ]; then\n    if [ $opt_printid -ne -1 ]; then\n        opt_printid=1\n    else\n        opt_printid=0\n    fi\nfi\n\n### Option translation\n## if [ \"$trace\" = \"exec\" ]; then trace=\"exece\"; fi\nif [ \"$trace\" = \"exec\" ]; then trace=\"execve\"; fi\n\n\n#################################\n# --- Main Program, DTrace ---\n#\n\n### Define D Script\ndtrace='\n #pragma D option quiet\n\n /*\n  * Command line arguments\n  */\n inline int OPT_command   = '$opt_command';\n inline int OPT_follow    = '$opt_follow';\n inline int OPT_printid   = '$opt_printid';\n inline int OPT_relative  = '$opt_relative';\n inline int OPT_elapsed   = '$opt_elapsed';\n inline int OPT_cpu       = '$opt_cpu';\n inline int OPT_counts    = '$opt_counts';\n inline int OPT_pid       = '$opt_pid';\n inline int OPT_name      = '$opt_name';\n inline int OPT_trace     = '$opt_trace';\n inline int OPT_stack     = '$opt_stack';\n inline int OPT_timeout   = '$opt_timeout';\n inline int PID           = '$pid';\n inline string NAME       = \"'$pname'\";\n inline string TRACE      = \"'$trace'\";\n\n dtrace:::BEGIN\n {\n    /* print header */\n    /* OPT_printid  ? printf(\"%-8s  \",\"PID/LWP\") : 1; */\n    /*OPT_printid  ? printf(\"\\t%-8s  \",\"PID/THRD\") : 1;\n    OPT_relative ? printf(\"%8s \",\"RELATIVE\") : 1;\n    OPT_elapsed  ? printf(\"%7s \",\"ELAPSD\") : 1;\n    OPT_cpu      ? printf(\"%6s \",\"CPU\") : 1;*/\n    /*printf(\"SYSCALL(args) \\t\\t = return\\n\");*/\n\n    /* globals */\n    trackedpid[pid] = 0;\n    self->child = 0;\n    this->type = 0;\n    TIMEOUT = '$timeout';\n }\n\n /*\n  * Save syscall entry info\n  */\n\n /* MacOS X: notice first appearance of child from fork. Its parent\n    fires syscall::*fork:return in the ususal way (see below) */\n syscall:::entry\n /OPT_follow && trackedpid[ppid] == -1 && 0 == self->child/\n {\n    /* set as child */\n    self->child = 1;\n\n    /* print output */\n    self->code = errno == 0 ? \"\" : \"Err#\";\n    /* OPT_printid  ? printf(\"%5d/%d:  \",pid,tid) : 1; */\n    OPT_printid  ? printf(\"%5d/0x%x:  \",pid,tid) : 1;\n    OPT_relative ? printf(\"%8d:  \",vtimestamp/1000) : 1;\n    OPT_elapsed  ? printf(\"%7d:  \",0) : 1;\n    OPT_cpu      ? printf(\"%6d \",0) : 1;\n\n    /*\n    printf(\"%s()\\t\\t = %d %s%d\\n\",\"fork\",\n        0,self->code,(int)errno);\n    */\n\n    this->timestamp = walltimestamp / 1000000000;\n    printf(\"{\\\"syscall\\\":\\\"%s\\\", \\\"args\\\":[], \\\"retval\\\":%d, \\\"errno\\\":%d, \\\"timestamp\\\":%d, \\\"pid\\\":%d}\\n\",\n        \"fork\", 0, (int)errno, this->timestamp, pid);\n }\n\n /* MacOS X: notice first appearance of child and parent from vfork */\n syscall:::entry\n /OPT_follow && trackedpid[ppid] > 0 && 0 == self->child/\n {\n    /* set as child */\n    this->vforking_tid = trackedpid[ppid];\n    self->child = (this->vforking_tid == tid) ? 0 : 1;\n\n    /* print output */\n    self->code = errno == 0 ? \"\" : \"Err#\";\n    /* OPT_printid  ? printf(\"%5d/%d:  \",pid,tid) : 1; */\n    /*OPT_printid  ? printf(\"%5d/0x%x:  \",(this->vforking_tid == tid) ? ppid : pid,tid) : 1;\n    OPT_relative ? printf(\"%8d:  \",vtimestamp/1000) : 1;\n    OPT_elapsed  ? printf(\"%7d:  \",0) : 1;\n    OPT_cpu      ? printf(\"%6d \",0) : 1;*/\n\n    /*\n    printf(\"%s()\\t\\t = %d %s%d\\n\",\"vfork\",\n        (this->vforking_tid == tid) ? pid : 0,self->code,(int)errno);\n    */\n\n    this->timestamp = walltimestamp / 1000000000;\n    printf(\"{\\\"syscall\\\":\\\"%s\\\", \\\"args\\\":[], \\\"retval\\\":%d, \\\"errno\\\":%d, \\\"timestamp\\\":%d, \\\"pid\\\":%d}\\n\",\n        \"vfork\",\n        (this->vforking_tid == tid) ? pid : 0,\n        (int)errno,\n        this->timestamp, pid);\n }\n\n syscall:::entry\n /(OPT_command && pid == $target) ||\n  (OPT_pid && pid == PID) ||\n  (OPT_name && NAME == strstr(NAME, execname)) ||\n  (OPT_name && execname == strstr(execname, NAME)) ||\n  (self->child)/\n {\n    /* set start details */\n    self->start = timestamp;\n    self->vstart = vtimestamp;\n    self->arg0 = arg0;\n    self->arg1 = arg1;\n    self->arg2 = arg2;\n\n    /* count occurances */\n    OPT_counts == 1 ? @Counts[probefunc] = count() : 1;\n }\n\n/* 5 and 6 arguments */\n syscall::select:entry,\n syscall::mmap:entry,\n syscall::pwrite:entry,\n syscall::pread:entry\n /(OPT_command && pid == $target) ||\n  (OPT_pid && pid == PID) ||\n  (OPT_name && NAME == strstr(NAME, execname)) ||\n  (OPT_name && execname == strstr(execname, NAME)) ||\n  (self->child)/\n {\n    self->arg3 = arg3;\n    self->arg4 = arg4;\n    self->arg5 = arg5;\n }\n\n /*\n  * Follow children\n  */\n syscall::fork:entry\n /OPT_follow && self->start/\n {\n    /* track this parent process */\n    trackedpid[pid] = -1;\n }\n\n syscall::vfork:entry\n /OPT_follow && self->start/\n {\n    /* track this parent process */\n    trackedpid[pid] = tid;\n }\n\n /* syscall::rexit:entry */\n syscall::exit:entry\n {\n    /* forget child */\n    self->child = 0;\n    trackedpid[pid] = 0;\n }\n\n /*\n  * Check for syscall tracing\n  */\n syscall:::entry\n /OPT_trace && probefunc != TRACE/\n {\n    /* drop info */\n    self->start = 0;\n    self->vstart = 0;\n    self->arg0 = 0;\n    self->arg1 = 0;\n    self->arg2 = 0;\n    self->arg3 = 0;\n    self->arg4 = 0;\n    self->arg5 = 0;\n }\n\n /*\n  * Print return data\n  */\n\n /*\n  * NOTE:\n  *  The following code is written in an intentionally repetetive way.\n  *  The first versions had no code redundancies, but performed badly during\n  *  benchmarking. The priority here is speed, not cleverness. I know there\n  *  are many obvious shortcuts to this code, Ive tried them. This style has\n  *  shown in benchmarks to be the fastest (fewest probes, fewest actions).\n  */\n\n /* print 3 args, return as hex */\n syscall::sigprocmask:return\n /self->start/\n {\n    /* calculate elapsed time */\n    this->elapsed = timestamp - self->start;\n    self->start = 0;\n    this->cpu = vtimestamp - self->vstart;\n    self->vstart = 0;\n    self->code = errno == 0 ? \"\" : \"Err#\";\n\n    /* print optional fields */\n    /* OPT_printid  ? printf(\"%5d/%d:  \",pid,tid) : 1; */\n    /*OPT_printid  ? printf(\"%5d/0x%x:  \",pid,tid) : 1;\n    OPT_relative ? printf(\"%8d \",vtimestamp/1000) : 1;\n    OPT_elapsed  ? printf(\"%7d \",this->elapsed/1000) : 1;\n    OPT_cpu ? printf(\"%6d \",this->cpu/1000) : 1;*/\n\n    /* print main data */\n\n    /*\n    printf(\"%s(0x%X, 0x%X, 0x%X)\\t\\t = 0x%X %s%d\\n\",probefunc,\n        (int)self->arg0,self->arg1,self->arg2,(int)arg0,\n        self->code,(int)errno);\n    */\n\n    this->timestamp = walltimestamp / 1000000000;\n    printf(\"{\\\"syscall\\\":\\\"%s\\\", \\\"args\\\":[%u, %u, %u], \\\"retval\\\":%d, \\\"errno\\\":%d, \\\"timestamp\\\":%d, \\\"pid\\\":%d}\\n\",\n        probefunc,\n        (int)self->arg0, self->arg1, self->arg2,\n        (int)arg0,\n        (int)errno,\n        this->timestamp, pid);\n\n    OPT_stack ? ustack()    : 1;\n    OPT_stack ? trace(\"\\n\") : 1;\n    self->arg0 = 0;\n    self->arg1 = 0;\n    self->arg2 = 0;\n }\n\n /* print 3 args, arg0 as a string */\n syscall::execve:return,\n syscall::stat:return,\n syscall::stat64:return,\n syscall::lstat:return,\n syscall::lstat64:return,\n syscall::access:return,\n syscall::mkdir:return,\n syscall::chdir:return,\n syscall::chroot:return,\n syscall::getattrlist:return, /* XXX 5 arguments */\n syscall::chown:return,\n syscall::lchown:return,\n syscall::chflags:return,\n syscall::readlink:return,\n syscall::utimes:return,\n syscall::pathconf:return,\n syscall::truncate:return,\n syscall::getxattr:return,\n syscall::setxattr:return,\n syscall::removexattr:return,\n syscall::unlink:return,\n syscall::open:return,\n syscall::open_nocancel:return\n /self->start/\n {\n    /* calculate elapsed time */\n    this->elapsed = timestamp - self->start;\n    self->start = 0;\n    this->cpu = vtimestamp - self->vstart;\n    self->vstart = 0;\n    self->code = errno == 0 ? \"\" : \"Err#\";\n\n    /* print optional fields */\n    /* OPT_printid  ? printf(\"%5d/%d:  \",pid,tid) : 1; */\n    /*OPT_printid  ? printf(\"%5d/0x%x:  \",pid,tid) : 1;\n    OPT_relative ? printf(\"%8d \",vtimestamp/1000) : 1;\n    OPT_elapsed  ? printf(\"%7d \",this->elapsed/1000) : 1;\n    OPT_cpu      ? printf(\"%6d \",this->cpu/1000) : 1;*/\n\n    /* print main data */\n    /*\n    printf(\"%s(\\\"%S\\\", 0x%X, 0x%X)\\t\\t = %d %s%d\\n\",probefunc,\n        copyinstr(self->arg0),self->arg1,self->arg2,(int)arg0,\n        self->code,(int)errno);\n    */\n\n    this->timestamp = walltimestamp / 1000000000;\n    printf(\"{\\\"syscall\\\":\\\"%s\\\", \\\"args\\\":[\\\"%S\\\", %u, %u], \\\"retval\\\":%d, \\\"errno\\\":%d, \\\"timestamp\\\":%d, \\\"pid\\\":%d}\\n\",\n        probefunc,\n        copyinstr(self->arg0), self->arg1, self->arg2,\n        (int)arg0,\n        (int)errno,\n        this->timestamp, pid);\n\n    OPT_stack ? ustack()    : 1;\n    OPT_stack ? trace(\"\\n\") : 1;\n    self->arg0 = 0;\n    self->arg1 = 0;\n    self->arg2 = 0;\n }\n\n /* print 3 args, arg1 as a string */\n syscall::write:return,\n syscall::write_nocancel:return,\n syscall::read:return,\n syscall::read_nocancel:return\n /self->start/\n {\n    /* calculate elapsed time */\n    this->elapsed = timestamp - self->start;\n    self->start = 0;\n    this->cpu = vtimestamp - self->vstart;\n    self->vstart = 0;\n    self->code = errno == 0 ? \"\" : \"Err#\";\n\n    /* print optional fields */\n    /* OPT_printid  ? printf(\"%5d/%d:  \",pid,tid) : 1; */\n    /*OPT_printid  ? printf(\"%5d/0x%x:  \",pid,tid) : 1;\n    OPT_relative ? printf(\"%8d \",vtimestamp/1000) : 1;\n    OPT_elapsed  ? printf(\"%7d \",this->elapsed/1000) : 1;\n    OPT_cpu      ? printf(\"%6d \",this->cpu/1000) : 1;*/\n\n    /* print main data */\n\n    /*\n    printf(\"%s(0x%X, \\\"%S\\\", 0x%X)\\t\\t = %d %s%d\\n\",probefunc,self->arg0,\n        arg0 == -1 ? \"\" : stringof(copyin(self->arg1,arg0)),self->arg2,(int)arg0,\n        self->code,(int)errno);\n\n    */\n\n    this->timestamp = walltimestamp / 1000000000;\n    printf(\"{\\\"syscall\\\":\\\"%s\\\", \\\"args\\\":[%u, \\\"%S\\\", %u], \\\"retval\\\":%d, \\\"errno\\\":%d, \\\"timestamp\\\":%d, \\\"pid\\\":%d}\\n\",\n        probefunc,\n        self->arg0, arg0 == -1 ? \"\" : stringof(copyin(self->arg1,arg0)), self->arg2,\n        (int)arg0,\n        (int)errno,\n        this->timestamp, pid);\n\n\n    OPT_stack ? ustack()    : 1;\n    OPT_stack ? trace(\"\\n\") : 1;\n    self->arg0 = 0;\n    self->arg1 = 0;\n    self->arg2 = 0;\n }\n\n /* print 2 args, arg0 and arg1 as strings */\n syscall::rename:return,\n syscall::symlink:return,\n syscall::link:return\n /self->start/\n {\n    /* calculate elapsed time */\n    this->elapsed = timestamp - self->start;\n    self->start = 0;\n    this->cpu = vtimestamp - self->vstart;\n    self->vstart = 0;\n    self->code = errno == 0 ? \"\" : \"Err#\";\n\n    /* print optional fields */\n    /* OPT_printid  ? printf(\"%5d/%d:  \",pid,tid) : 1; */\n    /*OPT_printid  ? printf(\"%5d/0x%x:  \",pid,tid) : 1;\n    OPT_relative ? printf(\"%8d \",vtimestamp/1000) : 1;\n    OPT_elapsed  ? printf(\"%7d \",this->elapsed/1000) : 1;\n    OPT_cpu      ? printf(\"%6d \",this->cpu/1000) : 1;*/\n\n    /* print main data */\n    /*\n    printf(\"%s(\\\"%S\\\", \\\"%S\\\")\\t\\t = %d %s%d\\n\",probefunc,\n        copyinstr(self->arg0), copyinstr(self->arg1),\n        (int)arg0,self->code,(int)errno);\n    */\n\n    this->timestamp = walltimestamp / 1000000000;\n    printf(\"{\\\"syscall\\\":\\\"%s\\\", \\\"args\\\":[\\\"%S\\\", \\\"%S\\\"], \\\"retval\\\":%d, \\\"errno\\\":%d, \\\"timestamp\\\":%d, \\\"pid\\\":%d}\\n\",\n        probefunc,\n        copyinstr(self->arg0), copyinstr(self->arg1),\n        (int)arg0,\n        (int)errno,\n        this->timestamp, pid);\n\n\n\n    OPT_stack ? ustack()    : 1;\n    OPT_stack ? trace(\"\\n\") : 1;\n    self->arg0 = 0;\n    self->arg1 = 0;\n    self->arg2 = 0;\n }\n\n /* print 0 arg output */\n syscall::*fork:return\n /self->start/\n {\n    /* calculate elapsed time */\n    this->elapsed = timestamp - self->start;\n    self->start = 0;\n    this->cpu = vtimestamp - self->vstart;\n    self->vstart = 0;\n    self->code = errno == 0 ? \"\" : \"Err#\";\n\n    /* print optional fields */\n    /* OPT_printid  ? printf(\"%5d/%d:  \",pid,tid) : 1; */\n    /*OPT_printid  ? printf(\"%5d/0x%x:  \",pid,tid) : 1;\n    OPT_relative ? printf(\"%8d \",vtimestamp/1000) : 1;\n    OPT_elapsed  ? printf(\"%7d \",this->elapsed/1000) : 1;\n    OPT_cpu      ? printf(\"%6d \",this->cpu/1000) : 1;*/\n\n    /* print main data */\n    /*\n    printf(\"%s()\\t\\t = %d %s%d\\n\",probefunc,\n        (int)arg0,self->code,(int)errno);\n\n    */\n\n    this->timestamp = walltimestamp / 1000000000;\n    printf(\"{\\\"syscall\\\":\\\"%s\\\", \\\"args\\\":[], \\\"retval\\\":%d, \\\"errno\\\":%d, \\\"timestamp\\\":%d, \\\"pid\\\":%d}\\n\",\n        probefunc,\n        (int)arg0,\n        (int)errno,\n        this->timestamp, pid);\n\n\n    OPT_stack ? ustack()    : 1;\n    OPT_stack ? trace(\"\\n\") : 1;\n    self->arg0 = 0;\n    self->arg1 = 0;\n    self->arg2 = 0;\n }\n\n /* print 1 arg output */\n syscall::close:return,\n syscall::close_nocancel:return\n /self->start/\n {\n    /* calculate elapsed time */\n    this->elapsed = timestamp - self->start;\n    self->start = 0;\n    this->cpu = vtimestamp - self->vstart;\n    self->vstart = 0;\n    self->code = errno == 0 ? \"\" : \"Err#\";\n\n    /* print optional fields */\n    /* OPT_printid  ? printf(\"%5d/%d:  \",pid,tid) : 1; */\n    /*OPT_printid  ? printf(\"%5d/0x%x:  \",pid,tid) : 1;\n    OPT_relative ? printf(\"%8d \",vtimestamp/1000) : 1;\n    OPT_elapsed  ? printf(\"%7d \",this->elapsed/1000) : 1;\n    OPT_cpu      ? printf(\"%6d \",this->cpu/1000) : 1;*/\n\n    /* print main data */\n    /*\n    printf(\"%s(0x%X)\\t\\t = %d %s%d\\n\",probefunc,self->arg0,\n        (int)arg0,self->code,(int)errno);\n    */\n\n    this->timestamp = walltimestamp / 1000000000;\n    printf(\"{\\\"syscall\\\":\\\"%s\\\", \\\"args\\\":[%u], \\\"retval\\\":%d, \\\"errno\\\":%d, \\\"timestamp\\\":%d, \\\"pid\\\":%d}\\n\",\n        probefunc,\n        self->arg0,\n        (int)arg0,\n        (int)errno,\n        this->timestamp, pid);\n\n\n    OPT_stack ? ustack()    : 1;\n    OPT_stack ? trace(\"\\n\") : 1;\n    self->arg0 = 0;\n    self->arg1 = 0;\n    self->arg2 = 0;\n }\n\n /* print 2 arg output */\n syscall::utimes:return,\n syscall::munmap:return\n /self->start/\n {\n    /* calculate elapsed time */\n    this->elapsed = timestamp - self->start;\n    self->start = 0;\n    this->cpu = vtimestamp - self->vstart;\n    self->vstart = 0;\n    self->code = errno == 0 ? \"\" : \"Err#\";\n\n    /* print optional fields */\n    /* OPT_printid  ? printf(\"%5d/%d:  \",pid,tid) : 1; */\n    /*OPT_printid  ? printf(\"%5d/0x%x:  \",pid,tid) : 1;\n    OPT_relative ? printf(\"%8d \",vtimestamp/1000) : 1;\n    OPT_elapsed  ? printf(\"%7d \",this->elapsed/1000) : 1;\n    OPT_cpu      ? printf(\"%6d \",this->cpu/1000) : 1;*/\n\n    /* print main data */\n    /*\n    printf(\"%s(0x%X, 0x%X)\\t\\t = %d %s%d\\n\",probefunc,self->arg0,\n        self->arg1,(int)arg0,self->code,(int)errno);\n    */\n\n    this->timestamp = walltimestamp / 1000000000;\n    printf(\"{\\\"syscall\\\":\\\"%s\\\", \\\"args\\\":[%u, %u], \\\"retval\\\":%d, \\\"errno\\\":%d, \\\"timestamp\\\":%d, \\\"pid\\\":%d}\\n\",\n        probefunc,\n        self->arg0, self->arg1,\n        (int)arg0,\n        (int)errno,\n        this->timestamp, pid);\n\n\n    OPT_stack ? ustack()    : 1;\n    OPT_stack ? trace(\"\\n\") : 1;\n    self->arg0 = 0;\n    self->arg1 = 0;\n    self->arg2 = 0;\n }\n\n /* print pread/pwrite with 4 arguments */\n syscall::pread*:return,\n syscall::pwrite*:return\n /self->start/\n {\n    /* calculate elapsed time */\n    this->elapsed = timestamp - self->start;\n    self->start = 0;\n    this->cpu = vtimestamp - self->vstart;\n    self->vstart = 0;\n    self->code = errno == 0 ? \"\" : \"Err#\";\n\n    /* print optional fields */\n    /* OPT_printid  ? printf(\"%5d/%d:  \",pid,tid) : 1; */\n    /*OPT_printid  ? printf(\"%5d/0x%x:  \",pid,tid) : 1;\n    OPT_relative ? printf(\"%8d \",vtimestamp/1000) : 1;\n    OPT_elapsed  ? printf(\"%7d \",this->elapsed/1000) : 1;\n    OPT_cpu      ? printf(\"%6d \",this->cpu/1000) : 1;*/\n\n    /* print main data */\n    /*\n    printf(\"%s(0x%X, \\\"%S\\\", 0x%X, 0x%X)\\t\\t = %d %s%d\\n\",probefunc,self->arg0,\n        stringof(copyin(self->arg1,self->arg2)),self->arg2,self->arg3,(int)arg0,self->code,(int)errno);\n    */\n\n    this->timestamp = walltimestamp / 1000000000;\n    printf(\"{\\\"syscall\\\":\\\"%s\\\", \\\"args\\\":[%u, %u, %u, %u], \\\"retval\\\":%d, \\\"errno\\\":%d, \\\"timestamp\\\":%d, \\\"pid\\\":%d}\\n\",\n        probefunc,\n        self->arg0, self->arg1, self->arg2, self->arg3,\n        (int)arg0,\n        (int)errno,\n        this->timestamp, pid);\n\n    OPT_stack ? ustack()    : 1;\n    OPT_stack ? trace(\"\\n\") : 1;\n    self->arg0 = 0;\n    self->arg1 = 0;\n    self->arg2 = 0;\n    self->arg3 = 0;\n }\n\n /* print select with 5 arguments */\n syscall::select:return\n /self->start/\n {\n    /* calculate elapsed time */\n    this->elapsed = timestamp - self->start;\n    self->start = 0;\n    this->cpu = vtimestamp - self->vstart;\n    self->vstart = 0;\n    self->code = errno == 0 ? \"\" : \"Err#\";\n\n    /* print optional fields */\n    /* OPT_printid  ? printf(\"%5d/%d:  \",pid,tid) : 1; */\n    /*OPT_printid  ? printf(\"%5d/0x%x:  \",pid,tid) : 1;\n    OPT_relative ? printf(\"%8d \",vtimestamp/1000) : 1;\n    OPT_elapsed  ? printf(\"%7d \",this->elapsed/1000) : 1;\n    OPT_cpu      ? printf(\"%6d \",this->cpu/1000) : 1;*/\n\n    /* print main data */\n    /*\n    printf(\"%s(0x%X, 0x%X, 0x%X, 0x%X, 0x%X)\\t\\t = %d %s%d\\n\",probefunc,self->arg0,\n        self->arg1,self->arg2,self->arg3,self->arg4,(int)arg0,self->code,(int)errno);\n    */\n\n\n    this->timestamp = walltimestamp / 1000000000;\n    printf(\"{\\\"syscall\\\":\\\"%s\\\", \\\"args\\\":[%u, %u, %u, %u, %u], \\\"retval\\\":%d, \\\"errno\\\":%d, \\\"timestamp\\\":%d, \\\"pid\\\":%d}\\n\",\n        probefunc,\n        self->arg0, self->arg1,self->arg2,self->arg3,self->arg4,\n        (int)arg0,\n        (int)errno,\n        this->timestamp, pid);\n\n    OPT_stack ? ustack()    : 1;\n    OPT_stack ? trace(\"\\n\") : 1;\n    self->arg0 = 0;\n    self->arg1 = 0;\n    self->arg2 = 0;\n    self->arg3 = 0;\n    self->arg4 = 0;\n }\n\n /* mmap has 6 arguments */\n syscall::mmap:return\n /self->start/\n {\n    /* calculate elapsed time */\n    this->elapsed = timestamp - self->start;\n    self->start = 0;\n    this->cpu = vtimestamp - self->vstart;\n    self->vstart = 0;\n    self->code = errno == 0 ? \"\" : \"Err#\";\n\n    /* print optional fields */\n    /* OPT_printid  ? printf(\"%5d/%d:  \",pid,tid) : 1; */\n    /*OPT_printid  ? printf(\"%5d/0x%x:  \",pid,tid) : 1;\n    OPT_relative ? printf(\"%8d \",vtimestamp/1000) : 1;\n    OPT_elapsed  ? printf(\"%7d \",this->elapsed/1000) : 1;\n    OPT_cpu      ? printf(\"%6d \",this->cpu/1000) : 1;*/\n\n    /* print main data */\n    /*\n    printf(\"%s(0x%X, 0x%X, 0x%X, 0x%X, 0x%X, 0x%X)\\t\\t = 0x%X %s%d\\n\",probefunc,self->arg0,\n        self->arg1,self->arg2,self->arg3,self->arg4,self->arg5, arg0,self->code,(int)errno);\n    */\n\n\n    this->timestamp = walltimestamp / 1000000000;\n    printf(\"{\\\"syscall\\\":\\\"%s\\\", \\\"args\\\":[%u, %u, %u, %u, %u, %u], \\\"retval\\\":%d, \\\"errno\\\":%d, \\\"timestamp\\\":%d, \\\"pid\\\":%d}\\n\",\n        probefunc,\n        self->arg0, self->arg1, self->arg2, self->arg3, self->arg4, self->arg5,\n        (int)arg0,\n        (int)errno,\n        this->timestamp, pid);\n\n\n    OPT_stack ? ustack()    : 1;\n    OPT_stack ? trace(\"\\n\") : 1;\n    self->arg0 = 0;\n    self->arg1 = 0;\n    self->arg2 = 0;\n    self->arg3 = 0;\n    self->arg4 = 0;\n    self->arg5 = 0;\n }\n\n /* print 3 arg output - default */\n syscall:::return\n /self->start/\n {\n    /* calculate elapsed time */\n    this->elapsed = timestamp - self->start;\n    self->start = 0;\n    this->cpu = vtimestamp - self->vstart;\n    self->vstart = 0;\n    self->code = errno == 0 ? \"\" : \"Err#\";\n\n    /* print optional fields */\n    /* OPT_printid  ? printf(\"%5d/%d:  \",pid,tid) : 1; */\n    /*OPT_printid  ? printf(\"%5d/0x%x:  \",pid,tid) : 1;\n    OPT_relative ? printf(\"%8d \",vtimestamp/1000) : 1;\n    OPT_elapsed  ? printf(\"%7d \",this->elapsed/1000) : 1;\n    OPT_cpu      ? printf(\"%6d \",this->cpu/1000) : 1;*/\n\n    /* print main data */\n    /*\n    printf(\"%s(0x%X, 0x%X, 0x%X)\\t\\t = %d %s%d\\n\",probefunc,self->arg0,\n        self->arg1,self->arg2,(int)arg0,self->code,(int)errno);\n    */\n\n    this->timestamp = walltimestamp / 1000000000;\n    printf(\"{\\\"syscall\\\":\\\"%s\\\", \\\"args\\\":[%u, %u, %u], \\\"retval\\\":%d, \\\"errno\\\":%d, \\\"timestamp\\\":%d, \\\"pid\\\":%d}\\n\",\n        probefunc,\n        self->arg0, self->arg1, self->arg2,\n        (int)arg0,\n        (int)errno,\n        this->timestamp, pid);\n\n    OPT_stack ? ustack()    : 1;\n    OPT_stack ? trace(\"\\n\") : 1;\n    self->arg0 = 0;\n    self->arg1 = 0;\n    self->arg2 = 0;\n }\n\n profile:::tick-1sec\n /OPT_timeout && TIMEOUT > 0/\n {\n     --TIMEOUT;\n }\n\n profile:::tick-1sec\n /OPT_timeout && TIMEOUT == 0/\n {\n     exit(0);\n }\n\n /* print counts */\n dtrace:::END\n {\n    OPT_counts == 1 ? printf(\"\\n%-32s %16s\\n\",\"CALL\",\"COUNT\") : 1;\n    OPT_counts == 1 ? printa(\"%-32s %@16d\\n\",@Counts) : 1;\n    printf(\"## dtruss.sh done ##\");\n }\n'\n\n### Run DTrace\n#if [ $opt_command -eq 1 ]; then\n#    /usr/sbin/dtrace -x dynvarsize=$buf -x evaltime=exec -n \"$dtrace\" \\\n#        -c \"$command\" >&2\n#else\n#    /usr/sbin/dtrace -x dynvarsize=$buf -n \"$dtrace\" >&2\n#fi\n\n### Run DTrace (Mac OS X)\nif [ $opt_command -eq 1 ]; then\n    sudo /usr/sbin/dtrace -x dynvarsize=$buf -x evaltime=exec -n \"$dtrace\" \\\n    -o \"$output_file\" -c \"$command\"\nelse\n    sudo /usr/sbin/dtrace -x dynvarsize=$buf -n \"$dtrace\" >&2 -o \"$output_file\"\nfi\n"
  },
  {
    "path": "analyzer/darwin/lib/dtrace/follow_children.d",
    "content": "/* apicalls.d\n*\n* Copyright (C) 2015 Dmitry Rodionov\n* This software may be modified and distributed under the terms\n* of the MIT license. See the LICENSE file for details.\n*\n*\n* Usage:\n*  1) `SCRIPT_NAME` and `OUTPUT_FILE` macros must be set in a master script;\n*  2) Global integer variable `countdown` must exist;\n*/\n\n/* Preprocessor magic: stringification */\n#define str(s) str0(s)\n#define str0(s) #s\n/* Since there's no built-in way to get an output file of the current script,\n* we have to inject it into the source code with preprocessor. */\n#if !defined(OUTPUT_FILE)\n#error Please, specify the output file (e.g. \"-DOUTPUT_FILE=./foo.log\")\n#endif\n\n#ifdef CHILD\ndtrace:::BEGIN\n{\n    pidresume($target);\n#ifdef WAS_EXECED\n    /* Since (1) we have now dtrace scripts attached to both\n    * parent and child processes and (2) they both have *the same* PID,\n    * we'll get the same results from both these scripts.\n    * To fix this, I just stop tracing the child here. */\n    exit(0);\n#endif /* WAS_EXECED */\n}\n\n/* TODO(rodionovd): it looks like there's a bug in Apple dtrace that keeps\n* dtrace running even when its target (specified via -p) was already terminated.\n* Maybe I'm doing something wrong, but here's a temporary workaround.\n*/\nsyscall::exit:entry\n/ pid == $target/\n{\n    exit(0);\n}\n#endif /* CHILD */\n\n/* FORK */\nproc:::create\n/ pid == $target /\n{\n    tracked[args[0]->pr_pid] = 1;\n}\n\n/* Attach a new instance of dtrace to the new child process.\n * Note that we pause the process before attaching dtrace to it, so we'll even\n * catch short-lived ones.\n */\nproc:::start\n/ tracked[pid] == 1 /\n{\n    tracked[pid] = 0;\n    stop();\n    system(\"sudo dtrace -Z -I./ -C -DCHILD=1 -DANALYSIS_TIMEOUT=%d -DSCRIPT_PATH=./%s -DOUTPUT_FILE=%s -s ./%s -o %s -p %d &\",\n    countdown, SCRIPT_NAME, str(OUTPUT_FILE), SCRIPT_NAME, str(OUTPUT_FILE), pid);\n}\n\n/* EXEC */\nproc:::exec\n/ pid == $target /\n{\n    tracked[pid] = 2;\n}\n\n/* Well, we were exec*(), now what?\n * Since a new image does contain different symbols and also may require different\n * shared libraries -- and we really want to be able to install probes on them -- we\n * must re-attach dtrace to this process again so it can see these new stuff.\n *\n * We wait some time to make sure that all shared libraries are loaded, stop()\n * (actually, pause) the process and then spawn a new instance of dtrace attached\n * to this process.\n * Why start64(\"/AppleInternal\")? This syscall happens at the end of a programm\n * initialization process, so it's a great place to do our thing.\n */\nsyscall::stat64:entry\n/ tracked[pid] == 2 && copyinstr(arg0) == \"/AppleInternal\\0\" /\n{\n    tracked[pid] = 0;\n    stop();\n    system(\"sudo dtrace -Z -I./ -C -DCHILD=1 -DWAS_EXECED=1 -DANALYSIS_TIMEOUT=%d -DSCRIPT_PATH=./%s -DOUTPUT_FILE=%s -s ./%s -o %s -p %d &\",\n    countdown, SCRIPT_NAME, str(OUTPUT_FILE), SCRIPT_NAME, str(OUTPUT_FILE), pid);\n}\n\ndtrace:::END\n{\n#ifdef TOPLEVELSCRIPT\n    system(\"sleep 1.5 && echo \\\"## %s done ##\\\" >> \\\"%s\\\"\", SCRIPT_NAME, str(OUTPUT_FILE));\n#endif\n}\n"
  },
  {
    "path": "analyzer/darwin/lib/dtrace/ipconnections.d",
    "content": "#!/usr/sbin/dtrace -C -s\n#pragma D option quiet\n/* ipconnections.d\n *\n * Copyright (C) 2015 Dmitry Rodionov\n * This software may be modified and distributed under the terms\n * of the MIT license. See the LICENSE file for details.\n *\n *\n * This script prints results in JSON format, where each entry is a dictionary:\n * {\n *     host        : string, // e.g. \"192.168.0.1\"\n *     host_port   : int,    // e.g. 49812\n *     remote      : string, // e.g. \"8.8.8.8\"\n *     remote_port : int,    // e.g. 80\n *     protocol    : string, // e.g. \"TCP\"\n *     timestamp   : int,    // e.g. 1433765405\n *     pid         : int     // e.g. 9213\n * }\n *\n */\n#ifndef ANALYSIS_TIMEOUT\n    #define ANALYSIS_TIMEOUT -1\n#endif\n\ndtrace:::BEGIN\n{\n    countdown = ANALYSIS_TIMEOUT;\n}\n\nip:::receive\n/pid == $target/\n{\n        this->protocol = args[2]->ip_ver == 4 ? args[4]->ipv4_protostr : args[5]->ipv6_nextstr;\n        this->host = args[2]->ip_daddr;\n        this->remote = args[2]->ip_saddr;\n        /* Since the second argument (csinfo_t) is always filled with zeros [0],\n         * the only way to get host and remote ports is to treat the third argument\n         * as a raw pointer to struct ip and access stuff from there.\n         *\n         * Thanks to Quinn \"The Eskimo!\" from Apple DTS team for this trick!\n         *\n         * [0]:\n         * From http://www.opensource.apple.com/source/xnu/xnu-2782.1.97/bsd/netinet/ip_output.c:\n         * ------------------------------------------\n         * DTRACE_IP6(send, struct mbuf *, m, struct inpcb *, NULL,\n\t     * struct ip *, ip, struct ifnet *, ifp,\n\t     * struct ip *, ip, struct ip6_hdr *, NULL);\n         * ------------------------------------------\n         * Note the NULL passed as a value for struct inpcb* (it will become\n         * csinfo_t in dtrace).\n         */\n        this->host_port = ntohs(*(uint16_t *)(arg2 + 22));\n        this->remote_port = ntohs(*(uint16_t *)(arg2 + 20));\n        /* Convert walltimestamp to unix timestamp */\n        this->timestamp = walltimestamp / 1000000000;\n\n        printf(\"{\\\"host\\\":\\\"%s\\\", \\\"host_port\\\":%d, \\\"remote\\\":\\\"%s\\\", \\\"remote_port\\\":%d, \\\"protocol\\\":\\\"%s\\\", \\\"timestamp\\\": %d, \\\"pid\\\":%d}\\n\",\n            this->host, this->host_port, this->remote, this->remote_port, this->protocol, this->timestamp, pid);\n}\nip:::send\n/pid == $target/\n{\n    this->protocol = args[2]->ip_ver == 4 ? args[4]->ipv4_protostr : args[5]->ipv6_nextstr;\n    this->host = args[2]->ip_saddr;\n    this->remote = args[2]->ip_daddr;\n    this->host_port = ntohs(*(uint16_t *)(arg2 + 20));\n    this->remote_port = ntohs(*(uint16_t *)(arg2 + 22));\n    this->timestamp = walltimestamp / 1000000000;\n\n    printf(\"{\\\"host\\\":\\\"%s\\\", \\\"host_port\\\":%d, \\\"remote\\\":\\\"%s\\\", \\\"remote_port\\\":%d, \\\"protocol\\\":\\\"%s\\\", \\\"timestamp\\\": %d, \\\"pid\\\":%d}\\n\",\n        this->host, this->host_port, this->remote, this->remote_port, this->protocol, this->timestamp, pid);\n}\n\nprofile:::tick-1sec\n/countdown > 0/\n{\n    --countdown;\n}\n\nprofile:::tick-1sec\n/ countdown == 0 /\n{\n    exit(0);\n}\n\ndtrace:::END\n{\n    printf(\"## ipconnections.d done ##\");\n}\n"
  },
  {
    "path": "analyzer/darwin/lib/dtrace/ipconnections.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2015 Dmitry Rodionov\n# This software may be modified and distributed under the terms\n# of the MIT license. See the LICENSE file for details.\n\nimport os\nimport json\nfrom common import *\nfrom subprocess import Popen\nfrom collections import namedtuple\nfrom tempfile import NamedTemporaryFile\n\nconnection = namedtuple(\"connection\",\n                        \"host host_port remote remote_port protocol timestamp, pid\")\n\n\ndef ipconnections(target, **kwargs):\n    \"\"\"Returns a list of ip connections made by the target.\n\n    A connection is a named tuple with the following properties:\n    host (string), host_port (int), remote_port (string), protocol (string),\n    timestamp(int).\n    \"\"\"\n    if not target:\n        raise Exception(\"Invalid target for ipconnections()\")\n\n    output_file = NamedTemporaryFile()\n    cmd = [\"sudo\", \"/usr/sbin/dtrace\", \"-C\"]\n    if \"timeout\" in kwargs:\n        cmd += [\"-DANALYSIS_TIMEOUT=%d\" % kwargs[\"timeout\"]]\n    cmd += [\"-s\", path_for_script(\"ipconnections.d\")]\n    cmd += [\"-o\", output_file.name]\n    if \"args\" in kwargs:\n        line = \"%s %s\" % (sanitize_path(target), \" \".join(kwargs[\"args\"]))\n        cmd += [\"-c\", line]\n    else:\n        cmd += [\"-c\", sanitize_path(target)]\n\n    # The dtrace script will take care of timeout itself, so we just launch\n    # it asynchronously\n    with open(os.devnull, \"w\") as f:\n        handler = Popen(cmd, stdout=f, stderr=f)\n\n    for entry in filelines(output_file):\n        if \"## ipconnections.d done ##\" in entry.strip():\n            break\n        yield _parse_single_entry(entry.strip())\n    output_file.close()\n\n\n#\n# Parsing implementation details\n#\n\ndef _parse_single_entry(entry):\n    entry = entry.replace(\"\\\\0\", \"\")\n    parsed = json.loads(entry)\n\n    host = parsed['host']\n    host_port = parsed['host_port']\n    remote = parsed['remote']\n    remote_port = parsed['remote_port']\n    protocol = parsed['protocol']\n    timestamp = parsed['timestamp']\n    pid = parsed['pid']\n    return connection(host, host_port, remote, remote_port, protocol, timestamp, pid)\n"
  },
  {
    "path": "analyzer/darwin/modules/__init__.py",
    "content": ""
  },
  {
    "path": "analyzer/darwin/modules/packages/__init__.py",
    "content": ""
  },
  {
    "path": "analyzer/darwin/modules/packages/app.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2015 Dmitry Rodionov\n# This software may be modified and distributed under the terms\n# of the MIT license. See the LICENSE file for details.\n\nfrom os import system, path\nfrom plistlib import readPlist\nfrom lib.core.packages import Package\n\nclass App(Package):\n    \"\"\" OS X application analysys package. \"\"\"\n\n    def prepare(self):\n        # We'll launch an executable file of this .app directly,\n        # but we need to know what it is, don't we?\n        info = readPlist(path.join(self.target, \"Contents\", \"Info.plist\"))\n        exe_name = info.get(\"CFBundleExecutable\")\n        if not exe_name:\n            raise Exception(\"Could not locate an executable of the app bundle\")\n\n        self.target = path.join(self.target, \"Contents\", \"MacOS\", exe_name)\n        # Make sure that our target is executable\n        system(\"/bin/chmod +x \\\"%s\\\"\" % self.target)\n"
  },
  {
    "path": "analyzer/darwin/modules/packages/bash.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2015 Dmitry Rodionov\n# This software may be modified and distributed under the terms\n# of the MIT license. See the LICENSE file for details.\n\nfrom lib.core.packages import Package\n\nclass Bash(Package):\n    \"\"\" Bash shell script analysys package. \"\"\"\n\n    def prepare(self):\n        self.args = [self.target] + self.args\n        self.target = \"/bin/bash\"\n"
  },
  {
    "path": "analyzer/darwin/modules/packages/macho.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2015 Dmitry Rodionov\n# This software may be modified and distributed under the terms\n# of the MIT license. See the LICENSE file for details.\n\nfrom os import system\nfrom lib.core.packages import Package\n\nclass Macho(Package):\n    \"\"\" Mach-O executable analysys package. \"\"\"\n\n    def prepare(self):\n        # Make sure that our target is executable\n        system(\"/bin/chmod +x \\\"%s\\\"\" % self.target)\n"
  },
  {
    "path": "analyzer/darwin/modules/packages/zip.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2015 Dmitry Rodionov\n# This software may be modified and distributed under the terms\n# of the MIT license. See the LICENSE file for details.\n\nimport logging\nfrom shutil import move\nfrom os import path, environ\nfrom random import SystemRandom\nfrom string import ascii_letters\nfrom subprocess import check_output\nfrom zipfile import ZipFile, BadZipfile\nfrom lib.core.packages import Package, choose_package_class\n\nlog = logging.getLogger(__name__)\n\nclass Zip(Package):\n\n    real_package = None\n\n    def prepare(self):\n        password = self.options.get(\"password\")\n        files = self._extract(self.target, password)\n        if not files or len(files) == 0:\n            raise Exception(\"Invalid (or empty) zip archive: %s\" % self.target)\n        # Look for a file to analyse\n        target_name = self.options.get(\"file\")\n        if not target_name:\n            # If no file name is provided via option, take the first file\n            target_name = files[0]\n            log.debug(\"Missing file option, auto executing: %s\", target_name)\n\n        filepath = path.join(environ.get(\"TEMP\", \"/tmp\"), target_name)\n        # Remove the trailing slash (if any)\n        if filepath.endswith(\"/\"):\n            self.target = filepath[:-1]\n        else:\n            self.target = filepath\n\n        # Since we don't know what kind of file we're going to analyse, let's\n        # detect it automatically and create an appropriate analysis package\n        # for this file\n        file_info = _fileinfo(self.target)\n        pkg_class = choose_package_class(file_info, target_name)\n\n        if not pkg_class:\n            raise Exception(\"Unable to detect analysis package for the file %s\" % target_name)\n        else:\n            log.debug(\"Analysing file \\\"%s\\\" using package \\\"%s\\\"\", target_name, pkg_class.__name__)\n\n        kwargs = {\n            \"options\" : self.options,\n            \"timeout\" : self.timeout\n        }\n        # We'll forward start() method invocation to the proper package later\n        self.real_package = pkg_class(self.target, self.host, **kwargs)\n\n    def start(self):\n        # We have nothing to do here; let the proper package do it's job\n        self.prepare()\n        if not self.real_package:\n            raise Exception(\"Invalid analysis package, aborting\")\n        self.real_package.start()\n\n    def _extract(self, filename, password):\n        archive_path = _prepare_archive_at_path(filename)\n        if not archive_path:\n            return None\n        # Extraction.\n        extract_path = environ.get(\"TEMP\", \"/tmp\")\n        with ZipFile(archive_path, \"r\") as archive:\n            try:\n                archive.extractall(path=extract_path, pwd=password)\n            except BadZipfile:\n                raise Exception(\"Invalid Zip file\")\n            # Try to extract it again, but with a default password\n            except RuntimeError:\n                try:\n                    archive.extractall(path=extract_path, pwd=\"infected\")\n                except RuntimeError as err:\n                    raise Exception(\"Unable to extract Zip file: %s\" % err)\n            finally:\n                self._extract_nested_archives(archive, extract_path, password)\n        return archive.namelist()\n\n    def _extract_nested_archives(self, archive, where, password):\n        for name in archive.namelist():\n            if name.endswith(\".zip\"):\n                self._extract(path.join(where, name), password)\n\n\ndef _prepare_archive_at_path(filename):\n    \"\"\" Verifies that there's a readable zip archive at the given path.\n\n    This function returns a new name for the archive (for most cases it's\n    the same as the original one; but if an archive named \"foo.zip\" contains\n    a file named \"foo\" this archive will be renamed to avoid being overwrite.\n    \"\"\"\n    # Verify that the archive is actually readable\n    try:\n        with ZipFile(filename, \"r\") as archive:\n            archive.close()\n    except BadZipfile:\n        return None\n    # Test if zip file contains a file named as itself\n    if _is_overwritten(filename):\n        log.debug(\"ZIP file contains a file with the same name, original is \\\n        going to be overwrite\")\n        # In this case we just change the file name\n        new_zip_path = filename + _random_extension()\n        move(filename, new_zip_path)\n        filename = new_zip_path\n    return filename\n\n\ndef _is_overwritten(zip_path):\n    archive = ZipFile(zip_path, \"r\")\n    try:\n        # Test if zip file contains a file named as itself\n        return any(n == path.basename(zip_path) for n in archive.namelist())\n    except BadZipfile:\n        raise Exception(\"Invalid Zip file\")\n\n\ndef _random_extension(length=5):\n    return '.' + ''.join(SystemRandom().choice(ascii_letters) for _ in range(length))\n\n\ndef _fileinfo(target):\n    raw = check_output([\"file\", target])\n    # The utility has the following output format: \"%filename%: %description%\",\n    # so we just skip everything before the actual description\n    return raw[raw.index(\":\")+2:]\n"
  },
  {
    "path": "analyzer/linux/analyzer.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport sys\nimport pkgutil\nimport logging\nimport tempfile\nimport xmlrpclib\nimport traceback\nimport time\nimport datetime\n\nfrom lib.api.process import Process\nfrom lib.common.abstracts import Package, Auxiliary\nfrom lib.common.constants import PATHS\nfrom lib.common.exceptions import CuckooError, CuckooPackageError\nfrom lib.common.results import upload_to_host\nfrom lib.core.config import Config\nfrom lib.core.startup import create_folders, init_logging\nfrom modules import auxiliary\n\nlog = logging.getLogger()\n\nPID = os.getpid()\nFILES_LIST = set()\nDUMPED_LIST = set()\nPROCESS_LIST = set()\nSEEN_LIST = set()\nPPID = Process(pid=PID).get_parent_pid()\n\ndef add_pids(pids):\n    \"\"\"Add PID.\"\"\"\n    if not isinstance(pids, (tuple, list, set)):\n        pids = [pids,]\n\n    for pid in pids:\n        log.info(\"Added new process to list with pid: %s\", pid)\n        pid = int(pid)\n        if not pid in SEEN_LIST: PROCESS_LIST.add(pid)\n        SEEN_LIST.add(pid)\n\ndef dump_files():\n    \"\"\"Dump all the dropped files.\"\"\"\n    for file_path in FILES_LIST:\n        log.info(\"PLS IMPLEMENT DUMP, want to dump %s\", file_path)\n\nclass Analyzer:\n    \"\"\"Cuckoo Linux Analyzer.\n\n    This class handles the initialization and execution of the analysis\n    procedure, including the auxiliary modules and the analysis packages.\n    \"\"\"\n\n    def __init__(self):\n        self.config = None\n        self.target = None\n\n    def prepare(self):\n        \"\"\"Prepare env for analysis.\"\"\"\n\n        # Create the folders used for storing the results.\n        create_folders()\n\n        # Initialize logging.\n        init_logging()\n\n        # Parse the analysis configuration file generated by the agent.\n        self.config = Config(cfg=\"analysis.conf\")\n\n        if self.config.get(\"clock\", None):\n            # Set virtual machine clock.\n            clock = datetime.datetime.strptime(self.config.clock, \"%Y%m%dT%H:%M:%S\")\n            # Setting date and time.\n            os.system(\"date -s \\\"{0}\\\"\".format(clock.strftime(\"%y-%m-%d %H:%M:%S\")))\n\n        # We update the target according to its category. If it's a file, then\n        # we store the path.\n        if self.config.category == \"file\":\n            self.target = os.path.join(tempfile.gettempdir(), self.config.file_name)\n        # If it's a URL, well.. we store the URL.\n        else:\n            self.target = self.config.target\n\n    def complete(self):\n        \"\"\"End analysis.\"\"\"\n        # Dump all the notified files.\n        dump_files()\n\n        # Hell yeah.\n        log.info(\"Analysis completed.\")\n\n    def run(self):\n        \"\"\"Run analysis.\n        @return: operation status.\n        \"\"\"\n        self.prepare()\n\n        log.debug(\"Starting analyzer from: %s\", os.getcwd())\n        log.debug(\"Storing results at: %s\", PATHS[\"root\"])\n\n        # If no analysis package was specified at submission, we try to select\n        # one automatically.\n        if not self.config.package:\n            log.debug(\"No analysis package specified, trying to detect \"\n                      \"it automagically.\")\n\n            if self.config.category == \"file\":\n                package = \"generic\"\n            else:\n                package = \"wget\"\n\n            # If we weren't able to automatically determine the proper package,\n            # we need to abort the analysis.\n            if not package:\n                raise CuckooError(\"No valid package available for file \"\n                                  \"type: {0}\".format(self.config.file_type))\n\n            log.info(\"Automatically selected analysis package \\\"%s\\\"\", package)\n        # Otherwise just select the specified package.\n        else:\n            package = self.config.package\n\n        # Generate the package path.\n        package_name = \"modules.packages.%s\" % package\n\n        # Try to import the analysis package.\n        try:\n            __import__(package_name, globals(), locals(), [\"dummy\"], -1)\n        # If it fails, we need to abort the analysis.\n        except ImportError:\n            raise CuckooError(\"Unable to import package \\\"{0}\\\", does \"\n                              \"not exist.\".format(package_name))\n\n        # Initialize the package parent abstract.\n        Package()\n\n        # Enumerate the abstract subclasses.\n        try:\n            package_class = Package.__subclasses__()[0]\n        except IndexError as e:\n            raise CuckooError(\"Unable to select package class \"\n                              \"(package={0}): {1}\".format(package_name, e))\n\n        # Initialize the analysis package.\n        pack = package_class(self.config.get_options())\n\n        # Initialize Auxiliary modules\n        Auxiliary()\n        prefix = auxiliary.__name__ + \".\"\n        for loader, name, ispkg in pkgutil.iter_modules(auxiliary.__path__, prefix):\n            if ispkg:\n                continue\n\n            # Import the auxiliary module.\n            try:\n                __import__(name, globals(), locals(), [\"dummy\"], -1)\n            except ImportError as e:\n                log.warning(\"Unable to import the auxiliary module \"\n                            \"\\\"%s\\\": %s\", name, e)\n\n        # Walk through the available auxiliary modules.\n        aux_enabled, aux_avail = [], []\n        for module in sorted(Auxiliary.__subclasses__(), key=lambda x: x.priority, reverse=True):\n            # Try to start the auxiliary module.\n            try:\n                aux = module()\n                aux_avail.append(aux)\n                aux.start()\n            except (NotImplementedError, AttributeError):\n                log.warning(\"Auxiliary module %s was not implemented\",\n                            aux.__class__.__name__)\n                continue\n            except Exception as e:\n                log.warning(\"Cannot execute auxiliary module %s: %s\",\n                            aux.__class__.__name__, e)\n                continue\n            finally:\n                log.debug(\"Started auxiliary module %s\",\n                          aux.__class__.__name__)\n                aux_enabled.append(aux)\n\n        # Start analysis package. If for any reason, the execution of the\n        # analysis package fails, we have to abort the analysis.\n        try:\n            pids = pack.start(self.target)\n        except NotImplementedError:\n            raise CuckooError(\"The package \\\"{0}\\\" doesn't contain a run \"\n                              \"function.\".format(package_name))\n        except CuckooPackageError as e:\n            raise CuckooError(\"The package \\\"{0}\\\" start function raised an \"\n                              \"error: {1}\".format(package_name, e))\n        except Exception as e:\n            raise CuckooError(\"The package \\\"{0}\\\" start function encountered \"\n                              \"an unhandled exception: \"\n                              \"{1}\".format(package_name, e))\n\n        # If the analysis package returned a list of process IDs, we add them\n        # to the list of monitored processes and enable the process monitor.\n        if pids:\n            add_pids(pids)\n            pid_check = True\n\n        # If the package didn't return any process ID (for example in the case\n        # where the package isn't enabling any behavioral analysis), we don't\n        # enable the process monitor.\n        else:\n            log.info(\"No process IDs returned by the package, running \"\n                     \"for the full timeout.\")\n            pid_check = False\n\n        # Check in the options if the user toggled the timeout enforce. If so,\n        # we need to override pid_check and disable process monitor.\n        if self.config.enforce_timeout:\n            log.info(\"Enabled timeout enforce, running for the full timeout.\")\n            pid_check = False\n\n        time_counter = 0\n\n        while True:\n            time_counter += 1\n            if time_counter == int(self.config.timeout):\n                log.info(\"Analysis timeout hit, terminating analysis.\")\n                break\n\n            try:\n                # If the process monitor is enabled we start checking whether\n                # the monitored processes are still alive.\n                if pid_check:\n                    for pid in list(PROCESS_LIST):\n                        if not Process(pid=pid).is_alive():\n                            log.info(\"Process with pid %s has terminated\", pid)\n                            PROCESS_LIST.remove(pid)\n\n                    # ask the package if it knows any new pids\n                    add_pids(pack.get_pids())\n\n                    # also ask the auxiliaries\n                    for aux in aux_avail:\n                        add_pids(aux.get_pids())\n\n                    # If none of the monitored processes are still alive, we\n                    # can terminate the analysis.\n                    if not PROCESS_LIST:\n                        log.info(\"Process list is empty, \"\n                                 \"terminating analysis.\")\n                        break\n\n                    # Update the list of monitored processes available to the\n                    # analysis package. It could be used for internal\n                    # operations within the module.\n                    pack.set_pids(PROCESS_LIST)\n\n                try:\n                    # The analysis packages are provided with a function that\n                    # is executed at every loop's iteration. If such function\n                    # returns False, it means that it requested the analysis\n                    # to be terminate.\n                    if not pack.check():\n                        log.info(\"The analysis package requested the \"\n                                 \"termination of the analysis.\")\n                        break\n\n                # If the check() function of the package raised some exception\n                # we don't care, we can still proceed with the analysis but we\n                # throw a warning.\n                except Exception as e:\n                    log.warning(\"The package \\\"%s\\\" check function raised \"\n                                \"an exception: %s\", package_name, e)\n            except Exception as e:\n                log.exception(\"The PID watching loop raised an exception: %s\", e)\n            finally:\n                # Zzz.\n                time.sleep(1)\n\n        try:\n            # Before shutting down the analysis, the package can perform some\n            # final operations through the finish() function.\n            pack.finish()\n        except Exception as e:\n            log.warning(\"The package \\\"%s\\\" finish function raised an \"\n                        \"exception: %s\", package_name, e)\n            \n        try:\n            # Upload files the package created to package_files in the results folder\n            package_files = pack.package_files()\n            if package_files != None:\n                for package in package_files:\n                    upload_to_host(package[0], os.path.join(\"package_files\", package[1]));\n        except Exception as e:\n            log.warning(\"The package \\\"%s\\\" package_files function raised an \"\n                        \"exception: %s\", package_name, e)\n            \n        # Terminate the Auxiliary modules.\n        for aux in sorted(aux_enabled, key=lambda x: x.priority):\n            try:\n                aux.stop()\n            except (NotImplementedError, AttributeError):\n                continue\n            except Exception as e:\n                log.warning(\"Cannot terminate auxiliary module %s: %s\",\n                            aux.__class__.__name__, e)\n\n        if self.config.terminate_processes:\n            # Try to terminate remaining active processes. We do this to make sure\n            # that we clean up remaining open handles (sockets, files, etc.).\n            log.info(\"Terminating remaining processes before shutdown.\")\n\n            for pid in PROCESS_LIST:\n                proc = Process(pid=pid)\n                if proc.is_alive():\n                    try:\n                        proc.terminate()\n                    except:\n                        continue\n\n        # Run the finish callback of every available Auxiliary module.\n        for aux in aux_avail:\n            try:\n                aux.finish()\n            except (NotImplementedError, AttributeError):\n                continue\n            except Exception as e:\n                log.warning(\"Exception running finish callback of auxiliary \"\n                            \"module %s: %s\", aux.__class__.__name__, e)\n\n        # Let's invoke the completion procedure.\n        self.complete()\n\n        return True\n\nif __name__ == \"__main__\":\n    success = False\n    error = \"\"\n\n    try:\n        # Initialize the main analyzer class.\n        analyzer = Analyzer()\n\n        # Run it and wait for the response.\n        success = analyzer.run()\n\n    # This is not likely to happen.\n    except KeyboardInterrupt:\n        error = \"Keyboard Interrupt\"\n\n    # If the analysis process encountered a critical error, it will raise a\n    # CuckooError exception, which will force the termination of the analysis.\n    # Notify the agent of the failure. Also catch unexpected exceptions.\n    except Exception as e:\n        # Store the error.\n        error_exc = traceback.format_exc()\n        error = str(e)\n\n        # Just to be paranoid.\n        if len(log.handlers):\n            log.exception(error_exc)\n        else:\n            sys.stderr.write(\"{0}\\n\".format(error_exc))\n\n    # Once the analysis is completed or terminated for any reason, we report\n    # back to the agent, notifying that it can report back to the host.\n    finally:\n        # Establish connection with the agent XMLRPC server.\n        server = xmlrpclib.Server(\"http://127.0.0.1:8000\")\n        server.complete(success, error, PATHS[\"root\"])\n"
  },
  {
    "path": "analyzer/linux/lib/__init__.py",
    "content": ""
  },
  {
    "path": "analyzer/linux/lib/api/__init__.py",
    "content": ""
  },
  {
    "path": "analyzer/linux/lib/api/process.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport subprocess\nimport logging\n\nlog = logging.getLogger(__name__)\n\nclass Process:\n    \"\"\"Linux process.\"\"\"\n    first_process = True\n    first_process_pid = None\n\n    def __init__(self, pid=0):\n        \"\"\"@param pid: PID.\n        \"\"\"\n        self.pid = pid\n\n    def is_alive(self):\n        if not os.path.exists(\"/proc/%u\" % self.pid): return False\n        status = self.get_proc_status()\n        if not status: return False\n        if \"zombie\" in status.get(\"State:\", \"\"): return False\n        return True\n\n    def get_parent_pid(self):\n        return self.get_proc_status().get(\"PPid\", None)\n\n    def get_proc_status(self):\n        try:\n            status = open(\"/proc/%u/status\" % self.pid).readlines()\n            status_values = dict((i[0], i[1]) for i in [j.strip().split(None, 1) for j in status])\n            return status_values\n        except:\n            log.critical(\"could not get process status for pid %u\", self.pid)\n        return {}\n\n    def execute(self, cmd):\n        self.proc = proc = subprocess.Popen(cmd)\n        self.pid = proc.pid\n        return True\n"
  },
  {
    "path": "analyzer/linux/lib/common/__init__.py",
    "content": ""
  },
  {
    "path": "analyzer/linux/lib/common/abstracts.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom lib.api.process import Process\nfrom lib.common.exceptions import CuckooPackageError\n\nclass Package(object):\n    \"\"\"Base abstract analysis package.\"\"\"\n    PATHS = []\n\n    def __init__(self, options={}):\n        \"\"\"@param options: options dict.\"\"\"\n        self.options = options\n        self.pids = []\n\n    def set_pids(self, pids):\n        \"\"\"Update list of monitored PIDs in the package context.\n        @param pids: list of pids.\n        \"\"\"\n        self.pids = pids\n\n    def start(self):\n        \"\"\"Run analysis package.\n        @raise NotImplementedError: this method is abstract.\n        \"\"\"\n        raise NotImplementedError\n\n    def check(self):\n        \"\"\"Check.\"\"\"\n        return True\n\n    def execute(self, cmd):\n        \"\"\"Starts an executable for analysis.\n        @param path: executable path\n        @param args: executable arguments\n        @return: process pid\n        \"\"\"\n        p = Process()\n        if not p.execute(cmd):\n            raise CuckooPackageError(\"Unable to execute the initial process, \"\n                                     \"analysis aborted.\")\n\n        return p.pid\n\n    def package_files(self):\n        \"\"\"A list of files to upload to host.\n        The list should be a list of tuples (<path on guest>, <name of file in package_files folder>).\n        (package_files is a folder that will be created in analysis folder). \n        \"\"\"\n        return None\n    \n    def finish(self):\n        \"\"\"Finish run.\n        If specified to do so, this method dumps the memory of\n        all running processes.\n        \"\"\"\n        if self.options.get(\"procmemdump\"):\n            for pid in self.pids:\n                p = Process(pid=pid)\n                p.dump_memory()\n\n        return True\n\n    def get_pids(self):\n        return []\n\nclass Auxiliary(object):\n    priority = 0\n\n    def get_pids(self):\n        return []\n"
  },
  {
    "path": "analyzer/linux/lib/common/constants.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport tempfile\nfrom lib.common.utils import random_string\n\nROOT = os.path.join(tempfile.gettempdir(), random_string(6, 10))\n\nPATHS = {\"root\"   : ROOT,\n         \"logs\"   : os.path.join(ROOT, \"logs\"),\n         \"files\"  : os.path.join(ROOT, \"files\"),\n         \"shots\"  : os.path.join(ROOT, \"shots\"),\n         \"memory\" : os.path.join(ROOT, \"memory\"),\n         \"drop\"   : os.path.join(ROOT, \"drop\")}\n"
  },
  {
    "path": "analyzer/linux/lib/common/exceptions.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nclass CuckooError(Exception):\n    pass\n\nclass CuckooPackageError(Exception):\n    pass"
  },
  {
    "path": "analyzer/linux/lib/common/hashing.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport hashlib\n\nBUFSIZE = 1024*1024\n\ndef sha256_file(path):\n    return hash_file(hashlib.sha256, path)\n\ndef hash_file(method, path):\n    \"\"\"Calculates an hash on a file by path.\n    @param method: callable hashing method\n    @param path: file path\n    @return: computed hash string\n    \"\"\"\n    f = open(path, \"rb\")\n    h = method()\n    while True:\n        buf = f.read(BUFSIZE)\n        if not buf:\n            break\n        h.update(buf)\n    return h.hexdigest()\n"
  },
  {
    "path": "analyzer/linux/lib/common/results.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport socket\nimport time\n\nfrom lib.core.config import Config\n\nlog = logging.getLogger(__name__)\n\nBUFSIZE = 1024*1024\n\ndef upload_to_host(file_path, dump_path):\n    nc = infd = None\n    try:\n        nc = NetlogFile(dump_path)\n\n        infd = open(file_path, \"rb\")\n        buf = infd.read(BUFSIZE)\n        while buf:\n            nc.send(buf, retry=False)\n            buf = infd.read(BUFSIZE)\n    except Exception as e:\n        log.error(\"Exception uploading file %s to host: %s\", file_path, e)\n    finally:\n        if infd:\n            infd.close()\n        if nc:\n            nc.close()\n\nclass NetlogConnection(object):\n    def __init__(self, proto=\"\"):\n        config = Config(cfg=\"analysis.conf\")\n        self.hostip, self.hostport = config.ip, config.port\n        self.sock, self.file = None, None\n        self.proto = proto\n\n    def connect(self):\n        i = 1\n        # this can loop forever, if we can't connect the whole analysis is useless anyways\n        while True:\n            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n            try:\n                s.connect((self.hostip, self.hostport))\n                s.sendall(self.proto)\n            except:\n                time.sleep(i)\n                i = min(i + 1, 60)\n            else:\n                self.sock = s\n                self.file = s.makefile()\n                break\n\n    def send(self, data, retry=True):\n        if not self.sock: self.connect()\n\n        try:\n            self.sock.sendall(data)\n        except socket.error as e:\n            if retry:\n                self.connect()\n                self.send(data, retry=False)\n            else:\n                raise\n        except Exception as e:\n            log.error(\"Unhandled exception in NetlogConnection: %s\", str(e))\n            # We really have nowhere to log this, if the netlog connection\n            # does not work, we can assume that any logging won't work either.\n            # So we just fail silently.\n            self.close()\n\n    def close(self):\n        try:\n            self.file.close()\n            self.sock.close()\n        except Exception:\n            pass\n\nclass NetlogFile(NetlogConnection):\n    def __init__(self, filepath):\n        self.filepath = filepath\n        NetlogConnection.__init__(self, proto=\"FILE\\n{0}\\n\".format(self.filepath))\n        self.connect()\n\nclass NetlogHandler(logging.Handler, NetlogConnection):\n    def __init__(self):\n        logging.Handler.__init__(self)\n        NetlogConnection.__init__(self, proto=\"LOG\\n\")\n        self.connect()\n\n    def emit(self, record):\n        msg = self.format(record)\n        self.send(\"{0}\\n\".format(msg))\n"
  },
  {
    "path": "analyzer/linux/lib/common/utils.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport random\nimport string\n\ndef random_string(minimum, maximum=None):\n    if maximum is None:\n        maximum = minimum\n\n    count = random.randint(minimum, maximum)\n    return \"\".join(random.choice(string.ascii_letters) for x in xrange(count))\n\ndef random_integer(digits):\n    start = 10 ** (digits - 1)\n    end = (10 ** digits) - 1\n    return random.randint(start, end)\n"
  },
  {
    "path": "analyzer/linux/lib/core/__init__.py",
    "content": ""
  },
  {
    "path": "analyzer/linux/lib/core/config.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport ConfigParser\n\nclass Config:\n    def __init__(self, cfg):\n        \"\"\"@param cfg: configuration file.\"\"\"\n        config = ConfigParser.ConfigParser(allow_no_value=True)\n        config.read(cfg)\n\n        for section in config.sections():\n            for name, raw_value in config.items(section):\n                if name == \"file_name\":\n                    value = config.get(section, name)\n                else:\n                    try:\n                        value = config.getboolean(section, name)\n                    except ValueError:\n                        try:\n                            value = config.getint(section, name)\n                        except ValueError:\n                            value = config.get(section, name)\n                setattr(self, name, value)\n\n    def get(self, name, default=None):\n        if hasattr(self, name):\n            return getattr(self, name)\n        return default\n\n    def get_options(self):\n        \"\"\"Get analysis options.\n        @return: options dict.\n        \"\"\"\n        # The analysis package can be provided with some options in the\n        # following format:\n        #   option1=value1,option2=value2,option3=value3\n        #\n        # Here we parse such options and provide a dictionary that will be made\n        # accessible to the analysis package.\n        options = {}\n        if hasattr(self, \"options\"):\n            try:\n                # Split the options by comma.\n                fields = self.options.split(\",\")\n            except ValueError as e:\n                pass\n            else:\n                for field in fields:\n                    # Split the name and the value of the option.\n                    try:\n                        key, value = field.split(\"=\", 1)\n                    except ValueError:\n                        pass\n                    else:\n                        # If the parsing went good, we add the option to the\n                        # dictionary.\n                        options[key.strip()] = value.strip()\n\n        return options\n"
  },
  {
    "path": "analyzer/linux/lib/core/startup.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport logging\n\nfrom lib.common.constants import PATHS\nfrom lib.common.results import NetlogHandler\n\nlog = logging.getLogger()\n\ndef create_folders():\n    \"\"\"Create folders in PATHS.\"\"\"\n    for name, folder in PATHS.items():\n        if os.path.exists(folder):\n            continue\n\n        try:\n            os.makedirs(folder)\n        except OSError:\n            pass\n\ndef init_logging():\n    \"\"\"Initialize logger.\"\"\"\n    formatter = logging.Formatter(\"%(asctime)s [%(name)s] %(levelname)s: %(message)s\")\n    sh = logging.StreamHandler()\n    sh.setFormatter(formatter)\n    log.addHandler(sh)\n\n    nh = NetlogHandler()\n    nh.setFormatter(formatter)\n    log.addHandler(nh)\n\n    log.setLevel(logging.DEBUG)\n"
  },
  {
    "path": "analyzer/linux/modules/__init__.py",
    "content": ""
  },
  {
    "path": "analyzer/linux/modules/auxiliary/__init__.py",
    "content": ""
  },
  {
    "path": "analyzer/linux/modules/auxiliary/lkm.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport logging\nimport platform\n\nfrom lib.common.abstracts import Auxiliary\nfrom lib.common.results import NetlogFile\nfrom lib.core.config import Config\n\nlog = logging.getLogger(__name__)\n\nclass LKM(Auxiliary):\n    \"\"\"helper LKM for sleep skipping etc\"\"\"\n\n    def __init__(self):\n        self.config = Config(cfg=\"analysis.conf\")\n        self.pids_reported = set()\n\n    def start(self):\n        # highest priority: if the vm config specifies the path\n        if self.config.get(\"analyzer_lkm_path\", None) and os.path.exists(self.config.get(\"analyzer_lkm_path\")):\n            path = self.config.get(\"analyzer_lkm_path\")\n        # next: if the analyzer was uploaded with a module for our platform\n        elif os.path.exists(os.path.join(platform.machine(), \"probelkm.ko\")):\n            path = os.path.join(platform.machine(), \"probelkm.ko\")\n        # next: default path inside the machine\n        elif os.path.exists(\"/root/.cuckoo/probelkm.ko\"):\n            path = \"/root/.cuckoo/probelkm.ko\"\n        # next: generic module uploaded with the analyzer (single arch setup maybe?)\n        elif os.path.exists(\"probelkm.ko\"):\n            path = \"probelkm.ko\"\n        else:\n            log.warning(\"Could not find probelkm :(\")\n            return False\n\n        os.system(\"insmod %s trace_descendants=1 target_pid=%u\" % (path, os.getpid()))\n        return True\n\n    def get_pids(self):\n        new = []\n\n        fd = open(\"/var/log/kern.log\")\n        for line in fd:\n            if not \"[probelkm]\" in line: continue\n            pos1 = line.find(\"forked to \")\n            pos2 = line.find(\"@\", pos1+10)\n            if pos1 == -1 or pos2 == -1: continue\n\n            forked_pid = int(line[pos1+10:pos2])\n\n            if forked_pid in self.pids_reported:\n                continue\n\n            self.pids_reported.add(forked_pid)\n            new.append(forked_pid)\n\n        return new\n\n    def stop(self):\n        # i guess we don't need to unload at all\n        #os.system(\"rmmod probelkm\")\n\n        # now upload the logfile\n        nf = NetlogFile(\"logs/all.lkm\")\n\n        fd = open(\"/var/log/kern.log\")\n        for line in fd:\n            if not \"[probelkm]\" in line: continue\n            nf.sock.sendall(line) # dirty direct send, no reconnecting\n\n        fd.close()\n        nf.close()\n"
  },
  {
    "path": "analyzer/linux/modules/auxiliary/stap.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport subprocess\nimport time\nimport logging\nimport platform\n\nfrom lib.common.abstracts import Auxiliary\nfrom lib.common.results import NetlogFile\nfrom lib.core.config import Config\n\nlog = logging.getLogger(__name__)\n\nclass STAP(Auxiliary):\n    \"\"\"system-wide syscall trace with stap.\"\"\"\n    priority = -10 # low prio to wrap tightly around the analysis\n\n    def __init__(self):\n        self.config = Config(cfg=\"analysis.conf\")\n        self.fallback_strace = False\n\n    def start(self):\n        # helper function locating the stap module\n        def has_stap(p):\n            only_stap = [fn for fn in os.listdir(p) if fn.startswith(\"stap_\") and fn.endswith(\".ko\")]\n            if only_stap: return os.path.join(p, only_stap[0])\n            return False\n\n        # highest priority: if the vm config specifies the path\n        if self.config.get(\"analyzer_stap_path\", None) and os.path.exists(self.config.get(\"analyzer_stap_path\")):\n            path = self.config.get(\"analyzer_lkm_path\")\n        # next: if a module was uploaded with the analyzer for our platform\n        elif os.path.exists(platform.machine()) and has_stap(platform.machine()):\n            path = has_stap(platform.machine())\n        # next: default path inside the machine\n        elif os.path.exists(\"/root/.cuckoo\") and has_stap(\"/root/.cuckoo\"):\n            path = has_stap(\"/root/.cuckoo\")\n        # next: generic module uploaded with the analyzer (single arch setup maybe?)\n        elif has_stap(\".\"):\n            path = has_stap(\".\")\n        else:\n            # we can't find the stap module, fallback to strace\n            log.warning(\"Could not find STAP LKM, falling back to strace.\")\n            return self.start_strace()\n\n        stap_start = time.time()\n        stderrfd = open(\"stap.stderr\", \"wb\")\n        self.proc = subprocess.Popen([\"staprun\", \"-v\", \"-x\", str(os.getpid()), \"-o\", \"stap.log\", path], stderr=stderrfd)\n\n        # read from stderr until the tap script is compiled\n        # while True:\n        #     if not self.proc.poll() is None:\n        #         break\n        #     line = self.proc.stderr.readline()\n        #     print \"DBG LINE\", line\n        #     if \"Pass 5: starting run.\" in line:\n        #         break\n\n        time.sleep(10)\n        stap_stop = time.time()\n        log.info(\"STAP aux module startup took %.2f seconds\" % (stap_stop - stap_start))\n        return True\n\n    def start_strace(self):\n        try: os.mkdir(\"strace\")\n        except: pass # don't worry, it exists\n\n        stderrfd = open(\"strace/strace.stderr\", \"wb\")\n        self.proc = subprocess.Popen([\"strace\", \"-ff\", \"-o\", \"strace/straced\", \"-p\", str(os.getpid())], stderr=stderrfd)\n        self.fallback_strace = True\n        return True\n\n    def get_pids(self):\n        if self.fallback_strace:\n            return [self.proc.pid, ]\n        return []\n\n    def stop(self):\n        try:\n            r = self.proc.poll()\n            log.debug(\"stap subprocess retval %r\", r)\n            self.proc.kill()\n        except Exception as e:\n            log.warning(\"Exception killing stap: %s\", e)\n\n        if os.path.exists(\"stap.log\"):\n            # now upload the logfile\n            nf = NetlogFile(\"logs/all.stap\")\n\n            fd = open(\"stap.log\", \"rb\")\n            for chunk in fd:\n                nf.sock.sendall(chunk) # dirty direct send, no reconnecting\n\n            fd.close()\n            nf.close()\n\n        # in case we fell back to strace\n        if os.path.exists(\"strace\"):\n            for fn in os.listdir(\"strace\"):\n                # we don't need the logs from the analyzer python process itself\n                if fn == \"straced.%u\" % os.getpid(): continue\n\n                fp = os.path.join(\"strace\", fn)\n\n                # now upload the logfile\n                nf = NetlogFile(\"logs/%s\" % fn)\n\n                fd = open(fp, \"rb\")\n                for chunk in fd:\n                    nf.sock.sendall(chunk) # dirty direct send, no reconnecting\n\n                fd.close()\n                nf.close()\n"
  },
  {
    "path": "analyzer/linux/modules/packages/__init__.py",
    "content": ""
  },
  {
    "path": "analyzer/linux/modules/packages/generic.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\n\nfrom lib.common.abstracts import Package\n\nclass Generic(Package):\n    \"\"\"Generic analysis package. Uses shell based execution.\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        Package.__init__(self, *args, **kwargs)\n        self.seen_pids = set()\n\n    def start(self, path):\n        os.chmod(path, 0o755)\n        return self.execute([\"sh\", \"-c\", path])\n\n    def get_pids(self):\n        probelkm_pids = set()\n\n        fd = open(\"/var/log/kern.log\")\n        for line in fd:\n            if not \"[probelkm]\" in line: continue\n            if \"forked to\" in line:\n                # [probelkm] task 2102@0x00007fa5d0b8b576 forked to 2107@0xffffffff81352f6d\n                parts = line[line.find(\"[probelkm]\"):].split()\n                newtask = parts[-1]\n                pid, rip = newtask.split(\"@\")\n                probelkm_pids.add(int(pid))\n\n        new_pids = probelkm_pids - self.seen_pids\n        self.seen_pids |= new_pids\n        return list(new_pids)\n"
  },
  {
    "path": "analyzer/windows/analyzer.py",
    "content": "# Copyright (C) 2011-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2018 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport datetime\nimport hashlib\nimport logging\nimport os\nimport pkgutil\nimport socket\nimport struct\nimport sys\nimport threading\nimport traceback\nimport urllib\nimport urllib2\nimport xmlrpclib\nimport zipfile\n\nfrom lib.api.process import Process\nfrom lib.common.abstracts import Package, Auxiliary\nfrom lib.common.constants import SHUTDOWN_MUTEX\nfrom lib.common.decide import dump_memory\nfrom lib.common.defines import KERNEL32\nfrom lib.common.exceptions import CuckooError, CuckooDisableModule\nfrom lib.common.hashing import hash_file\nfrom lib.common.rand import random_string\nfrom lib.common.results import upload_to_host\nfrom lib.core.config import Config\nfrom lib.core.ioctl import zer0m0n\nfrom lib.core.packages import choose_package\nfrom lib.core.pipe import PipeServer, PipeForwarder, PipeDispatcher\nfrom lib.core.pipe import disconnect_pipes\nfrom lib.core.privileges import grant_privilege\nfrom lib.core.startup import init_logging, disconnect_logger, set_clock\nfrom modules import auxiliary\n\nlog = logging.getLogger(\"analyzer\")\n\nclass Files(object):\n    PROTECTED_NAMES = ()\n\n    def __init__(self):\n        self.files = {}\n        self.files_orig = {}\n        self.dumped = []\n\n    def is_protected_filename(self, file_name):\n        \"\"\"\n        Return whether or not to inject into a process with this name.\n        \"\"\"\n        return file_name.lower() in self.PROTECTED_NAMES\n\n    def add_pid(self, filepath, pid, verbose=True):\n        \"\"\"Track a process identifier for this file.\"\"\"\n        if not pid or filepath.lower() not in self.files:\n            return\n\n        if pid not in self.files[filepath.lower()]:\n            self.files[filepath.lower()].append(pid)\n            verbose and log.info(\"Added pid %s for %r\", pid, filepath)\n\n    def add_file(self, filepath, pid=None):\n        \"\"\"Add filepath to the list of files and track the pid.\"\"\"\n        if filepath.lower() not in self.files:\n            log.info(\n                \"Added new file to list with pid %s and path %s\",\n                pid, filepath.encode(\"utf8\")\n            )\n            self.files[filepath.lower()] = []\n            self.files_orig[filepath.lower()] = filepath\n\n        self.add_pid(filepath, pid, verbose=False)\n\n    def dump_file(self, filepath):\n        \"\"\"Dump a file to the host.\"\"\"\n        if not os.path.isfile(filepath):\n            log.warning(\"File at path %r does not exist, skip.\", filepath)\n            return False\n\n        # Check whether we've already dumped this file - in that case skip it.\n        try:\n            sha256 = hash_file(hashlib.sha256, filepath)\n            if sha256 in self.dumped:\n                return\n        except IOError as e:\n            log.info(\"Error dumping file from path \\\"%s\\\": %s\", filepath, e)\n            return\n\n        filename = \"%s_%s\" % (sha256[:16], os.path.basename(filepath))\n        upload_path = os.path.join(\"files\", filename)\n\n        try:\n            upload_to_host(\n                # If available use the original filepath, the one that is\n                # not lowercased.\n                self.files_orig.get(filepath.lower(), filepath),\n                upload_path, self.files.get(filepath.lower(), [])\n            )\n            self.dumped.append(sha256)\n        except (IOError, socket.error) as e:\n            log.error(\n                \"Unable to upload dropped file at path \\\"%s\\\": %s\",\n                filepath, e\n            )\n\n    def delete_file(self, filepath, pid=None):\n        \"\"\"A file is about to removed and thus should be dumped right away.\"\"\"\n        self.add_pid(filepath, pid)\n        self.dump_file(filepath)\n\n        # Remove the filepath from the files list.\n        self.files.pop(filepath.lower(), None)\n        self.files_orig.pop(filepath.lower(), None)\n\n    def move_file(self, oldfilepath, newfilepath, pid=None):\n        \"\"\"A file will be moved - track this change.\"\"\"\n        self.add_pid(oldfilepath, pid)\n        if oldfilepath.lower() in self.files:\n            # Replace the entry with the new filepath.\n            self.files[newfilepath.lower()] = \\\n                self.files.pop(oldfilepath.lower(), [])\n\n    def dump_files(self):\n        \"\"\"Dump all pending files.\"\"\"\n        while self.files:\n            self.delete_file(self.files.keys()[0])\n\nclass ProcessList(object):\n    def __init__(self):\n        self.pids = []\n        self.pids_notrack = []\n\n    def add_pid(self, pid, track=True):\n        \"\"\"\n        Add a process identifier to the process list.\n        Track determines whether the analyzer should be monitoring this\n        process, i.e., whether Cuckoo should wait for this process to finish.\n        \"\"\"\n        if int(pid) not in self.pids and int(pid) not in self.pids_notrack:\n            if track:\n                self.pids.append(int(pid))\n            else:\n                self.pids_notrack.append(int(pid))\n\n    def add_pids(self, pids):\n        \"\"\"Add one or more process identifiers to the process list.\"\"\"\n        if isinstance(pids, (tuple, list)):\n            for pid in pids:\n                self.add_pid(pid)\n        else:\n            self.add_pid(pids)\n\n    def has_pid(self, pid, notrack=True):\n        \"\"\"Return whether or not this process identifier being tracked.\"\"\"\n        if int(pid) in self.pids:\n            return True\n\n        if notrack and int(pid) in self.pids_notrack:\n            return True\n\n        return False\n\n    def remove_pid(self, pid):\n        \"\"\"Remove a process identifier from being tracked.\"\"\"\n        if pid in self.pids:\n            self.pids.remove(pid)\n\n        if pid in self.pids_notrack:\n            self.pids_notrack.remove(pid)\n\nclass CommandPipeHandler(object):\n    \"\"\"Pipe Handler.\n\n    This class handles the notifications received through the Pipe Server and\n    decides what to do with them.\n    \"\"\"\n    ignore_list = dict(pid=[])\n\n    def __init__(self, analyzer):\n        self.analyzer = analyzer\n        self.tracked = {}\n\n    def _handle_debug(self, data):\n        \"\"\"Debug message from the monitor.\"\"\"\n        log.debug(data)\n\n    def _handle_info(self, data):\n        \"\"\"Regular message from the monitor.\"\"\"\n        log.info(data)\n\n    def _handle_warning(self, data):\n        \"\"\"Warning message from the monitor.\"\"\"\n        log.warning(data)\n\n    def _handle_critical(self, data):\n        \"\"\"Critical message from the monitor.\"\"\"\n        log.critical(data)\n\n    def _handle_loaded(self, data):\n        \"\"\"The monitor has loaded into a particular process.\"\"\"\n        if not data or data.count(\",\") != 1:\n            log.warning(\"Received loaded command with incorrect parameters, \"\n                        \"skipping it.\")\n            return\n\n        pid, track = data.split(\",\")\n        if not pid.isdigit() or not track.isdigit():\n            log.warning(\"Received loaded command with incorrect parameters, \"\n                        \"skipping it.\")\n            return\n\n        self.analyzer.process_lock.acquire()\n        self.analyzer.process_list.add_pid(int(pid), track=int(track))\n        self.analyzer.process_lock.release()\n\n        log.debug(\"Loaded monitor into process with pid %s\", pid)\n\n    def _handle_getpids(self, data):\n        \"\"\"Return the process identifiers of the agent and its parent process.\"\"\"\n        return struct.pack(\"II\", self.analyzer.pid, self.analyzer.ppid)\n\n    def _inject_process(self, process_id, thread_id, mode):\n        \"\"\"Helper function for injecting the monitor into a process.\"\"\"\n\n        # We acquire the process lock in order to prevent the analyzer to\n        # terminate the analysis while we are operating on the new process.\n        self.analyzer.process_lock.acquire()\n\n        # Set the current DLL to the default one provided at submission.\n        dll = self.analyzer.default_dll\n\n        if process_id in (self.analyzer.pid, self.analyzer.ppid):\n            if process_id not in self.ignore_list[\"pid\"]:\n                log.warning(\"Received request to inject Cuckoo processes, \"\n                            \"skipping it.\")\n                self.ignore_list[\"pid\"].append(process_id)\n            self.analyzer.process_lock.release()\n            return\n\n        # We inject the process only if it's not being monitored already,\n        # otherwise we would generated polluted logs (if it wouldn't crash\n        # horribly to start with).\n        if self.analyzer.process_list.has_pid(process_id):\n            # This pid is already on the notrack list, move it to the\n            # list of tracked pids.\n            if not self.analyzer.process_list.has_pid(process_id, notrack=False):\n                log.debug(\"Received request to inject pid=%d. It was already \"\n                          \"on our notrack list, moving it to the track list.\")\n\n                self.analyzer.process_list.remove_pid(process_id)\n                self.analyzer.process_list.add_pid(process_id)\n                self.ignore_list[\"pid\"].append(process_id)\n            # Spit out an error once and just ignore it further on.\n            elif process_id not in self.ignore_list[\"pid\"]:\n                self.ignore_list[\"pid\"].append(process_id)\n\n            # We're done operating on the processes list, release the lock.\n            self.analyzer.process_lock.release()\n            return\n\n        # Open the process and inject the DLL. Hope it enjoys it.\n        proc = Process(pid=process_id, tid=thread_id)\n\n        filename = os.path.basename(proc.get_filepath())\n\n        if not self.analyzer.files.is_protected_filename(filename):\n            # Add the new process ID to the list of monitored processes.\n            self.analyzer.process_list.add_pid(process_id)\n\n            # We're done operating on the processes list,\n            # release the lock. Let the injection do its thing.\n            self.analyzer.process_lock.release()\n\n            # If we have both pid and tid, then we can use APC to inject.\n            if process_id and thread_id:\n                proc.inject(dll, apc=True, mode=\"%s\" % mode)\n            else:\n                proc.inject(dll, apc=False, mode=\"%s\" % mode)\n\n            log.info(\"Injected into process with pid %s and name %r\",\n                     proc.pid, filename)\n\n    def _handle_process(self, data):\n        \"\"\"Request for injection into a process.\"\"\"\n        # Parse the process identifier.\n        if not data or not data.isdigit():\n            log.warning(\"Received PROCESS command from monitor with an \"\n                        \"incorrect argument.\")\n            return\n\n        return self._inject_process(int(data), None, 0)\n\n    def _handle_process2(self, data):\n        \"\"\"Request for injection into a process using APC.\"\"\"\n        # Parse the process and thread identifier.\n        if not data or data.count(\",\") != 2:\n            log.warning(\"Received PROCESS2 command from monitor with an \"\n                        \"incorrect argument.\")\n            return\n\n        pid, tid, mode = data.split(\",\")\n        if not pid.isdigit() or not tid.isdigit() or not mode.isdigit():\n            log.warning(\"Received PROCESS2 command from monitor with an \"\n                        \"incorrect argument.\")\n            return\n\n        return self._inject_process(int(pid), int(tid), int(mode))\n\n    def _handle_file_new(self, data):\n        \"\"\"Notification of a new dropped file.\"\"\"\n        self.analyzer.files.add_file(data.decode(\"utf8\"), self.pid)\n\n    def _handle_file_del(self, data):\n        \"\"\"Notification of a file being removed (if it exists) - we have to\n        dump it before it's being removed.\"\"\"\n        filepath = data.decode(\"utf8\")\n        if os.path.exists(filepath):\n            self.analyzer.files.delete_file(filepath, self.pid)\n\n    def _handle_file_move(self, data):\n        \"\"\"A file is being moved - track these changes.\"\"\"\n        if \"::\" not in data:\n            log.warning(\"Received FILE_MOVE command from monitor with an \"\n                        \"incorrect argument.\")\n            return\n\n        old_filepath, new_filepath = data.split(\"::\", 1)\n        self.analyzer.files.move_file(\n            old_filepath.decode(\"utf8\"), new_filepath.decode(\"utf8\"), self.pid\n        )\n\n    def _handle_kill(self, data):\n        \"\"\"A process is being killed.\"\"\"\n        if not data.isdigit():\n            log.warning(\"Received KILL command with an incorrect argument.\")\n            return\n\n        if self.analyzer.config.options.get(\"procmemdump\"):\n            dump_memory(int(data))\n\n    def _handle_dumpmem(self, data):\n        \"\"\"Dump the memory of a process as it is right now.\"\"\"\n        if not data.isdigit():\n            log.warning(\"Received DUMPMEM command with an incorrect argument.\")\n            return\n\n        dump_memory(int(data))\n\n    def _handle_dumpreqs(self, data):\n        if not data.isdigit():\n            log.warning(\"Received DUMPREQS command with an incorrect argument %r.\", data)\n            return\n\n        pid = int(data)\n\n        if pid not in self.tracked:\n            log.warning(\"Received DUMPREQS command but there are no reqs for pid %d.\", pid)\n            return\n\n        dumpreqs = self.tracked[pid].get(\"dumpreq\", [])\n        for addr, length in dumpreqs:\n            log.debug(\"tracked dump req (%r, %r, %r)\", pid, addr, length)\n\n            if not addr or not length:\n                continue\n\n            Process(pid=pid).dump_memory_block(int(addr), int(length))\n\n    def _handle_track(self, data):\n        if not data.count(\":\") == 2:\n            log.warning(\"Received TRACK command with an incorrect argument %r.\", data)\n            return\n\n        pid, scope, params = data.split(\":\", 2)\n        pid = int(pid)\n\n        paramtuple = params.split(\",\")\n        if pid not in self.tracked:\n            self.tracked[pid] = {}\n        if scope not in self.tracked[pid]:\n            self.tracked[pid][scope] = []\n        self.tracked[pid][scope].append(paramtuple)\n\n    def dispatch(self, data):\n        response = \"NOPE\"\n\n        if not data or \":\" not in data:\n            log.critical(\"Unknown command received from the monitor: %r\",\n                         data.strip())\n        else:\n            # Backwards compatibility (old syntax is, e.g., \"FILE_NEW:\" vs the\n            # new syntax, e.g., \"1234:FILE_NEW:\").\n            if data[0].isupper():\n                command, arguments = data.strip().split(\":\", 1)\n                self.pid = None\n            else:\n                self.pid, command, arguments = data.strip().split(\":\", 2)\n\n            fn = getattr(self, \"_handle_%s\" % command.lower(), None)\n            if not fn:\n                log.critical(\"Unknown command received from the monitor: %r\",\n                             data.strip())\n            else:\n                try:\n                    response = fn(arguments)\n                except:\n                    log.exception(\n                        \"Pipe command handler exception occurred (command \"\n                        \"%s args %r).\", command, arguments\n                    )\n\n        return response\n\nclass Analyzer(object):\n    \"\"\"\n    Cuckoo Windows Analyzer.\n\n    :Note: This class handles the initialization and execution of the analysis\n    procedure, including handling of the pipe server, the auxiliary modules and\n    the analysis packages.\n    \"\"\"\n\n    def __init__(self):\n        self.config = None\n        self.target = None\n        self.do_run = True\n        self.time_counter = 0\n\n        self.process_lock = threading.Lock()\n        self.default_dll = None\n        self.pid = os.getpid()\n        self.ppid = Process(pid=self.pid).get_parent_pid()\n        self.files = Files()\n        self.process_list = ProcessList()\n        self.package = None\n\n        self.reboot = []\n\n    def get_pipe_path(self, name):\n        \"\"\"\n        get the pipe path\n\n        :return: \\\\\\\\.\\\\PIPE on Windows XP and \\\\??\\\\PIPE elsewhere.\n        \"\"\"\n        version = sys.getwindowsversion()\n        if version.major == 5 and version.minor == 1:\n            return \"\\\\\\\\.\\\\PIPE\\\\%s\" % name\n        return \"\\\\??\\\\PIPE\\\\%s\" % name\n\n    def prepare(self):\n        \"\"\"\n        Prepare env for analysis.\n        \"\"\"\n\n        # Get SeDebugPrivilege for the Python process. It will be needed in\n        # order to perform the injections.\n        grant_privilege(\"SeDebugPrivilege\")\n        grant_privilege(\"SeLoadDriverPrivilege\")\n\n        # Initialize logging.\n        init_logging()\n\n        # Parse the analysis configuration file generated by the agent.\n        self.config = Config(cfg=\"analysis.conf\")\n\n        # Pass the configuration through to the Process class.\n        Process.set_config(self.config)\n\n        # Set virtual machine clock.\n        set_clock(datetime.datetime.strptime(\n            self.config.clock, \"%Y%m%dT%H:%M:%S\"\n        ))\n\n        # Set the default DLL to be used for this analysis.\n        self.default_dll = self.config.options.get(\"dll\")\n\n        # If a pipe name has not set, then generate a random one.\n        self.config.pipe = self.get_pipe_path(\n            self.config.options.get(\"pipe\", random_string(16, 32))\n        )\n\n        # Generate a random name for the logging pipe server.\n        self.config.logpipe = self.get_pipe_path(random_string(16, 32))\n\n        # Initialize and start the Command Handler pipe server. This is going\n        # to be used for communicating with the monitored processes.\n        self.command_pipe = PipeServer(\n            PipeDispatcher, self.config.pipe, message=True,\n            dispatcher=CommandPipeHandler(self)\n        )\n        self.command_pipe.daemon = True\n        self.command_pipe.start()\n\n        # Initialize and start the Log Pipe Server - the log pipe server will\n        # open up a pipe that monitored processes will use to send logs to\n        # before they head off to the host machine.\n        destination = self.config.ip, self.config.port\n        self.log_pipe_server = PipeServer(\n            PipeForwarder, self.config.logpipe, destination=destination\n        )\n        self.log_pipe_server.daemon = True\n        self.log_pipe_server.start()\n\n        # We update the target according to its category. If it's a file, then\n        # we store the target path.\n        if self.config.category == \"file\":\n            self.target = os.path.join(\n                os.environ[\"TEMP\"], self.config.file_name\n            )\n        elif self.config.category == \"archive\":\n            zip_path = os.path.join(os.environ[\"TEMP\"], self.config.file_name)\n            zipfile.ZipFile(zip_path).extractall(os.environ[\"TEMP\"])\n            self.target = os.path.join(\n                os.environ[\"TEMP\"], self.config.options[\"filename\"]\n            )\n        # If it's a URL, well.. we store the URL.\n        else:\n            self.target = self.config.target\n\n    def stop(self):\n        \"\"\"\n        Allow an auxiliary module to stop the analysis.\n        \"\"\"\n        self.do_run = False\n\n    def complete(self):\n        \"\"\"\n        End analysis.\n        \"\"\"\n        # Stop the Pipe Servers.\n        self.command_pipe.stop()\n        self.log_pipe_server.stop()\n\n        # Cleanly close remaining connections\n        disconnect_pipes()\n        disconnect_logger()\n\n    def run(self):\n        \"\"\"\n        Run analysis.\n\n        :return: operation status.\n        \"\"\"\n        self.prepare()\n        self.path = os.getcwd()\n\n        log.debug(\"Starting analyzer from: %s\", self.path)\n        log.debug(\"Pipe server name: %s\", self.config.pipe)\n        log.debug(\"Log pipe server name: %s\", self.config.logpipe)\n\n        # If no analysis package was specified at submission, we try to select\n        # one automatically.\n        if not self.config.package:\n            log.debug(\n                \"No analysis package specified, trying to detect \"\n                \"it automagically.\"\n            )\n\n            # If the analysis target is a file, we choose the package according\n            # to the file format.\n            if self.config.category == \"file\":\n                package = choose_package(\n                    self.config.file_type, self.config.file_name,\n                    self.config.pe_exports.split(\",\")\n                )\n            # If it's an URL, we'll just use the default Internet Explorer\n            # package.\n            else:\n                package = \"ie\"\n\n            # If we weren't able to automatically determine the proper package,\n            # we need to abort the analysis.\n            if not package:\n                raise CuckooError(\"No valid package available for file \"\n                                  \"type: {0}\".format(self.config.file_type))\n\n            log.info(\"Automatically selected analysis package \\\"%s\\\"\", package)\n        # Otherwise just select the specified package.\n        else:\n            package = self.config.package\n\n        # Generate the package path.\n        package_name = \"modules.packages.%s\" % package\n\n        # Try to import the analysis package.\n        try:\n            __import__(package_name, globals(), locals(), [\"dummy\"], -1)\n        # If it fails, we need to abort the analysis.\n        except ImportError:\n            raise CuckooError(\"Unable to import package \\\"{0}\\\", does \"\n                              \"not exist.\".format(package_name))\n\n        # Initialize the package parent abstract.\n        Package()\n\n        # Enumerate the abstract subclasses.\n        try:\n            package_class = Package.__subclasses__()[0]\n        except IndexError as e:\n            raise CuckooError(\"Unable to select package class \"\n                              \"(package={0}): {1}\".format(package_name, e))\n\n        # Initialize the analysis package.\n        self.package = package_class(self.config.options, analyzer=self)\n\n        # Move the sample to the current working directory as provided by the\n        # task - one is able to override the starting path of the sample.\n        # E.g., for some samples it might be useful to run from %APPDATA%\n        # instead of %TEMP%.\n        if self.config.category == \"file\":\n            self.target = self.package.move_curdir(self.target)\n\n        # Initialize Auxiliary modules\n        Auxiliary()\n        prefix = auxiliary.__name__ + \".\"\n        for loader, name, ispkg in pkgutil.iter_modules(auxiliary.__path__, prefix):\n            if ispkg:\n                continue\n\n            # Import the auxiliary module.\n            try:\n                __import__(name, globals(), locals(), [\"dummy\"], -1)\n            except ImportError as e:\n                log.warning(\"Unable to import the auxiliary module \"\n                            \"\\\"%s\\\": %s\", name, e)\n\n        # Walk through the available auxiliary modules.\n        aux_enabled, aux_avail = [], []\n        for module in Auxiliary.__subclasses__():\n            # Try to start the auxiliary module.\n            try:\n                aux = module(options=self.config.options, analyzer=self)\n                aux_avail.append(aux)\n                aux.init()\n                aux.start()\n            except (NotImplementedError, AttributeError):\n                log.exception(\n                    \"Auxiliary module %s was not implemented\", module.__name__\n                )\n            except CuckooDisableModule:\n                continue\n            except Exception as e:\n                log.exception(\n                    \"Cannot execute auxiliary module %s: %s\",\n                    module.__name__, e\n                )\n            else:\n                log.debug(\"Started auxiliary module %s\",\n                          module.__name__)\n                aux_enabled.append(aux)\n\n        # Inform zer0m0n of the ResultServer address.\n        zer0m0n.resultserver(self.config.ip, self.config.port)\n\n        # Forward the command pipe and logpipe names on to zer0m0n.\n        zer0m0n.cmdpipe(self.config.pipe)\n        zer0m0n.channel(self.config.logpipe)\n\n        # Hide the Cuckoo Analyzer & Cuckoo Agent.\n        zer0m0n.hidepid(self.pid)\n        zer0m0n.hidepid(self.ppid)\n\n        # Initialize zer0m0n with our compiled Yara rules.\n        zer0m0n.yarald(\"bin/rules.yarac\")\n\n        # Propagate the requested dump interval, if set.\n        zer0m0n.dumpint(int(self.config.options.get(\"dumpint\", \"0\")))\n\n        # Start analysis package. If for any reason, the execution of the\n        # analysis package fails, we have to abort the analysis.\n        pids = self.package.start(self.target)\n\n        # If the analysis package returned a list of process identifiers, we\n        # add them to the list of monitored processes and enable the process monitor.\n        if pids:\n            self.process_list.add_pids(pids)\n            pid_check = True\n\n        # If the package didn't return any process ID (for example in the case\n        # where the package isn't enabling any behavioral analysis), we don't\n        # enable the process monitor.\n        else:\n            log.info(\"No process IDs returned by the package, running \"\n                     \"for the full timeout.\")\n            pid_check = False\n\n        # Check in the options if the user toggled the timeout enforce. If so,\n        # we need to override pid_check and disable process monitor.\n        if self.config.enforce_timeout:\n            log.info(\"Enabled timeout enforce, running for the full timeout.\")\n            pid_check = False\n\n        while self.do_run:\n            self.time_counter += 1\n            if self.time_counter == int(self.config.timeout):\n                log.info(\"Analysis timeout hit, terminating analysis.\")\n                break\n\n            # If the process lock is locked, it means that something is\n            # operating on the list of monitored processes. Therefore we\n            # cannot proceed with the checks until the lock is released.\n            if self.process_lock.locked():\n                KERNEL32.Sleep(1000)\n                continue\n\n            try:\n                # If the process monitor is enabled we start checking whether\n                # the monitored processes are still alive.\n                if pid_check:\n                    # We also track the PIDs provided by zer0m0n.\n                    self.process_list.add_pids(zer0m0n.getpids())\n\n                    for pid in self.process_list.pids:\n                        if not Process(pid=pid).is_alive():\n                            log.info(\"Process with pid %s has terminated\", pid)\n                            self.process_list.remove_pid(pid)\n\n                    # If none of the monitored processes are still alive, we\n                    # can terminate the analysis.\n                    if not self.process_list.pids:\n                        log.info(\"Process list is empty, \"\n                                 \"terminating analysis.\")\n                        break\n\n                    # Update the list of monitored processes available to the\n                    # analysis package. It could be used for internal\n                    # operations within the module.\n                    self.package.set_pids(self.process_list.pids)\n\n                try:\n                    # The analysis packages are provided with a function that\n                    # is executed at every loop's iteration. If such function\n                    # returns False, it means that it requested the analysis\n                    # to be terminate.\n                    if not self.package.check():\n                        log.info(\"The analysis package requested the \"\n                                 \"termination of the analysis.\")\n                        break\n\n                # If the check() function of the package raised some exception\n                # we don't care, we can still proceed with the analysis but we\n                # throw a warning.\n                except Exception as e:\n                    log.warning(\"The package \\\"%s\\\" check function raised \"\n                                \"an exception: %s\", package_name, e)\n            finally:\n                # Zzz.\n                KERNEL32.Sleep(1000)\n\n        if not self.do_run:\n            log.debug(\"The analyzer has been stopped on request by an \"\n                      \"auxiliary module.\")\n\n        # Create the shutdown mutex.\n        KERNEL32.CreateMutexA(None, False, SHUTDOWN_MUTEX)\n\n        try:\n            # Before shutting down the analysis, the package can perform some\n            # final operations through the finish() function.\n            self.package.finish()\n        except Exception as e:\n            log.warning(\"The package \\\"%s\\\" finish function raised an \"\n                        \"exception: %s\", package_name, e)\n\n        try:\n            # Upload files the package created to package_files in the\n            # results folder.\n            for path, name in self.package.package_files() or []:\n                upload_to_host(path, os.path.join(\"package_files\", name))\n        except Exception as e:\n            log.warning(\"The package \\\"%s\\\" package_files function raised an \"\n                        \"exception: %s\", package_name, e)\n\n        # Terminate the Auxiliary modules.\n        for aux in aux_enabled:\n            try:\n                aux.stop()\n            except (NotImplementedError, AttributeError):\n                continue\n            except Exception as e:\n                log.warning(\"Cannot terminate auxiliary module %s: %s\",\n                            aux.__class__.__name__, e)\n\n        if self.config.terminate_processes:\n            # Try to terminate remaining active processes.\n            log.info(\"Terminating remaining processes before shutdown.\")\n\n            for pid in self.process_list.pids:\n                proc = Process(pid=pid)\n                if proc.is_alive():\n                    try:\n                        proc.terminate()\n                    except:\n                        continue\n\n        # Run the finish callback of every available Auxiliary module.\n        for aux in aux_avail:\n            try:\n                aux.finish()\n            except (NotImplementedError, AttributeError):\n                continue\n            except Exception as e:\n                log.warning(\"Exception running finish callback of auxiliary \"\n                            \"module %s: %s\", aux.__class__.__name__, e)\n\n        # Dump all the notified files.\n        self.files.dump_files()\n\n        # Hell yeah.\n        log.info(\"Analysis completed.\")\n        return True\n\nif __name__ == \"__main__\":\n    success = False\n    error = \"\"\n\n    try:\n        # Initialize the main analyzer class.\n        analyzer = Analyzer()\n\n        # Run it and wait for the response.\n        success = analyzer.run()\n\n        data = {\n            \"status\": \"complete\",\n            \"description\": success,\n        }\n    # This is not likely to happen.\n    except KeyboardInterrupt:\n        error = \"Keyboard Interrupt\"\n\n    # If the analysis process encountered a critical error, it will raise a\n    # CuckooError exception, which will force the termination of the analysis.\n    # Notify the agent of the failure. Also catch unexpected exceptions.\n    except Exception as e:\n        # Store the error.\n        error_exc = traceback.format_exc()\n        error = \"%s\\n%s\" % (e, error_exc)\n\n        # Just to be paranoid.\n        if len(log.handlers):\n            log.exception(error_exc)\n        else:\n            sys.stderr.write(\"{0}\\n\".format(error_exc))\n\n        data = {\n            \"status\": \"exception\",\n            \"description\": error_exc,\n        }\n    finally:\n        try:\n            # Let's invoke the completion procedure.\n            analyzer.complete()\n        except Exception as e:\n            complete_excp = traceback.format_exc()\n            data[\"status\"] = \"exception\"\n            if \"description\" in data:\n                data[\"description\"] += \"%s\\n%s\" % (\n                    data[\"description\"], complete_excp\n                )\n            else:\n                data[\"description\"] = complete_excp\n\n        # Report that we're finished. First try with the XML RPC thing and\n        # if that fails, attempt the new Agent.\n        try:\n            server = xmlrpclib.Server(\"http://127.0.0.1:8000\")\n            server.complete(success, error, \"unused_path\")\n        except Exception as e:\n            urllib2.urlopen(\"http://127.0.0.1:8000/status\",\n                            urllib.urlencode(data)).read()\n"
  },
  {
    "path": "analyzer/windows/lib/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "analyzer/windows/lib/api/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "analyzer/windows/lib/api/process.py",
    "content": "# Copyright (C) 2012-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2018 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport logging\nimport random\nimport subprocess\nimport tempfile\n\nfrom ctypes import (\n    c_ulong, create_string_buffer, c_int, c_uint16, c_uint, c_wchar_p,\n    c_void_p, sizeof, byref, Structure, cast\n)\nfrom _subprocess import STARTF_USESTDHANDLES\n\nfrom lib.common.constants import SHUTDOWN_MUTEX\nfrom lib.common.defines import KERNEL32, NTDLL, SYSTEM_INFO, STILL_ACTIVE\nfrom lib.common.defines import THREAD_ALL_ACCESS, PROCESS_ALL_ACCESS\nfrom lib.common.exceptions import CuckooError\nfrom lib.common.results import upload_to_host\nfrom lib.core.ioctl import zer0m0n\n\nlog = logging.getLogger(__name__)\n\ndef spCreateProcessW(application_name, command_line, process_attributes,\n                     thread_attributes, inherit_handles, creation_flags,\n                     environment, current_directory, startup_info):\n    class STARTUPINFO(Structure):\n        _fields_ = [\n            (\"cb\", c_uint),\n            (\"reserved1\", c_void_p),\n            (\"desktop\", c_void_p),\n            (\"title\", c_void_p),\n            (\"unused1\", c_uint * 7),\n            (\"flags\", c_uint),\n            (\"show_window\", c_uint16),\n            (\"reserved2\", c_uint16),\n            (\"reserved3\", c_void_p),\n            (\"std_input\", c_void_p),\n            (\"std_output\", c_void_p),\n            (\"std_error\", c_void_p),\n        ]\n\n    class PROCESS_INFORMATION(Structure):\n        _fields_ = [\n            (\"process_handle\", c_void_p),\n            (\"thread_handle\", c_void_p),\n            (\"process_identifier\", c_uint),\n            (\"thread_identifier\", c_uint),\n        ]\n\n    class Handle(int):\n        def Close(self):\n            KERNEL32.CloseHandle(self)\n\n    if environment:\n        environment = \"\\x00\".join(\n            \"%s=%s\" % (k, v) for k, v in environment.items()\n        ) + \"\\x00\\x00\"\n\n    si = STARTUPINFO()\n    si.cb = sizeof(STARTUPINFO)\n\n    if startup_info:\n        si.flags = startup_info.dwFlags\n        si.show_window = startup_info.wShowWindow\n\n    if si.flags & STARTF_USESTDHANDLES:\n        si.std_input = cast(int(startup_info.hStdInput), c_void_p)\n        si.std_output = cast(int(startup_info.hStdOutput), c_void_p)\n        si.std_error = cast(int(startup_info.hStdError), c_void_p)\n\n    pi = PROCESS_INFORMATION()\n\n    result = KERNEL32.CreateProcessW(\n        application_name, command_line, None, None, inherit_handles,\n        creation_flags, environment, current_directory, byref(si), byref(pi)\n    )\n    if not result:\n        # TODO We'll just assume this is correct for now.\n        raise WindowsError(KERNEL32.GetLastError())\n\n    return (\n        Handle(pi.process_handle), Handle(pi.thread_handle),\n        pi.process_identifier, pi.thread_identifier\n    )\n\n# We patch Python 2.7's native .CreateProcess method to be unicode-aware.\nsubprocess._subprocess.CreateProcess = spCreateProcessW\nKERNEL32.CreateProcessW.argtypes = (\n    c_wchar_p, c_wchar_p, c_void_p, c_void_p, c_uint, c_uint, c_void_p,\n    c_wchar_p, c_void_p, c_void_p\n)\n\ndef subprocess_checkcall(args, env=None):\n    return subprocess.check_call(\n        args, stdin=subprocess.PIPE, stdout=subprocess.PIPE,\n        stderr=subprocess.PIPE, env=env,\n    )\n\ndef subprocess_checkoutput(args, env=None):\n    return subprocess.check_output(\n        args, stdin=subprocess.PIPE, stderr=subprocess.PIPE, env=env,\n    )\n\nclass Process(object):\n    \"\"\"Windows process.\"\"\"\n    first_process = True\n    config = None\n\n    # Keeps track of the dump memory index for a particular process as in\n    # theory, and will be useful later, we may want to dump one process\n    # multiple times.\n    dumpmem = {}\n\n    def __init__(self, pid=None, tid=None, process_name=None):\n        \"\"\"\n        @param pid: process identifier.\n        @param tid: thread identifier.\n        @param process_name: process name.\n        \"\"\"\n        self.pid = pid\n        self.tid = tid\n        self.process_name = process_name\n\n    @staticmethod\n    def set_config(config):\n        \"\"\"Set the analyzer configuration once.\"\"\"\n        Process.config = config\n\n    def get_system_info(self):\n        \"\"\"Get system information.\"\"\"\n        self.system_info = SYSTEM_INFO()\n        KERNEL32.GetSystemInfo(byref(self.system_info))\n\n    def open_process(self):\n        \"\"\"Open a process handle.\"\"\"\n        return KERNEL32.OpenProcess(PROCESS_ALL_ACCESS, False, self.pid)\n\n    def open_thread(self):\n        \"\"\"Open a thread handle.\"\"\"\n        return KERNEL32.OpenThread(THREAD_ALL_ACCESS, False, self.tid)\n\n    def exit_code(self):\n        \"\"\"Get process exit code.\n        @return: exit code value.\n        \"\"\"\n        process_handle = self.open_process()\n\n        exit_code = c_ulong(0)\n        KERNEL32.GetExitCodeProcess(process_handle, byref(exit_code))\n        KERNEL32.CloseHandle(process_handle)\n\n        return exit_code.value\n\n    def get_filepath(self):\n        \"\"\"Get process image file path.\n        @return: decoded file path.\n        \"\"\"\n        process_handle = self.open_process()\n\n        NT_SUCCESS = lambda val: val >= 0\n\n        pbi = create_string_buffer(200)\n        size = c_int()\n\n        # Set return value to signed 32bit integer.\n        NTDLL.NtQueryInformationProcess.restype = c_int\n\n        ret = NTDLL.NtQueryInformationProcess(process_handle,\n                                              27,\n                                              byref(pbi),\n                                              sizeof(pbi),\n                                              byref(size))\n\n        KERNEL32.CloseHandle(process_handle)\n\n        if NT_SUCCESS(ret) and size.value > 8:\n            try:\n                fbuf = pbi.raw[8:]\n                fbuf = fbuf[:fbuf.find(\"\\x00\\x00\")+1]\n                return fbuf.decode(\"utf16\", errors=\"ignore\")\n            except:\n                return \"\"\n\n        return \"\"\n\n    def is_alive(self):\n        \"\"\"Process is alive?\n        @return: process status.\n        \"\"\"\n        return self.exit_code() == STILL_ACTIVE\n\n    def get_parent_pid(self):\n        \"\"\"Get the Parent Process ID.\"\"\"\n        class PROCESS_BASIC_INFORMATION(Structure):\n            _fields_ = [\n                (\"ExitStatus\", c_void_p),\n                (\"PebBaseAddress\", c_void_p),\n                (\"AffinityMask\", c_void_p),\n                (\"BasePriority\", c_void_p),\n                (\"UniqueProcessId\", c_void_p),\n                (\"InheritedFromUniqueProcessId\", c_void_p),\n            ]\n\n        NT_SUCCESS = lambda val: val >= 0\n\n        pbi = PROCESS_BASIC_INFORMATION()\n        size = c_int()\n\n        # Set return value to signed 32bit integer.\n        NTDLL.NtQueryInformationProcess.restype = c_int\n\n        process_handle = self.open_process()\n        ret = NTDLL.NtQueryInformationProcess(\n            process_handle, 0, byref(pbi), sizeof(pbi), byref(size)\n        )\n        KERNEL32.CloseHandle(process_handle)\n\n        if NT_SUCCESS(ret) and size.value == sizeof(pbi):\n            return pbi.InheritedFromUniqueProcessId\n\n    def _encode_args(self, args):\n        \"\"\"Convert a list of arguments to a string that can be passed along\n        on the command-line.\n        @param args: list of arguments\n        @return: the command-line equivalent\n        \"\"\"\n        ret = []\n        for line in args:\n            if \" \" in line:\n                ret.append('\"%s\"' % line)\n            else:\n                ret.append(line)\n        return \" \".join(ret)\n\n    def is32bit(self, pid=None, process_name=None, path=None):\n        \"\"\"Is a PE file 32-bit or does a process identifier belong to a\n        32-bit process.\n        @param pid: process identifier.\n        @param process_name: process name.\n        @param path: path to a PE file.\n        @return: boolean or exception.\n        \"\"\"\n        count = (pid is None) + (process_name is None) + (path is None)\n        if count != 2:\n            raise CuckooError(\"Invalid usage of is32bit, only one identifier \"\n                              \"should be specified\")\n\n        is32bit_exe = os.path.join(\"bin\", \"is32bit.exe\")\n\n        if pid:\n            args = [is32bit_exe, \"-p\", \"%s\" % pid]\n        elif process_name:\n            args = [is32bit_exe, \"-n\", process_name]\n\n        # If we're running a 32-bit Python in a 64-bit Windows system and the\n        # path points to System32, then we hardcode it as being a 64-bit\n        # binary. (To be fair, a 64-bit Python on 64-bit Windows would also\n        # make the System32 binary 64-bit).\n        elif os.path.isdir(\"C:\\\\Windows\\\\Sysnative\") and \\\n                path.lower().startswith(\"c:\\\\windows\\\\system32\"):\n            return False\n        elif not os.path.exists(path):\n            raise CuckooError(\"File not found: %s\" % path)\n        else:\n            args = [is32bit_exe, \"-f\", path]\n\n        try:\n            bitsize = int(subprocess_checkoutput(args))\n        except subprocess.CalledProcessError as e:\n            raise CuckooError(\"Error returned by is32bit: %s\" % e.output)\n\n        return bitsize == 32\n\n    def execute(self, path, args=None, dll=None, free=False, curdir=None,\n                source=None, mode=None, maximize=False, env=None,\n                trigger=None):\n        \"\"\"Execute sample process.\n        @param path: sample path.\n        @param args: process args.\n        @param dll: dll path.\n        @param free: do not inject our monitor.\n        @param curdir: current working directory.\n        @param source: process identifier or process name which will\n                       become the parent process for the new process.\n        @param mode: monitor mode - which functions to instrument.\n        @param maximize: whether the GUI should be maximized.\n        @param env: environment variables.\n        @param trigger: trigger to indicate analysis start\n        @return: operation status.\n        \"\"\"\n        if not os.access(path, os.X_OK):\n            log.error(\n                \"Unable to access file at path %r, execution aborted!\", path\n            )\n            return False\n\n        is32bit = self.is32bit(path=path)\n\n        if source:\n            if isinstance(source, (int, long)) or source.isdigit():\n                inject_is32bit = self.is32bit(pid=int(source))\n            else:\n                inject_is32bit = self.is32bit(process_name=source)\n        else:\n            inject_is32bit = is32bit\n\n        if inject_is32bit:\n            inject_exe = os.path.join(\"bin\", \"inject-x86.exe\")\n        else:\n            inject_exe = os.path.join(\"bin\", \"inject-x64.exe\")\n\n        argv = [\n            inject_exe,\n            \"--app\", path,\n            \"--only-start\",\n        ]\n\n        if args:\n            argv += [\"--args\", self._encode_args(args)]\n\n        if curdir:\n            argv += [\"--curdir\", curdir]\n\n        if source:\n            if isinstance(source, (int, long)) or source.isdigit():\n                argv += [\"--from\", \"%s\" % source]\n            else:\n                argv += [\"--from-process\", source]\n\n        if maximize:\n            argv += [\"--maximize\"]\n\n        try:\n            output = subprocess_checkoutput(argv, env)\n            self.pid, self.tid = map(int, output.split())\n        except subprocess.CalledProcessError as e:\n            log.error(\n                \"Failed to execute process from path %r with \"\n                \"arguments %r (Error: %s)\", path, argv, e\n            )\n            return False\n\n        # Report this PID to the kernel driver (if present).\n        zer0m0n.addpid(self.pid)\n\n        # With .NET for AnyCPU target, a 32-bit PE file can start a 64-bit\n        # process. Recheck the process bitness here after startup to make sure\n        # injection works.\n        is32bit = self.is32bit(self.pid)\n\n        if not dll:\n            if is32bit:\n                dll = \"monitor-x86.dll\"\n            else:\n                dll = \"monitor-x64.dll\"\n\n        dllpath = os.path.abspath(os.path.join(\"bin\", dll))\n\n        if not os.path.exists(dllpath):\n            log.warning(\"No valid DLL specified to be injected, \"\n                        \"injection aborted.\")\n            return False\n\n        if is32bit:\n            inject_exe = os.path.join(\"bin\", \"inject-x86.exe\")\n        else:\n            inject_exe = os.path.join(\"bin\", \"inject-x64.exe\")\n\n        argv = [\n            inject_exe,\n            \"--resume-thread\",\n            \"--pid\", \"%s\" % self.pid,\n            \"--tid\", \"%s\" % self.tid,\n        ]\n\n        if free:\n            argv.append(\"--free\")\n        else:\n            argv += [\n                \"--apc\",\n                \"--dll\", dllpath,\n                \"--config\", self.drop_config(mode=mode, trigger=trigger),\n            ]\n\n        try:\n            subprocess_checkoutput(argv, env)\n        except subprocess.CalledProcessError as e:\n            log.error(\n                \"Failed to execute process from path %r with \"\n                \"arguments %r (Error: %s)\", path, argv, e\n            )\n            return False\n\n        log.info(\"Successfully executed process from path %r with \"\n                 \"arguments %r and pid %d\", path, args or \"\", self.pid)\n        return True\n\n    def terminate(self):\n        \"\"\"Terminate process.\n        @return: operation status.\n        \"\"\"\n        process_handle = self.open_process()\n\n        ret = KERNEL32.TerminateProcess(process_handle, 1)\n        KERNEL32.CloseHandle(process_handle)\n\n        if ret:\n            log.info(\"Successfully terminated process with pid %d.\", self.pid)\n            return True\n        else:\n            log.error(\"Failed to terminate process with pid %d.\", self.pid)\n            return False\n\n    def inject(self, dll=None, apc=False, track=True, mode=None):\n        \"\"\"Inject our monitor into the specified process.\n        @param dll: Cuckoo DLL path.\n        @param apc: Use APC injection.\n        @param track: Track this process in the analyzer.\n        @param mode: Monitor mode - which functions to instrument.\n        \"\"\"\n        if not self.pid and not self.process_name:\n            log.warning(\"No valid pid or process name specified, \"\n                        \"injection aborted.\")\n            return False\n\n        # Only check whether the process is still alive when it's identified\n        # by a process identifier. Not when it's identified by a process name.\n        if not self.process_name and not self.is_alive():\n            log.warning(\"The process with pid %s is not alive, \"\n                        \"injection aborted\", self.pid)\n            return False\n\n        if self.process_name:\n            is32bit = self.is32bit(process_name=self.process_name)\n        elif self.pid:\n            is32bit = self.is32bit(pid=self.pid)\n\n        if not dll:\n            if is32bit:\n                dll = \"monitor-x86.dll\"\n            else:\n                dll = \"monitor-x64.dll\"\n\n        dllpath = os.path.abspath(os.path.join(\"bin\", dll))\n        if not os.path.exists(dllpath):\n            log.warning(\"No valid DLL specified to be injected in process \"\n                        \"with pid %s / process name %s, injection aborted.\",\n                        self.pid, self.process_name)\n            return False\n\n        if is32bit:\n            inject_exe = os.path.join(\"bin\", \"inject-x86.exe\")\n        else:\n            inject_exe = os.path.join(\"bin\", \"inject-x64.exe\")\n\n        args = [\n            inject_exe,\n            \"--dll\", dllpath,\n            \"--config\", self.drop_config(track=track, mode=mode),\n        ]\n\n        if self.pid:\n            args += [\"--pid\", \"%s\" % self.pid]\n        elif self.process_name:\n            args += [\"--process-name\", self.process_name]\n\n        if apc:\n            args += [\"--apc\", \"--tid\", \"%s\" % self.tid]\n        else:\n            args += [\"--crt\"]\n\n        try:\n            subprocess_checkcall(args)\n        except Exception:\n            log.error(\"Failed to inject %s-bit process with pid %s and \"\n                      \"process name %s\", 32 if is32bit else 64, self.pid,\n                      self.process_name)\n            return False\n\n        return True\n\n    def drop_config(self, track=True, mode=None, trigger=None):\n        \"\"\"Helper function to drop the configuration for a new process.\"\"\"\n        fd, config_path = tempfile.mkstemp()\n\n        # The first time we come up with a random startup-time.\n        if Process.first_process:\n            # This adds 1 up to 30 times of 20 minutes to the startup\n            # time of the process, therefore bypassing anti-vm checks\n            # which check whether the VM has only been up for <10 minutes.\n            Process.startup_time = random.randint(1, 30) * 20 * 60 * 1000\n\n        lines = {\n            \"pipe\": self.config.pipe,\n            \"logpipe\": self.config.logpipe,\n            \"analyzer\": os.getcwd(),\n            \"first-process\": \"1\" if Process.first_process else \"0\",\n            \"startup-time\": Process.startup_time,\n            \"shutdown-mutex\": SHUTDOWN_MUTEX,\n            \"force-sleepskip\": self.config.options.get(\"force-sleepskip\", \"0\"),\n            \"track\": \"1\" if track else \"0\",\n            \"mode\": mode or \"\",\n            \"disguise\": self.config.options.get(\"disguise\", \"0\"),\n            \"pipe-pid\": \"1\",\n            \"trigger\": (trigger or \"\").encode(\"utf8\"),\n        }\n\n        for key, value in lines.items():\n            os.write(fd, \"%s=%s\\n\" % (key, value))\n\n        os.close(fd)\n\n        # Only change the first_process attribute for processes that we\n        # \"track\", i.e., the lsass.exe injection doesn't count.\n        if track:\n            Process.first_process = False\n\n        return config_path\n\n    def dump_memory(self, addr=None, length=None):\n        \"\"\"Dump process memory, optionally target only a certain memory range.\n        @return: operation status.\n        \"\"\"\n        if not self.pid:\n            log.warning(\"No valid pid specified, memory dump aborted\")\n            return False\n\n        if not self.is_alive():\n            log.warning(\"The process with pid %d is not alive, memory \"\n                        \"dump aborted\", self.pid)\n            return False\n\n        if self.is32bit(pid=self.pid):\n            inject_exe = os.path.join(\"bin\", \"inject-x86.exe\")\n        else:\n            inject_exe = os.path.join(\"bin\", \"inject-x64.exe\")\n\n        # Take the memory dump.\n        dump_path = tempfile.mktemp()\n\n        try:\n            args = [\n                inject_exe,\n                \"--pid\", \"%s\" % self.pid,\n                \"--dump\", dump_path,\n            ]\n\n            # Restrict to a certain memory block.\n            if addr and length:\n                args += [\n                    \"--dump-block\",\n                    \"0x%x\" % addr,\n                    \"%s\" % length,\n                ]\n\n            subprocess_checkcall(args)\n        except subprocess.CalledProcessError:\n            log.error(\"Failed to dump memory of %d-bit process with pid %d.\",\n                      32 if self.is32bit(pid=self.pid) else 64, self.pid)\n            return\n\n        # Calculate the next index and send the process memory dump over to\n        # the host. Keep in mind that one process may have multiple process\n        # memory dumps in the future.\n        idx = self.dumpmem[self.pid] = self.dumpmem.get(self.pid, 0) + 1\n\n        if addr and length:\n            file_name = os.path.join(\n                \"memory\", \"block-%s-0x%x-%s.dmp\" % (self.pid, addr, idx)\n            )\n        else:\n            file_name = os.path.join(\"memory\", \"%s-%s.dmp\" % (self.pid, idx))\n\n        upload_to_host(dump_path, file_name)\n        os.unlink(dump_path)\n\n        log.info(\"Memory dump of process with pid %d completed\", self.pid)\n        return True\n\n    # The dump_memory_block functionality has been integrated with the\n    # dump_memory function, this alias is just for backwards compatibility.\n    dump_memory_block = dump_memory\n"
  },
  {
    "path": "analyzer/windows/lib/api/screenshot.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport math\n\ntry:\n    import ImageChops\n    import ImageGrab\n    import ImageDraw\n    HAVE_PIL = True\nexcept:\n    try:\n        from PIL import ImageChops\n        from PIL import ImageGrab\n        from PIL import ImageDraw\n        HAVE_PIL = True\n    except:\n        HAVE_PIL = False\n\nclass Screenshot:\n    \"\"\"Get screenshots.\"\"\"\n\n    def _draw_rectangle(self, img, xy):\n        \"\"\"Draw a black rectangle.\n        @param img: PIL Image object\n        @param xy: Coordinates as refined in PIL rectangle() doc\n        @return: Image with black rectangle\n        \"\"\"\n        dr = ImageDraw.Draw(img)\n        dr.rectangle(xy, fill=\"black\", outline=\"black\")\n        return img\n\n    def have_pil(self):\n        \"\"\"Is Python Image Library installed?\n        @return: installed status.\n        \"\"\"\n        return HAVE_PIL\n\n    def equal(self, img1, img2, skip_area=None):\n        \"\"\"Compares two screenshots using Root-Mean-Square Difference (RMS).\n        @param img1: screenshot to compare.\n        @param img2: screenshot to compare.\n        @return: equal status.\n        \"\"\"\n        if not HAVE_PIL:\n            return None\n\n        # Trick to avoid getting a lot of screen shots only because the time in the windows\n        # clock is changed.\n        # We draw a black rectangle on the coordinates where the clock is locates, and then\n        # run the comparison.\n        # NOTE: the coordinates are changing with VM screen resolution.\n        if skip_area:\n            # Copying objects to draw in another object.\n            img1 = img1.copy()\n            img2 = img2.copy()\n            # Draw a rectangle to cover windows clock.\n            for img in (img1, img2):\n                self._draw_rectangle(img, skip_area)\n\n        # To get a measure of how similar two images are, we use\n        # root-mean-square (RMS). If the images are exactly identical,\n        # this value is zero.\n        diff = ImageChops.difference(img1, img2)\n        h = diff.histogram()\n        sq = (value * ((idx % 256)**2) for idx, value in enumerate(h))\n        sum_of_squares = sum(sq)\n        rms = math.sqrt(sum_of_squares/float(img1.size[0] * img1.size[1]))\n\n        # Might need to tweak the threshold.\n        return rms < 8\n\n    def take(self):\n        \"\"\"Take a screenshot.\n        @return: screenshot or None.\n        \"\"\"\n        if not HAVE_PIL:\n            return None\n\n        return ImageGrab.grab()\n"
  },
  {
    "path": "analyzer/windows/lib/common/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "analyzer/windows/lib/common/abstracts.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2017 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport glob\nimport os\n\nfrom _winreg import CreateKey, SetValueEx, CloseKey, REG_DWORD, REG_SZ\n\nfrom lib.api.process import Process\nfrom lib.common.decide import dump_memory\nfrom lib.common.exceptions import CuckooPackageError\n\nclass Package(object):\n    \"\"\"Base abstract analysis package.\"\"\"\n    PATHS = []\n    REGKEYS = []\n\n    def __init__(self, options={}, analyzer=None):\n        \"\"\"@param options: options dict.\"\"\"\n        self.options = options\n        self.analyzer = analyzer\n        self.pids = []\n\n        # Fetch the current working directory, defaults to $TEMP.\n        if \"curdir\" in options:\n            self.curdir = os.path.expandvars(options[\"curdir\"])\n        else:\n            self.curdir = os.getenv(\"TEMP\")\n\n    def set_pids(self, pids):\n        \"\"\"Update list of monitored PIDs in the package context.\n        @param pids: list of pids.\n        \"\"\"\n        self.pids = pids\n\n    def start(self, target):\n        \"\"\"Run analysis package.\n        @raise NotImplementedError: this method is abstract.\n        \"\"\"\n        raise NotImplementedError\n\n    def check(self):\n        \"\"\"Check.\"\"\"\n        return True\n\n    def enum_paths(self):\n        \"\"\"Enumerate available paths.\"\"\"\n        basepaths = {\n            \"System32\": [\n                os.path.join(os.getenv(\"SystemRoot\"), \"System32\"),\n                os.path.join(os.getenv(\"SystemRoot\"), \"SysWOW64\"),\n            ],\n            \"ProgramFiles\": [\n                os.getenv(\"ProgramFiles\").replace(\" (x86)\", \"\"),\n                os.getenv(\"ProgramFiles(x86)\"),\n            ],\n            \"HomeDrive\": [\n                # os.path.join() doesn't work well if you give it just \"C:\"\n                # so manually append a backslash.\n                os.getenv(\"HomeDrive\") + \"\\\\\",\n            ],\n        }\n\n        for path in self.PATHS:\n            basedir = path[0]\n            for basepath in basepaths.get(basedir, [basedir]):\n                if not basepath or not os.path.isdir(basepath):\n                    continue\n\n                yield os.path.join(basepath, *path[1:])\n\n    def get_path(self, application):\n        \"\"\"Search for the application in all available paths.\n        @param applicaiton: application executable name\n        @return: executable path\n        \"\"\"\n        for path in self.enum_paths():\n            if os.path.isfile(path):\n                return path\n\n        raise CuckooPackageError(\"Unable to find any %s executable.\" %\n                                 application)\n\n    def get_path_glob(self, application):\n        \"\"\"Search for the application in all available paths with glob support.\n        @param applicaiton: application executable name\n        @return: executable path\n        \"\"\"\n        for path in self.enum_paths():\n            for path in glob.iglob(path):\n                if os.path.isfile(path):\n                    return path\n\n        raise CuckooPackageError(\"Unable to find any %s executable.\" %\n                                 application)\n\n    def move_curdir(self, filepath):\n        \"\"\"Move a file to the current working directory so it can be executed\n        from there.\n        @param filepath: the file to be moved\n        @return: the new filepath\n        \"\"\"\n        outpath = os.path.join(self.curdir, os.path.basename(filepath))\n        os.rename(filepath, outpath)\n        return outpath\n\n    def init_regkeys(self, regkeys):\n        \"\"\"Initialize the registry to avoid annoying popups, configure\n        settings, etc.\n        @param regkeys: the root keys, subkeys, and key/value pairs.\n        \"\"\"\n        for rootkey, subkey, values in regkeys:\n            key_handle = CreateKey(rootkey, subkey)\n\n            for key, value in values.items():\n                if isinstance(value, str):\n                    SetValueEx(key_handle, key, 0, REG_SZ, value)\n                elif isinstance(value, int):\n                    SetValueEx(key_handle, key, 0, REG_DWORD, value)\n                elif isinstance(value, dict):\n                    self.init_regkeys([\n                        [rootkey, \"%s\\\\%s\" % (subkey, key), value],\n                    ])\n                else:\n                    raise CuckooPackageError(\"Invalid value type: %r\" % value)\n\n            CloseKey(key_handle)\n\n    def execute(self, path, args, mode=None, maximize=False, env=None,\n                source=None, trigger=None):\n        \"\"\"Start an executable for analysis.\n        @param path: executable path\n        @param args: executable arguments\n        @param mode: monitor mode - which functions to instrument\n        @param maximize: whether the GUI should start maximized\n        @param env: additional environment variables\n        @param source: parent process of our process\n        @param trigger: trigger to indicate analysis start\n        @return: process pid\n        \"\"\"\n        dll = self.options.get(\"dll\")\n        free = self.options.get(\"free\")\n        analysis = self.options.get(\"analysis\")\n\n        # Kernel analysis overrides the free argument.\n        if analysis == \"kernel\":\n            free = True\n\n        source = source or self.options.get(\"from\")\n        mode = mode or self.options.get(\"mode\")\n\n        if not trigger and self.options.get(\"trigger\"):\n            if self.options[\"trigger\"] == \"exefile\":\n                trigger = \"file:%s\" % path\n\n        # Setup pre-defined registry keys.\n        self.init_regkeys(self.REGKEYS)\n\n        p = Process()\n        if not p.execute(path=path, args=args, dll=dll, free=free,\n                         curdir=self.curdir, source=source, mode=mode,\n                         maximize=maximize, env=env, trigger=trigger):\n            raise CuckooPackageError(\n                \"Unable to execute the initial process, analysis aborted.\"\n            )\n\n        return p.pid\n\n    def package_files(self):\n        \"\"\"Return a list of files to upload to host.\n        The list should be a list of tuples (<path on guest>, <name of file in package_files folder>).\n        (package_files is a folder that will be created in analysis folder).\n        \"\"\"\n        return None\n\n    def finish(self):\n        \"\"\"Finish run.\n        If specified to do so, this method dumps the memory of\n        all running processes.\n        \"\"\"\n        if self.options.get(\"procmemdump\"):\n            for pid in self.pids:\n                dump_memory(pid)\n\n        return True\n\nclass Auxiliary(object):\n    def __init__(self, options={}, analyzer=None):\n        self.options = options\n        self.analyzer = analyzer\n\n    def init(self):\n        pass\n\n    def start(self):\n        pass\n\n    def stop(self):\n        pass\n"
  },
  {
    "path": "analyzer/windows/lib/common/constants.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom lib.common.rand import random_string\n\nSHUTDOWN_MUTEX = \"Global\\\\\" + random_string(6, 10)\n"
  },
  {
    "path": "analyzer/windows/lib/common/decide.py",
    "content": "# Copyright (C) 2017 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom lib.api.process import Process\nfrom lib.core.ioctl import zer0m0n\n\ndef dump_memory(pid):\n    \"\"\"Dump process memory using zer0m0n if available, otherwise fallback.\"\"\"\n    if zer0m0n.dumpmem(pid) is False:\n        Process(pid=pid).dump_memory()\n"
  },
  {
    "path": "analyzer/windows/lib/common/defines.py",
    "content": "# Copyright (C) 2011-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2017 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom ctypes import *\n\nNTDLL    = windll.ntdll\nKERNEL32 = windll.kernel32\nADVAPI32 = windll.advapi32\nUSER32   = windll.user32\nSHELL32  = windll.shell32\nPSAPI    = windll.psapi\n\nBYTE      = c_ubyte\nWORD      = c_ushort\nDWORD     = c_ulong\nLONG      = c_ulong\nLPBYTE    = POINTER(c_ubyte)\nLPTSTR    = POINTER(c_char)\nPWSTR     = c_wchar_p\nHANDLE    = c_void_p\nPVOID     = c_void_p\nLPVOID    = c_void_p\nUINT_PTR  = c_ulong\nSIZE_T    = c_ulong\nHMODULE   = c_void_p\nNULL      = c_int(0)\n\nDEBUG_PROCESS             = 0x00000001\nCREATE_NEW_CONSOLE        = 0x00000010\nCREATE_SUSPENDED          = 0x00000004\nDBG_CONTINUE              = 0x00010002\nINFINITE                  = 0xFFFFFFFF\nPROCESS_ALL_ACCESS        = 0x001F0FFF\nTHREAD_ALL_ACCESS         = 0x001f03ff\nTOKEN_ALL_ACCESS          = 0x000F01FF\nSE_PRIVILEGE_ENABLED      = 0x00000002\nSTILL_ACTIVE              = 0x00000103\n\nPAGE_EXECUTE_READWRITE    = 0x00000040\nPAGE_EXECUTE              = 0x00000010\nPAGE_EXECUTE_READ         = 0x00000020\nPAGE_READONLY             = 0x00000002\nPAGE_READWRITE            = 0x00000004\n\nMEM_COMMIT                = 0x00001000\nMEM_RESERVE               = 0x00002000\nMEM_DECOMMIT              = 0x00004000\nMEM_RELEASE               = 0x00008000\nMEM_RESET                 = 0x00080000\n\nMEM_IMAGE                 = 0x01000000\nMEM_MAPPED                = 0x00040000\nMEM_PRIVATE               = 0x00020000\n\nPAGE_NOACCESS             = 0x00000001\nPAGE_READONLY             = 0x00000002\nPAGE_READWRITE            = 0x00000004\nPAGE_WRITECOPY            = 0x00000008\nPAGE_EXECUTE              = 0x00000010\nPAGE_EXECUTE_READ         = 0x00000020\nPAGE_EXECUTE_READWRITE    = 0x00000040\nPAGE_EXECUTE_WRITECOPY    = 0x00000080\nPAGE_GUARD                = 0x00000100\nPAGE_NOCACHE              = 0x00000200\nPAGE_WRITECOMBINE         = 0x00000400\n\nPIPE_ACCESS_INBOUND       = 0x00000001\nPIPE_ACCESS_DUPLEX        = 0x00000003\nPIPE_TYPE_MESSAGE         = 0x00000004\nPIPE_READMODE_MESSAGE     = 0x00000002\nPIPE_WAIT                 = 0x00000000\nPIPE_UNLIMITED_INSTANCES  = 0x000000ff\nPIPE_TYPE_BYTE            = 0x00000000\nPIPE_READMODE_BYTE        = 0x00000000\nFILE_FLAG_WRITE_THROUGH   = 0x80000000\nINVALID_HANDLE_VALUE      = 0xffffffff\nERROR_BROKEN_PIPE         = 0x0000006d\nERROR_MORE_DATA           = 0x000000EA\nERROR_PIPE_CONNECTED      = 0x00000217\n\nWAIT_TIMEOUT              = 0x00000102\n\nFILE_ATTRIBUTE_HIDDEN     = 0x00000002\n\nWM_CLOSE                  = 0x00000010\nWM_GETTEXT                = 0x0000000D\nWM_GETTEXTLENGTH          = 0x0000000E\nBM_CLICK                  = 0x000000F5\n\nSHARD_PATHA               = 0x00000002\n\nGENERIC_READ              = 0x80000000\nGENERIC_WRITE             = 0x40000000\nGENERIC_EXECUTE           = 0x20000000\nGENERIC_ALL               = 0x10000000\n\nFILE_SHARE_READ           = 0x00000001\nFILE_SHARE_WRITE          = 0x00000002\nFILE_SHARE_DELETE         = 0x00000004\n\nCREATE_NEW                = 1\nCREATE_ALWAYS             = 2\nOPEN_EXISTING             = 3\nOPEN_ALWAYS               = 4\nTRUNCATE_EXISTING         = 5\n\nclass STARTUPINFO(Structure):\n    _fields_ = [\n        (\"cb\",            DWORD),\n        (\"lpReserved\",    LPTSTR),\n        (\"lpDesktop\",     LPTSTR),\n        (\"lpTitle\",       LPTSTR),\n        (\"dwX\",           DWORD),\n        (\"dwY\",           DWORD),\n        (\"dwXSize\",       DWORD),\n        (\"dwYSize\",       DWORD),\n        (\"dwXCountChars\", DWORD),\n        (\"dwYCountChars\", DWORD),\n        (\"dwFillAttribute\",DWORD),\n        (\"dwFlags\",       DWORD),\n        (\"wShowWindow\",   WORD),\n        (\"cbReserved2\",   WORD),\n        (\"lpReserved2\",   LPBYTE),\n        (\"hStdInput\",     HANDLE),\n        (\"hStdOutput\",    HANDLE),\n        (\"hStdError\",     HANDLE),\n    ]\n\nclass PROCESS_INFORMATION(Structure):\n    _fields_ = [\n        (\"hProcess\",    HANDLE),\n        (\"hThread\",     HANDLE),\n        (\"dwProcessId\", DWORD),\n        (\"dwThreadId\",  DWORD),\n    ]\n\nclass LUID(Structure):\n    _fields_ = [\n        (\"LowPart\", DWORD),\n        (\"HighPart\", LONG),\n    ]\n\nclass LUID_AND_ATTRIBUTES(Structure):\n    _fields_ = [\n        (\"Luid\", LUID),\n        (\"Attributes\", DWORD),\n    ]\n\nclass TOKEN_PRIVILEGES(Structure):\n    _fields_ = [\n        (\"PrivilegeCount\", DWORD),\n        (\"Privileges\", LUID_AND_ATTRIBUTES),\n    ]\n\nclass MEMORY_BASIC_INFORMATION(Structure):\n    _fields_ = [\n        (\"BaseAddress\", PVOID),\n        (\"AllocationBase\", PVOID),\n        (\"AllocationProtect\", DWORD),\n        (\"RegionSize\", SIZE_T),\n        (\"State\", DWORD),\n        (\"Protect\", DWORD),\n        (\"Type\", DWORD),\n    ]\n\nclass PROC_STRUCT(Structure):\n    _fields_ = [\n        (\"wProcessorArchitecture\", WORD),\n        (\"wReserved\", WORD),\n    ]\n\nclass SYSTEM_INFO_UNION(Union):\n    _fields_ = [\n        (\"dwOemId\", DWORD),\n        (\"sProcStruc\", PROC_STRUCT),\n    ]\n\nclass SYSTEM_INFO(Structure):\n    _fields_ = [\n        (\"uSysInfo\", SYSTEM_INFO_UNION),\n        (\"dwPageSize\", DWORD),\n        (\"lpMinimumApplicationAddress\", LPVOID),\n        (\"lpMaximumApplicationAddress\", LPVOID),\n        (\"dwActiveProcessorMask\", DWORD),\n        (\"dwNumberOfProcessors\", DWORD),\n        (\"dwProcessorType\", DWORD),\n        (\"dwAllocationGranularity\", DWORD),\n        (\"wProcessorLevel\", WORD),\n        (\"wProcessorRevision\", WORD),\n    ]\n\nclass SYSTEMTIME(Structure):\n    _pack_ = 1\n    _fields_ = [\n        (\"wYear\", WORD),\n        (\"wMonth\", WORD),\n        (\"wDayOfWeek\", WORD),\n        (\"wDay\", WORD),\n        (\"wHour\", WORD),\n        (\"wMinute\", WORD),\n        (\"wSecond\", WORD),\n        (\"wMilliseconds\", WORD),\n    ]\n\nclass UNICODE_STRING(Structure):\n    _fields_ = [\n        (\"Length\", c_ushort),\n        (\"MaximumLength\", c_ushort),\n        (\"Buffer\", c_wchar_p),\n    ]\n\nEnumWindowsProc = WINFUNCTYPE(c_bool, POINTER(c_int), POINTER(c_int))\nEnumChildProc = WINFUNCTYPE(c_bool, POINTER(c_int), POINTER(c_int))\n"
  },
  {
    "path": "analyzer/windows/lib/common/exceptions.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nclass CuckooError(Exception):\n    pass\n\nclass CuckooPackageError(Exception):\n    pass\n\nclass CuckooDisableModule(CuckooError):\n    \"\"\"Exception for disabling a module dynamically.\"\"\"\n"
  },
  {
    "path": "analyzer/windows/lib/common/hashing.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nBUFSIZE = 1024*1024\n\n\ndef hash_file(method, path):\n    \"\"\"Calculate a hash on a file by path.\n    @param method: callable hashing method\n    @param path: file path\n    @return: computed hash string\n    \"\"\"\n    f = open(path, \"rb\")\n    h = method()\n    while True:\n        buf = f.read(BUFSIZE)\n        if not buf:\n            break\n        h.update(buf)\n    return h.hexdigest()\n"
  },
  {
    "path": "analyzer/windows/lib/common/rand.py",
    "content": "import random\nimport string\n\ndef random_string(minimum, maximum=None):\n    if maximum is None:\n        maximum = minimum\n\n    count = random.randint(minimum, maximum)\n    return \"\".join(random.choice(string.ascii_letters) for x in xrange(count))\n\ndef random_integer(digits):\n    start = 10 ** (digits - 1)\n    end = (10 ** digits) - 1\n    return random.randint(start, end)\n"
  },
  {
    "path": "analyzer/windows/lib/common/registry.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport struct\nimport _winreg\n\nfrom ctypes import windll, POINTER, byref, pointer\nfrom ctypes import c_ushort, c_wchar_p, c_void_p, create_string_buffer\nfrom ctypes.wintypes import HANDLE, DWORD, LPCWSTR, ULONG, LONG\n\nfrom lib.common.defines import UNICODE_STRING\n\nlog = logging.getLogger(__name__)\n\nRegOpenKeyExW = windll.advapi32.RegOpenKeyExW\nRegOpenKeyExW.argtypes = HANDLE, LPCWSTR, DWORD, ULONG, POINTER(HANDLE)\nRegOpenKeyExW.restype = LONG\n\nRegCreateKeyExW = windll.advapi32.RegCreateKeyExW\nRegCreateKeyExW.argtypes = (\n    HANDLE, LPCWSTR, DWORD, LPCWSTR, DWORD, DWORD,\n    DWORD, POINTER(HANDLE), POINTER(DWORD),\n)\nRegCreateKeyExW.restype = LONG\n\nRegQueryValueExW = windll.advapi32.RegQueryValueExW\nRegQueryValueExW.argtypes = \\\n    HANDLE, LPCWSTR, POINTER(DWORD), POINTER(DWORD), c_void_p, POINTER(DWORD)\nRegQueryValueExW.restype = LONG\n\nRegSetValueExW = windll.advapi32.RegSetValueExW\nRegSetValueExW.argtypes = HANDLE, LPCWSTR, DWORD, DWORD, c_void_p, DWORD\nRegSetValueExW.restype = LONG\n\nRegDeleteKeyW = windll.advapi32.RegDeleteKeyW\nRegDeleteKeyW.argtypes = HANDLE, LPCWSTR\nRegDeleteKeyW.restype = LONG\n\nNtRenameKey = windll.ntdll.NtRenameKey\nNtRenameKey.argtypes = HANDLE, POINTER(UNICODE_STRING)\n\nRegCloseKey = windll.advapi32.RegCloseKey\nRegCloseKey.argtypes = HANDLE,\n\n_rootkeys = {\n    \"HKEY_LOCAL_MACHINE\": _winreg.HKEY_LOCAL_MACHINE,\n    \"HKEY_CURRENT_USER\": _winreg.HKEY_CURRENT_USER,\n}\n\n_regtypes = {\n    \"REG_DWORD\": _winreg.REG_DWORD,\n    \"REG_SZ\": _winreg.REG_SZ,\n    \"REG_BINARY\": _winreg.REG_BINARY,\n}\n\ndef rename_regkey(skey, ssubkey, dsubkey):\n    \"\"\"Rename an entire tree of values in the registry.\n    Function by Thorsten Sick.\"\"\"\n    res_handle = HANDLE()\n    options = DWORD(0)\n    res = RegOpenKeyExW(\n        skey, ssubkey, options, _winreg.KEY_ALL_ACCESS, byref(res_handle)\n    )\n    if not res:\n        bsize = c_ushort(len(dsubkey) * 2)\n        us = UNICODE_STRING()\n        us.Buffer = c_wchar_p(dsubkey)\n        us.Length = bsize\n        us.MaximumLength = bsize\n\n        res = NtRenameKey(res_handle, pointer(us))\n        if res:\n            log.warning(\"Error renaming %s\\\\%s to %s (0x%x)\",\n                        skey, ssubkey, dsubkey, res % 2**32)\n\n    if res_handle:\n        RegCloseKey(res_handle)\n\ndef regkey_exists(rootkey, subkey):\n    res_handle = HANDLE()\n    res = RegOpenKeyExW(\n        rootkey, subkey, 0, _winreg.KEY_QUERY_VALUE, byref(res_handle)\n    )\n    RegCloseKey(res_handle)\n    return not res\n\ndef set_regkey(rootkey, subkey, name, type_, value):\n    if type_ == _winreg.REG_SZ:\n        value = unicode(value)\n        length = len(value) * 2 + 2\n    elif type_ == _winreg.REG_MULTI_SZ:\n        value = u\"\\u0000\".join(value) + u\"\\u0000\\u0000\"\n        length = len(value) * 2 + 2\n    elif type_ == _winreg.REG_DWORD:\n        value = struct.pack(\"I\", value)\n        length = 4\n    else:\n        length = len(value)\n\n    res_handle = HANDLE()\n    res = RegCreateKeyExW(\n        rootkey, subkey, 0, None, 0, _winreg.KEY_ALL_ACCESS,\n        0, byref(res_handle), None\n    )\n    if not res:\n        RegSetValueExW(res_handle, name, 0, type_, value, length)\n        RegCloseKey(res_handle)\n\ndef set_regkey_full(regkey, type_, value):\n    components = regkey.split(\"\\\\\")\n    rootkey, subkey, name = components[0], components[1:-1], components[-1]\n    if rootkey not in _rootkeys:\n        log.warning(\"Unknown root key for registry key: %s\", rootkey)\n        return\n\n    set_regkey(\n        _rootkeys[rootkey], \"\\\\\".join(subkey), name,\n        _regtypes.get(type_, type_), value\n    )\n\ndef del_regkey(rootkey, regkey):\n    RegDeleteKeyW(rootkey, regkey)\n\ndef query_value(rootkey, subkey, name):\n    res_handle = HANDLE()\n    type_ = DWORD()\n    value = create_string_buffer(1024 * 1024)\n    length = DWORD(1024 * 1024)\n\n    res = RegOpenKeyExW(\n        rootkey, subkey, 0, _winreg.KEY_QUERY_VALUE, byref(res_handle)\n    )\n    if not res:\n        res = RegQueryValueExW(\n            res_handle, name, None, byref(type_), value, byref(length)\n        )\n        RegCloseKey(res_handle)\n\n    if not res:\n        if type_.value == _winreg.REG_SZ:\n            return value.raw[:length.value].decode(\"utf16\").rstrip(\"\\x00\")\n        if type_.value == _winreg.REG_MULTI_SZ:\n            value = value.raw[:length.value].decode(\"utf16\")\n            return value.rstrip(u\"\\u0000\").split(u\"\\u0000\")\n        if type_.value == _winreg.REG_DWORD:\n            return struct.unpack(\"I\", value.raw[:length.value])[0]\n        return value.raw[:length.value]\n"
  },
  {
    "path": "analyzer/windows/lib/common/results.py",
    "content": "# Copyright (C) 2013 Claudio Guarnieri.\n# Copyright (C) 2014-2017 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport socket\nimport time\nimport sys\n\nfrom lib.core.config import Config\n\nlog = logging.getLogger(__name__)\n\nBUFSIZE = 1024*1024\n\ndef upload_to_host(file_path, dump_path, pids=[]):\n    nc = infd = None\n    try:\n        nc = NetlogFile()\n        nc.init(dump_path, file_path, pids)\n\n        infd = open(file_path, \"rb\")\n        buf = infd.read(BUFSIZE)\n        while buf:\n            nc.send(buf, retry=False)\n            buf = infd.read(BUFSIZE)\n    except Exception as e:\n        log.error(\"Exception uploading file %r to host: %s\", file_path, e)\n    finally:\n        if infd:\n            infd.close()\n        if nc:\n            nc.close()\n\nclass NetlogConnection(object):\n    def __init__(self, proto=\"\"):\n        config = Config(cfg=\"analysis.conf\")\n        self.hostip, self.hostport = config.ip, config.port\n        self.sock = None\n        self.proto = proto\n\n    def connect(self):\n        # Try to connect as quickly as possible. Just sort of force it to\n        # connect with a short timeout.\n        while not self.sock:\n            try:\n                s = socket.create_connection((self.hostip, self.hostport), 0.1)\n            except socket.error:\n                time.sleep(0.1)\n                continue\n\n            s.settimeout(None)\n            s.sendall(self.proto)\n\n            self.sock = s\n\n    def send(self, data, retry=True):\n        if not self.sock:\n            self.connect()\n\n        try:\n            self.sock.sendall(data)\n        except socket.error as e:\n            if retry:\n                self.connect()\n                self.send(data, retry=False)\n            else:\n                print >>sys.stderr, \"Unhandled exception in NetlogConnection:\", str(e)\n        except Exception as e:\n            print >>sys.stderr, \"Unhandled exception in NetlogConnection:\", str(e)\n            # We really have nowhere to log this, if the netlog connection\n            # does not work, we can assume that any logging won't work either.\n            # So we just fail silently.\n            self.close()\n\n    def close(self):\n        try:\n            self.sock.shutdown(socket.SHUT_RDWR)\n            self.sock.close()\n            self.sock = None\n        except Exception:\n            pass\n\nclass NetlogFile(NetlogConnection):\n    def init(self, dump_path, filepath=None, pids=[]):\n        if filepath:\n            self.proto = \"FILE 2\\n%s\\n%s\\n%s\\n\" % (\n                dump_path.encode(\"utf8\"), filepath.encode(\"utf8\"),\n                \" \".join(pids)\n            )\n        else:\n            self.proto = \"FILE\\n%s\\n\" % dump_path.encode(\"utf8\")\n\n        self.connect()\n\nclass NetlogHandler(logging.Handler, NetlogConnection):\n    def __init__(self):\n        logging.Handler.__init__(self)\n        NetlogConnection.__init__(self, proto=\"LOG\\n\")\n        self.connect()\n\n    def emit(self, record):\n        msg = self.format(record)\n        self.send(\"{0}\\n\".format(msg))\n"
  },
  {
    "path": "analyzer/windows/lib/core/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "analyzer/windows/lib/core/config.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport ConfigParser\n\nclass Config:\n    def __init__(self, cfg):\n        \"\"\"@param cfg: configuration file.\"\"\"\n        config = ConfigParser.ConfigParser(allow_no_value=True)\n        config.read(cfg)\n\n        for section in config.sections():\n            for name, raw_value in config.items(section):\n                if name == \"file_name\":\n                    value = config.get(section, name).decode(\"utf8\")\n                elif name == \"options\":\n                    value = self.parse_options(config.get(section, name))\n                else:\n                    try:\n                        value = config.getboolean(section, name)\n                    except ValueError:\n                        try:\n                            value = config.getint(section, name)\n                        except ValueError:\n                            value = config.get(section, name)\n                setattr(self, name, value)\n\n        # Just make sure the options field is available.\n        if not hasattr(self, \"options\"):\n            self.options = {}\n\n    def parse_options(self, options):\n        \"\"\"Get analysis options.\n        @return: options dict.\n        \"\"\"\n        # The analysis package can be provided with some options in the\n        # following format:\n        #   option1=value1,option2=value2,option3=value3\n        ret = {}\n        for field in options.split(\",\"):\n            if \"=\" not in field:\n                continue\n\n            key, value = field.split(\"=\", 1)\n            ret[key.strip()] = value.strip()\n        return ret\n"
  },
  {
    "path": "analyzer/windows/lib/core/driver.py",
    "content": "# Copyright (C) 2017-2018 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport ctypes\nimport os.path\nimport platform\nimport shutil\nimport _winreg\n\nfrom lib.common.defines import NTDLL, UNICODE_STRING\nfrom lib.common.exceptions import CuckooError\nfrom lib.common.registry import set_regkey, del_regkey\n\nclass Driver(object):\n    def __init__(self, driver_name, install_name):\n        self.driver_name = driver_name\n        self.install_name = install_name\n        self.is_64bit = platform.machine().endswith(\"64\")\n\n    def install(self):\n        self.copy_driver()\n        self.set_regkey(\n            \"ImagePath\", _winreg.REG_SZ,\n            \"\\\\SystemRoot\\\\system32\\\\drivers\\\\%s.sys\" % self.install_name\n        )\n        self.set_regkey(\"Start\", _winreg.REG_DWORD, 3)\n        self.set_regkey(\"Type\", _winreg.REG_DWORD, 1)\n        self.set_regkey(\"ErrorControl\", _winreg.REG_DWORD, 1)\n        self.load_driver()\n        self.del_regkeys()\n\n    def copy_driver(self):\n        if platform.machine().endswith(\"64\"):\n            self.driver_path = os.path.join(\n                \"bin\", \"%s-x64.sys\" % self.driver_name\n            )\n            install_dir = os.path.expandvars(\n                \"%SystemRoot%\\\\sysnative\\\\drivers\"\n            )\n        else:\n            self.driver_path = os.path.join(\n                \"bin\", \"%s-x86.sys\" % self.driver_name\n            )\n            install_dir = os.path.expandvars(\n                \"%SystemRoot%\\\\system32\\\\drivers\"\n            )\n\n        if not os.path.exists(self.driver_path):\n            raise CuckooError(\"Error locating %s driver!\" % self.driver_name)\n\n        self.install_path = os.path.join(\n            install_dir, \"%s.sys\" % self.install_name\n        )\n\n        shutil.copy(self.driver_path, self.install_path)\n\n    def set_regkey(self, key, type_, value):\n        set_regkey(\n            _winreg.HKEY_LOCAL_MACHINE,\n            \"SYSTEM\\\\CurrentControlSet\\\\Services\\\\%s\" % self.install_name,\n            key, type_, value\n        )\n\n    def del_regkeys(self):\n        regkeys = [\n            \"SYSTEM\\\\CurrentControlSet\\\\Services\\\\%s\\\\Enum\",\n            \"SYSTEM\\\\CurrentControlSet\\\\Services\\\\%s\\\\Security\",\n            \"SYSTEM\\\\CurrentControlSet\\\\Services\\\\%s\",\n        ]\n\n        for regkey in regkeys:\n            del_regkey(_winreg.HKEY_LOCAL_MACHINE, regkey % self.install_name)\n\n    def load_driver(self):\n        regkey = (\n            u\"\\\\Registry\\\\Machine\\\\System\"\n            u\"\\\\CurrentControlSet\\\\Services\\\\%s\" % self.install_name\n        )\n        us = UNICODE_STRING()\n        us.Buffer = regkey\n        us.Length = len(regkey) * 2\n        us.MaximumLength = us.Length\n\n        status = NTDLL.NtLoadDriver(ctypes.byref(us)) % 2**32\n        if status == 0xc0000428:\n            raise CuckooError(\n                \"Driver Signature Enforcement has not been disabled.\"\n            )\n        if status:\n            raise CuckooError(\n                \"Unable to load the %s driver: 0x%x\" %\n                (self.driver_name, status)\n            )\n"
  },
  {
    "path": "analyzer/windows/lib/core/ioctl.py",
    "content": "# Copyright (C) 2016-2018 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport ctypes\nimport logging\nimport socket\nimport struct\n\nfrom lib.common.defines import (\n    KERNEL32, GENERIC_READ, GENERIC_WRITE, FILE_SHARE_READ, FILE_SHARE_WRITE,\n    OPEN_EXISTING\n)\nfrom lib.common.rand import random_string\n\nlog = logging.getLogger(__name__)\n\n# Random name for the zer0m0n driver.\ndriver_name = random_string(16)\n\nCTL_CODE_BASE = 0x222000\n\nclass Ioctl(object):\n    def __init__(self, pipepath):\n        self.pipepath = pipepath\n\n    def invoke(self, ctlcode, value, outlength=0x1000):\n        device_handle = KERNEL32.CreateFileA(\n            \"\\\\\\\\.\\\\%s\" % self.pipepath, GENERIC_READ | GENERIC_WRITE,\n            FILE_SHARE_READ | FILE_SHARE_WRITE, None, OPEN_EXISTING, 0, None\n        ) % 2**32\n\n        if device_handle == 0xffffffff:\n            # Only report an error if the error is not \"name not found\",\n            # indicating that no kernel analysis is currently taking place.\n            if KERNEL32.GetLastError() != 2:\n                log.warning(\n                    \"Error opening handle to driver (%s): %d!\",\n                    driver_name, KERNEL32.GetLastError()\n                )\n            return False\n\n        out = ctypes.create_string_buffer(outlength)\n        length = ctypes.c_uint()\n\n        ret = KERNEL32.DeviceIoControl(\n            device_handle, ctlcode, value, len(value), out,\n            ctypes.sizeof(out), ctypes.byref(length), None\n        )\n        KERNEL32.CloseHandle(device_handle)\n\n        if not ret:\n            log.warning(\n                \"Error performing ioctl (0x%08x): %d!\",\n                ctlcode, KERNEL32.GetLastError()\n            )\n            return False\n\n        return out.raw[:length.value]\n\nclass Zer0m0nIoctl(Ioctl):\n    actions = [\n        \"addpid\",\n        \"cmdpipe\",\n        \"channel\",\n        \"dumpmem\",\n        \"yarald\",\n        \"getpids\",\n        \"hidepid\",\n        \"dumpint\",\n        \"resultserver\",\n    ]\n\n    def invoke(self, action, buf):\n        if action not in self.actions:\n            raise RuntimeError(\"Invalid ioctl action: %s\" % action)\n\n        return Ioctl.invoke(\n            self, CTL_CODE_BASE + self.actions.index(action) * 4, buf,\n        )\n\n    def addpid(self, pid):\n        return self.invoke(\"addpid\", struct.pack(\"Q\", pid))\n\n    def cmdpipe(self, pipe):\n        return self.invoke(\"cmdpipe\", \"\\x00\".join(pipe + \"\\x00\"))\n\n    def channel(self, pipe):\n        return self.invoke(\"channel\", \"\\x00\".join(pipe + \"\\x00\"))\n\n    def dumpmem(self, pid):\n        return self.invoke(\"dumpmem\", struct.pack(\"Q\", pid))\n\n    def yarald(self, rulepath):\n        return self.invoke(\"yarald\", open(rulepath, \"rb\").read())\n\n    def getpids(self):\n        pids = self.invoke(\"getpids\", \"pids\") or \"\"\n        return struct.unpack(\"Q\"*(len(pids)/8), pids)\n\n    def hidepid(self, pid):\n        return self.invoke(\"hidepid\", struct.pack(\"Q\", pid))\n\n    def dumpint(self, ms):\n        return self.invoke(\"dumpint\", struct.pack(\"I\", ms))\n\n    def resultserver(self, ip, port):\n        # Just a regular SOCKADDR structure, up to 128 bytes\n        if \":\" in ip:\n            rs = struct.pack(\"<H\", socket.AF_INET6)\n            rs += struct.pack(\"!H\", port)\n            rs += socket.inet_pton(socket.AF_INET6, ip)\n        else:\n            rs = struct.pack(\"<H\", socket.AF_INET)\n            rs += struct.pack(\"!H\", port)\n            rs += socket.inet_aton(ip)\n        return self.invoke(\"resultserver\", rs)\n\nzer0m0n = Zer0m0nIoctl(driver_name)\n"
  },
  {
    "path": "analyzer/windows/lib/core/packages.py",
    "content": "# Copyright (C) 2012-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2018 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\ndef has_com_exports(exports):\n    com_exports = [\n        \"DllInstall\",\n        \"DllCanUnloadNow\",\n        \"DllGetClassObject\",\n        \"DllRegisterServer\",\n        \"DllUnregisterServer\",\n    ]\n\n    for name in com_exports:\n        if name not in exports:\n            return False\n    return True\n\ndef choose_package(file_type, file_name, exports):\n    \"\"\"Choose analysis package due to file type and file extension.\n    @param file_type: file type.\n    @param file_name: file name.\n    @return: package name or None.\n    \"\"\"\n    if not file_type:\n        return None\n\n    file_name = file_name.lower()\n\n    if \"DLL\" in file_type:\n        if file_name.endswith(\".cpl\"):\n            return \"cpl\"\n        elif has_com_exports(exports):\n            return \"com\"\n        else:\n            return \"dll\"\n    elif \"PE32\" in file_type or \"MS-DOS\" in file_type:\n        return \"exe\"\n    elif \"PDF\" in file_type or file_name.endswith(\".pdf\"):\n        return \"pdf\"\n    elif file_name.endswith(\".pub\"):\n        return \"pub\"\n    elif \"Hangul (Korean) Word Processor File 5.x\" in file_type or file_name.endswith(\".hwp\"):\n        return \"hwp\"\n    elif \"Rich Text Format\" in file_type or \\\n            \"Microsoft Word\" in file_type or \\\n            \"Microsoft Office Word\" in file_type or \\\n            file_name.endswith((\".doc\", \".docx\", \".rtf\", \".docm\")):\n        return \"doc\"\n    elif \"Microsoft Office Excel\" in file_type or \\\n            \"Microsoft Excel\" in file_type or \\\n            file_name.endswith((\".xls\", \".xlsx\", \".xlt\", \".xlsm\", \".iqy\", \".slk\")):\n        return \"xls\"\n    elif \"Microsoft Office PowerPoint\" in file_type or \\\n            \"Microsoft PowerPoint\" in file_type or \\\n            file_name.endswith((\".ppt\", \".pptx\", \".pps\", \".ppsx\", \".pptm\", \".potm\", \".potx\", \".ppsm\")):\n        return \"ppt\"\n    elif file_name.endswith(\".jar\"):\n        return \"jar\"\n    elif file_name.endswith(\".hta\"):\n        return \"hta\"\n    elif \"Zip\" in file_type:\n        return \"zip\"\n    elif file_name.endswith((\".py\", \".pyc\")) or \"Python script\" in file_type:\n        return \"python\"\n    elif file_name.endswith(\".vbs\"):\n        return \"vbs\"\n    elif file_name.endswith(\".js\"):\n        return \"js\"\n    elif file_name.endswith(\".jse\"):\n        return \"jse\"\n    elif file_name.endswith(\".msi\"):\n        return \"msi\"\n    elif file_name.endswith(\".ps1\"):\n        return \"ps1\"\n    elif file_name.endswith((\".wsf\", \".wsc\")):\n        return \"wsf\"\n    elif \"HTML\" in file_type or file_name.endswith((\".htm\", \".html\", \".hta\", \".mht\", \".mhtml\", \".url\")):\n        return \"ie\"\n    else:\n        return \"generic\"\n"
  },
  {
    "path": "analyzer/windows/lib/core/pipe.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport socket\nimport threading\nimport errno\n\nfrom ctypes import create_string_buffer, c_uint, byref, sizeof\n\nfrom lib.common.defines import KERNEL32, PIPE_ACCESS_INBOUND, ERROR_MORE_DATA\nfrom lib.common.defines import PIPE_TYPE_BYTE, PIPE_WAIT, ERROR_PIPE_CONNECTED\nfrom lib.common.defines import PIPE_UNLIMITED_INSTANCES, INVALID_HANDLE_VALUE\nfrom lib.common.defines import FILE_FLAG_WRITE_THROUGH, PIPE_READMODE_BYTE\nfrom lib.common.defines import ERROR_BROKEN_PIPE, PIPE_TYPE_MESSAGE\nfrom lib.common.defines import PIPE_ACCESS_DUPLEX, PIPE_READMODE_MESSAGE\n\nlog = logging.getLogger(__name__)\n\nBUFSIZE = 0x10000\nopen_handles = set()\n\nclass PipeForwarder(threading.Thread):\n    \"\"\"Forward all data received from a local pipe to the Cuckoo\n    server through a socket.\"\"\"\n    sockets = {}\n    active = {}\n\n    def __init__(self, pipe_handle, destination):\n        threading.Thread.__init__(self)\n        self.pipe_handle = pipe_handle\n        self.destination = destination\n        self.do_run = True\n\n    def run(self):\n        buf = create_string_buffer(BUFSIZE)\n        bytes_read = c_uint()\n        pid = c_uint()\n\n        # The first four bytes indicate the process identifier. In case the\n        # pipe handle is closed in an unknown way, reopening one and\n        # specifying the same process identifier will reuse the same socket,\n        # thus making it look like as if it was never closed in the first\n        # place.\n        success = KERNEL32.ReadFile(\n            self.pipe_handle, byref(pid), sizeof(pid),\n            byref(bytes_read), None\n        )\n\n        if not success or bytes_read.value != sizeof(pid):\n            log.warning(\n                \"Unable to read the process identifier of this \"\n                \"log pipe instance.\"\n            )\n            KERNEL32.CloseHandle(self.pipe_handle)\n            return\n\n        if self.active.get(pid.value):\n            log.warning(\n                \"A second log pipe handler for an active process is \"\n                \"being requested, denying request.\"\n            )\n            KERNEL32.CloseHandle(self.pipe_handle)\n            return\n\n        if pid.value:\n            sock = self.sockets.get(pid.value)\n            if not sock:\n                sock = socket.create_connection(self.destination)\n                self.sockets[pid.value] = sock\n\n            self.active[pid.value] = True\n        else:\n            sock = socket.create_connection(self.destination)\n\n        open_handles.add(sock)\n\n        while self.do_run:\n            success = KERNEL32.ReadFile(\n                self.pipe_handle, byref(buf), sizeof(buf),\n                byref(bytes_read), None\n            )\n\n            if success or KERNEL32.GetLastError() == ERROR_MORE_DATA:\n                try:\n                    sock.sendall(buf.raw[:bytes_read.value])\n                except socket.error as e:\n                    if e.errno != errno.EBADF:\n                        log.warning(\"Failed socket operation: %s\", e)\n                    break\n\n            # If we get the broken pipe error then this pipe connection has\n            # been terminated for one reason or another. So break from the\n            # loop and make the socket \"inactive\", that is, another pipe\n            # connection can in theory pick it up. (This will only happen in\n            # cases where malware for some reason broke our pipe connection).\n            elif KERNEL32.GetLastError() == ERROR_BROKEN_PIPE:\n                break\n            else:\n                log.warning(\n                    \"The log pipe handler has failed, last error %d.\",\n                    KERNEL32.GetLastError()\n                )\n                break\n\n        if pid.value:\n            self.active[pid.value] = False\n\n    def stop(self):\n        self.do_run = False\n\nclass PipeDispatcher(threading.Thread):\n    \"\"\"Receive commands through a local pipe, forward them to the\n    dispatcher, and return the response.\"\"\"\n\n    def __init__(self, pipe_handle, dispatcher):\n        threading.Thread.__init__(self)\n        self.pipe_handle = pipe_handle\n        self.dispatcher = dispatcher\n        self.do_run = True\n\n    def _read_message(self, buf):\n        \"\"\"Reads a message.\"\"\"\n        bytes_read = c_uint()\n        ret = \"\"\n\n        while True:\n            success = KERNEL32.ReadFile(\n                self.pipe_handle, byref(buf), sizeof(buf),\n                byref(bytes_read), None\n            )\n\n            if KERNEL32.GetLastError() == ERROR_MORE_DATA:\n                ret += buf.raw[:bytes_read.value]\n            elif success:\n                return ret + buf.raw[:bytes_read.value]\n            else:\n                return\n\n    def run(self):\n        \"\"\"Run the pipe dispatcher.\"\"\"\n        buf = create_string_buffer(BUFSIZE)\n        bytes_written = c_uint()\n\n        while self.do_run:\n            message = self._read_message(buf)\n            if not message:\n                break\n\n            response = self.dispatcher.dispatch(message) or \"OK\"\n\n            KERNEL32.WriteFile(\n                self.pipe_handle, response, len(response),\n                byref(bytes_written), None\n            )\n\n        KERNEL32.CloseHandle(self.pipe_handle)\n\n    def stop(self):\n        self.do_run = False\n\nclass PipeServer(threading.Thread):\n    \"\"\"Accept incoming pipe handlers and initialize them in\n    a new thread.\"\"\"\n\n    def __init__(self, pipe_handler, pipe_name, message=False, **kwargs):\n        threading.Thread.__init__(self)\n        self.pipe_handler = pipe_handler\n        self.pipe_name = pipe_name\n        self.message = message\n        self.kwargs = kwargs\n        self.do_run = True\n        self.handlers = set()\n\n    def run(self):\n        while self.do_run:\n            flags = FILE_FLAG_WRITE_THROUGH\n            if self.message:\n                pipe_handle = KERNEL32.CreateNamedPipeA(\n                    self.pipe_name, PIPE_ACCESS_DUPLEX | flags,\n                    PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,\n                    PIPE_UNLIMITED_INSTANCES, BUFSIZE, BUFSIZE, 0, None\n                )\n            else:\n                pipe_handle = KERNEL32.CreateNamedPipeA(\n                    self.pipe_name, PIPE_ACCESS_INBOUND | flags,\n                    PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,\n                    PIPE_UNLIMITED_INSTANCES, 0, BUFSIZE, 0, None\n                )\n\n            if pipe_handle == INVALID_HANDLE_VALUE:\n                log.warning(\"Error opening logging pipe server.\")\n                continue\n\n            if KERNEL32.ConnectNamedPipe(pipe_handle, None) or \\\n                    KERNEL32.GetLastError() == ERROR_PIPE_CONNECTED:\n                handler = self.pipe_handler(pipe_handle, **self.kwargs)\n                handler.daemon = True\n                handler.start()\n                self.handlers.add(handler)\n            else:\n                KERNEL32.CloseHandle(pipe_handle)\n\n    def stop(self):\n        self.do_run = False\n        for h in self.handlers:\n            try:\n                if h.isAlive():\n                    h.stop()\n            except:\n                pass\n\ndef disconnect_pipes():\n    for sock in open_handles:\n        try:\n            sock.shutdown(socket.SHUT_RDWR)\n            sock.close()\n        except:\n            log.exception(\"Could not close socket\")\n"
  },
  {
    "path": "analyzer/windows/lib/core/privileges.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom ctypes import wintypes, POINTER\n\nfrom lib.common.defines import ADVAPI32, KERNEL32, SE_PRIVILEGE_ENABLED\nfrom lib.common.defines import LUID, TOKEN_PRIVILEGES\nfrom lib.common.defines import TOKEN_ALL_ACCESS, LUID_AND_ATTRIBUTES\n\ndef grant_privilege(privilege):\n    \"\"\"Grant debug privileges.\n    @param pid: PID.\n    @return: operation status.\n    \"\"\"\n    ADVAPI32.OpenProcessToken.argtypes = (wintypes.HANDLE,\n                                          wintypes.DWORD,\n                                          POINTER(wintypes.HANDLE))\n\n    ADVAPI32.LookupPrivilegeValueW.argtypes = (wintypes.LPWSTR,\n                                               wintypes.LPWSTR,\n                                               POINTER(LUID))\n\n    ADVAPI32.AdjustTokenPrivileges.argtypes = (wintypes.HANDLE,\n                                               wintypes.BOOL,\n                                               POINTER(TOKEN_PRIVILEGES),\n                                               wintypes.DWORD,\n                                               POINTER(TOKEN_PRIVILEGES),\n                                               POINTER(wintypes.DWORD))\n\n    h_process = KERNEL32.GetCurrentProcess()\n\n    h_current_token = wintypes.HANDLE()\n    if not ADVAPI32.OpenProcessToken(h_process,\n                                     TOKEN_ALL_ACCESS,\n                                     h_current_token):\n        return False\n\n    se_original_luid = LUID()\n    if not ADVAPI32.LookupPrivilegeValueW(None, privilege, se_original_luid):\n        return False\n\n    luid_attributes = LUID_AND_ATTRIBUTES()\n    luid_attributes.Luid = se_original_luid\n    luid_attributes.Attributes = SE_PRIVILEGE_ENABLED\n    token_privs = TOKEN_PRIVILEGES()\n    token_privs.PrivilegeCount = 1\n    token_privs.Privileges = luid_attributes\n\n    if not ADVAPI32.AdjustTokenPrivileges(h_current_token, False, token_privs,\n                                          0, None, None):\n        return False\n\n    KERNEL32.CloseHandle(h_current_token)\n    KERNEL32.CloseHandle(h_process)\n    return True\n"
  },
  {
    "path": "analyzer/windows/lib/core/startup.py",
    "content": "# Copyright (C) 2011-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2017 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport ctypes\nimport logging\n\nfrom lib.common.defines import KERNEL32, SYSTEMTIME\nfrom lib.common.results import NetlogHandler\n\nlog = logging.getLogger()\nnetlog_handler = None\n\ndef init_logging():\n    \"\"\"Initialize logger.\"\"\"\n    formatter = logging.Formatter(\n        \"%(asctime)s [%(name)s] %(levelname)s: %(message)s\"\n    )\n\n    sh = logging.StreamHandler()\n    sh.setFormatter(formatter)\n    log.addHandler(sh)\n\n    global netlog_handler\n    netlog_handler = NetlogHandler()\n    netlog_handler.setFormatter(formatter)\n    log.addHandler(netlog_handler)\n\n    log.setLevel(logging.DEBUG)\n\ndef disconnect_logger():\n    \"\"\"Cleanly close the logger. Note that LogHandler also implements close.\"\"\"\n    netlog_handler.close()\n\ndef set_clock(clock):\n    st = SYSTEMTIME()\n    st.wYear = clock.year\n    st.wMonth = clock.month\n    st.wDay = clock.day\n    st.wHour = clock.hour\n    st.wMinute = clock.minute\n    st.wSecond = clock.second\n    st.wMilliseconds = 0\n    KERNEL32.SetLocalTime(ctypes.byref(st))\n"
  },
  {
    "path": "analyzer/windows/modules/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "analyzer/windows/modules/auxiliary/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "analyzer/windows/modules/auxiliary/dbgview.py",
    "content": "# Copyright (C) 2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport os.path\nimport subprocess\nimport _winreg\n\nfrom lib.common.abstracts import Auxiliary\nfrom lib.common.registry import set_regkey\nfrom lib.common.results import upload_to_host\n\nlog = logging.getLogger(__name__)\n\nDebugPrintFilter = (\n    \"SYSTEM\\\\CurrentControlSet\\\\Control\\\\Session Manager\\\\Debug Print Filter\"\n)\n\nclass DbgView(Auxiliary):\n    \"\"\"Run DbgView.\"\"\"\n    def start(self):\n        if not self.options.get(\"dbgview\"):\n            return\n\n        dbgview_path = os.path.join(\"bin\", \"dbgview.exe\")\n        if not os.path.exists(dbgview_path):\n            log.error(\"DbgView.exe not found!\")\n            return\n\n        # Make sure all logging makes it into DbgView.\n        set_regkey(\n            _winreg.HKEY_LOCAL_MACHINE, DebugPrintFilter,\n            \"\", _winreg.REG_DWORD, 0xffffffff\n        )\n\n        self.filepath = os.path.join(self.analyzer.path, \"bin\", \"dbgview.log\")\n\n        # Accept the EULA and enable Kernel Capture.\n        subprocess.Popen([\n            dbgview_path, \"/accepteula\", \"/t\", \"/k\", \"/l\", self.filepath,\n        ])\n        log.info(\"Successfully started DbgView.\")\n\n    def stop(self):\n        upload_to_host(self.filepath, os.path.join(\"logs\", \"dbgview.log\"))\n"
  },
  {
    "path": "analyzer/windows/modules/auxiliary/disguise.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport itertools\nimport logging\nimport random\n\nfrom _winreg import HKEY_LOCAL_MACHINE, REG_SZ, REG_MULTI_SZ, REG_BINARY\n\nfrom lib.common.abstracts import Auxiliary\nfrom lib.common.rand import random_integer, random_string\nfrom lib.common.registry import rename_regkey, regkey_exists\nfrom lib.common.registry import set_regkey, query_value\n\nlog = logging.getLogger(__name__)\n\nclass Disguise(Auxiliary):\n    \"\"\"Disguise the analysis environment.\"\"\"\n\n    HDD_IDENTIFIERS = [\n        \"ST9160411AS\",\n    ]\n\n    HDD_PATHS = [\n        \"IDE\\\\DiskST9160411AS_____________________________LV14____\",\n        \"IDE\\\\DiskKINGSTON_SV300S_________________________541A____\",\n    ]\n\n    CDROM_IDENTIFIERS = [\n        \"HL-DT-ST RW/DVD MU10N\",\n    ]\n\n    SYSTEM_BIOS_DATES = [\n        \"03/11/11\",\n        \"01/09/09\",\n    ]\n\n    SYSTEM_BIOS_VERSIONS = [\n        [\"LENOVO - 3220\", \"Ver 1.00PARTTBL(\"],\n        [\"LENOVO - 2020\", \"Ver 1.00PARTTBLX\"],\n    ]\n\n    VIDEO_BIOS_DATES = [\n        \"02/10/20\",\n        \"06/12/20\",\n    ]\n\n    VIDEO_BIOS_VERSIONS = [\n        [\"Hardware Version 0.0\", \"PARTTBLX\"],\n    ]\n\n    BIOS_VERSIONS = [\n        \"6FET56WW (2.02 )\",\n        \"7UET92WW (3.22 )\",\n    ]\n\n    SYSTEM_MANUFACTURERS = [\n        \"LENOVO\",\n    ]\n\n    SYSTEM_PRODUCTNAMES = [\n        \"64755N2\",\n        \"2241W2U\",\n    ]\n\n    def change_productid(self):\n        \"\"\"Randomize Windows ProductId.\n        The Windows ProductId is occasionally used by malware\n        to detect public setups of Cuckoo, e.g., Malwr.com.\n        \"\"\"\n        value = \"{0}-{1}-{2}-{3}\".format(random_integer(5), random_integer(3),\n                                         random_integer(7), random_integer(5))\n\n        set_regkey(HKEY_LOCAL_MACHINE,\n                   \"SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\",\n                   \"ProductId\", REG_SZ, value)\n\n    def patch_scsi_identifiers(self):\n        types = {\n            \"DiskPeripheral\": self.HDD_IDENTIFIERS,\n            \"CdRomPeripheral\": self.CDROM_IDENTIFIERS,\n        }\n\n        for row in itertools.product([0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]):\n            type_ = query_value(HKEY_LOCAL_MACHINE, \"HARDWARE\\\\DEVICEMAP\\\\Scsi\\\\Scsi Port %d\\\\Scsi Bus %d\\\\Target Id %d\\\\Logical Unit Id %d\" % row, \"Type\")\n            value = query_value(HKEY_LOCAL_MACHINE, \"HARDWARE\\\\DEVICEMAP\\\\Scsi\\\\Scsi Port %d\\\\Scsi Bus %d\\\\Target Id %d\\\\Logical Unit Id %d\" % row, \"Identifier\")\n            if not type_ or not value:\n                continue\n\n            value = value.lower()\n            if \"vbox\" in value or \"vmware\" in value or \"qemu\" in value or \"virtual\" in value:\n                if type_ in types:\n                    new_value = random.choice(types[type_])\n                else:\n                    log.warning(\"Unknown SCSI type (%s), disguising it with a random string\", type_)\n                    new_value = random_string(len(value))\n\n                set_regkey(HKEY_LOCAL_MACHINE, \"HARDWARE\\\\DEVICEMAP\\\\Scsi\\\\Scsi Port %d\\\\Scsi Bus %d\\\\Target Id %d\\\\Logical Unit Id %d\" % row,\n                           \"Identifier\", REG_SZ, new_value)\n\n    def patch_bios(self):\n        set_regkey(HKEY_LOCAL_MACHINE, \"HARDWARE\\\\DESCRIPTION\\\\System\", \"SystemBiosDate\", REG_SZ, random.choice(self.SYSTEM_BIOS_DATES))\n        set_regkey(HKEY_LOCAL_MACHINE, \"HARDWARE\\\\DESCRIPTION\\\\System\", \"SystemBiosVersion\", REG_MULTI_SZ, random.choice(self.SYSTEM_BIOS_VERSIONS))\n        set_regkey(HKEY_LOCAL_MACHINE, \"HARDWARE\\\\DESCRIPTION\\\\System\", \"VideoBiosDate\", REG_SZ, random.choice(self.VIDEO_BIOS_DATES))\n        set_regkey(HKEY_LOCAL_MACHINE, \"HARDWARE\\\\DESCRIPTION\\\\System\", \"VideoBiosVersion\", REG_MULTI_SZ, random.choice(self.VIDEO_BIOS_VERSIONS))\n\n    def patch_acpi(self):\n        # TODO This should be improved, but for now may suffice.\n        keywords = {\n            \"VBOX\": \"LNVO\",\n            \"vbox\": \"lnvo\",\n            \"VirtualBox\": \"LENOVOTP\",\n            \"innotek GmbH\": \"\",\n        }\n\n        regkeys = [\n            [\"SYSTEM\\\\CurrentControlSet\\\\Services\\\\mssmbios\\\\Data\", \"AcpiData\"],\n            [\"SYSTEM\\\\ControlSet001\\\\Services\\\\mssmbios\\\\Data\", \"AcpiData\"],\n\n            [\"SYSTEM\\\\CurrentControlSet\\\\Services\\\\mssmbios\\\\Data\", \"SMBiosData\"],\n            [\"SYSTEM\\\\ControlSet001\\\\Services\\\\mssmbios\\\\Data\", \"SMBiosData\"],\n        ]\n\n        for regkey, key in regkeys:\n            value = query_value(HKEY_LOCAL_MACHINE, regkey, key)\n            if value is None:\n                continue\n\n            for k, v in keywords.items():\n                value = value.replace(k, v)\n\n            set_regkey(HKEY_LOCAL_MACHINE, regkey, key, REG_BINARY, value)\n\n        if regkey_exists(HKEY_LOCAL_MACHINE, \"HARDWARE\\\\ACPI\\\\DSDT\\\\VBOX__\"):\n            rename_regkey(HKEY_LOCAL_MACHINE, \"HARDWARE\\\\ACPI\\\\DSDT\\\\VBOX__\", \"LENOVO\")\n            rename_regkey(HKEY_LOCAL_MACHINE, \"HARDWARE\\\\ACPI\\\\FADT\\\\VBOX__\", \"LENOVO\")\n            rename_regkey(HKEY_LOCAL_MACHINE, \"HARDWARE\\\\ACPI\\\\RSDT\\\\VBOX__\", \"LENOVO\")\n\n    def patch_processor(self):\n        keywords = {\n            \"QEMU Virtual CPU version 2.0.0\": \"Intel(R) Core(TM) i7 CPU @3GHz\",\n        }\n\n        for idx in xrange(32):\n            value = query_value(HKEY_LOCAL_MACHINE, \"HARDWARE\\\\DESCRIPTION\\\\System\\\\CentralProcessor\\\\%d\" % idx, \"ProcessorNameString\")\n            if value is None:\n                continue\n\n            for k, v in keywords.items():\n                value = value.replace(k, v)\n\n            set_regkey(HKEY_LOCAL_MACHINE, \"HARDWARE\\\\DESCRIPTION\\\\System\\\\CentralProcessor\\\\%d\" % idx,\n                       \"ProcessorNameString\", REG_SZ, value)\n\n    def patch_manufacturer(self):\n        set_regkey(HKEY_LOCAL_MACHINE, \"SYSTEM\\\\ControlSet001\\\\Control\\\\SystemInformation\",\n                   \"BIOSVersion\", REG_SZ, random.choice(self.BIOS_VERSIONS))\n        set_regkey(HKEY_LOCAL_MACHINE, \"SYSTEM\\\\ControlSet001\\\\Control\\\\SystemInformation\",\n                   \"BIOSReleaseDate\", REG_SZ, random.choice(self.SYSTEM_BIOS_DATES))\n        set_regkey(HKEY_LOCAL_MACHINE, \"SYSTEM\\\\ControlSet001\\\\Control\\\\SystemInformation\",\n                   \"SystemManufacturer\", REG_SZ, random.choice(self.SYSTEM_MANUFACTURERS))\n        set_regkey(HKEY_LOCAL_MACHINE, \"SYSTEM\\\\ControlSet001\\\\Control\\\\SystemInformation\",\n                   \"SystemProductName\", REG_SZ, random.choice(self.SYSTEM_PRODUCTNAMES))\n\n    def patch_hdd_path(self):\n        set_regkey(HKEY_LOCAL_MACHINE, \"SYSTEM\\\\ControlSet001\\\\Services\\\\Disk\\\\Enum\",\n                   \"0\", REG_SZ, random.choice(self.HDD_PATHS))\n\n    def start(self):\n        self.change_productid()\n        self.patch_scsi_identifiers()\n        self.patch_bios()\n        self.patch_acpi()\n        self.patch_processor()\n        self.patch_manufacturer()\n        self.patch_hdd_path()\n        return True\n"
  },
  {
    "path": "analyzer/windows/modules/auxiliary/dumptls.py",
    "content": "# Copyright (C) 2015-2017 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\n\nfrom lib.api.process import Process\nfrom lib.common.abstracts import Auxiliary\nfrom lib.common.exceptions import CuckooError\n\nlog = logging.getLogger(__name__)\n\nclass DumpTLSMasterSecrets(Auxiliary):\n    \"\"\"Dump TLS master secrets as used by various Windows libraries.\"\"\"\n    def start(self):\n        try:\n            p = Process(process_name=\"lsass.exe\")\n            p.inject(track=False, mode=\"dumptls\")\n        except CuckooError as e:\n            if \"process access denied\" in e.message:\n                log.warning(\n                    \"You're not running the Cuckoo Agent as Administrator. \"\n                    \"Doing so will improve your analysis results!\"\n                )\n            else:\n                log.warning(\n                    \"An unknown error occurred while trying to inject into \"\n                    \"the lsass.exe process to dump TLS master secrets: %s\", e\n                )\n"
  },
  {
    "path": "analyzer/windows/modules/auxiliary/human.py",
    "content": "# Copyright (C) 2012-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2018 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport random\nimport re\nimport logging\nimport threading\n\nfrom lib.common.abstracts import Auxiliary\nfrom lib.common.defines import (\n    KERNEL32, USER32, WM_GETTEXT, WM_GETTEXTLENGTH, WM_CLOSE, BM_CLICK,\n    EnumWindowsProc, EnumChildProc, create_unicode_buffer\n)\n\nlog = logging.getLogger(__name__)\n\nRESOLUTION = {\n    \"x\": USER32.GetSystemMetrics(0),\n    \"y\": USER32.GetSystemMetrics(1)\n}\n\ndef click(hwnd):\n    USER32.SetForegroundWindow(hwnd)\n    KERNEL32.Sleep(1000)\n    USER32.SendMessageW(hwnd, BM_CLICK, 0, 0)\n\ndef foreach_child(hwnd, lparam):\n    # List of partial buttons labels to click.\n    buttons = [\n        \"yes\", \"oui\",\n        \"ok\",\n        \"i accept\",\n        \"next\", \"suivant\",\n        \"new\", \"nouveau\",\n        \"install\", \"installer\",\n        \"file\", \"fichier\",\n        \"run\", \"start\", \"marrer\", \"cuter\",\n        \"extract\",\n        \"i agree\", \"accepte\",\n        \"enable\", \"activer\", \"accord\", \"valider\",\n        \"don't send\", \"ne pas envoyer\",\n        \"don't save\",\n        \"continue\", \"continuer\",\n        \"personal\", \"personnel\",\n        \"scan\", \"scanner\",\n        \"unzip\", \"dezip\",\n        \"open\", \"ouvrir\",\n        \"close the program\",\n        \"execute\", \"executer\",\n        \"launch\", \"lancer\",\n        \"save\", \"sauvegarder\",\n        \"download\", \"load\", \"charger\",\n        \"end\", \"fin\", \"terminer\",\n        \"later\",\n        \"finish\",\n        \"end\",\n        \"allow access\",\n        \"remind me later\",\n        \"save\", \"sauvegarder\"\n    ]\n\n    # List of complete button texts to click. These take precedence.\n    buttons_complete = [\n        \"&Ja\",  # E.g., Dutch Office Word 2013.\n    ]\n\n    # List of buttons labels to not click.\n    dontclick = [\n        \"don't run\",\n        \"i do not accept\"\n    ]\n\n    classname = create_unicode_buffer(50)\n    USER32.GetClassNameW(hwnd, classname, 50)\n\n    # Check if the class of the child is button.\n    if \"button\" in classname.value.lower():\n        # Get the text of the button.\n        length = USER32.SendMessageW(hwnd, WM_GETTEXTLENGTH, 0, 0)\n        text = create_unicode_buffer(length + 1)\n        USER32.SendMessageW(hwnd, WM_GETTEXT, length + 1, text)\n\n        if text.value in buttons_complete:\n            log.info(\"Found button %r, clicking it\" % text.value)\n            click(hwnd)\n            return True\n\n        # Check if the button is set as \"clickable\" and click it.\n        textval = text.value.replace(\"&\", \"\").lower()\n        for button in buttons:\n            if button in textval:\n                for btn in dontclick:\n                    if btn in textval:\n                        break\n                else:\n                    log.info(\"Found button %r, clicking it\" % text.value)\n                    click(hwnd)\n\n    # Recursively search for childs (USER32.EnumChildWindows).\n    return True\n\n# Callback procedure invoked for every enumerated window.\n# Purpose is to close any office window\ndef get_office_window(hwnd, lparam):\n    if USER32.IsWindowVisible(hwnd):\n        text = create_unicode_buffer(1024)\n        USER32.GetWindowTextW(hwnd, text, 1024)\n        # TODO Would \" - Microsoft (Word|Excel|PowerPoint)$\" be better?\n        if re.search(\"- (Microsoft|Word|Excel|PowerPoint)\", text.value):\n            USER32.SendNotifyMessageW(hwnd, WM_CLOSE, None, None)\n            log.info(\"Closed Office window.\")\n    return True\n\n# Callback procedure invoked for every enumerated window.\ndef foreach_window(hwnd, lparam):\n    # If the window is visible, enumerate its child objects, looking\n    # for buttons.\n    if USER32.IsWindowVisible(hwnd):\n        USER32.EnumChildWindows(hwnd, EnumChildProc(foreach_child), 0)\n    return True\n\ndef move_mouse():\n    x = random.randint(0, RESOLUTION[\"x\"])\n    y = random.randint(0, RESOLUTION[\"y\"])\n\n    # Originally was:\n    # USER32.mouse_event(0x8000, x, y, 0, None)\n    # Changed to SetCurorPos, since using GetCursorPos would not detect\n    # the mouse events. This actually moves the cursor around which might\n    # cause some unintended activity on the desktop. We might want to make\n    # this featur optional.\n    USER32.SetCursorPos(x, y)\n\ndef click_mouse():\n    # Move mouse to top-middle position.\n    USER32.SetCursorPos(RESOLUTION[\"x\"] / 2, 0)\n    # Mouse down.\n    USER32.mouse_event(2, 0, 0, 0, None)\n    KERNEL32.Sleep(50)\n    # Mouse up.\n    USER32.mouse_event(4, 0, 0, 0, None)\n\nclass Human(threading.Thread, Auxiliary):\n    \"\"\"Human after all\"\"\"\n\n    def __init__(self, options={}, analyzer=None):\n        threading.Thread.__init__(self)\n        Auxiliary.__init__(self, options, analyzer)\n        self.do_run = True\n\n    def stop(self):\n        self.do_run = False\n\n    def run(self):\n        seconds = 0\n\n        # Global disable flag.\n        if \"human\" in self.options:\n            self.do_move_mouse = int(self.options[\"human\"])\n            self.do_click_mouse = int(self.options[\"human\"])\n            self.do_click_buttons = int(self.options[\"human\"])\n        else:\n            self.do_move_mouse = True\n            self.do_click_mouse = True\n            self.do_click_buttons = True\n\n        # Per-feature enable or disable flag.\n        if \"human.move_mouse\" in self.options:\n            self.do_move_mouse = int(self.options[\"human.move_mouse\"])\n\n        if \"human.click_mouse\" in self.options:\n            self.do_click_mouse = int(self.options[\"human.click_mouse\"])\n\n        if \"human.click_buttons\" in self.options:\n            self.do_click_buttons = int(self.options[\"human.click_buttons\"])\n\n        while self.do_run:\n            if seconds and not seconds % 60:\n                USER32.EnumWindows(EnumWindowsProc(get_office_window), 0)\n\n            if self.do_click_mouse:\n                click_mouse()\n\n            if self.do_move_mouse:\n                move_mouse()\n\n            if self.do_click_buttons:\n                USER32.EnumWindows(EnumWindowsProc(foreach_window), 0)\n\n            KERNEL32.Sleep(1000)\n            seconds += 1\n"
  },
  {
    "path": "analyzer/windows/modules/auxiliary/installcert.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport os.path\nimport subprocess\n\nfrom lib.common.abstracts import Auxiliary\n\nlog = logging.getLogger(__name__)\n\nclass InstallCertificate(Auxiliary):\n    \"\"\"Install our man in the middle certificate into the Trusted Root\n    Certification Authorities certificate store so we can listen in on https\n    traffic.\"\"\"\n    def start(self):\n        if \"cert\" not in self.options:\n            return\n\n        cert_path = self.options[\"cert\"]\n\n        if not cert_path.endswith(\".p12\"):\n            log.error(\"An invalid certificate has been provided - only \"\n                      \"PFX certificates, with file extension .p12, are \"\n                      \"supported.\")\n            return\n\n        if not os.path.exists(cert_path):\n            log.error(\"Certificate file not found: %s. (Keep in mind that \"\n                      \"the certificate must be located in the \"\n                      \"analyzer/windows/ directory).\", cert_path)\n            return\n\n        p = subprocess.Popen([\"certutil.exe\", \"-importpfx\", cert_path],\n                             stdin=subprocess.PIPE, stdout=subprocess.PIPE,\n                             stderr=subprocess.PIPE)\n\n        # Send an empty string as certutil expects to see a password for our\n        # certificate on the command-line. Our certificate has no password.\n        p.communicate(\"\")\n\n        log.info(\"Successfully installed PFX certificate.\")\n"
  },
  {
    "path": "analyzer/windows/modules/auxiliary/procmon.py",
    "content": "# Copyright (C) 2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os.path\nimport subprocess\nimport time\n\nfrom lib.common.abstracts import Auxiliary\nfrom lib.common.exceptions import CuckooDisableModule, CuckooPackageError\nfrom lib.common.results import upload_to_host\n\nclass Procmon(Auxiliary):\n    \"\"\"Allow procmon to be run on the side.\"\"\"\n    def start(self):\n        if not self.options.get(\"procmon\"):\n            raise CuckooDisableModule\n\n        bin_path = os.path.join(self.analyzer.path, \"bin\")\n\n        self.procmon_exe = os.path.join(bin_path, \"procmon.exe\")\n        self.procmon_pmc = os.path.join(bin_path, \"procmon.pmc\")\n        self.procmon_pml = os.path.join(bin_path, \"procmon.pml\")\n        self.procmon_xml = os.path.join(bin_path, \"procmon.xml\")\n\n        if not os.path.exists(self.procmon_exe) or \\\n                not os.path.exists(self.procmon_pmc):\n            raise CuckooPackageError(\n                \"In order to use the Process Monitor functionality it is \"\n                \"required to have Procmon setup with Cuckoo. Please run the \"\n                \"Cuckoo Community script which will automatically fetch all \"\n                \"related files to get you up-and-running.\"\n            )\n\n        # Start process monitor in the background.\n        subprocess.Popen([\n            self.procmon_exe,\n            \"/AcceptEula\",\n            \"/Quiet\",\n            \"/Minimized\",\n            \"/BackingFile\", self.procmon_pml,\n        ])\n\n        # Try to avoid race conditions by waiting until at least something\n        # has been written to the log file.\n        while not os.path.exists(self.procmon_pml) or \\\n                not os.path.getsize(self.procmon_pml):\n            time.sleep(0.1)\n\n    def stop(self):\n        # Terminate process monitor.\n        subprocess.check_call([\n            self.procmon_exe,\n            \"/Terminate\",\n        ])\n\n        # Convert the process monitor log into a readable XML file.\n        subprocess.check_call([\n            self.procmon_exe,\n            \"/OpenLog\", self.procmon_pml,\n            \"/LoadConfig\", self.procmon_pmc,\n            \"/SaveAs\", self.procmon_xml,\n            \"/SaveApplyFilter\",\n        ])\n\n        # Upload the XML file to the host.\n        upload_to_host(self.procmon_xml, os.path.join(\"logs\", \"procmon.xml\"))\n"
  },
  {
    "path": "analyzer/windows/modules/auxiliary/reboot.py",
    "content": "# Copyright (C) 2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport json\nimport logging\nimport os.path\n\nfrom lib.common.abstracts import Auxiliary\nfrom lib.common.registry import set_regkey_full\n\nlog = logging.getLogger(__name__)\n\nclass Reboot(Auxiliary):\n    \"\"\"Prepare the environment to behave as if the VM has been rebooted.\"\"\"\n\n    def start(self):\n        if self.analyzer.config.package != \"reboot\":\n            return\n\n        reboot_path = os.path.join(self.analyzer.path, \"reboot.json\")\n        for line in open(reboot_path, \"rb\"):\n            event = json.loads(line)\n\n            if not hasattr(self, \"_handle_%s\" % event[\"category\"]):\n                log.warning(\n                    \"Unable to handle reboot event with name %s as it has \"\n                    \"not yet been implemented.\", event[\"category\"]\n                )\n                continue\n\n            getattr(self, \"_handle_%s\" % event[\"category\"])(event)\n\n    def _handle_regkey_written(self, event):\n        regkey, type_, value = event[\"args\"]\n        set_regkey_full(regkey, type_, value)\n\n    def _handle_create_process(self, event):\n        self.analyzer.reboot.append((event[\"category\"], event[\"args\"]))\n"
  },
  {
    "path": "analyzer/windows/modules/auxiliary/recentfiles.py",
    "content": "# Copyright (C) 2016-2017 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport ctypes\nimport logging\nimport os\nimport random\nimport uuid\n\nfrom lib.common.abstracts import Auxiliary\nfrom lib.common.defines import SHELL32, SHARD_PATHA, PWSTR\nfrom lib.common.exceptions import CuckooError\nfrom lib.common.rand import random_string\nfrom lib.common.registry import set_regkey_full\n\nlog = logging.getLogger(__name__)\n\nclass RecentFiles(Auxiliary):\n    \"\"\"Populate the Desktop with recent files in order to combat recent\n    anti-sandbox measures.\"\"\"\n\n    extensions = [\n        \"txt\", \"rtf\", \"doc\", \"docx\", \"docm\", \"ppt\", \"pptx\",\n    ]\n\n    locations = {\n        \"desktop\": \"{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}\",\n        \"documents\": \"{FDD39AD0-238F-46AF-ADB4-6C85480369C7}\",\n        \"downloads\": \"{374DE290-123F-4565-9164-39C4925E467B}\",\n    }\n\n    def get_path(self):\n        location = self.options.get(\"recentfiles\", \"documents\")\n        if location not in self.locations:\n            log.warning(\n                \"Unknown RecentFiles location specified, \"\n                \"defaulting to 'documents'.\"\n            )\n            location = \"documents\"\n\n        dirpath = PWSTR()\n        r = SHELL32.SHGetKnownFolderPath(\n            uuid.UUID(self.locations[location]).get_bytes_le(),\n            0, None, ctypes.byref(dirpath)\n        )\n        if r:\n            log.warning(\"Error obtaining user directory: 0x%08x\", r)\n            return\n\n        # TODO We should free the memory with CoTaskMemFree().\n        return dirpath.value\n\n    def start(self):\n        dirpath = self.get_path()\n        if not dirpath:\n            return\n\n        for idx in xrange(random.randint(5, 10)):\n            filename = random_string(10, random.randint(10, 20))\n            ext = random.choice(self.extensions)\n            filepath = os.path.join(dirpath, \"%s.%s\" % (filename, ext))\n            open(filepath, \"wb\").write(os.urandom(random.randint(30, 999999)))\n\n            SHELL32.SHAddToRecentDocs(SHARD_PATHA, filepath)\n\n            set_regkey_full(\n                \"HKEY_CURRENT_USER\\\\Software\\\\Microsoft\\\\Office\\\\12.0\\\\\"\n                \"Word\\\\File MRU\\\\Item %d\" % (idx + 1),\n                \"REG_SZ\", \"[F00000000][T01D1C40000000000]*%s\" % filepath,\n            )\n"
  },
  {
    "path": "analyzer/windows/modules/auxiliary/screenshots.py",
    "content": "# Copyright (C) 2012-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2019 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport StringIO\nimport threading\nimport time\n\nfrom lib.api.screenshot import Screenshot\nfrom lib.common.abstracts import Auxiliary\nfrom lib.common.results import NetlogFile\n\nlog = logging.getLogger(__name__)\n\nSHOT_DELAY = 1\n\n# Skip the following area when comparing screen shots.\n# Example for 800x600 screen resolution.\n# SKIP_AREA = ((735, 575), (790, 595))\nSKIP_AREA = None\n\nclass Screenshots(threading.Thread, Auxiliary):\n    \"\"\"Take screenshots.\"\"\"\n\n    def __init__(self, options={}, analyzer=None):\n        threading.Thread.__init__(self)\n        Auxiliary.__init__(self, options, analyzer)\n        self.do_run = True\n\n    def stop(self):\n        \"\"\"Stop screenshotting.\"\"\"\n        self.do_run = False\n\n    def run(self):\n        \"\"\"Run screenshotting.\n        @return: operation status.\n        \"\"\"\n        if \"screenshots\" in self.options:\n            self.do_run = int(self.options[\"screenshots\"])\n\n        scr = Screenshot()\n\n        # TODO We should also send the action \"pillow\" so that the Web\n        # Interface can adequately inform the user about this missing library.\n        if not scr.have_pil():\n            log.info(\n                \"Python Image Library (either PIL or Pillow) is not \"\n                \"installed, screenshots are disabled.\"\n            )\n            return False\n\n        img_counter = 0\n        img_last = None\n\n        while self.do_run:\n            time.sleep(SHOT_DELAY)\n\n            try:\n                img_current = scr.take()\n            except IOError as e:\n                log.error(\"Cannot take screenshot: %s\", e)\n                continue\n\n            if img_last and scr.equal(img_last, img_current, SKIP_AREA):\n                continue\n\n            img_counter += 1\n\n            # workaround as PIL can't write to the socket file object :(\n            tmpio = StringIO.StringIO()\n            img_current.save(tmpio, format=\"JPEG\")\n            tmpio.seek(0)\n\n            # now upload to host from the StringIO\n            try:\n                nf = NetlogFile()\n                nf.init(\"shots/%04d.jpg\" % img_counter)\n\n                for chunk in tmpio:\n                    nf.sock.sendall(chunk)\n            finally:\n                nf.close()\n\n            img_last = img_current\n\n        return True\n"
  },
  {
    "path": "analyzer/windows/modules/auxiliary/zer0m0n.py",
    "content": "# Copyright (C) 2016-2017 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\n\nfrom lib.api.process import subprocess_checkcall\nfrom lib.common.abstracts import Auxiliary\nfrom lib.common.exceptions import CuckooError\nfrom lib.core.driver import Driver\nfrom lib.core.ioctl import driver_name as random_name\n\nlog = logging.getLogger(__name__)\n\nclass LoadZer0m0n(Auxiliary):\n    \"\"\"Load the zer0m0n kernel driver.\"\"\"\n\n    def start(self):\n        if self.options.get(\"analysis\") not in (\"both\", \"kernel\"):\n            return\n\n        try:\n            d = Driver(\"zer0m0n\", random_name)\n        except CuckooError as e:\n            log.error(\"Driver issue: %s\", e)\n            return\n\n        # Disable the Program Compability Assistant (which would otherwise\n        # show an annoying popup about our kernel driver not being signed).\n        subprocess_checkcall([\"sc\", \"stop\", \"PcaSvc\"])\n\n        try:\n            d.install()\n            log.info(\"Successfully loaded the zer0m0n kernel driver.\")\n        except CuckooError as e:\n            log.error(\"Error loading zer0m0n: %s\", e)\n"
  },
  {
    "path": "analyzer/windows/modules/packages/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "analyzer/windows/modules/packages/applet.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport tempfile\n\nfrom lib.common.abstracts import Package\n\nclass Applet(Package):\n    \"\"\"Java Applet analysis package.\"\"\"\n    PATHS = [\n        (\"ProgramFiles\", \"Mozilla Firefox\", \"firefox.exe\"),\n        (\"ProgramFiles\", \"Internet Explorer\", \"iexplore.exe\"),\n    ]\n\n    def make_html(self, path, class_name):\n        html = \"\"\"\n        <html>\n            <body>\n                <applet archive=\"%s\" code=\"%s\" width=\"1\" height=\"1\">\n                </applet>\n            </body>\n        </html>\n        \"\"\" % (path, class_name)\n\n        _, file_path = tempfile.mkstemp(suffix=\".html\")\n        with open(file_path, \"w\") as file_handle:\n            file_handle.write(html)\n\n        return file_path\n\n    def start(self, path):\n        browser = self.get_path(\"browser\")\n        class_name = self.options.get(\"class\")\n        html_path = self.make_html(path, class_name)\n        return self.execute(\n            browser, args=[html_path], trigger=\"file:%s\" % html_path\n        )\n"
  },
  {
    "path": "analyzer/windows/modules/packages/bin.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom lib.common.abstracts import Package\n\nclass Shellcode(Package):\n    \"\"\"Shellcode (any x86 executable code) analysis package.\"\"\"\n\n    def start(self, path):\n        return self.execute(\"bin/execsc.exe\", args=[path])\n"
  },
  {
    "path": "analyzer/windows/modules/packages/com.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\n\nfrom lib.common.abstracts import Package\n\nclass ComDll(Package):\n    \"\"\"COM analysis package.\"\"\"\n    PATHS = [\n        (\"System32\", \"regsvr32.exe\"),\n    ]\n\n    def start(self, path):\n        regsvr32 = self.get_path(\"regsvr32\")\n        arguments = self.options.get(\"arguments\", \"\")\n\n        # Check file extension.\n        ext = os.path.splitext(path)[-1].lower()\n\n        # If the file doesn't have the proper .dll extension force it\n        # and rename it. This is needed for regsvr32 to execute correctly.\n        # See ticket #354 for details.\n        if ext != \".dll\":\n            new_path = path + \".dll\"\n            os.rename(path, new_path)\n            path = new_path\n\n        args = [path]\n        if arguments:\n            args.append(arguments)\n\n        return self.execute(regsvr32, args=args)\n"
  },
  {
    "path": "analyzer/windows/modules/packages/cpl.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom lib.common.abstracts import Package\n\nclass CPL(Package):\n    \"\"\"Control Panel Applet analysis package.\"\"\"\n    PATHS = [\n        (\"System32\", \"control.exe\"),\n    ]\n\n    def start(self, path):\n        control = self.get_path(\"control.exe\")\n        return self.execute(control, args=[path])\n"
  },
  {
    "path": "analyzer/windows/modules/packages/dll.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport shlex\nimport shutil\n\nfrom lib.common.abstracts import Package\n\nclass Dll(Package):\n    \"\"\"DLL analysis package.\"\"\"\n    PATHS = [\n        (\"System32\", \"rundll32.exe\"),\n    ]\n\n    def start(self, path):\n        rundll32 = self.get_path(\"rundll32.exe\")\n        function = self.options.get(\"function\", \"DllMain\")\n        arguments = self.options.get(\"arguments\", \"\")\n        loader_name = self.options.get(\"loader\")\n\n        # Check file extension.\n        ext = os.path.splitext(path)[-1].lower()\n\n        # If the file doesn't have the proper .dll extension force it\n        # and rename it. This is needed for rundll32 to execute correctly.\n        # See ticket #354 for details.\n        if ext != \".dll\":\n            new_path = path + \".dll\"\n            os.rename(path, new_path)\n            path = new_path\n\n        args = [\"%s,%s\" % (path, function)]\n        if arguments:\n            args += shlex.split(arguments)\n\n        if loader_name:\n            loader = os.path.join(os.path.dirname(rundll32), loader_name)\n            shutil.copy(rundll32, loader)\n            rundll32 = loader\n\n        return self.execute(rundll32, args=args)\n"
  },
  {
    "path": "analyzer/windows/modules/packages/doc.py",
    "content": "# Copyright (C) 2012-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2017 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom _winreg import HKEY_CURRENT_USER\n\nfrom lib.common.abstracts import Package\n\nclass DOC(Package):\n    \"\"\"Word analysis package.\"\"\"\n    PATHS = [\n        (\"ProgramFiles\", \"Microsoft Office\", \"WINWORD.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office10\", \"WINWORD.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office11\", \"WINWORD.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office12\", \"WINWORD.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office14\", \"WINWORD.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office15\", \"WINWORD.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office16\", \"WINWORD.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office 15\", \"root\", \"office15\", \"WINWORD.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"root\", \"Office16\", \"WINWORD.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"WORDVIEW.EXE\"),\n    ]\n\n    REGKEYS = [\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Office\\\\12.0\\\\Common\\\\General\",\n            {\n                # \"Welcome to the 2007 Microsoft Office system\"\n                \"ShownOptIn\": 1,\n            },\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Office\\\\12.0\\\\Word\\\\Security\",\n            {\n                # Enable VBA macros in Office 2007.\n                \"VBAWarnings\": 1,\n                \"AccessVBOM\": 1,\n\n                # \"The file you are trying to open .xyz is in a different\n                # format than specified by the file extension. Verify the file\n                # is not corrupted and is from trusted source before opening\n                # the file. Do you want to open the file now?\"\n                \"ExtensionHardening\": 0,\n            },\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Office\\\\16.0\\\\Word\\\\Security\",\n            {\n                # Enable VBA macros in Office 2016.\n                \"VBAWarnings\": 1,\n                \"AccessVBOM\": 1,\n            },\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Office\\\\Common\\\\Security\",\n            {\n                # Enable all ActiveX controls without restrictions & prompting.\n                \"DisableAllActiveX\": 0,\n                \"UFIControls\": 1,\n            },\n        ],\n    ]\n\n    def start(self, path):\n        word = self.get_path(\"Microsoft Office Word\")\n        return self.execute(\n            word, args=[path], mode=\"office\", trigger=\"file:%s\" % path\n        )\n"
  },
  {
    "path": "analyzer/windows/modules/packages/exe.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport shlex\n\nfrom lib.common.abstracts import Package\n\nclass Exe(Package):\n    \"\"\"EXE analysis package.\"\"\"\n\n    def start(self, path):\n        args = self.options.get(\"arguments\", \"\")\n\n        name, ext = os.path.splitext(path)\n        if not ext:\n            new_path = name + \".exe\"\n            os.rename(path, new_path)\n            path = new_path\n\n        return self.execute(path, args=shlex.split(args))\n"
  },
  {
    "path": "analyzer/windows/modules/packages/ff.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom lib.common.abstracts import Package\n\nclass Firefox(Package):\n    \"\"\"Firefox analysis package.\"\"\"\n    PATHS = [\n        (\"ProgramFiles\", \"Mozilla Firefox\", \"firefox.exe\"),\n    ]\n\n    def start(self, url):\n        firefox = self.get_path(\"Firefox\")\n        return self.execute(firefox, args=[url])\n"
  },
  {
    "path": "analyzer/windows/modules/packages/generic.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom lib.common.abstracts import Package\nfrom lib.common.rand import random_string\n\nclass Generic(Package):\n    \"\"\"Generic analysis package.\n    The sample is started using START command in a cmd.exe prompt.\n    \"\"\"\n    PATHS = [\n        (\"System32\", \"cmd.exe\"),\n    ]\n\n    def start(self, path):\n        cmd_path = self.get_path(\"cmd.exe\")\n\n        # Create random cmd.exe window title.\n        rand_title = random_string(4, 16)\n\n        # START syntax.\n        # See: https://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/start.mspx?mfr=true\n        # start [\"title\"] [/dPath] [/i] [/min] [/max] [{/separate | /shared}]\n        # [{/low | /normal | /high | /realtime | /abovenormal | belownormal}]\n        # [/wait] [/b] [FileName] [parameters]\n        args = [\"/c\", \"start\", \"/wait\", '\"%s\"' % rand_title, path]\n        return self.execute(cmd_path, args=args, trigger=\"file:%s\" % path)\n"
  },
  {
    "path": "analyzer/windows/modules/packages/hta.py",
    "content": "# Copyright (C) 2017 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\n\nfrom lib.common.abstracts import Package\n\nclass HTA(Package):\n    \"\"\"HTA analysis package.\"\"\"\n    PATHS = [\n        (\"System32\", \"mshta.exe\"),\n    ]\n\n    def start(self, path):\n        mshta = self.get_path(\"mshta\")\n\n        # Enforce .hta extension.\n        if not path.endswith(\".hta\"):\n            os.rename(path, path + \".hta\")\n            path += \".hta\"\n\n        return self.execute(mshta, args=[path])\n"
  },
  {
    "path": "analyzer/windows/modules/packages/hwp.py",
    "content": "# Copyright (C) 2017 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom lib.common.abstracts import Package\n\nclass HWP(Package):\n    \"\"\"Hangul (Korean) Word Processor File 5.x analysis package.\"\"\"\n    PATHS = [\n        (\"ProgramFiles\", \"Hnc\", \"Hwp80\", \"Hwp.exe\"),\n    ]\n\n    def start(self, path):\n        word = self.get_path(\"Hangul (Korean) Word Processor File 5.x\")\n        return self.execute(\n            word, args=[path], mode=\"office\", trigger=\"file:%s\" % path\n        )\n"
  },
  {
    "path": "analyzer/windows/modules/packages/ie.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport os\n\nfrom _winreg import HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER\n\nfrom lib.common.abstracts import Package\n\nlog = logging.getLogger(__name__)\n\nclass IE(Package):\n    \"\"\"Internet Explorer analysis package.\"\"\"\n    PATHS = [\n        (\"ProgramFiles\", \"Internet Explorer\", \"iexplore.exe\"),\n    ]\n\n    REGKEYS = [\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Internet Explorer\\\\Main\",\n            {\n                # \"Would you like Internet Explorer as default browser?\"\n                \"Check_Associations\": \"no\",\n\n                # \"Set Up Windows Internet Explorer 8\"\n                \"DisableFirstRunCustomize\": 1,\n            },\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Internet Explorer\\\\Security\",\n            {\n                \"Safety Warning Level\": \"Low\",\n                \"Sending_Security\": \"Low\",\n                \"Viewing_Security\": \"Low\",\n            },\n        ],\n        [\n            HKEY_LOCAL_MACHINE,\n            \"Software\\\\Microsoft\\\\Internet Explorer\\\\Main\",\n            {\n                # Disable Security Settings Check.\n                \"DisableSecuritySettingsCheck\": 1,\n            },\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Internet Explorer\\\\Main\\\\FeatureControl\",\n            {\n                \"FEATURE_LOCALMACHINE_LOCKDOWN\": {\n                    # \"To help protect your security, Internet Explorer has\n                    # restricted this webpage from running scripts or ActiveX\n                    # controls that could access your computer. Click here for\n                    # options...\"\n                    \"iexplore.exe\": 0,\n                },\n                \"FEATURE_RESTRICT_FILEDOWNLOAD\": {\n                    # \"To help protect your security, Windows Internet\n                    # Explorer blocked this site from downloading files to\n                    # your computer. Click here for more options...\"\n                    \"iexplore.exe\": 0,\n                },\n            },\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Internet Settings\",\n            {\n                # \"You are about to be redirected to a connection that is not secure.\"\n                \"WarnOnHTTPSToHTTPRedirect\": 0,\n\n                # \"You are about to view pages over a secure connection.\"\n                \"WarnOnZoneCrossing\": 0,\n            },\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Internet Explorer\\\\Document Windows\",\n            {\n                # Maximize the window by default.\n                \"Maximized\": \"yes\",\n            },\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Internet Explorer\\\\Download\",\n            {\n                # \"Internet Explorer - Security Warning\"\n                # \"The publisher could not be verified.\"\n                \"CheckExeSignatures\": \"no\",\n            },\n        ],\n        [\n            HKEY_LOCAL_MACHINE,\n            \"Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Explorer\",\n            {\n                # Disable SmartScreen Windows 8\n                \"SmartScreenEnabled\": \"Off\"\n            }\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Internet Explorer\\\\PhishingFilter\",\n            {\n                # Disable SmartScreen Filter Windows 7\n                \"EnabledV9\": 0\n            }\n        ],\n    ]\n\n    def setup_proxy(self, proxy_host):\n        \"\"\"Configure Internet Explorer to route all traffic through a\n        proxy.\"\"\"\n        self.init_regkeys([[\n            HKEY_CURRENT_USER,\n            \"SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Internet Settings\",\n            {\n                \"MigrateProxy\": 1,\n                \"ProxyEnable\": 1,\n                \"ProxyHttp1.1\": 0,\n                \"ProxyServer\": \"http://%s\" % proxy_host,\n                \"ProxyOverride\": \"<local>\",\n            },\n        ]])\n\n    def start(self, target):\n        if \"proxy\" in self.options:\n            self.setup_proxy(self.options[\"proxy\"])\n\n        # If it's a HTML file, force an extension, or otherwise Internet\n        # Explorer will open it as a text file or something else non-html.\n        if os.path.exists(target) and not target.endswith((\".htm\", \".html\", \".mht\", \".mhtml\", \".url\", \".swf\")):\n            os.rename(target, target + \".html\")\n            target += \".html\"\n            log.info(\"Submitted file is missing extension, adding .html\")\n\n        iexplore = self.get_path(\"Internet Explorer\")\n        return self.execute(\n            iexplore, args=[target], maximize=True, mode=\"iexplore\"\n        )\n"
  },
  {
    "path": "analyzer/windows/modules/packages/jar.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom lib.common.abstracts import Package\n\nclass Jar(Package):\n    \"\"\"Java analysis package.\"\"\"\n    PATHS = [\n        (\"ProgramFiles\", \"Java\", \"jre*\", \"bin\", \"java.exe\"),\n    ]\n\n    def start(self, path):\n        java = self.get_path_glob(\"Java\")\n        class_path = self.options.get(\"class\")\n\n        if class_path:\n            args = [\"-cp\", path, class_path]\n        else:\n            args = [\"-jar\", path]\n\n        return self.execute(java, args=args, trigger=\"file:%s\" % path)\n"
  },
  {
    "path": "analyzer/windows/modules/packages/js.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport os\n\nfrom lib.common.abstracts import Package\n\nlog = logging.getLogger(__name__)\n\nclass Javascript(Package):\n    \"\"\"Javascript analysis package.\"\"\"\n    PATHS = [\n        (\"System32\", \"wscript.exe\"),\n    ]\n\n    def start(self, path):\n        wscript = self.get_path(\"WScript\")\n\n        # Enforce the .js file extension as is required by wscript.\n        if not path.endswith(\".js\"):\n            os.rename(path, path + \".js\")\n            path += \".js\"\n            log.info(\"Submitted file is missing extension, added .js\")\n\n        return self.execute(wscript, args=[path], trigger=\"file:%s\" % path)\n"
  },
  {
    "path": "analyzer/windows/modules/packages/jse.py",
    "content": "# Copyright (C) 2017-2018 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport os\n\nfrom lib.common.abstracts import Package\n\nlog = logging.getLogger(__name__)\n\nclass JScript(Package):\n    \"\"\"JScript analysis package.\"\"\"\n    PATHS = [\n        (\"System32\", \"wscript.exe\"),\n    ]\n\n    def start(self, path):\n        wscript = self.get_path(\"WScript\")\n\n        # Enforce the .jse file extension as is required by wscript.\n        if not path.endswith(\".jse\"):\n            os.rename(path, path + \".jse\")\n            path += \".jse\"\n            log.info(\"Submitted file is missing extension, added .jse\")\n\n        return self.execute(wscript, args=[path], trigger=\"file:%s\" % path)\n"
  },
  {
    "path": "analyzer/windows/modules/packages/msi.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom lib.common.abstracts import Package\n\nclass Msi(Package):\n    \"\"\"MSI analysis package.\"\"\"\n\n    PATHS = [\n        (\"System32\", \"msiexec.exe\"),\n    ]\n\n    def start(self, path):\n        msi_path = self.get_path(\"msiexec.exe\")\n        return self.execute(msi_path, args=[\"/I\", path])\n"
  },
  {
    "path": "analyzer/windows/modules/packages/pdf.py",
    "content": "# Copyright (C) 2012-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2017 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport os\n\nfrom _winreg import HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER\n\nfrom lib.common.abstracts import Package\n\nlog = logging.getLogger(__name__)\n\nclass PDF(Package):\n    \"\"\"PDF analysis package.\"\"\"\n    PATHS = [\n        (\"ProgramFiles\", \"Adobe\", \"Reader 8.0\", \"Reader\", \"AcroRd32.exe\"),\n        (\"ProgramFiles\", \"Adobe\", \"Reader 9.0\", \"Reader\", \"AcroRd32.exe\"),\n        (\"ProgramFiles\", \"Adobe\", \"Reader 10.0\", \"Reader\", \"AcroRd32.exe\"),\n        (\"ProgramFiles\", \"Adobe\", \"Reader 11.0\", \"Reader\", \"AcroRd32.exe\"),\n        (\"ProgramFiles\", \"Adobe\", \"Acrobat Reader DC\", \"Reader\", \"AcroRd32.exe\"),\n    ]\n\n    REGKEYS = [\n        [\n            HKEY_LOCAL_MACHINE,\n            \"SOFTWARE\\\\Adobe\\\\Acrobat Reader\\\\9.0\\\\AdobeViewer\",\n            {\n                # Accept EULA for Adobe Reader 9.0.\n                \"EULA\": 1,\n            },\n        ],\n        [\n            HKEY_LOCAL_MACHINE,\n            \"SOFTWARE\\\\Policies\\\\Adobe\\\\Acrobat Reader\\\\9.0\\\\FeatureLockDown\\\\cDefaultLaunchAttachmentPerms\",\n            {\n                # The file X may contain programs, macros, or viruses that\n                # could potentially harm your computer. Open the file only if\n                # you are sure it is safe. Would you like to: open..?\n                \"tBuiltInPermList\": (\n                    \"version:1|.doc:2|.docm:2|.docx:2|.exe:2|.xls:2|.xlsx:2|\"\n                    \".bat:2|.ddl:2|.msi:2|.vb:2|.vbs:2|.wsf:2|.wsc:2|.js:2|\"\n                    \".wsh:2|.jar:2|.rar:2|.zip:2|.bat:2\"\n                ),\n            },\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"SOFTWARE\\\\Adobe\\\\Acrobat Reader\\\\9.0\\\\AdobeViewer\",\n            {\n                # Accept EULA for Adobe Reader 9.0.\n                \"EULA\": 1,\n            },\n        ],\n    ]\n\n    def start(self, path):\n        reader = self.get_path(\"Adobe Reader\")\n\n        # Enforce the .pdf file extension.\n        if not path.endswith(\".pdf\"):\n            os.rename(path, path + \".pdf\")\n            path += \".pdf\"\n            log.info(\"Submitted file is missing extension, added .pdf\")\n\n        return self.execute(\n            reader, args=[path], maximize=True, mode=\"pdf\",\n            trigger=\"file:%s\" % path\n        )\n"
  },
  {
    "path": "analyzer/windows/modules/packages/ppt.py",
    "content": "# Copyright (C) 2014-2017 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom _winreg import HKEY_CURRENT_USER\n\nfrom lib.common.abstracts import Package\n\nclass PPT(Package):\n    \"\"\"PowerPoint analysis package.\"\"\"\n    PATHS = [\n        (\"ProgramFiles\", \"Microsoft Office\", \"POWERPNT.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office10\", \"POWERPNT.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office11\", \"POWERPNT.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office12\", \"POWERPNT.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office14\", \"POWERPNT.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office15\", \"POWERPNT.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office16\", \"POWERPNT.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office 15\", \"root\", \"office15\", \"POWERPNT.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"root\", \"Office16\", \"POWERPNT.EXE\"),\n    ]\n\n    REGKEYS = [\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Office\\\\12.0\\\\Common\\\\General\",\n            {\n                # \"Welcome to the 2007 Microsoft Office system\"\n                \"ShownOptIn\": 1,\n            },\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Office\\\\12.0\\\\Powerpoint\\\\Security\",\n            {\n                # Enable VBA macros in Office 2007.\n                \"VBAWarnings\": 1,\n                \"AccessVBOM\": 1,\n\n                # \"The file you are trying to open .xyz is in a different\n                # format than specified by the file extension. Verify the file\n                # is not corrupted and is from trusted source before opening\n                # the file. Do you want to open the file now?\"\n                \"ExtensionHardening\": 0,\n            },\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Office\\\\Common\\\\Security\",\n            {\n                # Enable all ActiveX controls without restrictions & prompting.\n                \"DisableAllActiveX\": 0,\n                \"UFIControls\": 1,\n            },\n        ],\n    ]\n\n    def start(self, path):\n        powerpoint = self.get_path(\"Microsoft Office PowerPoint\")\n        return self.execute(\n            powerpoint, args=[\"/S\", path], mode=\"office\",\n            trigger=\"file:%s\" % path\n        )\n"
  },
  {
    "path": "analyzer/windows/modules/packages/ps1.py",
    "content": "# Copyright (C) 2014-2017 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport os\n\nfrom lib.common.abstracts import Package\n\nlog = logging.getLogger(__name__)\n\nclass PS1(Package):\n    \"\"\"PowerShell analysis package.\"\"\"\n    PATHS = [\n        (\"System32\", \"WindowsPowerShell\", \"v1.0\", \"powershell.exe\"),\n        (\"System32\", \"WindowsPowerShell\", \"v2.0\", \"powershell.exe\"),\n        (\"System32\", \"WindowsPowerShell\", \"v3.0\", \"powershell.exe\"),\n    ]\n\n    def start(self, path):\n        powershell = self.get_path(\"PowerShell\")\n\n        # Enforce the .ps1 file extension as is required by powershell.\n        if not path.endswith(\".ps1\"):\n            os.rename(path, path + \".ps1\")\n            path += \".ps1\"\n            log.info(\"Submitted file is missing extension, added .ps1\")\n\n        args = [\n            \"-NoProfile\", \"-ExecutionPolicy\", \"unrestricted\", \"-File\", path\n        ]\n\n        return self.execute(powershell, args=args, trigger=\"file:%s\" % path)\n"
  },
  {
    "path": "analyzer/windows/modules/packages/pub.py",
    "content": "# Copyright (C) 2016-2018 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\n\nfrom _winreg import HKEY_CURRENT_USER\n\nfrom lib.common.abstracts import Package\n\nclass PUB(Package):\n    \"\"\"Word analysis package.\"\"\"\n    PATHS = [\n        (\"ProgramFiles\", \"Microsoft Office\", \"MSPUB.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office10\", \"MSPUB.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office11\", \"MSPUB.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office12\", \"MSPUB.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office14\", \"MSPUB.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office15\", \"MSPUB.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office16\", \"MSPUB.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office 15\", \"root\", \"office15\", \"MSPUB.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"root\", \"Office16\", \"MSPUB.EXE\"),\n    ]\n\n    REGKEYS = [\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Office\\\\12.0\\\\Publisher\\\\Security\",\n            {\n                # Enable VBA macros in Office 2007.\n                \"VBAWarnings\": 1,\n                \"AccessVBOM\": 1,\n\n                # \"The file you are trying to open .xyz is in a different\n                # format than specified by the file extension. Verify the file\n                # is not corrupted and is from trusted source before opening\n                # the file. Do you want to open the file now?\"\n                \"ExtensionHardening\": 0,\n            },\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Office\\\\15.0\\\\Publisher\\\\Security\",\n            {\n                # Enable VBA macros in Office 2013.\n                \"VBAWarnings\": 1,\n                \"AccessVBOM\": 1,\n\n                # \"The file you are trying to open .xyz is in a different\n                # format than specified by the file extension. Verify the file\n                # is not corrupted and is from trusted source before opening\n                # the file. Do you want to open the file now?\"\n                \"ExtensionHardening\": 0,\n            },\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Office\\\\16.0\\\\Publisher\\\\Security\",\n            {\n                # Enable VBA macros in Office 2016.\n                \"VBAWarnings\": 1,\n                \"AccessVBOM\": 1,\n            },\n        ],\n    ]\n\n    def start(self, path):\n        publisher = self.get_path(\"Microsoft Office Publisher\")\n        if not path.endswith(\".pub\"):\n            os.rename(path, path + \".pub\")\n            path += \".pub\"\n        return self.execute(\n            publisher, args=[\"/o\", path], mode=\"office\",\n            trigger=\"file:%s\" % path\n        )\n"
  },
  {
    "path": "analyzer/windows/modules/packages/python.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport shlex\n\nfrom lib.common.abstracts import Package\n\nclass Python(Package):\n    \"\"\"Python analysis package.\"\"\"\n\n    PATHS = [\n        (\"HomeDrive\", \"Python24\", \"python.exe\"),\n        (\"HomeDrive\", \"Python25\", \"python.exe\"),\n        (\"HomeDrive\", \"Python26\", \"python.exe\"),\n        (\"HomeDrive\", \"Python27\", \"python.exe\"),\n        (\"HomeDrive\", \"Python32\", \"python.exe\"),\n        (\"HomeDrive\", \"Python33\", \"python.exe\"),\n        (\"HomeDrive\", \"Python34\", \"python.exe\"),\n    ]\n\n    def start(self, path):\n        python = self.get_path(\"Python\")\n        arguments = self.options.get(\"arguments\", \"\")\n\n        args = [path] + shlex.split(arguments)\n        return self.execute(python, args=args, trigger=\"file:%s\" % path)\n"
  },
  {
    "path": "analyzer/windows/modules/packages/reboot.py",
    "content": "# Copyright (C) 2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\n\nfrom lib.common.abstracts import Package\n\nlog = logging.getLogger(__name__)\n\nclass Reboot(Package):\n    \"\"\"Reboot analysis package.\"\"\"\n\n    def _handle_create_process(self, filepath, command_line, source):\n        self.pids.append(self.execute(filepath, command_line))\n\n    def start(self, path):\n        for category, args in self.analyzer.reboot:\n            if not hasattr(self, \"_handle_%s\" % category):\n                log.warning(\"Unhandled reboot command: %s\", category)\n                continue\n\n            getattr(self, \"_handle_%s\" % category)(*args)\n"
  },
  {
    "path": "analyzer/windows/modules/packages/vbs.py",
    "content": "# Copyright (C) 2013 Claudio Guarnieri.\n# Copyright (C) 2014-2018 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport os\n\nfrom lib.common.abstracts import Package\n\nlog = logging.getLogger(__name__)\n\nclass VBS(Package):\n    \"\"\"VBS analysis package.\"\"\"\n    PATHS = [\n        (\"System32\", \"wscript.exe\"),\n    ]\n\n    def start(self, path):\n        wscript = self.get_path(\"WScript\")\n        if not path.endswith(\".vbs\"):\n            os.rename(path, path + \".vbs\")\n            path += \".vbs\"\n            log.info(\"Submitted file is missing extension, added .vbs\")\n\n        return self.execute(wscript, args=[path], trigger=\"file:%s\" % path)\n"
  },
  {
    "path": "analyzer/windows/modules/packages/wsf.py",
    "content": "# Copyright (C) 2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport os\n\nfrom lib.common.abstracts import Package\n\nlog = logging.getLogger(__name__)\n\nclass WSF(Package):\n    \"\"\"Windows Scripting File analysis package.\"\"\"\n    PATHS = [\n        (\"System32\", \"wscript.exe\"),\n    ]\n\n    def start(self, path):\n        wscript = self.get_path(\"WScript\")\n\n        # Enforce the .wsf file extension as is required by wscript.\n        if not path.endswith(\".wsf\"):\n            os.rename(path, path + \".wsf\")\n            path += \".wsf\"\n            log.info(\"Submitted file is missing extension, added .wsf\")\n\n        return self.execute(wscript, args=[path], trigger=\"file:%s\" % path)\n"
  },
  {
    "path": "analyzer/windows/modules/packages/xls.py",
    "content": "# Copyright (C) 2012-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2017 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom _winreg import HKEY_CURRENT_USER\n\nfrom lib.common.abstracts import Package\n\nclass XLS(Package):\n    \"\"\"Excel analysis package.\"\"\"\n    PATHS = [\n        (\"ProgramFiles\", \"Microsoft Office\", \"EXCEL.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office10\", \"EXCEL.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office11\", \"EXCEL.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office12\", \"EXCEL.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office14\", \"EXCEL.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office15\", \"EXCEL.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"Office16\", \"EXCEL.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office 15\", \"root\", \"office15\", \"EXCEL.EXE\"),\n        (\"ProgramFiles\", \"Microsoft Office\", \"root\", \"Office16\", \"EXCEL.EXE\"),\n    ]\n\n    REGKEYS = [\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Office\\\\12.0\\\\Common\\\\General\",\n            {\n                # \"Welcome to the 2007 Microsoft Office system\"\n                \"ShownOptIn\": 1,\n            },\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Office\\\\12.0\\\\Excel\\\\Security\",\n            {\n                # Enable VBA macros in Office 2007.\n                \"VBAWarnings\": 1,\n                \"AccessVBOM\": 1,\n\n                # \"The file you are trying to open .xyz is in a different\n                # format than specified by the file extension. Verify the file\n                # is not corrupted and is from trusted source before opening\n                # the file. Do you want to open the file now?\"\n                \"ExtensionHardening\": 0,\n            },\n        ],\n        [\n            HKEY_CURRENT_USER,\n            \"Software\\\\Microsoft\\\\Office\\\\Common\\\\Security\",\n            {\n                # Enable all ActiveX controls without restrictions & prompting.\n                \"DisableAllActiveX\": 0,\n                \"UFIControls\": 1,\n            },\n        ],\n    ]\n\n    def start(self, path):\n        excel = self.get_path(\"Microsoft Office Excel\")\n        return self.execute(\n            excel, args=[path], mode=\"office\", trigger=\"file:%s\" % path\n        )\n"
  },
  {
    "path": "analyzer/windows/modules/packages/zip.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport shutil\nimport logging\n\nfrom zipfile import ZipFile, BadZipfile\n\nfrom lib.common.abstracts import Package\nfrom lib.common.exceptions import CuckooPackageError\n\nlog = logging.getLogger(__name__)\n\nclass Zip(Package):\n    \"\"\"Zip analysis package.\"\"\"\n\n    def extract_zip(self, zip_path, extract_path, password):\n        \"\"\"Extracts a nested ZIP file.\n        @param zip_path: ZIP path\n        @param extract_path: where to extract\n        @param password: ZIP password\n        \"\"\"\n        # Test if zip file contains a file named as itself.\n        if self.is_overwritten(zip_path):\n            log.debug(\"ZIP file contains a file with the same name, original is going to be overwrite\")\n            # TODO: add random string.\n            new_zip_path = zip_path + \".old\"\n            shutil.move(zip_path, new_zip_path)\n            zip_path = new_zip_path\n\n        # Extraction.\n        with ZipFile(zip_path, \"r\") as archive:\n            try:\n                archive.extractall(path=extract_path, pwd=password)\n            except BadZipfile:\n                raise CuckooPackageError(\"Invalid Zip file\")\n            except RuntimeError:\n                try:\n                    archive.extractall(path=extract_path, pwd=\"infected\")\n                except RuntimeError as e:\n                    raise CuckooPackageError(\"Unable to extract Zip file: \"\n                                             \"{0}\".format(e))\n            finally:\n                # Extract nested archives.\n                for name in archive.namelist():\n                    if name.endswith(\".zip\"):\n                        # Recurse.\n                        self.extract_zip(os.path.join(extract_path, name), extract_path, password)\n\n    def is_overwritten(self, zip_path):\n        \"\"\"Check if the ZIP file contains another file with the same name, so it is going to be overwritten.\n        @param zip_path: zip file path\n        @return: comparison boolean\n        \"\"\"\n        with ZipFile(zip_path, \"r\") as archive:\n            try:\n                # Test if zip file contains a file named as itself.\n                for name in archive.namelist():\n                    if name == os.path.basename(zip_path):\n                        return True\n                return False\n            except BadZipfile:\n                raise CuckooPackageError(\"Invalid Zip file\")\n\n    def get_infos(self, zip_path):\n        \"\"\"Get information from ZIP file.\n        @param zip_path: zip file path\n        @return: ZipInfo class\n        \"\"\"\n        try:\n            with ZipFile(zip_path, \"r\") as archive:\n                return archive.infolist()\n        except BadZipfile:\n            raise CuckooPackageError(\"Invalid Zip file\")\n\n    def start(self, path):\n        password = self.options.get(\"password\")\n\n        zipinfos = self.get_infos(path)\n        self.extract_zip(path, self.curdir, password)\n\n        file_name = self.options.get(\"file\")\n        # If no file name is provided via option, take the first file.\n        if not file_name:\n            # No name provided try to find a better name.\n            if len(zipinfos):\n                # Take the first one.\n                file_name = zipinfos[0].filename\n                log.debug(\"Missing file option, auto executing: {0}\".format(file_name))\n            else:\n                raise CuckooPackageError(\"Empty ZIP archive\")\n\n        file_path = os.path.join(self.curdir, file_name)\n        return self.execute(file_path, self.options.get(\"arguments\"))\n"
  },
  {
    "path": "conf/auxiliary.conf",
    "content": "[sniffer]\n# Enable or disable the use of an external sniffer (tcpdump) [yes/no].\nenabled = yes\n\n# Specify the path to your local installation of tcpdump. Make sure this\n# path is correct.\ntcpdump = /usr/sbin/tcpdump\n\n# We used to define the network interface to capture on in auxiliary.conf, but\n# this has been moved to the \"interface\" field of each Virtual Machinery\n# configuration.\n\n# Specify a Berkeley packet filter to pass to tcpdump.\n# Note: packer filtering is not possible when using \"nictrace\" functionality\n# from VirtualBox (for example dumping inter-VM traffic).\n# bpf = not arp\n\n[mitm]\n# Enable man in the middle proxying (mitmdump) [yes/no].\nenabled = no\n\n# Specify the path to your local installation of mitmdump. Make sure this\n# path is correct.\nmitmdump = /usr/local/bin/mitmdump\n\n# Listen port base. Each virtual machine will use its own port to be\n# able to make a good distinction between the various running analyses.\n# Generally port 50000 should be fine, in this case port 50001, 50002, etc\n# will also be used - again, one port per analyses.\nport_base = 50000\n\n# Script file to interact with the network traffic. Please refer to the\n# documentation of mitmproxy/mitmdump to get an understand of their internal\n# workings. (https://mitmproxy.org/doc/scripting/inlinescripts.html)\nscript = data/mitm.py\n\n# Path to the certificate to be used by mitmdump. This file will be\n# automatically generated for you if you run mitmdump once. It's just that\n# you have to copy it from ~/.mitmproxy/mitmproxy-ca-cert.p12 to somewhere\n# in the analyzer/windows/ directory. Recommended is to write the certificate\n# to analyzer/windows/bin/cert.p12, in that case the following option should\n# be set to bin/cert.p12.\ncertificate = bin/cert.p12\n\n[services]\n# Provide extra services accessible through the network of the analysis VM\n# provided in separate, standalone, Virtual Machines [yes/no].\nenabled = no\n\n# Comma-separated list with each Virtual Machine containing said service(s).\nservices = honeyd\n\n# Time in seconds required to boot these virtual machines. E.g., some services\n# will only get online after a minute because initialization takes a while.\ntimeout = 0\n"
  },
  {
    "path": "conf/avd.conf",
    "content": "[avd]\n# Specify whether we're running the Android emulator in headless mode (no GUI)\n# or with GUI - for an interactive session.\nmode = headless\n\n# Path to the local installation of the android emulator.\nemulator_path = /home/cuckoo/android-sdk-linux/tools/emulator\n\n# Path to the local installation of the adb (android debug bridge) utility.\nadb_path = /home/cuckoo/android-sdk-linux/platform-tools/adb\n\n# Path where the emulator files are located.\navd_path = /home/cuckoo/.android/avd\n\n# Name of the reference machine that is used to duplicate.\nreference_machine = cuckoo-bird\n\n# Specify a comma-separated list of available machines to be used. For each\n# specified ID you have to define a dedicated section containing the details\n# on the respective machine. \nmachines = cuckoo1\n\n[cuckoo1]\nlabel = cuckoo1\n\n# Specify the operating system platform used by current machine.\nplatform = android\n\n# Specify the IP address of the current virtual machine. Make sure that the\n# IP address is valid and that the host machine is able to reach it. If not,\n# the analysis will fail. It's always 127.0.0.1 because the android emulator\n# runs on the loopback network interface.\nip = 127.0.0.1\n\n# Specify the port for the emulator as your adb sees it.\nemulator_port = 5554\n\n# (Optional) Specify the IP of the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here \n# the IP address for the Result Server as your machine sees it. If you don't specify an\n# address here, the machine will use the default value from cuckoo.conf.\n# NOTE: if you set this option you have to set result server IP to 0.0.0.0 in cuckoo.conf.\n# Example:\nresultserver_ip = 10.0.2.2\n\n# (Optional) Specify the port for the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here\n# the port for the Result Server as your machine sees it. If you don't specify a port\n# here, the machine will use the default value from cuckoo.conf.\n# Example:\nresultserver_port = 2042\n"
  },
  {
    "path": "conf/cuckoo.conf",
    "content": "[cuckoo]\n# Enable or disable startup version check. When enabled, Cuckoo will connect\n# to a remote location to verify whether the running version is the latest\n# one available.\nversion_check = no\n\n# If turned on, Cuckoo will delete the original file after its analysis\n# has been completed.\ndelete_original = off\n\n# If turned on, Cuckoo will delete the copy of the original file in the\n# local binaries repository after the analysis has finished. (On *nix this\n# will also invalidate the file called \"binary\" in each analysis directory,\n# as this is a symlink.)\ndelete_bin_copy = off\n\n# Specify the name of the machinery module to use, this module will\n# define the interaction between Cuckoo and your virtualization software\n# of choice.\nmachinery = virtualbox\n\n# Enable creation of memory dump of the analysis machine before shutting\n# down. Even if turned off, this functionality can also be enabled at\n# submission. Currently available for: VirtualBox and libvirt modules (KVM).\nmemory_dump = off\n\n# When the timeout of an analysis is hit, the VM is just killed by default.\n# For some long-running setups it might be interesting to terminate the\n# monitored processes before killing the VM so that connections are closed.\nterminate_processes = off\n\n# Enable automatically re-schedule of \"broken\" tasks each startup.\n# Each task found in status \"processing\" is re-queued for analysis.\nreschedule = off\n\n# Enable processing of results within the main cuckoo process.\n# This is the default behavior but can be switched off for setups that\n# require high stability and process the results in a separate task.\nprocess_results = on\n\n# Limit the amount of analysis jobs a Cuckoo process goes through.\n# This can be used together with a watchdog to mitigate risk of memory leaks.\nmax_analysis_count = 0\n\n# Limit the number of concurrently executing analysis machines.\n# This may be useful on systems with limited resources.\n# Set to 0 to disable any limits.\nmax_machines_count = 0\n\n# Limit the amount of VMs that are allowed to start in parallel. Generally\n# speaking starting the VMs is one of the more CPU intensive parts of the\n# actual analysis. This option tries to avoid maxing out the CPU completely.\nmax_vmstartup_count = 10\n\n# Minimum amount of free space (in MB) available before starting a new task. \n# This tries to avoid failing an analysis because the reports can't be written \n# due out-of-diskspace errors. Setting this value to 0 disables the check.\n# (Note: this feature is currently not supported under Windows.)\nfreespace = 64\n\n# Temporary directory containing the files uploaded through Cuckoo interfaces\n# (api.py and Django web interface).\ntmppath = /tmp\n\n# Path to the unix socket for running root commands.\nrooter = /tmp/cuckoo-rooter\n\n[routing]\n# Default network routing mode; \"none\", \"internet\", or \"vpn_name\".\n# In none mode we don't do any special routing - the VM doesn't have any\n# network access (this has been the default actually for quite a while).\n# In internet mode by default all the VMs will be routed through the network\n# interface configured below (the \"dirty line\").\n# And in VPN mode by default the VMs will be routed through the VPN identified\n# by the given name of the VPN (as per vpn.conf).\n# Note that just like enabling VPN configuration setting this option to\n# anything other than \"none\" requires one to run utils/rooter.py as root next\n# to the Cuckoo instance (as it's required for setting up the routing).\nroute = none\n\n# Network interface that allows a VM to connect to the entire internet, the\n# \"dirty line\" so to say. Note that, just like with the VPNs, this will allow\n# malicious traffic through your network. So think twice before enabling it.\n# (For example, to route all VMs through eth0 by default: \"internet = eth0\").\ninternet = none\n\n# Routing table name/id for \"dirty line\" interface. If \"dirty line\" is\n# also default gateway in the system you can leave \"main\" value. Otherwise add\n# new routing table by adding \"<id> <name>\" line to /etc/iproute2/rt_tables\n# (e.g., \"200 eth0\"). ID and name must be unique across the system (refer to\n# /etc/iproute2/rt_tables for existing names and IDs).\nrt_table = main\n\n# To route traffic through multiple network interfaces Cuckoo uses \n# Policy Routing with separate routing table for each output interface\n# (VPN or \"dirty line\"). If this option is enabled Cuckoo on start will try \n# to automatically initialise routing tables by copying routing entries from \n# main routing table to the new routing tables. Depending on your network/vpn \n# configuration this might not be sufficient. In such case you would need to \n# initialise routing tables manually. Note that enabling this option won't\n# affect main routing table.\nauto_rt = yes\n\n[resultserver]\n# The Result Server is used to receive in real time the behavioral logs\n# produced by the analyzer.\n# Specify the IP address of the host. The analysis machines should be able\n# to contact the host through such address, so make sure it's valid.\n# NOTE: if you set resultserver IP to 0.0.0.0 you have to set the option\n# `resultserver_ip` for all your virtual machines in machinery configuration.\nip = 192.168.56.1\n\n# Specify a port number to bind the result server on.\nport = 2042\n\n# Force the port chosen above, don't try another one (we can select another\n# port dynamically if we can not bind this one, but that is not an option\n# in some setups)\nforce_port = no\n\n# Maximum size of uploaded files from VM (screenshots, dropped files, log)\n# The value is expressed in bytes, by default 10Mb.\nupload_max_size = 10485760\n\n[processing]\n# Set the maximum size of analyses generated files to process. This is used\n# to avoid the processing of big files which may take a lot of processing\n# time. The value is expressed in bytes, by default 100Mb.\nanalysis_size_limit = 104857600\n\n# Enable or disable DNS lookups.\nresolve_dns = on\n\n# Enable PCAP sorting, needed for the connection content view in the web interface.\nsort_pcap = on\n\n[database]\n# Specify the database connection string.\n# NOTE: If you are using a custom database (different from sqlite), you have to\n# use utf-8 encoding when issuing the SQL database creation statement.\n# Examples, see documentation for more:\n# sqlite:///foo.db\n# postgresql://foo:bar@localhost:5432/mydatabase\n# mysql://foo:bar@localhost/mydatabase\n# If empty, default is a SQLite in db/cuckoo.db.\nconnection =\n\n# Database connection timeout in seconds.\n# If empty, default is set to 60 seconds.\ntimeout =\n\n[timeouts]\n# Set the default analysis timeout expressed in seconds. This value will be\n# used to define after how many seconds the analysis will terminate unless\n# otherwise specified at submission.\ndefault = 120\n\n# Set the critical timeout expressed in (relative!) seconds. It will be added\n# to the default timeout above and after this timeout is hit\n# Cuckoo will consider the analysis failed and it will shutdown the machine\n# no matter what. When this happens the analysis results will most likely\n# be lost.\ncritical = 60\n\n# Maximum time to wait for virtual machine status change. For example when\n# shutting down a vm. Default is 60 seconds.\nvm_state = 60\n"
  },
  {
    "path": "conf/cuckooml.conf",
    "content": "[cuckooml]\n# Set folder for reports to be used for clustering\ndata_directory = sample_data/dict\n\n# Do clustering?\nclustering = true\n\n# Define features to be used for clustering\n# Available features set: *simple*, *nominal* (full), and *numerical*\n# you can specify a comma separated list of features to be used\nfeatures = simple\n\n# Define filter to be applied to selected features\n# Available filters: filter_dataset, log_bin, none\nfeatures_filter = filter_dataset\n\n# Select one of available clustering algorithms:\n# dbscan, hdbscan\nclustering_algorithm = hdbscan\n\n# Define clustering parameters as a comma-separated list\nclustering_parameters = 1, 5\n\n# Save clustering results in the JSONS?\nsave_clustering_results = true\n\n# Where to save clustering results. If empty current JSONs will be overwritten\nclustering_results_directory = sample_data/clust\n\n# Search for abnormal behaviour in reports used for clustering?\nabnormal_behaviour = true\n\n# Detect anomalies in the clustering data\nanomalies_detection = true\n\n# Compare new samples against clustering\ncompare_new_samples = true\n\n# Set folder for samples to be compared against clustering\ntest_directory = sample_data/test\n"
  },
  {
    "path": "conf/detection.conf",
    "content": "[strings]\nenabled = no\n\n[malconv]\nenabled = yes\n\n[apistats]\nenabled = no"
  },
  {
    "path": "conf/esx.conf",
    "content": "[esx]\n# ?no_verify disables the SSL signature check. By default it is self signed\ndsn = esx://127.0.0.1/?no_verify=1\nusername = username_goes_here\npassword = password_goes_here\n\nmachines = analysis1\n\n# Specify the name of the default network interface that will be used\n# when dumping network traffic with tcpdump.\n# Example (eth0 is the interface name):\ninterface = eth0\n\n[analysis1]\n# Specify the label name of the current machine as specified in your\n# libvirt configuration.\nlabel = cuckoo1\n\n# Specify the operating system platform used by current machine\n# [windows/darwin/linux].\nplatform = windows\n\n# Please specify the name of the base snapshot. This snapshot should be taken\n# with agent in startup and the machine shut down.\nsnapshot = clean_snapshot\n\n# Specify the IP address of the current virtual machine. Make sure that the\n# IP address is valid and that the host machine is able to reach it. If not,\n# the analysis will fail. You may want to configure your network settings in\n# /etc/libvirt/<hypervisor>/networks/\nip = 192.168.122.105\n\n# (Optional) Specify the snapshot name to use. If you do not specify a snapshot\n# name, the KVM MachineManager will use the current snapshot.\n# Example (Snapshot1 is the snapshot name):\n# snapshot = Snapshot1\n\n# (Optional) Specify the name of the network interface that should be used\n# when dumping network traffic from this machine with tcpdump.\n# Example (eth0 is the interface name):\n# interface = eth0\n\n# (Optional) Specify the IP of the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here\n# the IP address for the Result Server as your machine sees it. If you don't specify an\n# address here, the machine will use the default value from cuckoo.conf.\n# NOTE: if you set this option you have to set result server IP to 0.0.0.0 in cuckoo.conf.\n# Example:\n# resultserver_ip = 192.168.122.101\n\n# (Optional) Specify the port for the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here\n# the port for the Result Server as your machine sees it. If you don't specify a port\n# here, the machine will use the default value from cuckoo.conf.\n# Example:\n# resultserver_port = 2042\n\n# (Optional) Set your own tags. These are comma separated and help to identify\n# specific VMs. You can run samples on VMs with tag you require.\n# tags = windows_xp_sp3,32_bit,acrobat_reader_6\n"
  },
  {
    "path": "conf/kvm.conf",
    "content": "[kvm]\n# Specify a comma-separated list of available machines to be used. For each\n# specified ID you have to define a dedicated section containing the details\n# on the respective machine. (E.g. cuckoo1,cuckoo2,cuckoo3)\nmachines = cuckoo1\n\n# Specify the name of the default network interface that will be used\n# when dumping network traffic with tcpdump.\n# Example (virbr0 is the interface name):\ninterface = virbr0\n\n[cuckoo1]\n# Specify the label name of the current machine as specified in your\n# libvirt configuration.\nlabel = cuckoo1\n\n# Specify the operating system platform used by current machine\n# [windows/darwin/linux].\nplatform = windows\n\n# Specify the IP address of the current virtual machine. Make sure that the\n# IP address is valid and that the host machine is able to reach it. If not,\n# the analysis will fail. You may want to configure your network settings in\n# /etc/libvirt/<hypervisor>/networks/\nip = 192.168.122.105\n\n# (Optional) Specify the snapshot name to use. If you do not specify a snapshot\n# name, the KVM MachineManager will use the current snapshot.\n# Example (Snapshot1 is the snapshot name):\n# snapshot = Snapshot1\n\n# (Optional) Specify the name of the network interface that should be used\n# when dumping network traffic from this machine with tcpdump.\n# Example (virbr0 is the interface name):\n# interface = virbr0\n\n# (Optional) Specify the IP of the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here \n# the IP address for the Result Server as your machine sees it. If you don't specify an\n# address here, the machine will use the default value from cuckoo.conf.\n# NOTE: if you set this option you have to set result server IP to 0.0.0.0 in cuckoo.conf.\n# Example:\n# resultserver_ip = 192.168.122.101\n\n# (Optional) Specify the port for the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here\n# the port for the Result Server as your machine sees it. If you don't specify a port\n# here, the machine will use the default value from cuckoo.conf.\n# Example:\n# resultserver_port = 2042\n\n# (Optional) Set your own tags. These are comma separated and help to identify\n# specific VMs. You can run samples on VMs with tag you require.\n# tags = windows_xp_sp3,32_bit,acrobat_reader_6\n"
  },
  {
    "path": "conf/memory.conf",
    "content": "# Volatility configuration\n\n# Basic settings\n[basic]\n# Profile to avoid wasting time identifying it\nguest_profile = WinXPSP2x86\n# Delete memory dump after volatility processing.\ndelete_memdump = no\n\n# List of available modules\n# enabled: enable this module\n# filter: use filters to remove benign system data from the logs\n# Filters are defined in the mask section at below\n\n# Scans for hidden/injected code and dlls\n# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#malfind\n[malfind]\nenabled = yes\nfilter = on\n\n# Lists hooked api in user mode and kernel space\n# Expect it to be very slow when enabled\n# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#apihooks\n[apihooks]\nenabled = no\nfilter = on\n\n# Lists official processes. Does not detect hidden processes\n# http://code.google.com/p/volatility/wiki/CommandReference23#pslist\n[pslist]\nenabled = yes\nfilter = off\n\n# Lists hidden processes. Uses several tricks to identify them\n# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#psxview\n[psxview]\nenabled = yes\nfilter = off\n\n# Show callbacks\n# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#callbacks\n[callbacks]\nenabled = yes\nfilter = off\n\n# Show idt\n# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#idt\n[idt]\nenabled = yes\nfilter = off\n\n# Show timers\n# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#timers\n[timers]\nenabled = yes\nfilter = off\n\n# Show messagehooks\n# Expect it to be very slow when enabled\n# http://code.google.com/p/volatility/wiki/CommandReferenceGui23#messagehooks\n[messagehooks]\nenabled = no\nfilter = off\n\n# Show sids\n# http://code.google.com/p/volatility/wiki/CommandReference23#getsids\n[getsids]\nenabled = yes\nfilter = off\n\n# Show privileges\n# http://code.google.com/p/volatility/wiki/CommandReference23#privs\n[privs]\nenabled = yes\nfilter = off\n\n# Display processes' loaded DLLs- Does not display hidden DLLs\n# http://code.google.com/p/volatility/wiki/CommandReference23#dlllist\n[dlllist]\nenabled = yes\nfilter = on\n\n# List open handles of processes\n# http://code.google.com/p/volatility/wiki/CommandReference23#handles\n[handles]\nenabled = yes\nfilter = on\n\n# Displays processes' loaded DLLs - Even hidden one (unlinked from PEB linked list)\n# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#ldrmodules\n[ldrmodules]\nenabled = yes\nfilter = on\n\n# Scan for Mutexes (whole system)\n# http://code.google.com/p/volatility/wiki/CommandReference23#mutantscan\n[mutantscan]\nenabled = yes\nfilter = on\n\n# List devices and drivers\n# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#devicetree\n[devicetree]\nenabled = yes\nfilter = on\n\n# Scan for services\n# http://code.google.com/p/volatility/wiki/CommandReferenceMal23#svcscan\n[svcscan]\nenabled = yes\nfilter = on\n\n# Scan for kernel drivers (includes hidden, unloaded)\n# http://code.google.com/p/volatility/wiki/CommandReference23#modscan\n[modscan]\nenabled = yes\nfilter = on\n\n[yarascan]\nenabled = yes\nfilter = on\n\n[ssdt]\nenabled = yes\nfilter = on\n\n[gdt]\nenabled = yes\nfilter = on\n\n# This will only run on XP profiles.\n[sockscan]\nenabled = yes\nfilter = off\n\n# This will only run on Vista/7 profiles.\n[netscan]\nenabled = yes\nfilter = off\n\n# Masks. Data that should not be logged\n# Just get this information from your plain VM Snapshot (without running malware)\n# This will filter out unwanted information in the logs\n[mask]\nenabled = no\npid_generic = \n"
  },
  {
    "path": "conf/physical.conf",
    "content": "[physical]\n# Specify a comma-separated list of available machines to be used. For each\n# specified ID you have to define a dedicated section containing the details\n# on the respective machine. (E.g. physical1,physical2,physical3)\nmachines = physical1\n\n# Credentials to access the machine\nuser = username\npassword = password\n\n# Default network interface.\ninterface = eth0\n\n[fog]\n# Credentials to access the FOG website. We're using basic screenscraping\n# techniques to programmatically schedule new \"image download tasks\", i.e., to\n# instruct FOG to make a laptop restore the original image on the next reboot.\n# Note: if you're using FOG to manage your physical machines without the\n# cronjob functionality as per documentation you *will* have to change the\n# following \"none\" to \"localhost\" or similar (the \"none\" is for backwards\n# compatibility where users are still using the cronjob-style tasking, and\n# thus effectively ignore the FOG integration). The FOG functionality has only\n# been tested against the FOG 1.2.0 stable release.\nhostname = none\nusername = fog\npassword = password\n\n[physical1]\n# Specify the label name of the current machine as specified in your\n# physical machine configuration.\nlabel = physical1\n\n# Specify the operating system platform used by current machine\n# [windows/darwin/linux].\nplatform = windows\n\n# Specify the IP address of the current machine. Make sure that the IP address\n# is valid and that the host machine is able to reach it. If not, the analysis\n# will fail.\nip = 192.168.56.101\n"
  },
  {
    "path": "conf/processing.conf",
    "content": "# Enable or disable the available processing modules [yes/no].\n# If you add a custom processing module to your Cuckoo setup, you have to add\n# a dedicated entry in this file, or it won't be executed.\n# You can also add additional options under the section of your module and\n# they will be available in your Python class.\n\n[analysisinfo]\nenabled = yes\n\n[apkinfo]\nenabled = no\n# Decompiling dex files with androguard in a heavy operation. For large dex\n# files it can really take quite a while - it is recommended to limit to a\n# certain filesize.\n# decompilation_threshold=5000000\n\n[baseline]\nenabled = no\n\n[behavior]\nenabled = yes\n\n[buffer]\nenabled = yes\n\n[debug]\nenabled = yes\n\n[droidmon]\nenabled = no\n\n[dropped]\nenabled = yes\n\n[dumptls]\nenabled = yes\n\n[googleplay]\nenabled = no\nandroid_id =\ngoogle_login =\ngoogle_password =\n\n[memory]\n# Create a memory dump of the entire Virtual Machine. This memory dump will\n# then be analyzed using Volatility to locate interesting events that can be\n# extracted from memory.\nenabled = no\n\n[network]\nenabled = yes\n\n[procmemory]\n# Enables the creation of process memory dumps for each analyzed process right\n# before they terminate themselves or right before the analysis finishes.\nenabled = yes\n# It is possible to load these process memory dumps in IDA Pro through the\n# generation of IDA Python-based script files. Although currently symbols and\n# such are not properly recovered, it is still nice to get a quick look at\n# specific memory addresses of a process.\nidapro = no\n# Extract executable images from this process memory dump. This allows us to\n# relatively easily extract injected executables.\nextract_img = yes\n# Delete process memory dumps after analysis to save disk space.\ndump_delete = no\n\n[screenshots]\nenabled = no\ntesseract = /usr/bin/tesseract\n\n[snort]\nenabled = no\n# Following are various configurable settings. When in use of a recent 2.9.x.y\n# version of Snort there is no need to change any of the following settings as\n# they represent the defaults.\n#\n# snort = /usr/local/bin/snort\n# conf = /etc/snort/snort.conf\n\n[static]\nenabled = yes\n\n[strings]\nenabled = yes\n\n[suricata]\nenabled = no\n# Following are various configurable settings. When in use of a recent version\n# of Suricata there is no need to change any of the following settings as they\n# represent the defaults.\n#\n# suricata = /usr/bin/suricata\n# conf = /etc/suricata/suricata.yaml\n# eve_log = eve.json\n# files_log = files-json.log\n# files_dir = files\n#\n# Uncommenting the following line makes our processing module use the socket\n# mode in Suricata. This is quite the performance improvement as instead of\n# having to load all the Suricata rules for each time the processing module is\n# ran (i.e., for every task), the rules are only loaded once and then we talk\n# to its API. This does require running Suricata as follows or similar;\n# \"suricata --unix-socket -D\".\n# (Please find more information in utils/suricata.sh for now).\n# socket = /var/run/suricata/cuckoo.socket\n\n[targetinfo]\nenabled = yes\n\n[virustotal]\nenabled = yes\n# How much time we can wait to establish VirusTotal connection and get the\n# report.\ntimeout = 60\n# Enable this option if you want to submit files to VirusTotal not yet available\n# in their database.\n# NOTE: if you are dealing with sensitive stuff, enabling this option you could\n# leak some files to VirusTotal.\nscan = 0\n# Add your VirusTotal API key here. The default API key, kindly provided\n# by the VirusTotal team, should enable you with a sufficient throughput\n# and while being shared with all our users, it shouldn't affect your use.\nkey = a0283a2c3d55728300d064874239b5346fb991317e8449fe43c902879d758088\n"
  },
  {
    "path": "conf/qemu.conf",
    "content": "[qemu]\n# Path to one qemu binary (assumes the other ones are there as well)\npath = /usr/bin/qemu-system-x86_64\n\n# Specify a comma-separated list of available machines to be used. For each\n# specified ID you have to define a dedicated section containing the details\n# on the respective machine. (E.g. cuckoo1,cuckoo2,cuckoo3)\nmachines = vm1,vm2\n\n# Specify the name of the default network interface that will be used\n# when dumping network traffic with tcpdump.\n# Example (qemubr is the interface name):\ninterface = qemubr\n\n[vm1]\nlabel = vm1\n\n# image path\nimage = /home/rep/vms/qvm_wheezy64_1.qcow2\n\n# vm arch (mips/mipsel/arm/x64/x86)\n# arch = default\n\n# Specify the operating system platform used by current machine\n# [windows/darwin/linux].\nplatform = linux\n\n# Specify the IP address of the current virtual machine. Make sure that the\n# IP address is valid and that the host machine is able to reach it. If not,\n# the analysis will fail.\nip = 192.168.55.2\n\n# (Optional) Specify the name of the network interface that should be used\n# when dumping network traffic from this machine with tcpdump.\n# Example (qemubr is the interface name):\ninterface = qemubr\n\n# (Optional) Specify the IP of the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here \n# the IP address for the Result Server as your machine sees it. If you don't specify an\n# address here, the machine will use the default value from cuckoo.conf.\n# NOTE: if you set this option you have to set result server IP to 0.0.0.0 in cuckoo.conf.\n# Example:\nresultserver_ip = 192.168.55.1\n\n# (Optional) Specify the port for the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here\n# the port for the Result Server as your machine sees it. If you don't specify a port\n# here, the machine will use the default value from cuckoo.conf.\n# Example:\n# resultserver_port = 2042\n\n# (Optional) Set your own tags. These are comma separated and help to identify\n# specific VMs. You can run samples on VMs with tag you require.\ntags = debian_wheezy,64_bit\n\n[vm2]\nlabel = vm2\nimage = /home/rep/vms/qvm_wheezy64_1.qcow2\narch = mipsel\nkernel_path = {imagepath}/vmlinux-3.16.0-4-4kc-malta-mipsel\nplatform = linux\nip = 192.168.55.3\ninterface = qemubr\ntags = debian_wheezy,mipsel\n"
  },
  {
    "path": "conf/reporting.conf",
    "content": "# Enable or disable the available reporting modules [on/off].\n# If you add a custom reporting module to your Cuckoo setup, you have to add\n# a dedicated entry in this file, or it won't be executed.\n# You can also add additional options under the section of your module and\n# they will be available in your Python class.\n\n[jsondump]\nenabled = yes\nindent = 4\nencoding = latin-1\ncalls = yes\n\n[reporthtml]\nenabled = no\n\n[mongodb]\nenabled = yes\nhost = 127.0.0.1\nport = 27017\ndb = cuckoo\nstore_memdump = yes\npaginate = 100\n\n[elasticsearch]\nenabled = no\n# Comma-separated list of ElasticSearch hosts. Format is IP:PORT, if port is\n# missing the default port is used.\n# Example: hosts = 127.0.0.1:9200, 192.168.1.1:80\nhosts = 127.0.0.1\n# Set to yes if we want to be able to search every API call instead of just\n# through the behavioral summary.\ncalls = no\n# Index of this Cuckoo instance. If multiple Cuckoo instances connect to the\n# same ElasticSearch host then this index (in Moloch called \"instance\") should\n# be unique for each Cuckoo instance.\n#\n#index = cuckoo\n#\n# Just in case we will have report updates in Cuckoo one will be able to\n# update to a new scheme by modifying the ElasticSearch document type.\n#\n#type = cuckoo\n\n[moloch]\nenabled = no\n# If the Moloch web interface is hosted on a different IP address than the\n# Cuckoo Web Interface then you'll want to override the IP address here.\n# host = 127.0.0.1\n#\n# Following are various configurable settings. When in use of a recent version\n# of Moloch there is no need to change any of the following settings as they\n# represent the defaults.\n#\n# moloch_capture = /data/moloch/bin/moloch-capture\n# conf = /data/moloch/etc/config.ini\n# instance = cuckoo\n"
  },
  {
    "path": "conf/virtualbox.conf",
    "content": "[virtualbox]\n# Specify which VirtualBox mode you want to run your machines on.\n# Can be \"gui\" or \"headless\". Please refer to VirtualBox's official\n# documentation to understand the differences.\nmode = headless\n\n# Path to the local installation of the VBoxManage utility.\npath = /usr/bin/VBoxManage\n# If you are running Cuckoo on Mac OS X you have to change the path as follows:\n# path = /Applications/VirtualBox.app/Contents/MacOS/VBoxManage\n\n# Default network interface.\ninterface = vboxnet0\n\n# Specify a comma-separated list of available machines to be used. For each\n# specified ID you have to define a dedicated section containing the details\n# on the respective machine. (E.g. cuckoo1,cuckoo2,cuckoo3)\nmachines = cuckoo1\n\n# If remote control is enabled in cuckoo.conf, specify a port range to use.\n# Virtualbox will bind the VRDP interface to the first available port.\ncontrolports = 5000-5050\n\n\n[cuckoo1]\n# Specify the label name of the current machine as specified in your\n# VirtualBox configuration.\nlabel = w7-cuckoo(snapshot)\n#label = xp-cuckoo\n# Specify the operating system platform used by current machine\n# [windows/darwin/linux].\nplatform = windows\n\n# Specify the IP address of the current virtual machine. Make sure that the\n# IP address is valid and that the host machine is able to reach it. If not,\n# the analysis will fail.\nip = 192.168.56.101\n\n# (Optional) Specify the snapshot name to use. If you do not specify a snapshot\n# name, the VirtualBox MachineManager will use the current snapshot.\n# Example (Snapshot1 is the snapshot name):\nsnapshot = snapshot1\n\n# (Optional) Specify the name of the network interface that should be used\n# when dumping network traffic from this machine with tcpdump. If specified,\n# overrides the default interface specified in auxiliary.conf\n# Example (vboxnet0 is the interface name):\ninterface = vboxnet0\n\n# (Optional) Specify the IP of the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here\n# the IP address for the Result Server as your machine sees it. If you don't specify an\n# address here, the machine will use the default value from cuckoo.conf.\n# NOTE: if you set this option you have to set result server IP to 0.0.0.0 in cuckoo.conf.\n# Example:\nresultserver_ip = 192.168.56.1\n\n# (Optional) Specify the port for the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here\n# the port for the Result Server as your machine sees it. If you don't specify a port\n# here, the machine will use the default value from cuckoo.conf.\n# Example:\nresultserver_port = 2042\n\n# (Optional) Set your own tags. These are comma separated and help to identify\n# specific VMs. You can run samples on VMs with tag you require.\ntags =\n\n# Mostly unused for now. Please don't fill it out.\noptions =\n\n# (Optional) Specify the OS profile to be used by volatility for this\n# virtual machine. This will override the guest_profile variable in\n# memory.conf which solves the problem of having multiple types of VMs\n# and properly determining which profile to use.\nosprofile =\n\n\n[honeyd]\n# For more information on this VM please refer to the \"services\" section of\n# the conf/auxiliary.conf configuration file. This machine is a bit special\n# in the way that its used as an additional VM for an analysis.\n# *NOTE* that if this functionality is used, the VM should be registered in\n# the \"machines\" list in the beginning of this file.\nlabel = honeyd\nplatform = linux\nip = 192.168.56.102\n# The tags should at least contain \"service\" and the name of this service.\n# This way the services auxiliary module knows how to find this particular VM.\ntags = service, honeyd\n# Not all services actually have a Cuckoo Agent running in the VM, for those\n# services one can specify the \"noagent\" option so Cuckoo will just wait until\n# the end of the analysis instead of trying to connect to the non-existing\n# Cuckoo Agent. We can't really intercept any inter-VM communication from the\n# host / gateway so in order to dump traffic between VMs we have to use a\n# different network dumping approach. For this machine we use the \"nictrace\"\n# functionality from VirtualBox (which is basically their internal tcpdump)\n# and thus properly dumps inter-VM traffic.\noptions = nictrace noagent"
  },
  {
    "path": "conf/vmware.conf",
    "content": "[vmware]\n# Specify which Vmware Workstation mode you want to run your machines on.\n# Can be \"gui\" or \"nogui\". Refer to VMware's official\n# documentation to understand the differences.\nmode = gui\n\n# Path to the local installation of the vmrun utility.\npath = /usr/bin/vmrun\n\n# Specify a comma-separated list of available machines to be used. For each\n# specified ID you have to define a dedicated section containing the details\n# on the respective machine. (E.g. cuckoo1,cuckoo2,cuckoo3)\nmachines = cuckoo1\n\n# Specify the name of the default network interface that should be used\n# when dumping network traffic with tcpdump.\n# Example (virbr0 is the interface name):\ninterface = virbr0\n\n[cuckoo1]\n# Specify the path to vmx file of this virtual machine.\nvmx_path = ../cuckoo1/cuckoo1.vmx\n\n# Specify the snapshot name to use.\nsnapshot = Snapshot1 \n\n# Specify the operating system platform used by current machine\n# [windows/darwin/linux].\nplatform = windows\n\n# Specify the IP address of the current virtual machine. Make sure that the\n# IP address is valid and that the host machine is able to reach it. If not,\n# the analysis will fail.\nip = 192.168.54.111\n\n# (Optional) Specify the name of the network interface that should be used\n# when dumping network traffic from this machine with tcpdump.\n# Example (virbr0 is the interface name):\n# interface = virbr0\n\n# (Optional) Specify the IP of the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here \n# the IP address for the Result Server as your machine sees it. If you don't specify an\n# address here, the machine will use the default value from cuckoo.conf.\n# NOTE: if you set this option you have to set result server IP to 0.0.0.0 in cuckoo.conf.\n# Example:\n# resultserver_ip = 192.168.122.101\n\n# (Optional) Specify the port for the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here\n# the port for the Result Server as your machine sees it. If you don't specify a port\n# here, the machine will use the default value from cuckoo.conf.\n# Example:\n# resultserver_port = 2042\n\n# (Optional) Set your own tags. These are comma separated and help to identify\n# specific VMs. You can run samples on VMs with tag you require.\n# tags = windows_xp_sp3,32_bit,acrobat_reader_6\n"
  },
  {
    "path": "conf/vpn.conf",
    "content": "[vpn]\n# By default we disable VPN support as it requires running utils/rooter.py as\n# root next to cuckoo.py (which should run as regular user).\nenabled = no\n\n# Comma-separated list of the available VPNs.\nvpns = vpn0\n\n[vpn0]\n# Name of this VPN. The name is represented by the filepath to the\n# configuration file, e.g., cuckoo would represent /etc/openvpn/cuckoo.conf\n# Note that you can't assign the names \"none\" and \"internet\" as those would\n# conflict with the routing section in cuckoo.conf.\nname = vpn0\n\n# The description of this VPN which will be displayed in the web interface.\n# Can be used to for example describe the country where this VPN ends up.\ndescription = Spain, Europe\n\n# The tun device hardcoded for this VPN. Each VPN *must* be configured to use\n# a hardcoded/persistent tun device by explicitly adding the line \"dev tunX\"\n# to its configuration (e.g., /etc/openvpn/vpn1.conf) where X in tunX is a\n# unique number between 0 and your lucky number of choice.\ninterface = tun0\n\n# Routing table name/id for this VPN. If table name is used it *must* be\n# added to /etc/iproute2/rt_tables as \"<id> <name>\" line (e.g., \"201 tun0\"). \n# ID and name must be unique across the system (refer /etc/iproute2/rt_tables\n# for existing names and IDs).\nrt_table = tun0\n"
  },
  {
    "path": "conf/vsphere.conf",
    "content": "[vsphere]\n\n# ESXi host connection parameters\nhost = 10.0.0.1\nport = 443\nuser = username_goes_here\npwd = password_goes_here\n\nmachines = analysis1\n\n# Specify the name of the default network interface that should be used\n# when dumping network traffic with tcpdump.\n# Example (eth0 is the interface name):\ninterface = eth0\n\n[analysis1]\n# Specify the label name of the current machine as specified on your\n# vSphere host.\nlabel = cuckoo1\n\n# Specify the operating system platform used by current machine\n# [windows/darwin/linux].\nplatform = windows\n\n# Please specify the name of the snapshot. This snapshot should be taken\n# while the machine is running and the agent started.\nsnapshot = cuckoo_ready_running\n\n# Specify the IP address of the current virtual machine. Make sure that the\n# IP address is valid and that the host machine is able to reach it. If not,\n# the analysis will fail.\nip = 192.168.1.1\n\n# (Optional) Specify the name of the network interface that should be used\n# when dumping network traffic from this machine with tcpdump.\n# Example (eth0 is the interface name):\n# interface = eth0\n\n# (Optional) Specify the IP of the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here\n# the IP address for the Result Server as your machine sees it. If you don't specify an\n# address here, the machine will use the default value from cuckoo.conf.\n# NOTE: if you set this option you have to set result server IP to 0.0.0.0 in cuckoo.conf.\n# Example:\n# resultserver_ip = 192.168.122.101\n\n# (Optional) Specify the port for the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here\n# the port for the Result Server as your machine sees it. If you don't specify a port\n# here, the machine will use the default value from cuckoo.conf.\n# Example:\n# resultserver_port = 2042\n\n# (Optional) Set your own tags. These are comma separated and help to identify\n# specific VMs. You can run samples on VMs with tag you require.\n# Note that the 64_bit tag is currently special.  For submitted 64-bit PE files,\n# the 64_bit tag will automatically be added, forcing them to be run on a 64-bit\n# VM.  For this reason, make sure all 64-bit VMs have the 64_bit tag.\n#tags = windows_xp_sp3,32_bit,acrobat_reader_8\n\n"
  },
  {
    "path": "conf/xenserver.conf",
    "content": "[xenserver]\n# Specify the XenServer username for authentication.\nuser = root\n\n# Specify the XenServer password for authentication.\npassword = changeme\n\n# Specify the XenServer URL. The url is the XMLRPC location of the XenServer,\n# which can be either a hostname or IP address.\nurl = https://xenserver\n\n# Specify a comma-separated list of available machines to be used. For each\n# specified ID you have to define a dedicated section containing the details\n# on the respective machine. (E.g. cuckoo1,cuckoo2,cuckoo3)\nmachines = cuckoo1\n\n# Specify the name of the default network interface that should be used\n# when dumping network traffic with tcpdump.\n# Example (virbr0 is the interface name):\ninterface = virbr0\n\n[cuckoo1]\n# Specify the virtual machine uuid.\nuuid = 00000000-0000-0000-0000-000000000000\n\n# Specify the snapshot uuid to use. Snapshots are not required, but if they are\n# not used, the virtual machine's disks must be configured to reset on boot.\n# Resetting the disks on boot ensures that samples cannot permanently modify the\n# analysis virtual machine past a shutdown. Refer to the \"Saving the Virtual\n# Machine\" section in the Cuckoo documentation for details on how to enable\n# disk resetting on boot.\n# Example:\n# snapshot = 00000000-0000-0000-0000-000000000000\n\n# Specify the operating system platform used by current machine\n# [windows/darwin/linux].\nplatform = windows\n\n# Specify the IP address of the current virtual machine. Make sure that the\n# IP address is valid and that the host machine is able to reach it. If not,\n# the analysis will fail.\nip = 192.168.54.111\n\n# (Optional) Specify the name of the network interface that should be used\n# when dumping network traffic from this machine with tcpdump.\n# Example (virbr0 is the interface name):\n# interface = virbr0\n\n# (Optional) Specify the IP of the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here \n# the IP address for the Result Server as your machine sees it. If you don't specify an\n# address here, the machine will use the default value from cuckoo.conf.\n# NOTE: if you set this option you have to set result server IP to 0.0.0.0 in cuckoo.conf.\n# Example:\n# resultserver_ip = 192.168.122.101\n\n# (Optional) Specify the port for the Result Server, as your virtual machine sees it.\n# The Result Server will always bind to the address and port specified in cuckoo.conf,\n# however you could set up your virtual network to use NAT/PAT, so you can specify here\n# the port for the Result Server as your machine sees it. If you don't specify a port\n# here, the machine will use the default value from cuckoo.conf.\n# Example:\n# resultserver_port = 2042\n\n# (Optional) Set your own tags. These are comma separated and help to identify\n# specific VMs. You can run samples on VMs with tag you require.\n# tags = windows_xp_sp3,32_bit,acrobat_reader_6\n"
  },
  {
    "path": "cuckoo.py",
    "content": "#!/usr/bin/env python\n# coding=utf-8\n# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport argparse\nimport logging\nimport os\nimport sys\nimport traceback\n\ntry:\n    from lib.cuckoo.common.constants import CUCKOO_VERSION, CUCKOO_ROOT\n    from lib.cuckoo.common.exceptions import CuckooCriticalError\n    from lib.cuckoo.common.exceptions import CuckooDependencyError\n    from lib.cuckoo.common.logo import logo\n    from lib.cuckoo.common.utils import exception_message\n    from lib.cuckoo.core.resultserver import ResultServer\n    from lib.cuckoo.core.scheduler import Scheduler\n    from lib.cuckoo.core.startup import check_working_directory, check_configs\n    from lib.cuckoo.core.startup import check_version, create_structure\n    from lib.cuckoo.core.startup import cuckoo_clean, drop_privileges\n    from lib.cuckoo.core.startup import init_logging, init_modules\n    from lib.cuckoo.core.startup import init_tasks, init_yara, init_binaries\n    from lib.cuckoo.core.startup import init_rooter, init_routing\n    from modules.processing.cuckooml import init_cuckooml\n\n    import bson\n\n    bson  # Pretend like it's actually being used (for static checkers.)\nexcept (CuckooDependencyError, ImportError) as e:\n    sys.exit(\"ERROR: Missing dependency: {0}\".format(e))\n\nlog = logging.getLogger()\n\ndef cuckoo_init(quiet=False, debug=False, artwork=False, test=False, ml=False):\n    \"\"\"Cuckoo initialization workflow.\n\n    :param quiet: if set enable silent mode, it doesn't print anything except warnings\n    :param debug: if set enable debug mode, it print all debug messages\n    :param artwork: if set it will print only artworks, forever\n    :param test: enable integration test mode, used only for testing\n    :param ml: do CuckooML analysis of locally stored samples\n    \"\"\"\n    cur_path = os.getcwd()\n    os.chdir(CUCKOO_ROOT)\n\n    logo()\n    check_working_directory()\n    check_configs()\n    check_version()\n    create_structure()\n\n    if artwork:\n        import time\n        try:\n            while True:\n                time.sleep(1)\n                logo()\n        except KeyboardInterrupt:\n            return\n\n    init_logging()\n\n    if quiet:\n        log.setLevel(logging.WARN)\n    elif debug:\n        log.setLevel(logging.DEBUG)\n\n    if ml:\n        init_cuckooml()\n        return\n    # Todo: init_detection()\n    init_modules()\n    init_tasks()\n    init_yara()\n    init_binaries()\n    init_rooter()\n    init_routing()\n\n    # TODO: This is just a temporary hack, we need an actual test suite to\n    # integrate with Travis-CI.\n    if test:\n        return\n    # 启动结果监听器\n    ResultServer()\n\n    os.chdir(cur_path)\n\ndef cuckoo_main(max_analysis_count=0):\n    \"\"\"Cuckoo main loop.\n\n    :param max_analysis_count: kill cuckoo after this number of analyses\n    \"\"\"\n    cur_path = os.getcwd()\n    os.chdir(CUCKOO_ROOT)\n\n    try:\n        sched = Scheduler(max_analysis_count)\n        sched.start()\n    except KeyboardInterrupt:\n        sched.stop()\n\n    os.chdir(cur_path)\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"-q\", \"--quiet\", help=\"Display only error messages\", action=\"store_true\", required=False)\n    parser.add_argument(\"-d\", \"--debug\", help=\"Display debug messages\", action=\"store_true\", required=False)\n    parser.add_argument(\"-v\", \"--version\", action=\"version\", version=\"You are running Cuckoo Sandbox {0}\".format(CUCKOO_VERSION))\n    parser.add_argument(\"-a\", \"--artwork\", help=\"Show artwork\", action=\"store_true\", required=False)\n    parser.add_argument(\"-t\", \"--test\", help=\"Test startup\", action=\"store_true\", required=False)\n    parser.add_argument(\"-m\", \"--max-analysis-count\", help=\"Maximum number of analyses\", type=int, required=False)\n    parser.add_argument(\"-u\", \"--user\", type=str, help=\"Drop user privileges to this user\")\n    parser.add_argument(\"--ml\", help=\"CuckooML: cluster reports and compare new samples\", action=\"store_true\", required=False)\n    parser.add_argument(\"--clean\", help=\"Remove all tasks and samples and their associated data\", action='store_true', required=False)\n    args = parser.parse_args()\n\n    if args.user:\n        drop_privileges(args.user)\n\n    if args.clean:\n        cuckoo_clean()\n        sys.exit(0)\n\n    try:\n        cuckoo_init(quiet=args.quiet, debug=args.debug, artwork=args.artwork,\n                    test=args.test, ml=args.ml)\n        if not args.artwork and not args.test:\n            cuckoo_main(max_analysis_count=args.max_analysis_count)\n    except CuckooCriticalError as e:\n        message = \"{0}: {1}\".format(e.__class__.__name__, e)\n        if len(log.handlers):\n            log.critical(message)\n        else:\n            sys.stderr.write(\"{0}\\n\".format(message))\n        sys.exit(1)\n    except:\n        # Deal with an unhandled exception.\n        message = exception_message()\n        traceback = traceback.format_exc()\n        print message, traceback\n"
  },
  {
    "path": "data/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "data/android/anti-vm/fake-build.prop",
    "content": "# begin build properties\n# autogenerated by buildinfo.sh\nro.build.id=KTU84P\nro.build.display.id=KTU84P\nro.build.version.incremental=1227136\nro.build.version.sdk=19\nro.build.version.codename=REL\nro.build.version.release=4.4.4\nro.build.date=Fri Jun 13 07:05:49 UTC 2014\nro.build.date.utc=1402643149\nro.build.type=user\nro.build.user=android-build\nro.build.host=kpfj3.cbf.corp.google.com\nro.build.tags=release-keys\nro.product.model=Nexus 5\nro.product.brand=google\nro.product.name=hammerhead\nro.product.device=hammerhead\nro.product.board=hammerhead\nro.product.cpu.abi=armeabi-v7a\nro.product.cpu.abi2=armeabi\nro.product.manufacturer=LGE\nro.product.locale.language=en\nro.product.locale.region=US\nro.wifi.channels=\nro.board.platform=msm8974\n# ro.build.product is obsolete; use ro.product.device\nro.build.product=hammerhead\n# Do not try to parse ro.build.description or .fingerprint\nro.build.description=hammerhead-user 4.4.4 KTU84P 1227136 release-keys\nro.build.fingerprint=google/hammerhead/hammerhead:4.4.4/KTU84P/1227136:user/release-keys\nro.build.characteristics=nosdcard\n# end build properties\n\n#\n# ADDITIONAL_BUILD_PROPERTIES\n#\nro.config.ringtone=Titania.ogg\nro.config.notification_sound=Tethys.ogg\nro.config.alarm_alert=Oxygen.ogg\nro.com.android.dateformat=MM-dd-yyyy\nro.com.android.dataroaming=false\nro.url.legal=http://www.google.com/intl/%s/mobile/android/basic/phone-legal.html\nro.url.legal.android_privacy=http://www.google.com/intl/%s/mobile/android/basic/privacy.html\nro.com.google.clientidbase=android-google\nro.carrier=unknown\nro.com.android.wifi-watchlist=GoogleGuest\nro.error.receiver.system.apps=com.google.android.gms\nro.setupwizard.enterprise_mode=1\nro.opengles.version=196608\nro.sf.lcd_density=480\npersist.hwc.mdpcomp.enable=true\nro.hwui.texture_cache_size=72\nro.hwui.layer_cache_size=48\nro.hwui.r_buffer_cache_size=8\nro.hwui.path_cache_size=32\nro.hwui.gradient_cache_size=1\nro.hwui.drop_shadow_cache_size=6\nro.hwui.texture_cache_flushrate=0.4\nro.hwui.text_small_cache_width=1024\nro.hwui.text_small_cache_height=1024\nro.hwui.text_large_cache_width=2048\nro.hwui.text_large_cache_height=1024\ndrm.service.enabled=true\nro.qc.sensors.max_geomag_rotvec=60\nro.qc.sensors.max_gyro_rate=200\nro.qc.sensors.max_accel_rate=200\nro.qc.sensors.max_grav=200\nro.qc.sensors.max_rotvec=200\nro.qc.sensors.max_ortn=200\nro.qc.sensors.max_linacc=200\nro.qc.sensors.max_gamerv_rate=200\nro.qualcomm.sensors.smd=true\nro.qualcomm.sensors.game_rv=true\nro.qualcomm.sensors.georv=true\nro.qc.sensors.smgr_mag_cal_en=true\nro.qc.sensors.step_detector=true\nro.qc.sensors.step_counter=true\ndebug.qualcomm.sns.hal=w\ndebug.qualcomm.sns.daemon=w\ndebug.qualcomm.sns.libsensor1=w\nro.telephony.call_ring.multiple=0\nwifi.interface=wlan0\nwifi.supplicant_scan_interval=15\nmedia.aac_51_output_enabled=true\npersist.radio.apm_sim_not_pwdn=1\nro.telephony.default_network=10\ntelephony.lteOnCdmaDevice=1\npersist.radio.mode_pref_nv10=1\npersist.audio.handset.mic.type=digital\npersist.audio.dualmic.config=endfire\npersist.audio.fluence.voicecall=true\npersist.audio.fluence.voicerec=false\npersist.audio.fluence.speaker=false\naf.resampler.quality=4\npersist.radio.custom_ecc=1\npersist.radio.always_send_plmn=true\nro.input.noresample=1\ndalvik.vm.heapstartsize=8m\ndalvik.vm.heapgrowthlimit=192m\ndalvik.vm.heapsize=512m\ndalvik.vm.heaptargetutilization=0.75\ndalvik.vm.heapminfree=512k\ndalvik.vm.heapmaxfree=8m\nkeyguard.no_require_sim=true\nro.facelock.black_timeout=400\nro.facelock.det_timeout=1500\nro.facelock.rec_timeout=2500\nro.facelock.lively_timeout=2500\nro.facelock.est_max_time=600\nro.facelock.use_intro_anim=false\npersist.sys.dalvik.vm.lib=libdvm.so\ndalvik.vm.dexopt-flags=m=y\nnet.bt.name=Android\ndalvik.vm.stack-trace-file=/data/anr/traces.txt\n\n"
  },
  {
    "path": "data/android/anti-vm/fake-cpuinfo",
    "content": "Processor\t: ARMv7 Processor rev 0 (v7l)\nBogoMIPS\t: 366.18\nFeatures\t: swp half thumb fastmult vfp edsp neon vfpv3 \nCPU implementer\t: 0x41\nCPU architecture: 7\nCPU variant\t: 0x0\nCPU part\t: 0xc08\nCPU revision\t: 0\n\nHardware\t: Qualcomm MSM 8974 HAMMERHEAD (Flattened Device Tree)\nRevision\t: 0000\nSerial\t\t: 0000000000000000"
  },
  {
    "path": "data/android/anti-vm/fake-drivers",
    "content": "/dev/tty             /dev/tty        5       0 system:/dev/tty\n/dev/console         /dev/console    5       1 system:console\n/dev/ptmx            /dev/ptmx       5       2 system\n/dev/vc/0            /dev/vc/0       4       0 system:vtmaster\nrfcomm               /dev/rfcomm   216 0-255 serial\nacm                  /dev/ttyACM   166 0-31 serial\nhso                  /dev/ttyHS    243 0-255 serial\nmsm_serial_hsl       /dev/ttyHSL   247 0-2 serial\nmsm_serial_hs        /dev/ttyHS    248 0-255 serial\npty_slave            /dev/pts      136 0-1048575 pty:slave\npty_master           /dev/ptm      128 0-1048575 pty:master\nunknown              /dev/tty        4 1-63 console\n"
  },
  {
    "path": "data/android/create_guest_avd.sh",
    "content": "#/usr/bin/env bash\n\n#this script is meant for easy creation on an analysis machine for android emulator avd\n\n#Path to the local installation of the adb - android debug bridge utility.\n#ADB=/Applications/adt-bundle/sdk/platform-tools/adb\n\nADB=$(which adb)\n\nif [ ! -f $ADB ]\nthen\n    echo \"Error: adb path is not valid.\"\n    exit\nfi\necho \"adb has been found.\"\n\n# First we root the emulator using Superuser\necho \"Pushing /system/xbin/su binary\"\n$ADB remount\n$ADB push binaries/su /system/xbin/su\n$ADB shell chmod 06755 /system/xbin/su\n\necho \"Installing application Superuser\"\n$ADB install apps/Superuser.apk\n\n# Install Xposed Application\necho \"Installing Xposed Application\"\n$ADB install apps/de.robv.android.xposed.installer_v33_36570c.apk\n\n# Install Droidmon Application\necho \"Installing Droidmon Application\"\n$ADB install hooking/Droidmon.apk\n\n# Install Anti Emulator Detection Application\necho \"Installing Anti Emulator Detection Application\"\n$ADB install hooking/EmulatorAntiDetect.apk\n$ADB push anti-vm/fake-build.prop /data/local/tmp/\n$ADB push anti-vm/fake-cpuinfo /data/local/tmp/\n$ADB push anti-vm/fake-drivers /data/local/tmp/\n\n# Install Content Generator\necho \"Installing Content Generator\"\n$ADB install apps/ImportContacts.apk\n\n# Install Cuckoo Agent and Python for ARM\necho \"Installing Cuckoo Agent and Python for ARM\"\n$ADB push ../../agent/android/python_agent/ /data/local/\n$ADB shell chmod 06755 /data/local/aapt\n$ADB shell chmod 06755 /data/local/agent.sh\n$ADB shell chmod 06755 /data/local/python/bin/python\n\necho \"Device is ready!\"\n"
  },
  {
    "path": "data/guids.txt",
    "content": "00000000-0000-0000-0000-000000000000 EmptyField https://msdn.microsoft.com/en-us/library/system.guid.empty.aspx\n00000000-0000-0000-c000-000000000046 IID_IUnknown https://msdn.microsoft.com/en-us/library/windows/desktop/ms680509.aspx\n00000001-0000-0000-c000-000000000046 IClassFactory https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.ole.interop.iclassfactory.aspx\n00000003-0000-0000-c000-000000000046 IID_IMarshal https://msdn.microsoft.com/en-us/library/windows/desktop/dd542707.aspx\n00000109-0000-0000-c000-000000000046 IPersistStream https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.ole.interop.ipersiststream.aspx\n0000010b-0000-0000-c000-000000000046 IPersistFile https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.comtypes.ipersistfile.aspx\n00000112-0000-0000-c000-000000000046 IOleObject https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.ole.interop.ioleobject.aspx\n0000011a-0000-0000-c000-000000000046 IParseDisplayName https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.ole.interop.iparsedisplayname.aspx\n00000146-0000-0000-c000-000000000046 IID_IGlobalInterfaceTable https://msdn.microsoft.com/nl-nl/ms679756\n00000303-0000-0000-c000-000000000046 OLEStream https://msdn.microsoft.com/en-us/library/ee379697.aspx\n00000304-0000-0000-c000-000000000046 ItemMoniker http://doxygen.reactos.org/d4/dfd/ole32__objidl_8idl_source.html\n00000323-0000-0000-c000-000000000046 IGlobalInterfaceTable http://doxygen.reactos.org/d4/dfd/ole32__objidl_8idl_source.html\n00000338-0000-0000-c000-000000000046 CLSID_ActivationPropertiesIn https://msdn.microsoft.com/en-us/library/cc226820.aspx\n00000339-0000-0000-c000-000000000046 CLSID_ActivationPropertiesOut https://msdn.microsoft.com/en-us/library/cc226820.aspx\n00000542-0000-0010-8000-00aa006d2ea4 CLSID https://support.microsoft.com/en-us/kb/288706\n00000566-0000-0010-8000-00aa006d2ea4 ADODB.Stream https://support.microsoft.com/en-us/kb/870669\n00020420-0000-0000-c000-000000000046 PSDispatch http://www.mazecomputer.com/sxs/help/proxy.htm\n00021401-0000-0000-c000-000000000046 CLSID_ShellLink http://stackoverflow.com/questions/14712408/jna-cocreateinstance\n000214e6-0000-0000-c000-000000000046 IShellFolder http://pinvoke.net/default.aspx/Interfaces/IShellFolder.html\n000214ee-0000-0000-c000-000000000046 IShellLinkA https://msdn.microsoft.com/en-us/library/windows/desktop/cc144110.aspx\n000214f9-0000-0000-c000-000000000046 IShellLinkW https://msdn.microsoft.com/en-us/library/windows/desktop/cc144110.aspx\n00021500-0000-0000-c000-000000000046 IQueryInfo https://msdn.microsoft.com/en-us/library/windows/desktop/cc144110.aspx\n0002e005-0000-0000-c000-000000000046 InprocServer32 http://computer-programming-forum.com/16-visual-basic/364d93d0f6ee4195.htm\n0002e013-0000-0000-c000-000000000046 IID_ICatInformation https://technet.microsoft.com/nl-nl/ms686642\n000c101c-0000-0000-c000-000000000046 AppID https://kb4sp.wordpress.com/2011/06/30/fixing-the-dcom-error-the-application-specific-permission-settings-do-not-grant-local-activation-permission-for-the-com-server-application-with-clsid/\n00bb2763-6a77-11d0-a535-00c04fd7d062 Microsoft_AutoComplete http://www.windowrdb.com/w.php?w=hkcr-clsid-00bb2763-6a77-11d0-a535-00c04fd7d062\n00bb2765-6a77-11d0-a535-00c04fd7d062 Microsoft_History_AutoComplete_List http://www.windowrdb.com/w.php?w=hkcr-clsid-00bb2764-6a77-11d0-a535-00c04fd7d062\n016fe2ec-b2c8-45f8-b23b-39e53a75396b IWinHttpRequest http://windowrdb.com/w.php?w=hkcr-interface-016fe2ec-b2c8-45f8-b23b-39e53a75396b\n01e04581-4eee-11d0-bfe9-00aa005b4383 &Address http://www.systemlookup.com/CLSID/256-browseui_dll.html\n0368bff0-9870-11d0-94ab-0080c74c7e95 AMtoolbar http://www.checkfilename.com/view-details/Jukebox-Pro/RespageIndex/0/sTab/2/\n04c18ccf-1f57-4cbd-88cc-3900f5195ce3 ISearchRoot http://sourceforge.net/p/jedi-apilib/mailman/jedi-apilib-wscl-svn/?viewmonth=200902&viewday=11\n04d3d264-4a22-11d2-acc7-00c04f8eeba1 GFN_Setup.exe http://www.medbase.ca/download/VFOXPRO9.0/SETUP/SETUP.SDB\n05589fa1-c356-11ce-bf01-00aa0055595a AllowedControls https://technet.microsoft.com/nl-nl/library/Cc786827(v=WS.10).aspx\n06290bd1-48aa-11d2-8432-006008c3fbfc HKEY_CLASSES_ROOT http://www.windowrdb.com/w.php?w=hkcr-clsid-06290bd1-48aa-11d2-8432-006008c3fbfc\n06290bd5-48aa-11d2-8432-006008c3fbfc ActiveXVulnerability http://www.securityfocus.com/bid/598/exploit\n062e1261-a60e-11d0-82c2-00c04fd5ae38 IShellFolder2_QueryInterface_Unimplemented_interface https://www.winehq.org/pipermail/wine-users/2010-May/072093.html\n06849e9f-c8d7-4d59-b87d-784b7d6be0b3 AcroIEHlprObj http://www.systemlookup.com/CLSID/32558-AcroIEhelper_ocx_ACROIE_1_DLL_AcroIEhelper_dll_ACROIE_1_OCX.html\n06eee834-461c-42c2-8dcf-1502b527b1f9 URL_Shortcut_PropSetStorage_Mapping http://tredosoft.com/files/IE7s/newIE7.reg\n0700f42f-eee3-443a-9899-166f16286796 Homegroup_Network http://www.windowrdb.com/w.php?w=hkcr-clsid-0700f42f-eee3-443a-9899-166f16286796\n08c0e040-62d1-11d1-9326-0060b067b86e CActiveIMM_Create http://ubuntuforums.org/archive/index.php/t-869952.html\n0be35203-8f91-11ce-9de3-00aa004bb851 StdFont https://social.msdn.microsoft.com/Forums/vstudio/en-US/f7c9d4d2-dbfa-44bd-a804-9f2fa1d27093/vs6-to-vs2010-font\n0be35204-8f91-11ce-9de3-00aa004bb851 CLSID_StdPict http://www.systemlookup.com/O16/2069-OPW_25900_cab.html\n0c6c4200-c589-11d0-999a-00c04fd655e1 IShellIconOverlayIdentifier https://github.com/dwmkerr/sharpshell/blob/master/SharpShell/SharpShell/Interop/IShellIconOverlayIdentifier.cs\n0c733a66-2a1c-11ce-ade5-00aa0044773d IID_IErrorLookup http://sourceforge.net/p/zeoslib/code-0/3534/tree//branches/testing-7.3/src/plain/ZOleDB.pas?barediff=500986a671b75b2b8b001f0f:3533\n0d43fe01-f093-11cf-8940-00a0c9054228 FileSystemObject http://www.windowrdb.com/w.php?w=hkcr-clsid-0d43fe01-f093-11cf-8940-00a0c9054228\n0e5cbf21-d15f-11d0-8301-00aa005b4383 &Links http://www.systemlookup.com/CLSID/72019-browseui_dll_shell32_dll.html\n0e890f83-5f79-11d1-9043-00c04fd9189d DXSurface http://www.windowrdb.com/w.php?w=hkcr-clsid-0e890f83-5f79-11d1-9043-00c04fd9189d\n12cda52c-7a8f-4785-8a22-53c87393fee0 gencomp29 http://uni-smr.ac.ru/archive/dev/cc++/ms/vs2010_en/VCExpress/vs_setup.pdi\n13709620-c279-11ce-a49e-444553540000 Shell https://msdn.microsoft.com/en-us/library/windows/desktop/bb776890(v=vs.85).aspx\n172bddf8-ceea-11d1-8b05-00600806d9b6 winmgmts https://technet.microsoft.com/en-us/library/ee198932.aspx\n18789660-1317-11d3-a4ec-00c04f5e0ba5 UBoxProSetup.exe https://malwr.com/analysis/YjRmZmVkMGI5MDYwNDM0NDkwOWM2YjYwYzNhNmM5Mjc/\n18df081c-e8ad-4283-a596-fa578c2ebdc3 TROJ_AGENT_0000176.TOMA http://www.trendmicro.com/vinfo/us/threat-encyclopedia/malware/troj_agent_0000176.toma\n1920cc5d-5be5-45d4-9c1c-3513d334c71c COMPage https://social.msdn.microsoft.com/Forums/en-US/6ae7127f-95e1-44d0-af7a-3d086fcbe42f/unexpected-reboots-in-admin-setup-of-vs2005-team-edition-for-sw-developers?forum=vssetup\n1cf2b120-547d-101b-8e65-08002b2bd119 IErrorInfo https://github.com/phuslu/pyMSAA/blob/master/comtypes/errorinfo.py\n1f486a52-3cb1-48fd-8f50-b8dc300d9f9d Memory_Mapped_Cache_Mgr http://www.windowrdb.com/w.php?w=hkcr-clsid-1f486a52-3cb1-48fd-8f50-b8dc300d9f9d\n2087c2f4-2cef-4953-a8ab-66779b670495 WinHttpRequest http://www.windowrdb.com/w.php?w=hkcr-clsid-2087c2f4-2cef-4953-a8ab-66779b670495\n22b07b33-8bfb-49d4-9b90-0938370c9019 IErrorInfo https://github.com/nihilus/GUID-Finder/blob/master/GUID-Finder/Interfaces.txt\n24a501ba-90a1-11d2-af05-00c04f797fb8 CD_Info_Manager http://www.medbase.ca/download/VFOXPRO9.0/WCU/SETUP.SDB\n25336920-03f9-11cf-8fd0-00aa00686f13 HTML_Document http://blogs.msdn.com/b/askie/archive/2012/09/12/how-to-determine-the-clsid-of-an-activex-control.aspx\n254dbbc1-f922-11d0-883a-3c8b00c10000 IDXTaskManager_Interface https://github.com/conferencexp/conferencexp/blob/master/MSR.LST.MDShow/DShowIDL/dxtrans.idl\n275c23e1-3747-11d0-9fea-00aa003f8646 IMultiLanguage https://code.google.com/p/subtitleedit/source/browse/trunk/src/Logic/DetectEncoding/Multilang/IMultiLanguage.cs?r=17\n275c23e2-3747-11d0-9fea-00aa003f8646 Multi_Language_Support http://www.windowrdb.com/w.php?w=hkcr-clsid-275c23e2-3747-11d0-9fea-00aa003f8646\n2933bf81-7b36-11d2-b20e-00c04f983e60 IXMLDOMDocument https://msdn.microsoft.com/en-us/library/microsoft.office.interop.infopath.semitrust.ixmldomdocument.aspx\n2933bf95-7b36-11d2-b20e-00c04f983e60 IXMLDOMDocument2 http://www.windowrdb.com/w.php?w=hkcr-interface-2933bf95-7b36-11d2-b20e-00c04f983e60\n304ce942-6e39-40d8-943a-b913c40c9cd4 HNetCfg.FwMgr http://www.windowrdb.com/w.php?w=hkcr-clsid-304ce942-6e39-40d8-943a-b913c40c9cd4\n3050f406-98b5-11cf-bb82-00aa00bdce0b Microsoft_HTML_About_Pluggable_Protocol http://www.windowrdb.com/w.php?w=hkcr-clsid-3050f406-98b5-11cf-bb82-00aa00bdce0b\n3050f429-98b5-11cf-bb82-00aa00bdce0b ElementBehaviorFactory https://github.com/lutzroeder/Writer/blob/master/Source/Html/NativeMethods.cs\n3050f4cf-98b5-11cf-bb82-00aa00bdce0b PeerFactory_Class http://www.windowrdb.com/w.php?w=hkcr-clsid-3050f4cf-98b5-11cf-bb82-00aa00bdce0b\n3050f4f5-98b5-11cf-bb82-00aa00bdce0b Trident_HTMLEditor http://www.windowrdb.com/w.php?w=hkcr-clsid-3050f4f5-98b5-11cf-bb82-00aa00bdce0b\n3050f7fa-98b5-11cf-bb82-00aa00bdce0b IHTMLEditor https://github.com/nihilus/GUID-Finder/blob/master/GUID-Finder/Interfaces.txt\n30766bd2-ea1c-4f28-bf27-0b44e2f68db7 ISearchRoot https://github.com/nihon-tc/Rtest/blob/master/header/Microsoft%20SDKs/Windows/v7.0A/Include/searchapi.idl\n30a5fb78-e11f-11d1-9064-00c04fd9189d IDXTransform_Interface https://github.com/conferencexp/conferencexp/blob/master/MSR.LST.MDShow/DShowIDL/dxtrans.idl\n30c3b080-30fb-11d0-b724-00aa006c1a01 CoMapMIMEToCLSID_Class http://www.windowrdb.com/w.php?w=hkcr-clsid-30c3b080-30fb-11d0-b724-00aa006c1a01\n35cec8a3-2be6-11d2-8773-92e220524153 SysTray http://www.systemlookup.com/CLSID/61109-stobject_dll_dllwsco_dll.html\n385a91bc-1e8a-4e4a-a7a6-f4fc1e6ca1bd DXTFilter http://www.windowrdb.com/w.php?w=hkcr-clsid-385a91bc-1e8a-4e4a-a7a6-f4fc1e6ca1bd\n3bc15af2-736c-477e-9e51-238af8667dcc IWbemPath https://github.com/angelcolmenares/pash/blob/master/External/System.Management/System.Management/IWbemPath.cs\n3c374a40-bae4-11cf-bf7d-00aa006946ee Microsoft_Url_History_Service http://www.windowrdb.com/w.php?w=hkcr-clsid-3c374a40-bae4-11cf-bf7d-00aa006946ee\n3c374a41-bae4-11cf-bf7d-00aa006946ee IUrlHistoryStg http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_22520713.html\n40dd6e20-7c17-11ce-a804-00aa003ca9f6 Shell_Extensions_for_Sharing http://www.windowrdb.com/w.php?w=hkcr-clsid-40dd6e20-7c17-11ce-a804-00aa003ca9f6\n42042206-2d85-11d3-8cff-005004838597 IconHandler http://windowssecrets.com/forums/showthread.php/135115-Icons-for-Firefox-missing-in-Windows-Explorer\n42aedc87-2188-41fd-b9a3-0c966feabec1 MruPidlList https://nakedsecurity.sophos.com/2012/06/06/zeroaccess-rootkit-usermode/\n438755c2-a8ba-11d1-b96b-00a0c90312e1 Browseui_Preloader http://www.systemlookup.com/O22/68-SYSDIR_browseui_dll.html\n44aca674-e8fc-11d0-a07c-00c04fb68820 IWbemContext https://msdn.microsoft.com/en-us/library/cc250946.aspx\n4516cee1-97da-4030-a444-2d8e296b96b6 Urlmon http://whiteboard.nektra.com/internet-explorer-7-favorites-doesn-t-work-classfactory-cannot-supply-requested-class\n4590f811-1d3a-11d0-891f-00aa004b2e24 CLSID_WbemLocator http://forums.winamp.com/showthread.php?t=309949\n4590f812-1d3a-11d0-891f-00aa004b2e24 IWbemClassObject https://msdn.microsoft.com/en-us/library/cc250726.aspx\n4590f812-1d3a-11d0-891f-00aa004b2e24 IWbemClassObject https://msdn.microsoft.com/en-us/library/cc250726.aspx\n465a756d-45ad-4305-85fd-d3321650f3b7 NumMethods http://www.fixdllfile.com/Dutch/fvevol.sys.html\n46a6eeff-908e-4dc6-92a6-64be9177b41c IApplicationResolver http://a-whiter.livejournal.com/1266.html?thread=1522\n46e31370-3f7a-11ce-bed6-00aa00611080 Microsoft_Forms_2.0_MultiPage https://www.wikispaces.com/file/view/cc_20100727_220557.reg\n47851649-a2ef-4e67-baec-c6a153ac72ec InterfaceID https://github.com/arank/cs181-practical2/blob/master/train/1e1cc235291c576f6e5f480fcfd444Ad7671b338d.None.xml\n4955dd33-b159-11d0-8fcf-00aa006bcc59 CoGetClassObject https://appdb.winehq.org/objectManager.php?sClass=version&iId=5826&iTestingId=15991\n4a16043f-676d-11d2-994e-00c04fa309d4 CLSID_DatabaseSession http://www.windowrdb.com/w.php?w=hkcr-clsid-4a16043f-676d-11d2-994e-00c04fa309d4\n4a160440-676d-11d2-994e-00c04fa309d4 IID_IDatabaseSession https://msdn.microsoft.com/en-us/library/bb931215(v=vs.85).aspx\n4cb26c03-ff93-11d0-817e-0000f87557db DXTaskManager http://www.windowrdb.com/w.php?w=hkcr-clsid-4cb26c03-ff93-11d0-817e-0000f87557db\n4d7ff4ba-1565-4ea8-94e1-6e724a46f98d IMXWriter http://read.pudn.com/downloads3/sourcecode/windows/6437/soap/Samples/Echo/Service/Rpc/CppSrv/ReleaseUMinDependency/msxml3.tlh__.htm\n4ef17940-30e0-11d0-b724-00aa006c1a01 ISniffStream http://ftp.icpdas.com/pub/beta_version/VHM/wince600/at91sam9g45m10ek_armv4i/cesysgen/sdk/inc/imgutil.h\n4fd2a832-86c8-11d0-8fca-00c04fd9189d DirectDrawEx_Object http://ftp.uma.es/Drivers/TVIDEO/ATI/128RAGE/WIN9X/DIRECTX6/DIRECTX/DDRAW.INF\n4fd2a833-86c8-11d0-8fca-00c04fd9189d IDirectDrawFactory http://users.jyu.fi/~vesal/kurssit/winohj/htyot/h00/panniva/DAnim.pas\n50d5107a-d278-4871-8989-f4ceaaf59cfc CActiveIMMAppEx_Trident http://www.windowrdb.com/w.php?w=hkcr-clsid-50d5107a-d278-4871-8989-f4ceaaf59cfc\n50ea08b0-dd1b-4664-9a50-c2f40f4bd79a IXMLDOMSchemaCollection2 http://www.windowrdb.com/w.php?w=hkcr-interface-50ea08b0-dd1b-4664-9a50-c2f40f4bd79a\n52d42507-0e98-463a-83de-1fee13073ecc Welcome_Page http://uni-smr.ac.ru/archive/dev/cc++/ms/vs2010_en/VCExpress/setup.sdb\n53bd6b4e-3780-4693-afc3-7161c2f3ee9c MruLongList http://www.windowrdb.com/w.php?w=hkcr-clsid-53bd6b4e-3780-4693-afc3-7161c2f3ee9c\n540d8a8b-1c3f-4e32-8132-530f6a502090 Language_Bar http://www.windowrdb.com/w.php?w=hkcr-clsid-540d8a8b-1c3f-4e32-8132-530f6a502090\n56a86897-0ad4-11ce-b03a-0020af0ba770 IReferenceClock http://users.jyu.fi/~vesal/kurssit/winohj/htyot/h00/panniva/DShow.pas\n56a868a9-0ad4-11ce-b03a-0020af0ba770 IID_IGraphBuilder http://rapidq.phatcode.net/examples/video/DirectShow_test.bas\n56fdf344-fd6d-11d0-958a-006097c9a090 Task_Bar_Communication http://www.windowrdb.com/w.php?w=hkcr-clsid-56fdf344-fd6d-11d0-958a-006097c9a090\n5762f2a7-4658-4c7a-a4ac-bdabfe154e0d REFIID http://q.cnblogs.com/q/55896/\n5b4dae26-b807-11d0-9815-00c04fd91972 Menu_Band http://www.windowrdb.com/w.php?w=hkcr-clsid-5b4dae26-b807-11d0-9815-00c04fd91972\n5eb2502a-8cf1-11d1-bf92-0060081ed811 IWiaDevMgr https://github.com/tigersoldier/wine/blob/master/include/wia_lh.idl\n5f2c847d-96a6-11d2-af0a-00c04f797fb8 GFN_Disk_Info_Manager http://www.medbase.ca/download/VFOXPRO9.0/SETUP/SETUP.SDB\n603d3801-bd81-11d0-a3a5-00c04fd706ec Shared_Task_Scheduler http://www.windowrdb.com/w.php?w=hkcr-clsid-603d3801-bd81-11d0-a3a5-00c04fd706ec\n6187e5a2-a445-4608-8fc0-be7a6c8db386 IDXTFilter https://github.com/nihilus/GUID-Finder/blob/master/GUID-Finder/Interfaces.txt\n623e2882-fc0e-11d1-9a77-0000f8756a10 Gradient http://www.windowrdb.com/w.php?w=hkcr-clsid-623e2882-fc0e-11d1-9a77-0000f8756a10\n660b90c8-73a9-4b58-8cae-355b7f55341b Start_Menu_Cache http://windowrdb.com/w.php?w=hkcr-clsid-660b90c8-73a9-4b58-8cae-355b7f55341b\n66833fe6-8583-11d1-b16a-00c0f0283628 CLSID_Toolbar http://dvlabs.tippingpoint.com/blog/2009/03/05/mindshare-labeling-uuids-from-type-information\n674b6698-ee92-11d0-ad71-00c04fd8fdff Microsoft_WBEM_Call_Context http://www.windowrdb.com/w.php?w=hkcr-clsid-674b6698-ee92-11d0-ad71-00c04fd8fdff\n67ea19a0-ccef-11d0-8024-00c04fd75d13 CopyHookHandlers https://malwr.com/analysis/MWQyMjRiZWQwODU2NDM2NmIwOWZhNmQ1ZjQxNGFiMmY/\n6a01fda0-30df-11d0-b724-00aa006c1a01 CoSniffStream_Class http://www.windowrdb.com/w.php?w=hkcr-clsid-6a01fda0-30df-11d0-b724-00aa006c1a01\n6c736dc1-ab0d-11d0-a2ad-00a0c90f27e8 ISystemDebugEventFire http://www.cepes.pucrs.br/experiment/Sessions/Session%203/Task%202/Shopping%205/data/lrc_recregistry.dat\n6ccb7be0-6807-11d0-b810-00c04fd706ec IShellTaskScheduler http://sourceforge.net/p/mingw-w64/mailman/mingw-w64-svn/thread/From_ktietz70@users.sourceforge.net_Fri_Sep_06_14%3A53%3A13_2013/\n6e26e776-04f0-495d-80e4-3330352e3169 IAccPropServices https://msdn.microsoft.com/nl-nl/library/accessibility.caccpropservices(v=vs.80).aspx\n6e67bcc1-d776-44bb-9dc8-c09f542c3cb6 IAcroIEHlprObj https://smithii.com/files/plugins/acroread6.inf\n7007acc7-3202-11d1-aad2-00805fc1270e objExpArray http://www.codeproject.com/Articles/13280/How-to-display-Windows-Explorer-objects-in-one-com\n7007accf-3202-11d1-aad2-00805fc1270e Network_Connections_Tray http://www.windowrdb.com/w.php?w=hkcr-clsid-7007accf-3202-11d1-aad2-00805fc1270e\n72c24dd5-d70a-438b-8a42-98424b88afb8 Windows_Script_Host_Shell_Object http://www.windowrdb.com/w.php?w=hkcr-clsid-72c24dd5-d70a-438b-8a42-98424b88afb8\n750fdf0e-2a26-11d1-a3ea-080036587f03 Offline_Files http://ftp.feg.unesp.br/remocao_virus/linkfile_fix/linkfile_fix.reg\n76765b11-3f95-4af2-ac9d-ea55d8994f1a Property_System_Both_Class_Factory http://www.windowrdb.com/w.php?w=hkcr-clsid-76765b11-3f95-4af2-ac9d-ea55d8994f1a\n7849596a-48ea-486e-8937-a2a3009f31a9 PostBootReminder_object http://www.windowrdb.com/w.php?w=hkcr-clsid-7849596a-48ea-486e-8937-a2a3009f31a9\n79eac9c3-baf9-11ce-8c82-00aa004ba90b IID_IHlink https://github.com/dblock/dotnetinstaller/blob/master/ThirdParty/Microsoft/Visual%20Studio%208/VC/PlatformSDK/Include/HlGuids.h\n79eac9d0-baf9-11ce-8c82-00aa004ba90b IID_IAuthenticate https://github.com/graemeg/freepascal/blob/master/packages/winunits-base/src/urlmon.pp\n79eac9ee-baf9-11ce-8c82-00aa004ba90b IInternetSecurityManager https://msdn.microsoft.com/en-us/library/microsoft.uii.csr.browser.web.iinternetsecuritymanager.aspx\n79eac9ef-baf9-11ce-8c82-00aa004ba90b IID_IInternetZoneManager http://referencesource.microsoft.com/#System/net/System/Net/IntranetCredentialPolicy.cs\n7a3bd1d9-35a9-4fb3-a467-f48cac35e2d0 IHomeGroup http://sourceforge.net/p/mingw-w64/mingw-w64/ci/9e485077ead88db6f56412c5c23d9b14ebd384f2/tree/mingw-w64-headers/include/shobjidl.idl\n7b8a2d94-0ac9-11d1-896c-00c04fb6bfc4 Security_Manager http://www.windowrdb.com/w.php?w=hkcr-clsid-7b8a2d94-0ac9-11d1-896c-00c04fb6bfc4\n7b8a2d95-0ac9-11d1-896c-00c04fb6bfc4 URL_Zone_Manager http://www.windowrdb.com/w.php?w=hkcr-clsid-7b8a2d95-0ac9-11d1-896c-00c04fb6bfc4\n7c857801-7381-11cf-884d-00aa004b2e24 IWbemObjectSink https://msdn.microsoft.com/en-us/library/cc250946.aspx\n7d096c5f-ac08-4f1f-beb7-5c22c517ce39 WSearch http://answers.microsoft.com/en-us/windows/forum/windows_xp-performance/dcom-got-error-attempting-to-start-the-service/8122ab95-40b4-42c3-a186-ece55b010b6e?db=5\n7eb5fbe4-2100-49e6-8593-17e130122f91 Fade_Task http://www.windowrdb.com/w.php?w=hkcr-clsid-7eb5fbe4-2100-49e6-8593-17e130122f91\n81397204-f51a-4571-8d7b-dc030521aabd DXTFilterFactory http://www.windowrdb.com/w.php?w=hkcr-clsid-81397204-f51a-4571-8d7b-dc030521aabd\n85788d00-6807-11d0-b810-00c04fd706ec IRunnableTask http://stackoverflow.com/questions/16368215/how-to-add-reference-to-irunnabletask\n85cb6900-4d95-11cf-960c-0080c7f4ee85 IID_IShellWindows https://msdn.microsoft.com/en-us/library/windows/desktop/cc836570(v=vs.85).aspx\n871c5380-42a0-1069-a2ea-08002b30309d Internet_Explorer http://hwiegman.home.xs4all.nl/clsid.html\n8856f961-340a-11d0-a96b-00c04fd705a2 ActiveX_Control http://stackoverflow.com/questions/8783863/activex-control-8856f961-340a-11d0-a96b-00c04fd705a2-cannot-be-instantiated-be\n88d969c0-f192-11d4-a65f-0040963251e5 CLSID_DOMDocument40 https://support.microsoft.com/en-us/kb/305019\n88d969e5-f192-11d4-a65f-0040963251e5 CLSID_DOMDocument50 https://msdn.microsoft.com/en-us/library/ms759214(v=vs.85).aspx\n88d969e7-f192-11d4-a65f-0040963251e5 CLSID_XMLSchemaCache50 https://msdn.microsoft.com/en-us/library/ms759214(v=vs.85).aspx\n88d969ec-8b8b-4c3d-859e-af6cd158be0f CLSID_SAXXMLReader50 https://technet.microsoft.com/nl-be/ms759214\n88d969ef-f192-11d4-a65f-0040963251e5 CLSID_MXXMLWriter50 https://msdn.microsoft.com/en-us/library/ms759214(v=vs.85).aspx\n88d969f1-f192-11d4-a65f-0040963251e5 CLSID_MXNamespaceManager50 https://msdn.microsoft.com/en-us/library/ms759214(v=vs.85).aspx\n88d96a05-f192-11d4-a65f-0040963251e5 CLSID_DOMDocument60 https://msdn.microsoft.com/en-us/library/ms764622(v=vs.85).aspx\n89643d21-7b2a-11d1-8271-00a0c91f9ca0 Adbanner http://codeverge.com/grc.spyware/reg-key-question/1594414\n8a3f59e1-4994-11d1-a40d-00600831f336 CLSID_DSStatusBar http://www.bleepingcomputer.com/forums/t/315688/google-searches-redirected-backdoorwin32agentasem-found/\n8bc3f05e-d86b-11d0-a075-00c04fb68820 CLSID_WMI http://answers.microsoft.com/en-us/windows/forum/windows_7-performance/the-server-8bc3f05e-d86b-11d0-a075-00c04fb68820/7500c1d2-b873-4e68-af8c-89fe7e848658\n8c7461ef-2b13-11d2-be35-3078302c2030 Component_Categories_Cache_Daemon http://www.systemlookup.com/O22/102-SYSDIR_browseui_dll.html\n8d4b04e1-1331-11d0-81b8-00c04fd85ab4 CLSID_ImnAccountManager http://windowrdb.com/w.php?w=hkcr-clsid-8d4b04e1-1331-11d0-81b8-00c04fd85ab4\n900c0763-5cad-4a34-bc1f-40cd513679d5 User_Account_Control_Check_Service http://windowrdb.com/w.php?w=hkcr-clsid-900c0763-5cad-4a34-bc1f-40cd513679d5\n90d75131-43a6-4664-9af8-dcceb85a7462 IShellUserAssist http://147.46.109.80:9090/town/projects.jsp?sort=1&file=C%3A%5CWindows%5Cdiagnostics%5Cscheduled%5CMaintenance%5CCL_Utility.ps1\n92780b25-18cc-41c8-b9be-3c9c571a8263 CLSID_Research http://www.systemlookup.com/O9/215-REFIEBAR_DLL.html\n9ba05972-f6a8-11cf-a442-00a0c90a8f39 ShellWindows http://www.eightforums.com/performance-maintenance/36756-dcom-error-win-8-1-a.html\n9d194cf1-7a6a-11d2-940e-00c04fa35008 GFN_CID_Dependency_Manager http://www.medbase.ca/download/VFOXPRO9.0/WCU/SETUP.SDB\n9dac2c1e-7c5c-40eb-833b-323e85a1ce84 Windows_Health_Center_WSC_Interop http://www.herdprotect.com/wscinterop.dll-63252873437a123f033a3c398a84db8311c7b9a9.aspx\n9de4fe99-5700-11d2-acc7-00c04f8eeba1 GFN_CID_SetupDB http://www.medbase.ca/download/VFOXPRO9.0/WCU/SETUP.SDB\n9de4fe9a-5700-11d2-acc7-00c04f8eeba1 GFN_CID_SetupLog http://www.medbase.ca/download/VFOXPRO9.0/WCU/SETUP.SDB\n9fe307c0-3646-11d3-a508-00c04f5e0ba5 Options_Page http://ftp.fstp.ir/Categories/Programing/Microsoft%20Visual%20Basic%202005%20Express%20Edition/setup.sdb\na1f4e726-8cf1-11d1-bf92-0060081ed811 StiSvc https://social.microsoft.com/Forums/en-US/ce35e6c0-047a-4508-be2d-30ec5816d291/dcom-got-an-error-attempting-to-start-the-service-stisvc\na3ccedf3-2de2-11d0-86f4-00a0c913f750 IImageDecodeFilter http://read.pudn.com/downloads37/sourcecode/windows/120118/Microsoft%20Visual%20Studio/VC98/Include/OCMM.IDL__.htm\na3ccedf7-2de2-11d0-86f4-00a0c913f750 CoPNGFilter_Class http://windowsexplored.com/2012/01/09/the-case-of-the-ie-hangs-and-missing-png-images-or-killing-two-birds-with-one-stone/\na47979d2-c419-11d9-a5b4-001185ad2b89 Network_List_Manager http://forums.sandboxie.com/phpBB3/viewtopic.php?p=84408\na5e46e3a-8849-11d1-9d8c-00c04fc99d61 CLSID_CBaseBrowser http://read.pudn.com/downloads3/sourcecode/windows/system/11495/shell/inc/shdguid.h__.htm\na67b1e72-f530-4d0f-bef3-b4cea450c1a3 GFN_CID_VS_Baseline_Requirements http://www.medbase.ca/download/VFOXPRO9.0/WCU/SETUP.SDB\na7ee7f34-3bd1-427f-9231-f941e9b7e1fe DXTFilterCollection http://windowrdb.com/w.php?w=hkcr-clsid-a7ee7f34-3bd1-427f-9231-f941e9b7e1fe\na9ae6c90-1d1b-11d2-b21a-00c04fa357fa IID_IUserIdentityManager https://github.com/dblock/dotnetinstaller/blob/master/ThirdParty/Microsoft/Visual%20Studio%208/VC/PlatformSDK/Include/msident.idl\na9ae6c91-1d1b-11d2-b21a-00c04fa357fa CLSID_UserIdentityManager https://github.com/dblock/dotnetinstaller/blob/master/ThirdParty/Microsoft/Visual%20Studio%208/VC/PlatformSDK/Include/msident.idl\nab310581-ac80-11d1-8df3-00c04fb6ef69 ISearchManager https://social.msdn.microsoft.com/Forums/vstudio/en-US/95804fa3-282b-4dfd-a0fc-da0ee0bf4189/where-is-searchguidsh?forum=windowsdesktopsearchdevelopment\nac60f6a0-0fd9-11d0-99cb-00c04fd64497 IResolveShellLink https://www.winehq.org/pipermail/wine-cvs/2009-January/051255.html\nadc6cb82-424c-11d2-952a-00c04fa34f05 DXImageTransform.Microsoft.Alpha https://cryptome.org/0002/cslid-list-08.htm\nadd8ba80-002b-11d0-8f0f-00c04fd7d062 IID_IDelegateFolder http://www.codeproject.com/Articles/1840/Namespace-Extensions-the-IDelegateFolder-mystery\nafba6b42-5692-48ea-8141-dc517dcf0ef1 Server_XML_HTTP http://windowrdb.com/w.php?w=hkcr-clsid-afba6b42-5692-48ea-8141-dc517dcf0ef1\nb0d17fc2-7bc4-11d1-bdfa-00c04fa31009 CLSID_IFontCache http://windowrdb.com/w.php?w=hkcr-clsid-b0d17fc2-7bc4-11d1-bdfa-00c04fa31009\nb0d17fc4-7bc4-11d1-bdfa-00c04fa31009 IID_IFontCache https://github.com/nihon-tc/Rtest/blob/master/header/Microsoft%20SDKs/Windows/v7.0A/Include/mimeole.idl\nb196b28f-bab4-101a-b69c-00aa00341d07 IClassFactory2 https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.ole.interop.iclassfactory2.aspx\nb39fd73f-e139-11d1-9065-00c04fd9189d IDXSurface https://github.com/conferencexp/conferencexp/blob/master/MSR.LST.MDShow/DShowIDL/dxtrans.idl\nb54f3741-5b07-11cf-a4b0-00aa004a55e8 VB_Script_Language http://www.sevenforums.com/general-discussion/162931-cant-find-vbscript-engine.html\nb5e64ffa-c2c5-444e-a301-fb5e00018050 INetFwAuthorizedApplication https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.common.inetfwauthorizedapplication(v=vs.120).aspx\nb5f8350b-0548-48b1-a6ee-88bd00b4a5e7 CAccPropServicesClass https://msdn.microsoft.com/en-us/library/accessibility.caccpropservicesclass(v=vs.110).aspx\nb722bccb-4e68-101b-a2bc-00aa00404770 IOleCommandTarget https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.ole.interop.iolecommandtarget.aspx\nba126ad1-2166-11d1-b1d0-00805fc1270e NT_AUTHORITY_NETWORK_SERVICE https://support.microsoft.com/en-us/kb/934704\nba126ae5-2166-11d1-b1d0-00805fc1270e Network_Connection_Manager http://answers.microsoft.com/en-us/windows/forum/windows_xp-performance/dcom-error-10010-very-slow-login-very-slow-desktop/4614ae6d-93cd-45e6-b66a-cbde1db13f90?db=5\nbb1a2ae1-a4f9-11cf-8f20-00805f2cd064 IActiveScript http://stackoverflow.com/questions/4744105/parse-and-execute-js-by-c-sharp\nbb81d810-3f9b-11d3-a50c-00c04f5e0ba5 Start_Page http://ftp.fstp.ir/Categories/Programing/Microsoft%20Visual%20Basic%202005%20Express%20Edition/setup.sdb\nbb81d811-3f9b-11d3-a50c-00c04f5e0ba5 Install_Page http://ftp.fstp.ir/Categories/Programing/Microsoft%20Visual%20Basic%202005%20Express%20Edition/setup.sdb\nbdd1f04b-858b-11d1-b16a-00c0f0283628 ListView http://www.cgplusplus.com/online-reference/maxscript-reference/source/listview_activex_control.htm\nc08956a2-1cd3-11d1-b1c5-00805fc1270e IID_INetConnectionManager https://github.com/nihon-tc/Rtest/blob/master/header/Microsoft%20SDKs/Windows/v7.0A/Include/NetCon.Idl\nc1ee01f2-b3b6-4a6a-9ddd-e988c088ec82 CActiveIMMAppEx http://windowrdb.com/w.php?w=hkcr-clsid-c1ee01f2-b3b6-4a6a-9ddd-e988c088ec82\nc43dc798-95d1-4bea-9030-bb99e2983a1a ITaskbarList4 http://fossies.org/linux/monodevelop/src/addins/WindowsPlatform/WindowsAPICodePack/Shell/Interop/Taskbar/TaskbarCOMInterfaces.cs\nc5588351-7f86-11d0-8252-00c04fd85ab4 IMimeAllocator http://www.virtualbox.org/svn/vbox/trunk/src/VBox/Devices/Graphics/shaderlib/wine/include/mimeole.idl\nc605507b-9613-4756-9c07-e0d74321cb1e CLSID_HomeGroupCtrl http://windowrdb.com/w.php?w=hkcr-clsid-c605507b-9613-4756-9c07-e0d74321cb1e\nc62a69f0-16dc-11ce-9e98-00aa00574a4f Dynamic_Link_Library https://support.microsoft.com/en-us/kb/182500\nc8b522cf-5cf3-11ce-ade5-00aa0044773d Microsoft_OLE_DB_Error_Collection_Service http://windowrdb.com/w.php?w=hkcr-clsid-c8b522cf-5cf3-11ce-ade5-00aa0044773d\nc8e6f269-b90a-4053-a3be-499afcec98c4 User_Account_Control_Check_Provider http://windowrdb.com/w.php?w=hkcr-clsid-c8e6f269-b90a-4053-a3be-499afcec98c4\nc90352f6-643c-4fbc-bb23-e996eb2d51fd IID_IMXNamespaceManager http://sourceforge.net/p/libxml2-pas/git/ci/3a8107acbdcacf53e20811adf76476cd2368ddb5/\nca236752-2e77-4386-b63b-0e34774a413d WerConCpl http://www.herdprotect.com/werconcpl.dll-8e8df93fb599eedee7ac07da76c235ddcb6c6aee.aspx\ncb8555cc-9128-11d1-ad9b-00c04fd8fdff CLSID_WbemAdministrativeLocator http://apt-browse.org/browse/ubuntu/trusty/universe/i386/wine1.6-dev/1%3A1.6.2-0ubuntu4/file/usr/include/wine/windows/wbemprov.h\ncc271f08-e1dd-49bf-87cc-cd6dcf3f3d9f FirewallControlPanel http://www.fixdllfile.com/English/FirewallControlPanel.dll.html\ncda42200-bd88-11d0-bd4e-00a0c911ce86 CLSID_FilterMapper2 https://github.com/conferencexp/conferencexp/blob/master/MSR.LST.MDShow/Interop/coclasses.cs\ncfbfae00-17a6-11d0-99cb-00c04fd64497 Microsoft_URL_Search_Hook http://www.systemlookup.com/CLSID/5772-ieframe_dll_shdocvw_dll.html\nd0074ffd-570f-4a9b-8d69-199fdba5723b INetworkListManager http://forundex.ru/admin/JetAudio-Basic-229470\nd5f569d0-593b-101a-b569-08002b2dbf7a IID_IPSFactoryBuffer https://msdn.microsoft.com/en-us/library/windows/desktop/ms695281(v=vs.85).aspx\nd9e89500-30fa-11d0-b724-00aa006c1a01 IMapMIMEToCLSID http://read.pudn.com/downloads37/sourcecode/windows/120118/Microsoft%20Visual%20Studio/VC98/Include/OCMM.IDL__.htm\ndbc80044-a445-435b-bc74-9c25c1c588a9 SSV_Helper http://www.systemlookup.com/CLSID/6407-jp2ssv_dll.html\ndc12a687-737f-11cf-884d-00aa004b2e24 IID_IWbemLocator http://marc.info/?l=metasploit-framework&m=136872390501333&w=2\ndcb00000-570f-4a9b-8d69-199fdba5723b INetworkListManager http://www.windowrdb.com/w.php?w=hkcr-interface-dcb00000-570f-4a9b-8d69-199fdba5723b\ndcb00c01-570f-4a9b-8d69-199fdba5723b INetworkListManager https://social.technet.microsoft.com/Forums/windowsserver/en-US/e1acf5d3-2bd0-4393-928f-561bfbe9fa96/api-inetworklistmanager-in-powershell?forum=winserverpowershell\ndccfc162-2b38-11d2-b7ec-00c04f8f5d9a IMLangFontLink2 https://github.com/SubtitleEdit/subtitleedit/blob/master/libse/DetectEncoding/Multilang/IMLangFontLink2.cs\ndccfc164-2b38-11d2-b7ec-00c04f8f5d9a IMultiLanguage2 https://code.google.com/p/subtitleedit/source/browse/trunk/src/Logic/DetectEncoding/Multilang/IMultiLanguage2.cs?r=137\ndd313e04-feff-11d1-8ecd-0000f87a470c CLSID_UserAssist http://www.geoffchappell.com/studies/windows/ie/browseui/classes/userassist.htm\ndd522acc-f821-461a-a407-50b198b896dc ShellHWDetection http://www.bleepingcomputer.com/forums/t/396365/dcom-1084-error/\nde77ba04-3c92-4d11-a1a5-42352a53e0e3 Home_Group_Member_Status http://windowrdb.com/w.php?w=hkcr-clsid-de77ba04-3c92-4d11-a1a5-42352a53e0e3\ndecdd26f-5491-11d2-bee7-00c04f797fb8 GFN_CID_Default_Scenario_Factory http://www.medbase.ca/download/VFOXPRO9.0/WCU/SETUP.SDB\ndffacdc5-679f-4156-8947-c5c76bc0b67f REG_DWORD http://markswinkels.nl/2012/08/remove-duplicate-personal-folders-within-windows-2008-r2-when-using-folder-redirection/\ne436ebb1-524f-11ce-9f53-0020af0ba770 System_Clock http://windowrdb.com/w.php?w=hkcr-clsid-e436ebb1-524f-11ce-9f53-0020af0ba770\ne436ebb3-524f-11ce-9f53-0020af0ba770 FilgrapghManager https://msdn.microsoft.com/en-us/library/aa645736(v=vs.71).aspx\ne6fb5e20-de35-11cf-9c87-00aa005127ed WebCheck https://forums.malwarebytes.org/index.php?/topic/64083-is-webchecker-startup-program-a-virus/\ne70c92a9-4bfd-11d1-8a95-00c04fb951f3 CLSID_StoreNamespace http://windowrdb.com/w.php?w=hkcr-clsid-e70c92a9-4bfd-11d1-8a95-00c04fb951f3\ne70c92aa-4bfd-11d1-8a95-00c04fb951f3 IID_IStoreNamespace https://github.com/nihon-tc/Rtest/blob/master/header/Microsoft%20SDKs/Windows/v7.0A/Include/msoeapi.idl\neac04bc0-3791-11d2-bb95-0060977b464c IID_IAutoComplete2 http://stackoverflow.com/questions/34317985/how-to-use-iautocomplete-together-with-tstringsadapter\neb0fe172-1a3a-11d0-89b3-00a0c90a90ac IDeskBand https://social.msdn.microsoft.com/Forums/vstudio/en-US/a5e756a4-89a9-4afb-8ce4-0c572fba6eaf/how-to-implement-ideskband2-interface-in-c?forum=clr\nebc02112-5992-48b7-b365-a2ba35afe3cf Path_Page http://ftp.fstp.ir/Categories/Programing/Microsoft%20Visual%20Basic%202005%20Express%20Edition/setup.sdb\nec9846b3-2762-4a6b-a214-6acb603462d2 INetFwAuthorizedApplicationGuid https://assab.cs.washington.edu/cct/Misc/RecordingServer/RecordingServerService/FirewallUtility.cs\necf03a33-103d-11d2-854d-006008059367 MyDocs_Copy_Hook http://www.shouldiblockit.com/mydocs.dll-5ba1486116ece4d10c1b6ea4c6086b5f.aspx\ned8c108e-4349-11d2-91a4-00c04f7969e8 Microsoft.XMLHTTP https://support.microsoft.com/en-us/kb/321924\nee1f7637-e138-11d1-8379-00c04fd918d0 IID_IShellMenu https://www.autoitscript.com/forum/topic/145473-the-favorites-menu/\nf309ad18-d86a-11d0-a075-00c04fb68820 IWbemLevel1Login https://msdn.microsoft.com/en-us/library/cc250755.aspx\nf414c260-6ac0-11cf-b6d1-00aa00bbbb58 JScript5.8 http://stackoverflow.com/questions/7167690/what-is-the-progid-or-clsid-for-ie9s-javascript-engine-code-named-chakra\nf5078f32-c551-11d3-89b9-0000f81fe221 CLSID_DOMDocument30 https://msdn.microsoft.com/en-us/library/ms766426(v=vs.85).aspx\nf6d90f11-9c73-11d3-b32e-00c04f990bb4 CLSID_DOMDocument  https://msdn.microsoft.com/en-us/library/ms766426(v=vs.85).aspx\nf6d90f16-9c73-11d3-b32e-00c04f990bb4 CLSID_XMLHTTP https://msdn.microsoft.com/en-us/library/ms766426(v=vs.85).aspx\nf748b5f0-15d0-11ce-bf0d-00aa0044bb60 Microsoft_Forms_2.1_Toolbox https://www.wikispaces.com/file/view/cc_20100727_220557.reg\nf7898af5-cac4-4632-a2ec-da06e5111af2 INetFwMgr https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.common.inetfwmgr(v=vs.120).aspx\nfaedcf69-31fe-11d1-aad2-00805fc1270e INetConnectionManager2 https://github.com/nihilus/GUID-Finder/blob/master/GUID-Finder/Interfaces.txt\nfb5f1910-f110-11d2-bb9e-00c04f795683 Messenger http://www.systemlookup.com/O9/287-msmsgs_exe.html\nfbeb8a05-beee-4442-804e-409d6c4515e9 CDBurn http://www.systemlookup.com/O21/242-SystemRoot_system32_SHELL32_dll.html\nfbf23b40-e3f0-101b-8488-00aa003e56f8 Internet_Shortcut http://www.windowrdb.com/w.php?w=hkcr-clsid-fbf23b40-e3f0-101b-8488-00aa003e56f8\nfc4801a3-2ba9-11cf-a229-00aa003d7352 IObjectWithSite https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.ole.interop.iobjectwithsite.aspx\nfd465481-1384-11d0-abbd-0020afdfd10a IImnAccountManager http://doxygen.reactos.org/d0/daa/imnact_8idl_source.html\nfd853cdd-7f86-11d0-8252-00c04fd85ab4 CLSID_IMimeAllocator http://doxygen.reactos.org/d4/d2f/inetcomm_8idl_source.html\nfe787bcb-0ee8-44fb-8c89-12f508913c40 SHCoCreateInstance https://www.playonlinux.com/en/issue-1628.html\nff393560-c2a7-11cf-bff4-444553540000 History https://autohotkey.com/docs/misc/CLSID-List.htm\n"
  },
  {
    "path": "data/html/base-report.html",
    "content": "<!--\n  Cuckoo Sandbox - Automated Malware Analysis\n  Copyright (C) 2010-2015 Cuckoo Foundation.\n  http://www.cuckoosandbox.org\n \n  This file is part of Cuckoo.\n \n  Cuckoo is free software: you can redistribute it and/or modify\n  it under the terms of the GNU General Public License as published by\n  the Free Software Foundation, either version 3 of the License, or\n  (at your option) any later version.\n \n  Cuckoo is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  GNU General Public License for more details.\n \n  You should have received a copy of the GNU General Public License\n  along with this program.  If not, see http://www.gnu.org/licenses/\n-->\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>Cuckoo Sandbox</title>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<meta name=\"description\" content=\"\">\n<meta name=\"author\" content=\"\">\n<style>\n{% include \"css/bootstrap.min.css\" %}\n{% include \"css/bootstrap-responsive.min.css\" %}\nbody {\n    margin-top: 20px;\n}\n.footer {\n    margin-top: 45px;\n    padding: 35px 0 36px;\n    border-top: 1px solid #e5e5e5;\n}\n.footer p {\n    margin-bottom: 0;\n    color: #555;\n}\n.mono {\n    font-family: monospace;\n}\n.signature {\n    padding: 6px;\n    margin-bottom: 3px;\n}\nimg.fade {\n    opacity:0.4;\n    filter:alpha(opacity=40);\n}\nimg.fade:hover {\n    opacity:1.0;\n    filter:alpha(opacity=100);\n}\n.section-title {\n    border-bottom: 1px solid #eee;\n    margin-bottom: 15px;\n    margin-top: 20px;\n    padding-bottom: 3px;\n}\n.filesystem {\n    background-color: #ffe3c5; {# Light Orange #}\n}\n.registry {\n    background-color: #ffc5c5; {# Light Red #}\n}\n.process {\n    background-color: #c5e0ff; {# Light Blue #}\n}\n.services {\n    background-color: #ccc5ff;\n}\n.device {\n    background-color: #ccc5ff;\n}\n.network {\n    background-color: #d3ffc5; {# Light Green #}\n}\n.socket {\n    background-color: #d3ffc5;\n}\n.synchronization {\n    background-color: #f9c5ff;\n}\n</style>\n</head>\n<body>\n<div class=\"container-fluid\">\n    {% include \"graphic/logo.html\" %}\n    <div class=\"navbar navbar-inverse\" style=\"margin-top: 10px;\">\n        <div class=\"navbar-inner\">\n            <div class=\"container-fluid\">\n                <div class=\"nav-collapse\">\n                    <ul class=\"nav\">\n                        <li><a href=\"#info\">Info</a></li>\n                        {% if results.info.category == \"file\" %}\n                        <li><a href=\"#file\">File</a></li>\n                        {% elif results.info.category == \"url\" %}\n                        <li><a href=\"#url\">URL</a></li>\n                        {% endif %}\n                        <li><a href=\"#signatures\">Signatures</a></li>\n                        <li><a href=\"#screenshots\">Screenshots</a></li>\n                        {% if results.info.category == \"file\" %}\n                        <li><a href=\"#static\">Static</a></li>\n                        {% endif %}\n                        <li><a href=\"#dropped\">Dropped</a></li>\n                        <li><a href=\"#network\">Network</a></li>\n                        <li><a href=\"#behavior\">Behavior</a></li>\n                        <li><a href=\"#volatility\">Volatility</a></li>\n                        <!-- BOTTLEREMOVEME <li><a href=\"/pcap/{{results.info.id}}\">PCAP</a></li> BOTTLEREMOVEME --!>\n                        <!-- BOTTLEREMOVEME <li><a href=\"/view/{{results.info.id}}/download\">Download Report</a></li> BOTTLEREMOVEME --!>\n                        <!-- BOTTLEREMOVEME <li><li><a href=\"/files/{{results.info.id}}\">Download Files</a></li>  BOTTLEREMOVEME --!>\n                    </ul>\n                </div>\n            </div>\n        </div>\n    </div>\n    {% block content %}{% endblock %}\n\n    <footer class=\"footer\">\n        <p class=\"pull-right\"><a href=\"#\">Back to top</a></p>\n        <p>&copy;2010-2015 <a href=\"http://www.cuckoosandbox.org\">Cuckoo Sandbox</a></p>\n    </footer>\n</div>\n<script>\n{% include \"js/bootstrap.min.js\" %}\n{% include \"js/functions.js\" %}\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "data/html/base-web.html",
    "content": "<!--\n  Cuckoo Sandbox - Automated Malware Analysis\n  Copyright (C) 2010-2015 Cuckoo Foundation.\n  http://www.cuckoosandbox.org\n \n  This file is part of Cuckoo.\n \n  Cuckoo is free software: you can redistribute it and/or modify\n  it under the terms of the GNU General Public License as published by\n  the Free Software Foundation, either version 3 of the License, or\n  (at your option) any later version.\n \n  Cuckoo is distributed in the hope that it will be useful,\n  but WITHOUT ANY WARRANTY; without even the implied warranty of\n  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n  GNU General Public License for more details.\n \n  You should have received a copy of the GNU General Public License\n  along with this program.  If not, see http://www.gnu.org/licenses/\n-->\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<title>Cuckoo Sandbox</title>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<meta name=\"description\" content=\"\">\n<meta name=\"author\" content=\"\">\n<style>\n{% include \"css/bootstrap.min.css\" %}\n{% include \"css/bootstrap-responsive.min.css\" %}\nbody {\n    padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */\n}\n.footer {\n    margin-top: 45px;\n    padding: 35px 0 36px;\n    border-top: 1px solid #e5e5e5;\n}\n.footer p {\n    margin-bottom: 0;\n    color: #555;\n}\n.mono {\n    font-family: monospace;\n}\n.signature {\n    padding: 6px;\n    margin-bottom: 3px;\n}\n</style>\n\n<!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script>\n<![endif]-->\n\n<link rel=\"shortcut icon\" href=\"ico/favicon.ico\">\n<link rel=\"apple-touch-icon-precomposed\" sizes=\"144x144\" href=\"ico/apple-touch-icon-144-precomposed.png\">\n<link rel=\"apple-touch-icon-precomposed\" sizes=\"114x114\" href=\"ico/apple-touch-icon-114-precomposed.png\">\n<link rel=\"apple-touch-icon-precomposed\" sizes=\"72x72\" href=\"ico/apple-touch-icon-72-precomposed.png\">\n<link rel=\"apple-touch-icon-precomposed\" href=\"ico/apple-touch-icon-57-precomposed.png\">\n</head>\n<body>\n    <div class=\"navbar navbar-inverse navbar-fixed-top\">\n        <div class=\"navbar-inner\">\n            <div class=\"container\">\n                <a class=\"btn btn-navbar\" data-toggle=\"collapse\" data-target=\".nav-collapse\">\n                <span class=\"icon-bar\"></span>\n                <span class=\"icon-bar\"></span>\n                <span class=\"icon-bar\"></span>\n                </a>\n                <div class=\"nav-collapse\">\n                    <ul class=\"nav\">\n                        <li><a href=\"/\">Home</a></li>\n                        <li><a href=\"/browse/page/1\">Browse</a></li>\n                    </ul>\n                </div>\n            </div>\n        </div>\n    </div>\n    <div class=\"container\">\n        {% include \"graphic/logo.html\" %}\n        {% block content %}{% endblock %}\n\n        <footer class=\"footer\">\n            <p class=\"pull-right\"><a href=\"#\">Back to top</a></p>\n            <p>&copy;2010-2015 <a href=\"http://www.cuckoosandbox.org\">Cuckoo Sandbox</a></p>\n        </footer>\n    </div>\n<script>\n{% include \"js/bootstrap.min.js\" %}\n{% include \"js/functions.js\" %}\n</script>\n</body>\n</html>"
  },
  {
    "path": "data/html/browse.html",
    "content": "{% extends \"base-web.html\" %}\n{% block content %}\n    <div class=\"tasks\">\n        <div class=\"page-header\">\n            <div class=\"row-fluid\">\n                <div class=\"span8\">\n                    <h3>Analysis Tasks <small>performed, processing and pending analyses</small></h3>\n                </div>\n                {% include \"pagination-rpp.html\" %}\n            </div>\n        </div>\n        {% if rows %}\n            {% include \"pagination-menu.html\" %}\n            <table class=\"table table-striped table-bordered\">\n                <thead>\n                    <tr>\n                        <th>ID</th>\n                        <th>Category</th>\n                        <th style=\"width: 40%;\">Target</th>\n                        <th>MD5</th>\n                        <th>Added</th>\n                        <th>Status</th>\n                    </tr>\n                </thead>\n                <tbody>\n                {% for row in rows %}\n                    <tr>\n                        <td>{{row.id}}</td>\n                        <td>{{row.category|upper}}</td>\n                        <td>\n                            {% if row.processed %}\n                                <a href=\"/view/{{row.id}}\">\n                            {% endif %}\n                            <span class=\"mono\">\n                                {% if row.category == \"file\" %}\n                                    {{os.path.basename(row.target)}}\n                                {% elif row.category == \"url\" %}\n                                    {{row.target}}\n                                {% endif %}\n                            </span>\n                            {% if row.processed %}\n                                </a>\n                            {% endif %}\n                        </td>\n                        <td>\n                        {% if row.category == \"file\" %}\n                            {{row.md5}}\n                        {% endif %}\n                        </td>\n                        <td>{{row.added_on}}</td>\n                        <td>{{row.status}}</td>\n                    </tr>\n                {% endfor %}\n                </tbody>\n            </table>\n            {% include \"pagination-menu.html\" %}\n        {% else %}\n            <div class=\"alert alert-info\">\n                <b>Analysis not found!</b> Your database is empty. Run an analysis.\n            </div>\n        {% endif %}\n    </div>\n{% endblock %}\n"
  },
  {
    "path": "data/html/error.html",
    "content": "{% extends \"base-web.html\" %}\n{% block content %}\n    <div class=\"page-header\">\n        <h3>Ouch! KaBoom!</h3>\n    </div>\n    <div class=\"fileupload\">\n        <div class=\"alert alert-error\" style=\"text-align: center;font-size: 16px;\">\n            <strong>Error</strong>: {{error}}\n        </div>\n    </div>\n{% endblock %}"
  },
  {
    "path": "data/html/graphic/logo.html",
    "content": "<img src=\"data:image/png;base64,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\n\" border=\"0\" />"
  },
  {
    "path": "data/html/js/functions.js",
    "content": "function showHide(id, lbl) {\n    var e = document.getElementById(id);\n\n    if (lbl !== \"undefined\")\n        var l = document.getElementById(lbl);\n\n    if(e.style.display == \"none\") {\n        e.style.display = \"block\";\n        if (l) {\n            l.innerHTML = \"Collapse\";\n        }\n    }\n    else {\n        e.style.display = \"none\";\n        if (l)\n            l.innerHTML = \"Expand\";\n    }\n}\n"
  },
  {
    "path": "data/html/pagination-menu.html",
    "content": "        <div class=\"row-fluid\">\n            <div class=\"span4\" style=\"text-align: left;\">\n                <div class=\"pagination\" style=\"vertical-align: middle;\">\n                    Results {{ pagination.start }}-{{ pagination.end }} of {{ pagination.tot_results }}\n                </div>\n            </div>\n            <div class=\"span4\" style=\"text-align: center;\">\n                <div class=\"pagination\" style=\"vertical-align: middle;\">\n                    Page {{ pagination.page_id }} of {{ pagination.tot_pages }}\n                </div>\n            </div>\n            <div class=\"span4\" style=\"text-align: right;\">\n                <div class=\"pagination\">\n                    <ul>\n                        {% if pagination.page_id > 1 %}\n                            <li><a href=\"/browse/page/1\">&lt;&lt;</a></li>\n                            <li><a href=\"/browse/page/{{ pagination.page_id - 1 }}\">&lt;</a></li>\n                        {% endif %}\n                        {% if pagination.page_id > 5 %}\n                            <li><a href=\"/browse/page/{{ pagination.page_id - 5 }}\">{{ pagination.page_id - 5 }}</a></li>\n                        {% endif %}\n                        {% if pagination.page_id > 4 %}\n                            <li><a href=\"/browse/page/{{ pagination.page_id - 4 }}\">{{ pagination.page_id - 4 }}</a></li>\n                        {% endif %}\n                        {% if pagination.page_id > 3 %}\n                            <li><a href=\"/browse/page/{{ pagination.page_id - 3 }}\">{{ pagination.page_id - 3 }}</a></li>\n                        {% endif %}\n                        {% if pagination.page_id > 2 %}\n                            <li><a href=\"/browse/page/{{ pagination.page_id - 2 }}\">{{ pagination.page_id - 2 }}</a></li>\n                        {% endif %}\n                        {% if pagination.page_id > 1 %}\n                            <li><a href=\"/browse/page/{{ pagination.page_id - 1 }}\">{{ pagination.page_id - 1 }}</a></li>\n                        {% endif %}\n                            <li class=\"active disabled\"><a><b>{{ pagination.page_id }}</b></a></li>\n                        {% if pagination.tot_pages - pagination.page_id > 0 %}\n                            <li><a href=\"/browse/page/{{ pagination.page_id + 1 }}\">{{ pagination.page_id + 1 }}</a></li>\n                        {% endif %}\n                        {% if pagination.tot_pages - pagination.page_id > 1 %}\n                            <li><a href=\"/browse/page/{{ pagination.page_id + 2 }}\">{{ pagination.page_id + 2 }}</a></li>\n                        {% endif %}\n                        {% if pagination.tot_pages - pagination.page_id > 2 %}\n                            <li><a href=\"/browse/page/{{ pagination.page_id + 3 }}\">{{ pagination.page_id + 3 }}</a></li>\n                        {% endif %}\n                        {% if pagination.tot_pages - pagination.page_id > 3 %}\n                            <li><a href=\"/browse/page/{{ pagination.page_id + 4 }}\">{{ pagination.page_id + 4 }}</a></li>\n                        {% endif %}\n                        {% if pagination.tot_pages - pagination.page_id > 4 %}\n                            <li><a href=\"/browse/page/{{ pagination.page_id + 5 }}\">{{ pagination.page_id + 5 }}</a></li>\n                        {% endif %}\n                        {% if pagination.page_id < pagination.tot_pages %}\n                            <li><a href=\"/browse/page/{{ pagination.page_id + 1 }}\">&gt;</a></li>\n                            <li><a href=\"/browse/page/{{ pagination.tot_pages }}\">&gt;&gt;</a></li>\n                        {% endif %}\n                    </ul>\n                </div>\n            </div>\n        </div>"
  },
  {
    "path": "data/html/pagination-rpp.html",
    "content": "        <script language=\"text/javascript\">\n            \n        </script>\n        <div class=\"span4\" style=\"text-align: right;\">\n            <div class=\"pagination\">\n                <form>\n                    Results per page:&nbsp;&nbsp;\n                    <select name=\"rpp\" class=\"input-mini\" onchange=\"function goto(form){window.location.assign('/browse/page/{{pagination.page_id}}/' + form.rpp.options[form.rpp.selectedIndex].value); };goto(this.form);\">\n                        <option value=\"25\" {% if pagination.limit == 25 %}selected=\"selected\"{% endif %}>25</option>\n                        <option value=\"50\" {% if pagination.limit == 50 %}selected=\"selected\"{% endif %}>50</option>\n                        <option value=\"100\" {% if pagination.limit == 100 %}selected=\"selected\"{% endif %}>100</option>\n                        <option value=\"200\" {% if pagination.limit == 200 %}selected=\"selected\"{% endif %}>200</option>\n                    </select>\n                </form>\n            </div>\n        </div>\n"
  },
  {
    "path": "data/html/report.html",
    "content": "{% extends \"base-report.html\" %}\n{% block content %}\n    {% include \"sections/info.html\" %}\n    {% include \"sections/errors.html\" %}\n    {% if results.info.category == \"file\" %}\n        {% include \"sections/file.html\" %}\n    {% elif results.info.category == \"url\" %}\n        {% include \"sections/url.html\" %}\n    {% endif %}\n    {% include \"sections/signatures.html\" %}\n    {% include \"sections/screenshots.html\" %}\n    {% if results.info.category == \"file\" %}\n        {% include \"sections/static.html\" %}\n    {% endif %}\n    {% include \"sections/dropped.html\" %}\n    {% include \"sections/network.html\" %}\n    {% include \"sections/behavior.html\" %}\n    {% include \"sections/volatility.html\" %} \n{% endblock %}"
  },
  {
    "path": "data/html/sections/behavior.html",
    "content": "<section id=\"behavior\">\n    {% if results.behavior and results.behavior.anomaly %}\n        <div class=\"section-title\">\n            <h4>Anomalies</h4>\n        </div>\n        <div class=\"well well-small\">\n            <ul>\n                {% for anomaly in results.behavior.anomaly %}\n                <li><span class=\"mono\">\n                    <b>{{anomaly.category}} {{anomaly.funcname}}</b>\n                    {{anomaly.message}}\n                    (pid={{anomaly.pid}}, process={{anomaly.name}})\n                </span></li>\n                {% endfor %}\n            </ul>\n        </div>\n    {% endif %}\n    {% if processed %}\n        <div class=\"section-title\">\n            <h4>Behavior Summary</h4>\n        </div>\n            {% for orig, cat, subcat in mapping if processed[cat][subcat] %}\n            <div class=\"well well-small\">\n                <b>{{cat}}-{{subcat}}</b>\n                {% if processed[cat][subcat] %}\n                    <ul>\n                        {% for anitem in processed[cat][subcat] %}\n                        <li><span class=\"mono\">{{anitem}}</span></li>\n                        {% endfor %}\n                    </ul>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n            {% endfor %}\n    {% endif %}\n\n    <div class=\"section-title\">\n        <h4>Processes</h4>\n    </div>\n    <p>\n        <span class=\"badge registry\" style=\"color: black;\">registry</span>\n        <span class=\"badge filesystem\" style=\"color: black;\">filesystem</span>\n        <span class=\"badge process\" style=\"color: black;\">process</span>\n        <span class=\"badge services\" style=\"color: black;\">services</span>\n        <span class=\"badge network\" style=\"color: black;\">network</span>\n        <span class=\"badge synchronization\" style=\"color: black;\">synchronization</span>\n    </p>\n    {% if results.behavior and results.behavior.processes %}\n        {% for process in results.behavior.processes %}\n        <div>\n            <h4><a href=\"javascript:showHide('process_{{process.pid}}');\">{{process.process_name}}</a> <small>PID: {{process.pid}}, Parent PID: {{process.ppid}}</small></h4>\n            <div id=\"process_{{process.pid}}\" style=\"display: none;\">\n                <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                    <tr>\n                        <th width=\"10%\">Timestamp</th>\n                        <th width=\"5%\">Thread</th>\n                        <th width=\"15%\">Function</th>\n                        <th width=\"50%\">Arguments</th>\n                        <th width=\"5%\">Status</th>\n                        <th width=\"10%\">Return</th>\n                        <th width=\"5%\">Repeated</th>\n                    </tr>\n                    {% for call in process.calls %}\n                    <tr class=\"{{call.category}}\">\n                        <td>{{call.time}}</td>\n                        <td>{{call.thread_id}}</td>\n                        <td><span class=\"mono\">{{call.api}}</span></td>\n                        <td style=\"word-wrap: break-word\">\n                        {% for key, value in call.arguments.items() %}\n                            {{key}} => <span class=\"mono\">{{value}}</span><br />\n                        {% endfor %}\n                        </td>\n                        <td>{% if call.status %}SUCCESS{% else %}FAILURE{% endif %}</td>\n                        <td>{{call.return}}</td>\n                        <td>\n                        {% if call.repeated and call.repeated > 0 %}\n                            {{call.repeated}}\n                            {% if call.repeated == 1 %}\n                             time\n                            {% elif call.repeated > 1 %}\n                             times\n                            {% endif %}\n                        {% endif %}\n                        </td>\n                    </tr>\n                    {% endfor %}\n                </table>\n            </div>\n        </div>\n        {% endfor %}\n    {% elif results.behavior2 and results.behavior2.processes %}  <!-- Behavior2 code -->\n        {% for process in results.behavior2.processes %}\n            <div>\n            <h4><a href=\"javascript:showHide('process_{{process.pid}}');\">{{process.process_path}}</a> <small>PID: {{process.pid}}, Parent PID: {{process.ppid}}</small></h4>\n            <div id=\"process_{{process.pid}}\" style=\"display: none;\">\n                <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                    <tr>\n                        <th>Thread</th>\n                        <th>Timestamp</th>\n                        <th>Function</th>\n                        <th>Arguments</th>\n                        <th>Status</th>\n                        <th>Return</th>\n                        <th>Repeated</th>\n                    </tr>\n\n                    {% for thread in process.threads %}\n                        {% for call in thread.calls %}\n                        <tr class=\"{{call.category}}\">\n                            <td><a name=\"{{process.pid}}_{{thread.tid}}_{{loop.index}}\">{{thread.tid}}</td>\n                            <td>{{call.time}}</td>\n                            <td><span class=\"mono\">{{call.api}}</span></td>\n                            <td style=\"word-wrap: break-word\">\n                            {% for argname in call.arguments %}\n                                {{ argname }} =&gt; <span class=\"mono\">{{ call.arguments[argname] }}</span><br />\n                            {% endfor %}\n                            </td>\n                            <td>{% if call.status %}SUCCESS{% else %}FAILURE{% endif %}</td>\n                            <td>{{call.return_value}}</td>\n                            <td>\n                            {% if call.repeated and call.repeated > 0 %}\n                                {{call.repeated}}\n                                {% if call.repeated == 1 %}\n                                 time\n                                {% elif call.repeated > 1 %}\n                                 times\n                                {% endif %}\n                            {% endif %}\n                            </td>\n                        </tr>\n                        {% endfor %}\n                    {% endfor %}\n                </table>\n\n            </div>\n        </div>\n        {% endfor %}\n    {% else %}  <!-- End behavior2 -->\n        Nothing to display.\n    {% endif %}\n</section>\n"
  },
  {
    "path": "data/html/sections/dropped.html",
    "content": "<section id=\"dropped\">\n    <div class=\"section-title\">\n        <h4>Dropped Files</h4>\n    </div>\n    {% if results.dropped %}\n        {% set counter = 1 %}\n        {% for dropped_file in results.dropped %}\n            <div>\n                <h4><a href=\"javascript:showHide('dropped_{{counter}}');\">{{dropped_file.name}}</a></h4>\n                <div id=\"dropped_{{counter}}\" style=\"display: none;\">\n                    <table class=\"table table-striped table-bordered\">\n                        <colgroup>\n                            <col width=\"150\" />\n                            <col width=\"*\" />\n                        </colgroup>\n                        <tr>\n                            <th>File name</th>\n                            <td><span class=\"mono\">{{dropped_file.name}}</span></td>\n                        </tr>\n                        <tr>\n                            <th>File size</th>\n                            <td><span class=\"mono\">{{dropped_file.size}} bytes</span></td>\n                        </tr>\n                        <tr>\n                            <th>File type</th>\n                            <td><span class=\"mono\">{{dropped_file.type}}</span></td>\n                        </tr>\n                        <tr>\n                            <th>MD5</th>\n                            <td><span class=\"mono\">{{dropped_file.md5}}</span></td>\n                        </tr>\n                        <tr>\n                            <th>SHA1</th>\n                            <td><span class=\"mono\">{{dropped_file.sha1}}</span></td>\n                        </tr>\n                        <tr>\n                            <th>SHA256</th>\n                            <td><span class=\"mono\">{{dropped_file.sha256}}</span></td>\n                        </tr>\n                        <tr>\n                            <th>SHA512</th>\n                            <td><span class=\"mono\">{{dropped_file.sha512}}</span></td>\n                        </tr>\n                        <tr>\n                            <th>Ssdeep</th>\n                            <td><span class=\"mono\">{{dropped_file.ssdeep}}</span></td>\n                        </tr>\n                        <tr>\n                            <th>Yara</th>\n                            <td>\n                                {% if dropped_file.yara|length == 0 %}\n                                    None matched\n                                {% else %}\n                                    <ul style=\"margin-top: 0;margin-bottom: 0;\">\n                                        {% for sign in dropped_file.yara %}\n                                        <li>{{sign.name}} ({{sign.meta.description}})</li>\n                                        {% endfor %}\n                                    </ul>\n                                {% endif %}\n                            </td>\n                        </tr>\n                        <tr>\n                            <th>VirusTotal</th>\n                            <td><span class=\"mono\"><a href=\"https://www.virustotal.com/en/file/{{dropped_file.sha256}}/analysis/\">Search for Analysis</a></span></td>\n                        </tr>\n                    </table>\n                </div>\n            </div>\n            {% set counter = counter + 1 %}\n        {% endfor %}\n    {% else %}\n        Nothing to display.\n    {% endif %}\n</section>\n"
  },
  {
    "path": "data/html/sections/errors.html",
    "content": "{% if results.debug.errors %}\n<div class=\"section-title\">\n    <h4>Errors</h4>\n</div>\n<section id=\"errors\">\n    <ul>\n    {% for error in results.debug.errors %}\n        <li class=\"text-error\"><b>{{error}}</b></li>\n    {% endfor %}\n    </ul>\n</section>\n{% endif %}"
  },
  {
    "path": "data/html/sections/file.html",
    "content": "<section id=\"file\">\n    <div class=\"section-title\">\n        <h4>File Details</h4>\n    </div>\n    <table class=\"table table-striped table-bordered\">\n        <colgroup>\n            <col width=\"150\" />\n            <col width=\"*\" />\n        </colgroup>\n        {% if results.target %}\n            <tr>\n                <th>File name</th>\n                <td><span class=\"mono\">{{results.target.file.name}}</span></td>\n            </tr>\n            <tr>\n                <th>File size</th>\n                <td><span class=\"mono\">{{results.target.file.size}} bytes</span></td>\n            </tr>\n            <tr>\n                <th>File type</th>\n                <td><span class=\"mono\">{{results.target.file.type}}</span></td>\n            </tr>\n            <tr>\n                <th>CRC32</th>\n                <td><span class=\"mono\">{{results.target.file.crc32}}</span></td>\n            </tr>\n            <tr>\n                <th>MD5</th>\n                <td><span class=\"mono\">{{results.target.file.md5}}</span></td>\n            </tr>\n            <tr>\n                <th>SHA1</th>\n                <td><span class=\"mono\">{{results.target.file.sha1}}</span></td>\n            </tr>\n            <tr>\n                <th>SHA256</th>\n                <td><span class=\"mono\">{{results.target.file.sha256}}</span></td>\n            </tr>\n            <tr>\n                <th>SHA512</th>\n                <td><span class=\"mono\">{{results.target.file.sha512}}</span></td>\n            </tr>\n            <tr>\n                <th>Ssdeep</th>\n                <td><span class=\"mono\">{{results.target.file.ssdeep}}</span></td>\n            </tr>\n            <tr>\n                <th>PEiD</th>\n                <td>\n                    {% if results.static and results.static.peid_signatures %}\n                        {% if results.static.peid_signatures|length == 0 %}\n                            None matched\n                        {% else %}\n                            <ul style=\"margin-top: 0;margin-bottom: 0;\">\n                            {% for sign in results.static.peid_signatures %}\n                                <li>{{sign}}</li>\n                            {% endfor %}\n                            </ul>\n                        {% endif %}\n                    {% else %}\n                        None matched\n                    {% endif %}\n                </td>\n            </tr>\n            <tr>\n                <th>Yara</th>\n                <td>\n                    {% if results.target.file.yara|length == 0 %}\n                        None matched\n                    {% else %}\n                        <ul style=\"margin-top: 0;margin-bottom: 0;\">\n                            {% for sign in results.target.file.yara %}\n                            <li>{{sign.name}} ({{sign.meta.description}})</li>\n                            {% endfor %}\n                        </ul>\n                    {% endif %}\n                </td>\n            </tr>\n        {% endif %}\n        <tr>\n            <th>VirusTotal</th>\n            <td>\n                {% if results.virustotal %}\n                    {% if results.virustotal.response_code == 1 %}\n                        <a href={{results.virustotal.permalink}}>Permalink</a><br>\n                        VirusTotal Scan Date: {{results.virustotal.scan_date}}<br>\n                        Detection Rate: {{results.virustotal.positives}}/{{results.virustotal.total}} (<a id=\"virustotal_lbl\" href=\"javascript:showHide('virustotal', 'virustotal_lbl');\">Expand</a>)\n                        <div id=\"virustotal\" style=\"display: none;margin-top: 5px;\">\n                            <table class=\"table table-bordered table-condensed\">\n                                <tr>\n                                    <th>Antivirus</th>\n                                    <th>Version</th>\n                                    <th>Result</th>\n                                </tr>\n                                {% for key in results.virustotal.scans|sort %}\n                                <tr>\n                                    <td>{{key}}</td>\n                                    <td>{{results[\"virustotal\"][\"scans\"][key][\"version\"]}}</td>\n                                    {% if results[\"virustotal\"][\"scans\"][key][\"result\"] == None %}\n                                        <td><span class=\"muted\">Clean</span></td>\n                                    {% else %}\n                                        <td><span class=\"text-error\">{{results[\"virustotal\"][\"scans\"][key][\"result\"]}}</span></td>\n                                    {% endif %}\n                                </tr>\n                                {% endfor %}\n                            </table>\n                        </div>\n                    {% else %}\n                        File not found on VirusTotal\n                    {% endif %}\n                {% else %}\n                    VirusTotal lookup disabled, add your API key to the module\n                {% endif %}\n            </td>\n        </tr>\n    </table>\n</section>\n"
  },
  {
    "path": "data/html/sections/info.html",
    "content": "<section id=\"info\">\n    <table class=\"table table-striped table-bordered\">\n        <thead>\n            <tr>\n                <th>Category</th>\n                <th>Started On</th>\n                <th>Completed On</th>\n                <th>Duration</th>\n                <th>Cuckoo Version</th>\n            </tr>\n        </thead>\n        <tbody>\n            <tr>\n                <td>{{results.info.category|upper}}</td>\n                <td>{{results.info.started}}</td>\n                <td>{{results.info.ended}}</td>\n                <td>{{results.info.duration}} seconds</td>\n                <td>{{results.info.version}}</td>\n            </tr>\n        </tbody>\n    </table>\n</section>\n\n{% if results.info.machine and results.info.machine.name %}\n    <section id=\"machine\">\n        <table class=\"table table-striped table-bordered\">\n            <thead>\n                <tr>\n                    <th>Machine</th>\n                    <th>Label</th>\n                    <th>Manager</th>\n                    <th>Started On</th>\n                    <th>Shutdown On</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr>\n                    <td>{{results.info.machine.name}}</td>\n                    <td>{{results.info.machine.label}}</td>\n                    <td>{{results.info.machine.manager}}</td>\n                    <td>{{results.info.machine.started_on}}</td>\n                    <td>{{results.info.machine.shutdown_on}}</td>\n                </tr>\n            </tbody>\n        </table>\n    </section>\n{% endif %}"
  },
  {
    "path": "data/html/sections/network.html",
    "content": "<section id=\"network\">\n    <div class=\"section-title\">\n        <h4>Network Analysis</h4>\n    </div>\n    {% if results.network %}\n        {% if results.network.hosts %}\n            <div>\n                <h4><a href=\"javascript:showHide('hosts');\">Hosts Involved</a></h4>\n                <div id=\"hosts\" style=\"display: none;\">\n                    <table class=\"table table-striped table-bordered\">\n                        <tr>\n                            <th>IP Address</th>\n                        </tr>\n                        {% for host in results.network.hosts %}\n                        <tr>\n                            <td><span class=\"mono\">{{host}}</span></td>\n                        </tr>\n                        {% endfor %}\n                    </table>\n                </div>\n            </div>\n        {% endif %}\n\n        {% if results.network.domains %}\n        <div>\n            <h4><a href=\"javascript:showHide('dns');\">DNS Requests</a></h4>\n            <div id=\"dns\" style=\"display: none;\">\n                <table class=\"table table-striped table-bordered\">\n                    <tr>\n                        <th>Domain</th>\n                        <th>IP Address</th>\n                    </tr>\n                    {% for dns in results.network.domains %}\n                    <tr>\n                        <td><span class=\"mono\">{{dns.domain}}</span></td>\n                        <td><span class=\"mono\">{{dns.ip}}</span></td>\n                    </tr>\n                    {% endfor %}\n                </table>\n            </div>\n        </div>\n        {% endif %}\n\n        {% if results.network.http %}\n        <div>\n            <h4><a href=\"javascript:showHide('http');\">HTTP Requests</a></h4>\n            <div id=\"http\" style=\"display: none;\">\n                <table class=\"table table-striped table-bordered\">\n                    <tr>\n                        <th>URL</th>\n                        <th>Data</th>\n                    </tr>\n                    {% for http in results.network.http %}\n                    <tr>\n                        <td><span class=\"mono\">{{http.uri}}</span></td>\n                        <td><span class=\"mono\"><pre>{{http.data}}</pre></span></td>\n                    </tr>\n                    {% endfor %}\n                </table>\n            </div>\n        </div>\n        {% endif %}\n\n        {% if results.network.irc %}\n        <div>\n            <h4><a href=\"javascript:showHide('irc');\">IRC Requests</a></h4>\n            <div id=\"irc\" style=\"display: none;\">\n                <table class=\"table table-striped table-bordered\">\n                    <tr>\n                        <th>Command</th>\n                        <th>Params</th>\n                        <th>Type</th>\n                    </tr>\n                    {% for irc in results.network.irc %}\n                    <tr>\n                        <td><span class=\"mono\">{{irc.command}}</span></td>\n                        <td><span class=\"mono\"><pre>{{irc.params}}</pre></span></td>\n                        <td><span class=\"mono\"><pre>{{irc.type}}</pre></span></td>\n                    </tr>\n                    {% endfor %}\n                </table>\n            </div>\n        </div>\n        {% endif %}\n\n        {% if results.network.icmp %}\n        <div>\n            <h4><a href=\"javascript:showHide('icmp');\">ICMP requests</a></h4>\n            <div id=\"icmp\" style=\"display: none;\">\n                <table class=\"table table-striped table-bordered\">\n                    <tr>\n                       <th>Source</th>\n                       <th>Destination</th>\n                       <th>ICMP Type</th>\n                       <th>Data</th>\n                    </tr>\n                    {% for icmp in results.network.icmp %}\n                    <tr>\n                       <td><span class=\"mono\">{{icmp.src}}</span></td>\n                       <td><span class=\"mono\">{{icmp.dst}}</span></td>\n                       <td><span class=\"mono\">{{icmp.type}}</span></td>\n                       <td><span class=\"mono\"><pre>{{icmp.data}}</pre></span></td>\n                    </tr>\n                    {% endfor %}\n                </table>\n            </div>\n         </div>\n        {% endif %}\n\n        {% if not results.network.hosts and not results.network.domains and not results.network.http and not results.network.irc and not results.network.icmp %}\n            Nothing to display.\n        {% endif %}\n    {% else %}\n        Nothing to display.\n    {% endif %}\n</section>\n"
  },
  {
    "path": "data/html/sections/screenshots.html",
    "content": "<section id=\"screenshots\">\n    <div class=\"section-title\">\n        <h4>Screenshots</h4>\n    </div>\n    {% if results.screenshots %}\n        {% for shot in results.screenshots %}\n            <a href=\"data:image/png;base64,{{shot.data}}\"><img class=\"fade\" src=\"data:image/png;base64,{{shot.data}}\" height=\"100px\" width=\"150px\" /></a>\n        {% endfor %}\n    {% else %}\n        No screenshots available.\n    {% endif %}\n</section>\n"
  },
  {
    "path": "data/html/sections/signatures.html",
    "content": "<section id=\"signatures\">\n    <div class=\"section-title\">\n        <h4>Signatures</h4>\n    </div>\n    {% if results.signatures %}\n        {% for sign in results.signatures %}\n        <div>\n            {% if sign.severity == 1 %}\n                <div class=\"alert alert-success signature\">\n            {% elif sign.severity == 2 %}\n                <div class=\"alert alert-warning signature\">\n            {% elif sign.severity >= 3 %}\n                <div class=\"alert alert-error signature\">\n            {% else %}\n                <div class=\"alert alert-info signature\">\n            {% endif %}\n            <b>{{sign.name}}<a href=\"javascript:showHide('signature_{{sign.name}}');\">  details</a></b>\n            <div id=\"signature_{{sign.name}}\" style=\"display: none;\">\n            {{sign.description}}\n            {% if sign.marker and sign.marker.start %}\n                <a href=\"#{{sign.marker.start.pid}}_{{sign.marker.start.tid}}_{{sign.marker.start.cid}}\">jump</a>\n\n            {% endif %}\n            </div>\n            </div>\n        </div>\n        {% endfor %}\n    {% else %}\n        No signatures matched\n    {% endif %}\n</section>\n"
  },
  {
    "path": "data/html/sections/static.html",
    "content": "<section id=\"static\">\n    <div class=\"section-title\">\n        <h4>Static Analysis</h4>\n    </div>\n    {% if results.static %}\n        {% if results.static.pe_versioninfo %}\n            <div>\n                <h4><a href=\"javascript:showHide('pe_versioninfo');\">Version Infos</a></h4>\n                <div id=\"pe_versioninfo\" style=\"display: none;\">\n                    <table class=\"table table-striped table-bordered\">\n                        <colgroup>\n                            <col width=\"150\" />\n                            <col width=\"*\" />\n                        </colgroup>\n                        {% for info in results.static.pe_versioninfo %}\n                            <tr>\n                                <td><strong>{{info.name}}</strong>:</td>\n                                <td><span class=\"mono\">{{info.value}}</span></td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                </div>\n            </div>\n        {% endif %}\n\n        {% if results.static.pe_sections %}\n            <div>\n                <h4><a href=\"javascript:showHide('pe_sections');\">Sections</a></h4>\n                <div id=\"pe_sections\" style=\"display: none;\">\n                    <table class=\"table table-striped table-bordered\">\n                        <tr>\n                            <th>Name</th>\n                            <th>Virtual Address</th>\n                            <th>Virtual Size</th>\n                            <th>Size of Raw Data</th>\n                            <th>Entropy</th>\n                        </tr>\n                        {% for section in results.static.pe_sections %}\n                            <tr>\n                                <td>{{section.name}}</td>\n                                <td>{{section.virtual_address}}</td>\n                                <td>{{section.virtual_size}}</td>\n                                <td>{{section.size_of_data}}</td>\n                                <td>{{section.entropy}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                </div>\n            </div>\n        {% endif %}\n\n        {% if results.static.pe_resources %}\n            <div>\n                <h4><a href=\"javascript:showHide('pe_resources');\">Resources</a></h4>\n                <div id=\"pe_resources\" style=\"display: none;\">\n                    <table class=\"table table-striped table-bordered\">\n                        <tr>\n                            <th>Name</th>\n                            <th>Offset</th>\n                            <th>Size</th>\n                            <th>Language</th>\n                            <th>Sub-language</th>\n                            <th>File type</th>\n                        </tr>\n                        {% for section in results.static.pe_resources %}\n                            <tr>\n                                <td>{{section.name}}</td>\n                                <td>{{section.offset}}</td>\n                                <td>{{section.size}}</td>\n                                <td>{{section.language}}</td>\n                                <td>{{section.sublanguage}}</td>\n                                <td>{{section.filetype}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                </div>\n            </div>\n        {% endif %}\n\n        {% if results.static.pe_imports %}\n            <div>\n                <h4><a href=\"javascript:showHide('pe_imports');\">Imports</a></h4>\n                <div id=\"pe_imports\" style=\"display: none;\">\n                    {% for library in results.static.pe_imports %}\n                        <div class=\"well\">\n                            <div><strong>Library {{library.dll}}</strong>:</div>\n                            {% for function in library.imports %}\n                                <div>&bull; <span class=\"mono\">{{function.address}}</span> - {{function.name}}</div>\n                            {% endfor %}\n                        </div>\n                    {% endfor %}\n                </div>\n            </div>\n        {% endif %}\n\n        {% if results.static.pe_exports %}\n            <div>\n                <h4><a href=\"javascript:showHide('pe_exports');\">Exports</a></h4>\n                <div id=\"pe_exports\" style=\"display: none;\">\n                    <table class=\"table table-striped table-bordered\">\n                        <tr>\n                            <th>Ordinal</th>\n                            <th>Address</th>\n                            <th>Name</th>\n                        </tr>\n                        {% for export in results.static.pe_exports %}\n                            <tr>\n                                <td>{{export.ordinal}}</td>\n                                <td>{{export.address}}</td>\n                                <td>{{export.name}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                </div>\n            </div>\n        {% endif %}\n\n        {% if results.strings %}\n            <div>\n                <h4><a href=\"javascript:showHide('strings');\">Strings</a></h4>\n                <div id=\"strings\" style=\"display: none;\">\n                    {% for str in results.strings %}\n                        <div><span class=\"mono\">{{str}}</span></div>\n                    {% endfor %}\n                </div> \n            </div>\n        {% endif %}\n\n\n    {% else %}\n        Nothing to display.\n    {% endif %}\n</section>\n"
  },
  {
    "path": "data/html/sections/url.html",
    "content": "<section id=\"url\">\n    <div class=\"section-title\">\n        <h4>URL Details</h4>\n    </div>\n    <table class=\"table table-striped table-bordered\">\n        <colgroup>\n            <col width=\"150\" />\n            <col width=\"*\" />\n        </colgroup>\n        <tr>\n            <th>URL</th>\n            <td><span class=\"mono\">{{results.target.url}}</span></td>\n        </tr>\n        <tr>\n            <th>VirusTotal</th>\n            <td>\n                {% if results.virustotal %}\n                    {% if results.virustotal.response_code == 1 %}\n                        <a href={{results.virustotal.permalink}}>Permalink</a><br>\n                        VirusTotal Scan Date: {{results.virustotal.scan_date}}<br>\n                        Detection Rate: {{results.virustotal.positives}}/{{results.virustotal.total}} (<a id=\"virustotal_lbl\" href=\"javascript:showHide('virustotal', 'virustotal_lbl');\">Expand</a>)\n                        <div id=\"virustotal\" style=\"display: none;margin-top: 5px;\">\n                            <table class=\"table table-bordered table-condensed\">\n                                <tr>\n                                    <th>Antivirus</th>\n                                    <th>Result</th>\n                                </tr>\n                                {% for key in results.virustotal.scans|sort %}\n                                <tr>\n                                    <td>{{key}}</td>\n                                    {% if results[\"virustotal\"][\"scans\"][key][\"detected\"] %}\n                                        <td><span class=\"text-error\">\n                                    {% else %}\n                                        <td><span class=\"muted\">\n                                    {% endif %}\n                                    {{ results[\"virustotal\"][\"scans\"][key][\"result\"]|title }}</span></td>\n                                </tr>\n                                {% endfor %}\n                            </table>\n                        </div>\n                    {% else %}\n                        Domain not found on VirusTotal\n                    {% endif %}\n                {% else %}\n                    VirusTotal lookup disabled, add your API key to the module\n                {% endif %}\n            </td>\n        </tr>\n    </table>\n</section>\n"
  },
  {
    "path": "data/html/sections/volatility.html",
    "content": "<section id=\"volatility\">\n    <div class=\"section-title\">\n        <h4>Volatility</h4>\n    </div>\n\n    {% if results.memory %}        \n\n        <!-- Mutantscan -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_mutantscan');\"><b>Mutantscan</b></a>\n            <small>\n                Scanning the whole system for Mutexes\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReference23#mutantscan\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_mutantscan\" style=\"display: none;\">\n                {% if results.memory.mutantscan and results.memory.mutantscan.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.mutantscan %}\n                    <ul>\n                        {% for mutex in results.memory.mutantscan.data %}\n                            {% if mutex.mutant_name != \"\" %}\n                                <li><span class=\"mono\">{{mutex.mutant_name}}</span></li>\n                            {% endif %}\n                        {% endfor %}\n                    </ul>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- Malfind -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_malfind');\"><b>Malfind</b></a>\n            <small>\n                Scanning for injections\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReferenceMal23#malfind\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_malfind\" style=\"display: none;\">\n                {% if results.memory.malfind and results.memory.malfind.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.malfind %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>PID</th>\n                            <th>Process name</th>\n                            <th>VAD start</th>\n                            <th>VAD tag</th>\n                        </tr>\n                        {% for mal in results.memory.malfind.data %}\n                            <tr>\n                                <td>{{mal.process_id}}</td>\n                                <td>{{mal.process_name}}</td>\n                                <td>{{mal.vad_start}}</td>\n                                <td>{{mal.vad_tag}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- APIHooks -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_apihooks');\"><b>Apihooks</b></a>\n            <small>\n                Listing API hooks\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReferenceMal23#apihooks\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_apihooks\" style=\"display: none;\">\n                {% if results.memory.apihooks and results.memory.apihooks.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.apihooks %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>PID</th>\n                            <th>Process name</th>\n                            <th>Victim module</th>\n                            <th>Victim function</th>\n                            <th>Hook address</th>\n                            <th>Hooking module</th>\n                            <th>Hook mode</th>\n                            <th>Hook type</th>                                               \n                        </tr>\n                        {% for ah in results.memory.apihooks.data %}\n                            <tr> \n                                <td>{{ah.process_id}}</td>\n                                <td>{{ah.process_name}}</td>\n                                <td>{{ah.victim_module}}</td>\n                                <td>{{ah.victim_function}}</td>\n                                <td>{{ah.hook_address}}</td>\n                                <td>{{ah.hooking_module}}</td>\n                                <td>{{ah.hook_mode}}</td>\n                                <td>{{ah.hook_type}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- Pslist -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_pslist');\"><b>PSList</b></a>\n            <small>\n                Listing processes\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReference23#pslist\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_pslist\" style=\"display: none;\">\n                {% if results.memory.pslist and results.memory.pslist.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.pslist %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>PID</th>\n                            <th>Process name</th>\n                            <th>Parent PID</th>\n                            <th>Session ID</th>\n                            <th>Number of threads</th>\n                            <th>Number of handles</th>\n                            <th>Create time</th>\n                            <th>Exit time</th>\n                        </tr>\n                        {% for p in results.memory.pslist.data %}\n                            <tr> \n                                <td>{{p.pid}}</td>\n                                <td>{{p.process_name}}</td>\n                                <td>{{p.ppid}}</td>\n                                <td>{{p.session_id}}</td>\n                                <td>{{p.num_threads}}</td>\n                                <td>{{p.num_handles}}</td>\n                                <td>{{p.create_time}}</td>\n                                <td>{{p.exit_time}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- Psxview -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_psxview');\"><b>PSXView</b></a>\n            <small>\n                Listing hidden processes\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReferenceMal23#psxview\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_psxview\" style=\"display: none;\">\n                {% if results.memory.psxview and results.memory.psxview.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.psxview %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>PID</th>\n                            <th>Process name</th>\n                            <th>In pslist</th>\n                            <th>In psscan</th>\n                            <th>In thrdproc</th>\n                            <th>In pspcid</th>\n                            <th>In csrss</th>\n                            <th>In session</th>\n                            <th>In deskthrd</th>\n                        </tr>\n\n                        {% for p in results.memory.psxview.data %}\n                            <tr> \n                                <td>{{p.process_id}}</td>\n                                <td>{{p.process_name}}</td>\n                                <td>{{p.pslist}}</td>\n                                <td>{{p.psscan}}</td>\n                                <td>{{p.thrdproc}}</td>\n                                <td>{{p.pspcid}}</td>\n                                <td>{{p.csrss}}</td>\n                                <td>{{p.session}}</td>\n                                <td>{{p.deskthrd}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- DLLlist -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_dlllist');\"><b>DllList</b></a>\n            <small>\n                Listing loaded DLLs\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReference23#dlllist\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_dlllist\" style=\"display: none;\">\n                {% if results.memory.dlllist and results.memory.dlllist.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.dlllist %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>PID</th>\n                            <th>Process name</th>\n                            <th>Commandline</th>\n                            <th>Dll full name</th>\n                            <th>Dll base</th>\n                            <th>Dll size</th>\n                            <th>Load count</th>\n                        </tr>\n                        {% for d in results.memory.dlllist.data %}\n                            {% for m in d.loaded_modules %}\n                                <tr> \n                                    <td>{{d.process_id}}</td>\n                                    <td>{{d.process_name}}</td>\n                                    <td>{{d.commandline}}</td>\n                                    <td>{{m.dll_full_name}}</td>\n                                    <td>{{m.dll_base}}</td>\n                                    <td>{{m.dll_size}}</td>\n                                    <td>{{m.dll_load_count}}</td>\n                                </tr>\n                            {% endfor %}\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- Handles -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_handles');\"><b>Handles</b></a>\n            <small>\n                Listing handles\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReference23#handles\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_handles\" style=\"display: none;\">\n                {% if results.memory.handles and results.memory.handles.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.handles %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>PID</th>\n                            <th>Handle name</th>\n                            <th>Handle type</th>\n                            <th>Handle value</th>\n                            <th>Handle granted access</th>\n                        </tr>\n                        {% for h in results.memory.handles.data %}\n                            <tr> \n                                <td>{{h.process_id}}</td>\n                                <td>{{h.handle_name}}</td>\n                                <td>{{h.handle_type}}</td>\n                                <td>{{h.handle_value}}</td>\n                                <td>{{h.handle_granted_access}}</td>\n                                <td>{{h.dll_size}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- Callbacks -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_callbacks');\"><b>Callbacks</b></a>\n            <small>\n                Listing registered callbacks\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReferenceMal23#callbacks\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_callbacks\" style=\"display: none;\">\n                {% if results.memory.callbacks and results.memory.callbacks.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.callbacks %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>Type</th>\n                            <th>Callback</th>\n                            <th>Module</th>\n                            <th>Detail</th>\n                        </tr>\n                        {% for h in results.memory.callbacks.data %}\n                            <tr>\n                                <td>{{h.type}}</td>\n                                <td>{{h.callback}}</td>\n                                <td>{{h.module}}</td>\n                                <td>{{h.details}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- Messagehooks -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_messagehooks');\"><b>Messagehooks</b></a>\n            <small>\n                Registered Messagehooks\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReferenceGui23#messagehooks\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_messagehooks\" style=\"display: none;\">\n                {% if results.memory.messagehooks and results.memory.messagehooks.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.messagehooks %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>Offset</th>\n                            <th>Session</th>\n                            <th>Desktop</th>\n                            <th>Thread</th>\n                            <th>Filter</th>\n                            <th>Flags</th>\n                            <th>Function</th>\n                            <th>Module</th>\n                        </tr>\n                        {% for h in results.memory.messagehooks.data %}\n                            <tr>\n                                <td>{{h.offset}}</td>\n                                <td>{{h.session}}</td>\n                                <td>{{h.desktop}}</td>\n                                <td>{{h.thread}}</td>\n                                <td>{{h.filter}}</td>\n                                <td>{{h.flags}}</td>\n                                <td>{{h.function}}</td>\n                                <td>{{h.module}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- Getsids -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_getsids');\"><b>Getsids</b></a>\n            <small>\n                Sids\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReference23#getsids\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_getsids\" style=\"display: none;\">\n                {% if results.memory.getsids and results.memory.getsids.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.getsids %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>Process Id</th>\n                            <th>Name</th>\n                            <th>SID String</th>\n                            <th>SID Name</th>\n                        </tr>\n                        {% for h in results.memory.getsids.data %}\n                            <tr>\n                                <td>{{h.process_id}}</td>\n                                <td>{{h.filename}}</td>\n                                <td>{{h.sid_string}}</td>\n                                <td>{{h.sid_name}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- Privs -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_privs');\"><b>Privs</b></a>\n            <small>\n                Privileges\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReference23#privs\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_privs\" style=\"display: none;\">\n                {% if results.memory.privs and results.memory.privs.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.privs %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>Process Id</th>\n                            <th>Name</th>\n                            <th>Value</th>\n                            <th>Privilege</th>\n                            <th>Attributes</th>\n                            <th>Description</th>\n                        </tr>\n                        {% for h in results.memory.privs.data %}\n                            <tr>\n                                <td>{{h.process_id}}</td>\n                                <td>{{h.filename}}</td>\n                                <td>{{h.value}}</td>\n                                <td>{{h.privilege}}</td>\n                                <td>{{h.attributes}}</td>\n                                <td>{{h.description}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- Ldrmodules -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_ldrmodules');\"><b>Ldrmodules</b></a>\n            <small>\n                Listing hidden and loaded DLLs\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReferenceMal23#ldrmodules\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_ldrmodules\" style=\"display: none;\">\n                {% if results.memory.ldrmodules and results.memory.ldrmodules.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.ldrmodules %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>PID</th>\n                            <th>Process name</th>\n                            <th>Dll mapped path</th>\n                            <th>Dll base</th>\n                            <th>In load</th>\n                            <th>In init</th>\n                            <th>In mem</th>\n                            <th>Load full dll name</th>\n                            <th>Init full dll name</th>\n                            <th>Mem full dll name</th>\n                        </tr>\n                        {% for l in results.memory.ldrmodules.data %}\n                            <tr> \n                                <td>{{l.process_id}}</td>\n                                <td>{{l.process_name}}</td>\n                                <td>{{l.dll_mapped_path}}</td>\n                                <td>{{l.dll_base}}</td>\n                                <td>{{l.dll_in_load}}</td>\n                                <td>{{l.dll_in_init}}</td>\n                                <td>{{l.dll_in_mem}}</td>\n                                <td>{{l.load_full_dll_name}}</td>\n                                <td>{{l.init_full_dll_name}}</td>\n                                <td>{{l.mem_full_dll_name}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- Devicetree -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_devicetree');\"><b>Devicetree</b></a>\n            <small>\n                Listing devices and drivers\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReferenceMal23#devicetree\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_devicetree\" style=\"display: none;\">\n                {% if results.memory.devicetree and results.memory.devicetree.config.filter == True %}\n                <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.devicetree %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>Driver offset</th>\n                            <th>Driver name</th>\n                            <th>Device offset</th>\n                            <th>Device name</th>\n                            <th>Device type</th>\n                            <th>Attached Device offset</th>\n                            <th>Attached Device name</th>\n                            <th>Attached device type</th>\n                            <th>Attached device level</th>\n                        </tr>\n                        {% for dr in results.memory.devicetree.data %}\n                            <tr> \n                                <td>{{dr.driver_offset}}</td>\n                                <td>{{dr.driver_name}}</td>\n                                <td></td>\n                                <td></td>\n                                <td></td>\n                                <td></td>\n                                <td></td>\n                                <td></td>\n                                <td></td>\n                            </tr>\n                            {% for de in dr[\"devices\"] %}\n                                <tr> \n                                    <td></td>\n                                    <td></td>\n                                    <td>{{de.device_offset}}</td>\n                                    <td>{{de.device_name}}</td>\n                                    <td>{{de.device_type}}</td>\n                                    <td></td>\n                                    <td></td>\n                                    <td></td>\n                                    <td></td>\n                                </tr>\n                                    {% for at in de[\"devices_attached\"] %}\n                                        <tr> \n                                            <td></td>\n                                            <td></td>\n                                            <td></td>\n                                            <td></td>\n                                            <td></td>\n                                            <td>{{at.attached_device_offset}}</td>\n                                            <td>{{at.attached_device_name}}</td>\n                                            <td>{{at.attached_device_type}}</td>\n                                            <td>{{at.level}}</td>\n                                        </tr>\n                                    {% endfor %}\n                            {% endfor %}\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- Svcscan -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_svcscan');\"><b>Svcscan</b></a>\n            <small>\n                Scanning for services\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReferenceMal23#svcscan\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_svcscan\" style=\"display: none;\">\n                {% if results.memory.svcscan and results.memory.svcscan.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.svcscan %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>PID</th>\n                            <th>Service name</th>\n                            <th>Display name</th>\n                            <th>Binary path</th>\n                            <th>Type</th>\n                            <th>State</th>\n                            <th>Service offset</th>\n                            <th>Service order</th>\n                        </tr>\n                        {% for s in results.memory.svcscan.data %}\n                            <tr> \n                                <td>{{s.process_id}}</td>\n                                <td>{{s.service_name}}</td>\n                                <td>{{s.service_display_name}}</td>\n                                <td>{{s.service_binary_path}}</td>\n                                <td>{{s.service_type}}</td>\n                                <td>{{s.service_state}}</td>\n                                <td>{{s.service_offset}}</td>\n                                <td>{{s.service_order}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- Modscan -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_modscan');\"><b>Modscan</b></a>\n            <small>\n                Scan for (hidden) kernel drivers\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReference23#modscan\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_modscan\" style=\"display: none;\">\n                {% if results.memory.modscan and results.memory.modscan.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.modscan %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>Module name</th>\n                            <th>Module file name</th>\n                            <th>Module offset</th>\n                            <th>Module base</th>\n                            <th>Module size</th>\n                        </tr>\n                        {% for m in results.memory.modscan.data %}\n                            <tr> \n                                <td>{{m.kernel_module_name}}</td>\n                                <td>{{m.kernel_module_file}}</td>\n                                <td>{{m.kernel_module_offset}}</td>\n                                <td>{{m.kernel_module_base}}</td>\n                                <td>{{m.kernel_module_size}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- idt -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_idt');\"><b>IDT</b></a>\n            <small>\n                Listing IDTs\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReferenceMal23#idt\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_idt\" style=\"display: none;\">\n                {% if results.memory.idt and results.memory.idt.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.idt %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>CPU</th>\n                            <th>Index</th>\n                            <th>Selector</th>\n                            <th>Address</th>\n                            <th>Module</th>\n                            <th>Section</th>\n                        </tr>\n                        {% for h in results.memory.idt.data %}\n                            <tr>\n                                <td>{{h.cpu_number}}</td>\n                                <td>{{h.index}}</td>\n                                <td>{{h.selector}}</td>\n                                <td>{{h.address}}</td>\n                                <td>{{h.module}}</td>\n                                <td>{{h.section}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n        <!-- timers -->\n        <div class=\"well well-small\">\n            <a href=\"javascript:showHide('volatility_timers');\"><b>Timers</b></a>\n            <small>\n                Listing timers\n                (<a href=\"http://code.google.com/p/volatility/wiki/CommandReferenceMal23#timers\" target=\"_blank\">help</a>)\n            </small>\n            <div id=\"volatility_timers\" style=\"display: none;\">\n                {% if results.memory.timers and results.memory.timers.config.filter == True %}\n                    <small>Filtered</small>\n                {% endif %}\n                {% if results.memory.timers %}\n                    <table class=\"table table-bordered table-condensed\" style=\"width: 100%; word-wrap:break-word;table-layout: fixed;\">\n                        <tr>\n                            <th>Offset</th>\n                            <th>Due time</th>\n                            <th>Period (ms)</th>\n                            <th>Signaled</th>\n                            <th>Routine</th>\n                            <th>Module</th>\n                        </tr>\n\n                        {% for h in results.memory.timers.data %}\n                            <tr>\n                                <td>{{h.offset}}</td>\n                                <td>{{h.due_time}}</td>\n                                <td>{{h.period}}</td>\n                                <td>{{h.signaled}}</td>\n                                <td>{{h.routine}}</td>\n                                <td>{{h.module}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                {% else %}\n                    Nothing to display.\n                {% endif %}\n            </div>\n        </div>\n\n\n    {% else %}\n        Nothing to display.\n    {% endif %}\n</section>\n"
  },
  {
    "path": "data/html/submit.html",
    "content": "{% extends \"base-web.html\" %}\n{% block content %}\n    <div class=\"fileupload\">\n        <div class=\"page-header\">\n            <h3>New Analysis <small>use this form to add a new analysis task</smalll></h3>\n        </div>\n        {% if context.error_toggle %}\n            <div class=\"alert alert-error\"><strong>OOPS!</strong> Some error occurred, please check the instructions below!</div>\n        {% endif %}\n        <form method=\"POST\" action=\"/submit\" class=\"form-horizontal\" enctype=\"multipart/form-data\">\n            <fieldset>\n                <div class=\"control-group {{'error' if context.get('error_file', '') else ''}}\">\n                    <label class=\"control-label\" for=\"input01\">File to upload</label>\n                    <div class=\"controls\">\n                        <input type=\"file\" name=\"file\" class=\"input-xlarge\" id=\"input01\">\n                        {% if context.error_file %}\n                            <span class=\"help-inline\">{{error_file}}</span>\n                        {% endif %}\n                    </div>\n                </div>\n\n                <div class=\"control-group {{'error' if context.get('error_package', '') else ''}}\">\n                    <label class=\"control-label\" for=\"input02\">Package to use</label>\n                    <div class=\"controls\">\n                        <input type=\"text\" name=\"package\" class=\"input-xlarge\" id=\"input02\" value=\"{{package}}\">\n                        {% if context.error_package %}\n                            <span class=\"help-inline\">{{context.error_package}}</span>\n                        {% endif %}\n                    </div>\n                </div>\n\n                <div class=\"control-group {{'error' if context.get('error_options', '') else ''}}\">\n                    <label class=\"control-label\" for=\"input03\">Options</label>\n                    <div class=\"controls\">\n                        <input type=\"text\" name=\"options\" class=\"input-xlarge\" id=\"input03\" value=\"{{options}}\">\n                        {% if context.error_options %}\n                            <span class=\"help-inline\">{{context.error_options}}</span>\n                        {% endif %}\n                    </div>\n                </div>\n\n                <div class=\"control-group {{'error' if context.get('error_timeout','') else ''}}\">\n                    <label class=\"control-label\" for=\"input04\">Timeout</label>\n                    <div class=\"controls\">\n                        <input type=\"text\" name=\"timeout\" class=\"input-xlarge\" id=\"input04\" value=\"{{timeout}}\">\n                        {% if context.error_timeout %}\n                            <span class=\"help-inline\">{{context.error_timeout}}</span>\n                        {% endif %}\n                    </div>\n                </div>\n\n                <div class=\"control-group {{'error' if context.get('error_priority','') else ''}}\">\n                    <label class=\"control-label\" for=\"select01\">Priority</label>\n                    <div class=\"controls\">\n                        <select id=\"select01\" name=\"priority\">\n                            <option {{'selected' if priority == 1 else ''}} value=\"1\">Low</option>\n                            <option {{'selected' if priority == 2 else ''}} value=\"2\">Medium</option>\n                            <option {{'selected' if priority == 3 else ''}} value=\"3\">High</option>\n                        </select>\n                        {% if context.error_priority %}\n                            <span class=\"help-inline\">{{context.error_priority}}</span>\n                        {% endif %}\n                    </div>\n                </div>\n\n                <div class=\"control-group {{'error' if context.get('error_machine','') else ''}}\">\n                    <label class=\"control-label\" for=\"select02\">Machine</label>\n                    <div class=\"controls\">\n                        <select id=\"select02\" name=\"machine\">\n                            <option value=\"\">Any</option>\n                           {% for m in machines %}\n                                <option {{'selected' if machine == m else ''}} value=\"{{m}}\">{{m}}</option>\n                           {% endfor %}\n                        </select>\n                        {% if context.error_machine %}\n                            <span class=\"help-inline\">{{context.error_machine}}</span>\n                        {% endif %}\n                    </div>\n                </div>\n\n                <div class=\"control-group {{'error' if context.get('error_memory','') else ''}}\">\n                    <label class=\"control-label\" for=\"input05\">Capture Memory</label>\n                    <div class=\"controls\">\n                        <select id=\"select03\" name=\"memory\">\n                            <option value=\"0\">False</option>\n                            <option {{'selected' if memory == 'True' else ''}} value=\"1\">True</option>\n                        </select>\n                        {% if context.error_timeout %}\n                            <span class=\"help-inline\">{{context.error_timeout}}</span>\n                        {% endif %}\n                    </div>\n                </div>\n\n                <div class=\"form-actions\">\n                    <button type=\"submit\" class=\"btn btn-primary\">Submit</button>\n                    <button class=\"btn\">Cancel</button>\n                </div>\n            </fieldset>\n        </form>\n    </div>\n{% endblock %}\n"
  },
  {
    "path": "data/html/success.html",
    "content": "{% extends \"base-web.html\" %}\n{% block content %}\n    <div class=\"page-header\">\n        <h3>New Analysis</h3>\n    </div>\n    <div class=\"fileupload\">\n        <div class=\"alert alert-success\" style=\"text-align: center;font-size: 16px;\">\n            <strong>GOOD!</strong> File {{submitfile}} was submitted for analysis with Task ID <a href=\"/view/{{taskid}}\">{{taskid}}</a>.\n        </div>\n    </div>\n{% endblock %}"
  },
  {
    "path": "data/mitm.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\n# This is an empty boilerplate script where one can define a mitmdump script\n# for doing man in the middle interception.\n"
  },
  {
    "path": "data/models/MalConv/malconvtest.py",
    "content": "# coding=utf-8\nimport os\nimport sys\nimport torch\nfrom modules.detection.model import *\nfrom torch.utils.data import DataLoader\nfrom torch.autograd import Variable\n\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\n\nmadel_path = os.path.join(CUCKOO_ROOT, \"data\", \"models\", \"MalConv\",\"pretrained_malconv.pth\")\n\"\"\"\nmodel = PreMalConv()\nmodel.load_state_dict(torch.load(madel_path, map_location='cpu'))\nmodel.eval()\n\"\"\"\n\nuse_cpu  = 1\nuse_gpu = None\ntrain_data_path = \" \" # 样本路径\nfilename = \" \" # 样本名称\nlabels = \" \" # 样本标签\nfirst_n_byte = 2000000# 字节前n\nbatch_size = 1# 抽样数量\n\n\nmalconv = PreMalConv()\nmalconv.load_state_dict(torch.load(madel_path, map_location='cpu'))\nmalconv.eval()\n\n\"\"\"\nsample = load_binaries(train_data_path+\"Backdoor.Win32.Agent.bflv_ce22.exe\", first_n_byte)\nexe_input = torch.from_numpy(sample).unsqueeze(0)\n\nexe_input = exe_input.cuda() if use_gpu else exe_input\nexe_input = Variable(exe_input.long(), requires_grad=False)\n\npred = model(exe_input)\n\n\"\"\"\n\n"
  },
  {
    "path": "data/models/apistats/extract_apifeatures.py",
    "content": "# coding=utf-8\nimport json, glob, os\nimport numpy as np\nfrom sklearn.ensemble import RandomForestClassifier\n\napistats_dir = './data'\nselect_number = 120\n\napis = []\nfs = glob.glob(os.path.join(apistats_dir, '*.json'))\nfor f in fs:\n    with open(f, 'r') as jsonfile:\n        data = json.load(jsonfile)\n        capis = data['apistats']\n        for api in capis.keys():\n            if api not in apis:\n                apis.append(api)\n\nn_samples = len(fs)\nn_features = len(apis)\nloc = {}\nfor i in range(n_features):\n    loc[apis[i]] = i\n\nx = np.zeros((n_samples, n_features))\ny = np.zeros((n_samples, ))\nfor i in range(n_samples):\n    with open(fs[i], 'r') as jsonfile:\n        data = json.load(jsonfile)\n        capis = data['apistats']\n        cls = data['class']\n        if cls == 'malware':\n            y[i] = 1\n        for api in capis.keys():\n            x[i, loc[api]] = 1\n\nfeat_labels = apis   #特征列名\nforest = RandomForestClassifier(n_estimators=2000, random_state=0, n_jobs=-1)  #2000棵树,并行工作数是运行服务器决定\nforest.fit(x, y)\nimportances = forest.feature_importances_   #feature_importances_特征列重要性占比\nindices = np.argsort(importances)[::-1]     #对参数从小到大排序的索引序号取逆,即最重要特征索引——>最不重要特征索引\n\nstandard = []\nfor f in range(x.shape[1]):\n    print(\"%2d) %-*s %f\" % (f + 1, 30, feat_labels[indices[f]], importances[indices[f]]))\n    standard.append(feat_labels[indices[f]])\nimport pandas as pd\nstandard_pd = pd.DataFrame(standard[:select_number])\nstandard_pd.to_csv(\"standard.txt\", index=None, header=None)\n# remain indices columns\nx = x[:, indices[:select_number]]\nxmal = x[np.where(y==1)]\nymal = y[np.where(y==1)]\nxben = x[np.where(y==0)]\nyben = y[np.where(y==0)]\n\n\nnp.savez('data120.npz', xmal=xmal, ymal=ymal, xben=xben, yben=yben)"
  },
  {
    "path": "data/models/apistats/standard.txt",
    "content": "NtTerminateProcess\nRtlAddVectoredExceptionHandler\nGetFileType\nRegOpenKeyExA\nNtCreateThreadEx\nRegQueryValueExA\nNtProtectVirtualMemory\nWriteConsoleA\nLoadResource\nNtDelayExecution\nNtOpenSection\nCreateActCtxW\nSetUnhandledExceptionFilter\nGetFileVersionInfoSizeW\nLdrUnloadDll\nLdrLoadDll\nGetShortPathNameW\nNtQueryKey\nCoCreateInstance\nGetSystemInfo\nGetFileVersionInfoW\nGetTempPathW\nGetFileInformationByHandle\nGlobalMemoryStatusEx\nSetErrorMode\nGetNativeSystemInfo\nCreateDirectoryW\nSHGetFolderPathW\nGetFileAttributesExW\nFindResourceExW\nWSAStartup\nFindFirstFileExW\nOleInitialize\nGetSystemMetrics\nLdrGetProcedureAddress\nNtOpenDirectoryObject\nNtOpenMutant\nNtQueryInformationFile\nRegQueryInfoKeyW\nSizeofResource\nRegOpenKeyExW\nRegCloseKey\nLdrGetDllHandle\nIsDebuggerPresent\nNtOpenKeyEx\nLookupPrivilegeValueW\nRegSetValueExW\nRegEnumValueW\nGetFileAttributesW\nNtOpenKey\nGetSystemTimeAsFileTime\n__exception__\nNtQueryValueKey\nCreateProcessInternalW\nNtFreeVirtualMemory\nNtOpenFile\nNtAllocateVirtualMemory\nNtQueryAttributesFile\nDeleteFileW\nNtDeviceIoControlFile\nNtCreateMutant\nRtlAddVectoredContinueHandler\nNtWriteFile\nCoInitializeEx\nRegCreateKeyExW\nNtResumeThread\nNtEnumerateKey\nNtMapViewOfSection\nGlobalMemoryStatus\nNtQueryDirectoryFile\nCryptDecodeObjectEx\nGetCursorPos\nDeviceIoControl\nLoadStringW\nCertOpenStore\nCreateThread\nCoUninitialize\nNtCreateSection\nNtCreateFile\nNtQuerySystemInformation\nGetComputerNameA\nCryptAcquireContextA\nclosesocket\nGetFileSize\nRegQueryValueExW\nsetsockopt\nNtEnumerateValueKey\nSetFilePointer\nGetSystemWindowsDirectoryW\nNtOpenProcess\nGetSystemDirectoryW\nReadProcessMemory\nNtClose\nRegEnumKeyExW\nNtReadFile\nNtUnmapViewOfSection\nsocket\nNtCreateKey\nFindResourceExA\nNtSuspendThread\nNtDuplicateObject\nDrawTextExW\nNtGetContextThread\nCoInitializeSecurity\nCryptExportKey\nGetForegroundWindow\nFindResourceW\nUuidCreate\nCreateToolhelp32Snapshot\nRegEnumKeyW\nProcess32NextW\nNtSetValueKey\nGetComputerNameW\nFindResourceA\nProcess32FirstW\nGetFileSizeEx\nSetFilePointerEx\nRegCreateKeyExA\nGetTimeZoneInformation\nLoadStringA\n"
  },
  {
    "path": "data/models/strings_ngram/raw_train_sample.csv",
    "content": "words,labels\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj XnYpJ rxUUt TvzHw FoyYr wMduDeE QBVYu SllgL xjyvb UUiFjJ vveKDaI TardB YbxQu segOFm DuZdcK CQOFR sTkuSz ORHau OAzNEw QbWPa ftFYF SWZUA cPWqE wEhKY HhrSZ zdbyKDj eOXuZy kCgoojf AnQdnb OuGuj huoqH XhfEut ipBChB SnYCCEqy WYMzHU KyjmNIMj JrBxX ZREzhq HWPZdN DAFMa yohKd eSAqy Lvhng mtgzB DtPox cduoa zwHUiB FICHlT jPiHBA LEdIsRO APaBhzH MQwBENJF MCJuz mMbKgBoj buRoO kNdDp HHtpHm HwoGKZg EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl YUfnF kdGchCg PYiNKr hpEnvp zrVIK xaxrp fNMbXv wcJmXl cjXjqiPyl ImAPU XUFFPu coKdz LQmlW qMgam RSVWN NntwK PtDHi pRbYRCQ Nghjn UlgogRAj fhSDj sOcDz qNTCU OMcEM DOJzO WMuyy mvQdQ iHHLTl SPHzJ UhFri hrfijX oUQSVWf tJCtmv Ryhbw kyGbPP wPyEs fcwKS SVpYPWy xXQqPpD WwHXt zezBu pMWkjeyHu femxt FGhgE RAjSy RbYRCQ SiwcosI MGZDn SLlZV neCKONk PAcna vxkrT xdJcv FOwvzS CEQJcel miGlmfL jwRCEwkI ngHyJ XrNVk oNCYL zhTgK vlFKDz gsSzz OVKzzq rSKdi XeSIm hxOWe vDxrqQ EDXpND opCzWG xfoAE zfTKVc oCzUyk udHkgC pBlHQD kWjqj zJnFMqL FHFvx oIzuM NXseWlSyM jmJUWJ zhQorT vehwnxk LPgiJ icfXP cCwOX HxZSXL RzFHyO hQZFV HYqCB WkSdC rvnByH bDloW TQzYF FFjYLO wfWYH Hkjzc RGdYT vlcOM xBXAHj nkcvv IjaLrM iDkNe RZJJYL atELI sbbyKw ezkWQYT LzGRY pPJGV OeIEk fcifj lBlGS XzSUd JQfqm cnGTUU hMAmf Snsek jRCGf rWGqU BkAWen RtTwe Yadwmo jOpLX nurwJJ Uqdyd PZRmx OrWGq rUHoC XcqcPk nzyIUu ZbMwq rPlGd Qvlmw iHtBFYyPu lMSePzzCy rBlsY BHQAk uzReRTAa laqjt CmcSB TSUVWL VWRPN VWRPq EXwaAy jwcXsU MMTlJ RAimrvK SVWhI BoYZc ISKnaO EkOoVJVU xgagaGD Izpvk gvKwjdL IyyZD qSVWh UfnNl qWcVs YwqJJ Cqpwa wyzxL qdnRe kasGp oXCAEy sIVRh xzyRH jzzxMx tDjZs VPQoKbiSDv vrMcW OGXbh JJtUo SUVWT bHIZt OLjnZ BjMpfb gCwISQ keXeTqb tbgUGP WHLFzrydr cXbfs xVFXXk uEaryV cYreZB JghVpo lAVvh KpZEA seecO SbapC rVhYPam TtqBQJIbF RFgik qpTDV EkyAqf IfXJN NRGav YQWQC ZdEHvgt ZyWxsC Snkxjf rtmQv EjzYK dQHJOI SXwpmPs EhiYio bDuun TsUHO IgNDC dnIbMkg GhkUA uRKfvs wkLuUZ RvJUb IfRUv udBFV XYefZ Uaxyv wuLMRW vMhssPK OSyPB OZboTh aiVZj NMOtTh OnssZmf EkwSTV qhawO uxDoC VmKTz HDcOL iNzCH RCpGrE prQPR sTuBc ePGEI tcbZs qnGnqp DmdDF LzTXT lDbzjYg FHSSOd QjiRP bPEoix gIYKXJ UOryPlh mMsINMR OSRAS FZahZ vrkOU sVzeE Cqvwj LPdRV mWkfK reCXR kxbTP WwcxH qwdjK vKmgX wQUQQ VPjLh fBoWBa FQEciz QGuiOic ZGJMjhb GzZEhv YXSfNd DgejX qGqvwy Qekgwigg mGYPR ceeZVk CKpvmc AHFQDM RNOKS GQguM YycwKP QPDfy KUxVW fgPOd FfcHPf iOnnkH dtlTdn AVYMc jhXdu bIPks OzDUQZ QxaLp QBOsR sGEhDO yiqoE SKoSEy JfStQ PmLDZ GCHIctR pyFBMj tvhHI uSUVhI dpbfO wpyhbb drXBw TgxSJ pKsuRU sweHiT ssOzJc kEjnZ ARFheT qrnxy qxPDaGQ QYmvT mULPG nrhTb DlGkjB sXPVjt tLsdB YBgcl SUVWC LFPVI hTqBCnpr JdUxTy LVwaYCo VNMsn ddXckpV dGfxV SUVWh YPyzFS hQSUVW lTelR xhdMo chckt GXGTt GIlSv FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS nKoypB NWKws ShEVR RPGFmi LnIDt qWXFG eBUmt EwSBaeQ OKxASnZ bLfCR aewskA dDSeH IVFaU oheWOt vPOLl zIehbLaFF sylav TPtbq YfbNr PhKAJ cmVoC ZDqYphXk hdsspsdup vvaEK URVIx vdtCg Qffwy EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE oKHBAi xYYEe quCWl czmPe dHRjsG LUQME UfnNa MEEEEE MEEEEMe TSVWu EPMMtM UfnNO iENtPrzZ LXgBK hnJELp UpQRP MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE fxySU MEEEEE LDyqx iCWui wESvY RltVU JSyID WVGpZ QyFxdA OvwWzq ZbeGYr MEEEEE MEEEEE EEEEE UfnNav EMMUU UEEMMU SVWeMM MMUUEE MQUREP cTBOT ryjdpy SVWeMEEMM RMEEM xHIYos zYfhP vbkyO qcDEeo BTFHU vaNMdb itfGCFkGB EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM UfnNF rDfhu rKxxWYoB MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ NxiKzX goCMqf QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE LUDMEPM EtRMQMZEUE UREPMH EUUEEMMU POwkM EEMME MMUUEEM SVWeQ EuWuS skQfx EhDjmaYcn IVRNoLNAY hMzEp tTmYjDZ WFCrh suTPy xMyoTTV CEhin sGVVD LHbuRo ddOUi GfMMC JYjRGRO MvDEIb QjZxu Fonxi TeKtt Kuqdk WkrdnD PhgGJ KieqK DLsBT ZdXbkw GTjIH itEDG hxmZrY nvzjx JqCOX BbUIaDpL mLGjx SoYQQ mZjVqj qntPnVP EQBzuV mmkDo XFzraxt cWJkt rASJE CMkkDTW XPnyD XyHKm nIhIPo cuhQcY xUZYo snWWtt gRdKP gpjWh KXBWaJI qZWxp jJTcOE YmfUd CyTCQq dwWVh PsuLO KwLvCs nKZqe WafiV VfdpZ wgBHl xzmzM YBRkG RXfYZ nXITT oCiHO HxNcoL vfXbK QJLki NLTghTa PAWajF bbTsQ IKaYnr VdhGx NtvcX tdPxb NAWUZ eOBfIutbw VSRfh wcGoiz sJwzREf UVapM hWtjJ QKOfv srLCy ccoqC uIdHo dDZnV pyYRX HfAYnf cEodn LJvTj oARYWj mDRkrsf zoINo iZMJK PUUri YCmba lIUwnf kNvgq MMaWB fWUdo FzgNnP Jcaqzk srzcXBt UfqPDiF wYgdO oWcQpQw QMoyJ PawhG PzbOG wpiZCzcO GLFaE SUVWj BABABA giCXc CaTlR qPrJcr GJcOc qttiAy RXGSJQ uvbyouA RfIPNPY tkBDJ WRWpw cggIM PQYYt VAKxL uYSWu EntelE ineIEE GenuE BPwKJTM sIuyu PeuEEEEd GgTIP QPEPh QPEPh HmGhW fxPDX PYYug PYYug YYEPV UQQEP eJTUM qFAtB RZcPU txMVF VVQYn jeCpz aGqoQ GkFHqrpr TxFTdP UQSVu DLSPC gDeyMV GxJKSg HuYUV EPuuu kIgXcQ SVWUu tfVUk tLxXj USVWUj UQPXY pNPzzlDKz mVWyA CuiYM csmuP hLnRxM jMwLx dYWJYaR xOkiz tPtLw PQYYPV Ujhxj oSVWT URPQQh USVWj KsdJP IjCYR PPPPPy MeEPj zEOtu JeyYg fWAal sgKyVH lCSRM VdsXh MKFYC DwoIdC wgvgZ EQPjjM VPuus ESUQQVu YKyOt WxbMsPU oKxCS aojAi gvSFq XMnOV dcrmhW USVWN XApLN XouOF laFka yFUVu NEeGH iXEjZd UQSVMWj RzcaEA vgdOo QRoaEog AWUbF ItOLt RBGXx aTsfR xrmVZ wlGur jAZjX pgpDQU XczHxgMR OVZrd CjaAtDH tUQQVWjgYjGN PQPPESPW jsXfF RnSVWF sWNZKQ ZUQQVW sjhTt EUQQE PlJKJ Fyzerga ihcyw rIlSLX GDnZV lZnhT argbY NQuyA HoTBM RPQQE VQuuH nnvZv guIlx uEPEPWSY YPVWSu kPVWSu ZuPakY UjCIjKPRZS yJojxuK cuDtv rzUxZA RvbPH yvyyJ DnrtU CeOAz HezMJ PFgLv Rntww zRWBB uPuSW EEwPr UEHEu sclwW WSEZa iUQVV vbRnj XfEFhP EPEPk AlVpu WgDYZ PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu tOUfO ImaBK WCGHS ZxWKvV uBjAYjZ KshBj jAZjZ UQQVWO SVWtdAu MqcyQ jLaGUQVu pLeLdM TjXbQ EwFfE cUuyBfg kHrFH CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp hEZSUVu wAHZYKdBu jqVbXrj TSQxnt MEEEPu pabJT rUtfvC DHadX SOGYu PPPPPt PPPPP HLMMQP aFWjw sLeAS FCRYi gWWRch YYtVWh EWWPb uCYYt uVWTb WWWWWS YtVWj PPPPPPPPU VSYYt SnAGW jYsSA FHCayS UpUAiU EAEfEEj EPQEPEj AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP iKKAw fWULc jUQQfE fEEPj poWkM VrYalq yrXLI aSFpa EGWVj FcLTB SYAxE cQjai EOrsxLr kdqSwk MSVWu MQWPVk mOvTf KLbfY MqcyQ HaSOB MEEEPu DuQvva qJryoFs DvBNn PPPPPWSu QQQPu VWuSu PPVWPu rUWVSM KPgrw JDLHw jWOfT hmYiB eRRxqT kPADum qfjTsd ywtofR WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj ITJaB wHuhjj YuwHu YtCzx wXBfLy Rhsuzb TMfQh QeSczK zVgSV JFmyA LgJyR QPLYYMt kBWFGEJGUi RXCcL IxfVS wfyyU uxFTM oWALk BxluTO DXoYX AMRSeE GKdTS wddTr iiyYAR TpWVP GPiHA INxgh sbfCX rZqlJN PQpIH pVfFD PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj xxgORq hYxfw pCJPIff BpLdd GXeGMl WxxVL EZkhYV WvvVL WHtAtVL iudnF cDYwP Lyema QoJwy hhbZx jZbOT Cyoner WYpBTe YguVS tNAHu RVQBZ PXibx RFXbN gHTjY URDDHf xOysel Icnwd QQQPu MEEEPu EEPVYY AYOBR hfsfd sUFqG LVBgd wxyOB nhVcB ftkVl ddRqL RnjSvMt nCDbS EPeuEEEEd csmuu UEcsmE PEEhg AykKjS VWlCv aUSfE hqZAV QUQQSV OEFVRF WDYpH dinAe pRzdWK LfOAjP djApn YMOVGf zwdzd bfVFDsvr wnIiK GSLsj eSmCVD kNSZo WPTxB YNULeT WjmPNv GGMsD kakLG sbyNy JYxnS HPUqS LvapgM WmtYS sLEmv rcHDQ mSAAb hKjLQ kzVpy bTSYz enGio SLiRo PPNPxu NRBbO EOcrLZAQ LktOZ bfBWr IIThc VnIWn AaXnj oXreH vzrxD XoYSh KWwKk AQptc cSqgG XRfcW TnSuq TWKwCE jwrRt OzoeR RRDMe fBgMt PnuAy PMStH Vhtqy FSKixad fQVvgpDq BCmbd kHLTcLdZ GapUe zGFBz bGBvXd lhSoU nYUwQ cTIWaTkHz koOOL NmKFyM ghflC ZNEMH DBmjO PAEKh yBKHy dHnhOP vQlYa bCysa SMRZd htyyn wlAiG wAWbOE Qwjua ZULXVH XlaDcy YIMjD rdIiihUc QcsMS WJNEb pdEcT gsJVl ZivFR iihUc ojxEPD uLeLk nfGhz BtfnfG umsMHy GXGzB UqToC WTcxcq JdLHd DYNSq uxUnCF LRAPv oaOlK GVHQK OQPig iLTNi DGdMjZ QRoyq iedWT eFqStyV PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI MQtDZ YnGAJ uHEPu uEHPo DYPEYPhH UfnNh iUQMj UfdBj vAMgg azpnu MuUMEIEPML UMEMd MtNua MEUjh gWRrygWW EEEMEME HnEMI MEEEE ntJETE EPEPM UfnNv TdVHri UQQMEM UfnNv ELsxN jSmWL sQbvQN UfnNKv WzYQl pQDVy plgSOA JbGpreP dvUcv fIeUX XBiIx ZRMQH qWyVwh jXzqKw NqKYe cYTPe Akzoaa FKovhE alYmI FWhnI HiHtt AYhmk CbmIE zAZeuz CrPDo KLsJCUat gLhCt yRclKr nHATh IuEsYQ IUWCz QKuAO SuPltO OdVIe zqZUVoA BSXgm EMMUREPMMM EEMUQ NlCLx UQMEH MMEUE QNbky EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU dbLBQ SIeCN GqpXE IgrUjh MQMUU FyACOA scStB UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd LUQME SULMEH MUUEEMM UEEMMU HlGtP LXGma VWNWaJv OHqtu WScsVU BORYzsh kVSzCAo XtnQntZK NoiiN qUQahE eBIaa JYfbx nYaLWzQD TAMlYO MySKF TBUIm dVgBG WgGciN dAEoq ZDQjVfnchA dFgkC GgTMA oQvMF ENdJn nbQubad locale liostream badbit failbit GuRuM FLRbni klCgLb UJbyoh yYvUq aruee lOHAtQuC SQune fnGnt SyInV oFHjaat weYhzP aGXuPmEm YqYmqR array length unknown error address family supported already connected argument argument domain descriptor message Rconnection already progress Bdevice resource directory empty large qfunction supported unreachable qillegal sequence inappropriate control operation KherG yRinvalid error directory yRnetwork reset network unreachable buffer space child process message available message space device process supported rIoperation supported owner qprotocol error state recoverable Ggtext files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx RUYxv Jaxaef RBdpWTA Uocwf pJarV SuYggpBf fSPwk fvYONWM Dfcsm sLjMh cdecl stdcall yGVtjA clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator cIIjHi returning local vftable FYgsd placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor IiYyYZW Class Array AWFPl Complete Object Locator xpxxxx rveyR nPQZg aNCQVH wIYCf NZePy aTCEwH MyarSuk WMbnz rMGBXK xkJnL fFtPpw IVVasin IVceil floor gldexp hypot Ifrexp ZfRPZwS EQfAtU Monday Tuesday BNFeb dgOct January March April tPDecember zPUHad fJPswr EnumSystemLocalesEx LCIDToLocaleName JMypZV fIPyw LkTFe Bdvis dZoolr YZpll AWUfD kTmes jMmvhn nSzkc fXkGs kJPph KVoGm jKcwz tnpvL aGLaSHJ LtmYE TwIambz BerLW AWSjQ rSOAjw LhIIOAw tAuduJqrP CuRWw Dkwru UImssf PgarA rkZMY ylFQxfs ZbEwQ BpYAF LwIcq KpWklIMtblT EHckY FBnas XXRqd sAAhA zGntH tmMFLG ContextStackSize ContextPriority SchedulingProtocol WLcsv UIcJk Kdsqrt ZfUUU dmcLV RRLTm wEiGc RZdTj usage usage lVHug ckkOCf QeyRm nicehash lDVLg WyMLCvuaim tByUT Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ gyjixlp OEkyyb pCuzLl TWApS vfcou vzFLJ JLXCM mNlVez hRzOX Qsakm LQPDYiYv SMDmq JAjFwq QSwJRVOO QIbtog WMmEzg IqKFH ABCDEF XyuQL nddcEQaS lgTYE DwIQpk xVksH CXSMN KjZDg EyNWs gauoc bVdou kBRTn sxKywU tHYHq bDgxgcw Jzwnt ptqTg qHyvOGtP PCjzf tfoNr RfrKoxj FQIsv JAWUZ GEyWy MsPQo lfXkG JflCv nnWQP AjzqN Szloho iHSxAcb VWJYf PihSow grdwALy SKdvLU OHENp PiavMXI yrddh xxWNqut yeapsR EROPg MmJiV ERCKPg NPEgr iVgJo yRgOM ERBuPg rDPEg fpWAm dZbHPOdfY oMaemv XwKFA KyxTry BxaYz GPWGYm xSywWV nYaWzQ yIcbW JIhUMg GtgTD QsiNs MQVhy SsXbWlf NrYFA ggVPXWVJ Uetfc eFBEk hwkIvG jKNPg BzDhtPx BxxMf dSool ERAkPg DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso yRAuthenticAMD yRCyrixInstead NexGenDriven yRlsU KRiseRiseRise Geode Geode wOPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION VigPentium Pentium Pentium Pentium GIZlz tPCPU Mobile Mobile Celeron Pentium IRWIN iqWESTMERE PENTIUM MOBILE MOBILE WOLFDALE MEROM qDUAL gMORE QUADCORE PINEVIEW CEDARVIEW gCopyright Plauger licensed Dinkumware RIGHTS RESERVED KrLCQG Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE gEALREADY EBADF ECANCELED ECONNABORTED EDESTADDRREQ EEXIST EINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT LENOSYS ENOTCONN PENOTEMPTY ENOTSUP EPERM EPIPE fESHUTDOWN ESPIPE UNKNOWN ncENXIO EMLINK EREMOTEIO permission denied Taddress family supported temporary failure Kpermanent failure family supported uresolved protocol unknown service available socket connection already progress operation canceled Kconnection refused connection reset destination address required ahost unreachable interrupted system invalid argument error socket already connected message EjRnetwork unreachable lGRdZ buffer space available device enough memory machine network space device socket connected directory directory empty protocol error JtPresult large system process cross device permitted unknown error links qasync event signal unknown error malloc malloc malloc malloc malloc FmbtP vQueueUserWorkItem malloc CreateEvent ReleaseSemaphore wCreateEvent FmbtPo idDfYv HrJaG CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress gkernel GetModuleHandleA CancelSynchronousIo powrprof sqeFsocket Sclosesocket Missing after object member Missing object member escape sequence string Column additional characters expected parse unicode surrogate cVtFBad unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected qBgSee dSyntax error value object array expected Content Length false QKURinqw IDOLP Seonqv eekpeRX UOUai CKcmu POhlhsp XcapAEC DGciou lwuUU UBqkq agmsy WQWck AGMFIN ZEdKG rYoSv KDuvr vowHCy uYqJj yTGEu TvlxPr XaQQCu OcdHi dQJUE PlVBkp gafTPN hKGQys fkBps LpAUo ymrrEYUz qmxOva qjqmI vQiQywcoE afoky cDgze fafyxijfhkdanfrzz EyNWs xVksXkGS byohY UYIVRN hMzHc yxTry VSzho tnQnt Ubfpr nYaWzQ YqYmqR EyNWs xVksXkGS byohY UYIVRN hMzHc yxTry VSzho tnQnt Ubfpr nYaWzQ YqYmqR EyNWs xVksXkGS byohY UYIVRN hMzHc yxTry VSzho tnQnt Ubfpr nYaWzQ YqYmqR EyNWs xVksXkGS byohY UYIVRN hMzHc yxTry VSzho tnQnt Ubfpr nYaWzQ YqYmqR EyNWs xVksXkGS byohY UYIVRN hMzHc yxTry VSzho tnQnt Ubfpr nYaWzQ YqYmqR EyNWs xVksXkGS byohY UYIVRN hMzHc yxTry VSzho tnQnt Ubfpr nYaWzQ YqYmqR WdNWs cemvdrXa ksXkGS AyohY UYIVRN HGuNQ HEqud UNbTBT MjCRYhNsls IlETrtbCb XXyHS MXaKa bvrCt qrTwh ZUALt qiYZW AWULg gBwsRZ nNwIPV aiNBo oBCvi zUtVWpu QoxOx UqYIVN HtDuB VSzho tnQnt Ubfpr nYaWzQ wZVhM pDQhfthA KreGdC hFYJb ebsGQ zqnNw,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj MXtNB jWvdc UuECNI yEQNkKT jKIum HzrnK VDUTCPLlNFXJ IHPCXc fEaGZ IVYERj ZtoKGXvi ugMHM yYApp LijZg EkkNJ AWxkZ XdZfjM Tnfqnw jBpbFYqCA JKZTlok XuYfLB uzBph cQQQcXlnv gQZPZ avRbSF FJQhN ikVKj dVIkYK vBsVk AJCkZ soKQk rELFr wZwtM DamkU qOBcm SvyAEm CwhiBJ qSAHI KyWKFG NGVqUL rhDpMlD likvPg LLHyGe qkQlJ fUjqobK YgEctHm IKKqOP KzjdgUhFxd GEVQsT dYqej yVAtFPN ONlSg JAwBj wNxcB AWDpA TFoTn alaLo MAhrl zfetUBM HIYmtuz PPiPdp sWJvca QlrUB HJnXt sTslDwh LkDRV Llblx hSRTjCWKk bsiIO IbvYa LzwUA CSivdc dnupa HljOQ SOlzuL qNPqNb kfgSx HLQzh OglQc DEWxsq GfKVD lxUsB xgtiy YywZZyd hamtR XMxbr hbHuFtD SqEjV HBMNc EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl Qandoa fCByN veZhZ kwpMl xfsZC lGUUpA DJFvT LbDnq VBlfz snfCDJE nymkOm HtVJtEUd egoSS iJaDY OYMtJ wvqia cwyyD AFOfmD cZuQr mJfMta ZmGBoV yUdBu dIEvcPMJ HsTzb XWyky hvYOqv UuECNu Apaln GCSkp dCHSB dVbew jBGYS qWjRI qLIMLvj GVrdq JkJsDDir vCgvHf BUsww ZbKIL uGDlH snEzA wMgyY NOAfa TSJoW eISAP EjWmR tPMEy qEmgi iOWBC oFEOc UQSVWf qMFkzg qrqga sLNXk zYsBq Taazb SVpYPWy xXQqPpD WwHXt VOBJv MpBVWM rbWHvmg CLmNB QBsrmI LTjPO xnFmt TmVeQ xhMZDh oOWRktg hUdCeP MtdEJ YOSbe cTNPM ZKbYr LDAZDe xQXlC exKPz veZDy aMuEiw TGsoyJS KkxMp ZlVcU oJuMd QWQyZkHpT MUzQjmI KoOjaQ TJoRJgtR TEgCq Zbskx DnyEjP xTSaCpIZ iNDib gqgmd gMTHZn ofjFz LqxPeZ kBPVcfe ETfYb VXCLJJ mLNiChKj fvYSB MuyYD KGimC cDBGzHfpGP xHGas ItCQUw nhtKt yJwfWO NMIHGb hdvJk yIBzd gyTle vPVhta cKezCKMC ljWzE eAzDc EhmGR UBLLvsq SuDzdLj uJfoY IolrUc zWzuj XUZCB muzMD nVvkfbI VaPWe fAbNa PnGOe ujGMb YlOWS oRUrC kuoUW ihmTykX fyMss NOxdHFt hOcZK kSUVW AtFGoiB PaNuWu HFUmQ vXGahd cPVpG AfSWs wZsFO zIenE ENFfhd EEroE tNvHv HmAZuuoDH fgkLp VuxaPS YXWeax NsyFEh wwYTsh WRAKB WHnmD zWHaj fOVET yxWTS hZSmz TSUVWL VWRPN VWRPq DmSmQp hYdKY SdaCjO ZQaiT jHitn ujSVWhI qqebK ZKLYDBtVQ SnSVWh aRnEd Triti yTRdr GWQUiai VzxXh weMsL JxzGH NzSRI joXbLh dXlDEZ iwGTG caLFDj SUVWT QyyeP yMWYk tosUY WXQyU ODtaae tNSFbc XdEEz eYpUc Ahflsy cJaCN WXksu ApWAf KHUMi BZqEWX xhZlLd uTHzIj aLktYt AELkhh kBeIr GfjyUgLumP NqWEn GzQVf BOfcr VPoDPH ePNxl vrLVL GGXlWi XrBuCVSm weMjA BoNoK bouUJ aGJcSb qtXhq FPFTB zvodhUg svwLb jmsBPLH hKnbXh MQXOY RVtWxY wEmXZd hEZcQ ROCDE RiCtw wnIIC TNDzu XtLSjZ HvfEONA tskfC OfYQB SBQtDTlAT NMiOf XBroJ PFsVC RkmfzN LCtFR VyzgvKYLq hCinl nsyujA TCHdpP nPzPa SFRid YlBTrY JuSEoNU HdoXu TcGIz bJBel tpjGoxWK qRdqD NxUCW gZLHig xLpQt obyTf wKgpI MQzvy ZMKWRotr DliTE TVNIe plPOL KQQFzj uQsWt JEzMM eLYVq DSxNr UAZVS lSUVW ODFUt VPjLh meWZZA TxHjV YPfKoDE ZAYlnVlH tZNCfatIl ohuCuZ BigyeX lxJHgB qKVzSqN qkpDzo FKlMO jjbbq cLQTiMQ DsVWXXBO rqYWq LkcqA zvZJp WlQwR hZYgc fsVGbI fIPikPG eUIvBker AFAez LnDaE QtKDsP EICfk dcBgR OLNCG dhZgrvq IDRxU Urguwk vScgb BxZXS cGGXmiA vPqvH NTqINdS tCYdY cxUuQey zztmli dVNOEtc gPuWI RIROt uZJMH BaDxs eVCPz LWAXq qwbvm qwbvm fSyOk tvhHI ENFfhd uSUVhI lRfEDi hXvFRQ lZBsH keUoVmNwYJbL vJTeh DlGOcQ SttwZ RqmPK ENFfhd mAlCDqK aiulV JCgSY qeVJyQ oDwBVnPZ vbDTZG Mpyrd WeMsK jFQBy sXPVjt tLsdB nFGVfW SUVWC EFEFFO mnFGnJ bNieT yEtky uqMRm nJBMkqI UuLPz oNOFO tdQTC JgVcd cULDF SUVWh UEQFt QSUVW fYvXcP okWYfPZ tMazrM nDAnq GXGTt jAbkEp CTeeK rFDql rYyrD wpQth FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS fKlgiz EikoII GROsy iGVAEQ jiaiMp eJvJaFO vZoxvL wUXmFB jpRbsd AoJIes aNwOj lNZZY VTWcw bwwLeYMl IFpJB wGezUXlT Lorjuq vQhnr kSncnLg halbL bUsjYQ puJagP KRSPBuF Imwtpa UYlBfZW EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE lWcqIv nYUjh xYYEe tQeGK QSpRpf RCTUjh MEEEEE MEEEEMe IMnTi TSVWu EPMMtM MtUjhZ ndWQgX RRFmZ MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe uaUjh EPMEEEE MTVMMHVE MEEEEE lYJFQIr sqXys xWYYx DnLwoMy scBoG fqgfn MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP viXYI SVWeMEEMM RMEEM qxiiCY XzcyT euSKTmB GWAZJ fUijmK JhgBH iouvL dxaHb EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd HlAHC MEEMMU EMMUUE sQgXb EMMUU UREPM shrUDtEeI IfvxWi TamBPjC MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ izibW QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU ujUjh MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU TnnyX txfRt EEMME MMUUEEM SVWeQ EuWuS AfjIq YltNvB WehVW bdiPx hZmxjPO qqEPQo AOJaD Wylet uvGVJd jcGPe SjaHM aVpVg mPFFf UrlCOtAi KrAFi wwQvo LBlGf rVZnUf sEXeVP xYoyh JRAho wiGYoKJ EDKRvI WRTfE FoNpi jQGxA kxvvQo MCepU SPjST uRaqId mJlwgtJ hTcVLr Ldofq naZdhvy kyHwb uFetb LtNYOh lALKH tKjHpx GmSASP NjlQd yFAlD otxtpNAS LoHCgX etnZR wCFxvW snlqZ WISon wIgzP zblfr VTJMX umWxB InmTSq mDOPj HPKRa zcEki IfQZcE gMLBpI OFyMZ zVKnQ OFXcvd tHIGH XhDiOU FFzopq egJgyQ AlkaT cYOLN xLiEh dUbcq UyiIn iCSPE WnJvnk pTKsR aRTib ktVLm dJoGtf mvsAOE feExq DFWSE haAkrcd NTxal axcoG oRfEN moVmvL Oquej tetYe CLyBk yBVDL hAbfN Bysyw LHfLk Amkgho mWGsu UlWJJ VVGQc hhzyZ uQZdGnk kJRZd BXqNe htWWm xCIrLH aGpzx uRCId GxrCLH oDyQU tcJrW EAoqF SlpXn eWboD NYeTX qmnCL PwMAh gYBnKe dacEO vIyoO BvYcU NhByh jnYgk uJefz qpLMm FObmu uLmNB tNVaeS Lzvfgj bnePpO VESXK xAPWD TFnKvn ISgoDH YKvFOY azyII KWSuQ dLOlPJ fwGZeSCS NTmds SUVWj BABABA sXBrvZFAo fWFIh shmeoTL Vdjlpal BuLUYL hwEZc YcHWq koPPmd pnzZy BWDQYV WnoJr XoKNLD frVtR PQYYt jWUFs yoFDa uYSWu XlLLq EntelE ineIEE GenuE PeuEEEEd RCWzd RCWzRp RUQVu vlLXN QPEPh QPEPh XJPOC WrjAW AtVWj PYYug PYYug YYEPV TyJUQQEP pAhHi NuPDp qgQcEPvS xAigE KojhE lZlaI ahQpUuV tgIIb VVQYn PmCzu UQSVu diRkI HuYUV EPuuu pKIcq TMwfV SVWUu tfVUk tLxXj USVWUj UQPXY fHfcQ DNeuj unOZjyD CuiYM csmuP ofunOt XVFmz DwZYd uDWTGF LXAcb tPtLw PQYYPV vnpYIf Ujhxj URPQQh USVWj jBWmf PPPPPy MeEPj RfDqw zXuIMM WeClVaQK nsXIM uzSjUQBzeFr eoyQy EQPjjM VPuus zerIC psVzW UQQVu GETndC ZrqrN fKDgI WUtck nfCuDwbun GUSVWN HsPVH eYFoag XHhYh TMohK UQSVMWj CmRvr Ipman nYPHoUd lhHPA lAJWF Tojiu Ipman DWnhHz rzBAGo sUEhz ItOLt fwAQF nQmMc YPLmh kxGsW aGHeSO nUQSV jAZjX pQufjy ZUQQVWjgYjGN PQPPESPW jsXfF QUSVv oASzV STtOF xOozcq ptNyF lYtQOBT UQQVW zxHBb ibvYnB rFAdy QEPwS tabPR nrRVsT AawKP xNgrt RPQQE VQuuH uEPEPWSY Wjetk YPVWSu kPVWSu oABQgM ZmLup kxsDb IWHuU DYHyW WGvVN gHoVY FQsTR IYCkjKUyE GWiFO QdTNz wSrnLK zbfPJ VQCIX HcXago hXvmIAjV JoxDZRCQ LmCJh SIpyP uTZTKa uPuSW EEwPr UEHEu suVLovI xriRLLI zcyts Osysf HnHMpx XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu PkLtdk zTNZmN KRHFYR BUvHY uBjAYjZ jAZjZ UQQVWO SVWtdAu HsPVB tgoRF TkDef stGQOq KTJcd nneFw cUHsP MoNYP jawLrMOP CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp GdAlb NcdGn KssYp qhIGF tXDUn pwHhQoU iiWXkC BDqku DkhhW dresFFw MEEEPu CuglYO HrdHU FXdHF oLDak QGIYtO SOGYu PPPPPt PPPPP WHjII LhQgDDo HLMMQP hQgDr gnNDOfc dzGyd eYvWU YYtVWh EWWPb uCYYt uVWTb WWWWWS YtVWj PPPPPPPPU SXzCU VSYYt zQbXq adWnQ JMxDD PZTng EAEfEEj EPQEPEj AgJYn ayemHC AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP oOGGAOkX uLJbq zzZdlQAWf jGuxR KoUQQfE fEEPj zPtXJ ixyQZ zvMAeh ttheq NZoIfJ dHucx OaVJb EGWVj BXRic hLErjm dfKNAQg kctYL MSVWu MQWPVk HsPVB sZgVHGvb MEEEPu OcYtX pNMtT PPPPPWSu QQQPu VWuSu PPVWPu uUWVSM MQNDlh YxSqLJA WsGxGyn HlpDn rXRIu LQjBC jIvIe VaAtm qNJLu tYoDv WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu SReQkKbupQ gNUvD TKVCy Fjuqks eUJyDw AHHxKE nQLsAgJg QPLYYMt kqDiYB PQUWu gkmez WrRLPMrp QdMvb zzZHgI TQgrm AmXAD rOLKp gQuaD uynmAmQ YDJtc TTODa xhoTv krIlC PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj RdEMHp aybxyP fJBTz nPjvbJZ RwiTmBq HdDoU GZTOU BGBKB awpxc WxxVL WvvVL WHtAtVL SEKpEI dgIfx WiRBGk iWbrTA swZiTks AcpxRwca dPmcm vQhKT aTuiJ auwum RpXkK CyQOoo pqFRmnT ftmEo JCgZqOX UzDdFUZ totDKm QQQPu MEEEPu EEPVYY dFaSo vxpol zZsFA MTKyjB RrqlmF RBpFvu PFIJch bpoem GlYBLr EPeuEEEEd csmuu UEcsmE PEEhg MlHkV psVHRnx tdrNP VWlCv UQQSV bmJGi XsQCYa MxoDp MRiVn SZBeW wMOss NjfxwgX mJKXL mLjvJ mxBZv krelKn AVwNGLy zjczN cilUD OmRMC UBUDF HNjGB YWPwo MDBnYgt hdyCf qEPAVZX vLUqpP GTBQA rDqqS rBXJR UllEJRc KBzkUIiyvSGDW nZNNS NzvOtSI elDjC pacWJZ DUijIi SICQO NYToK xaOGB FZvnTK upHaNiD mkyNu KGpod WQoKj AyvSgkO OIoFJ NniTH cZnukz wSoms EqKFSl Vngfg yMBqE tQAbY BSKNJM ahLiQ ewntwT kRBJe tvaSW ZFBouq soOCr GhZvo fCGAJ lJBqVoMO uqcXX SzLaLQ EVCMc Mcudw MDioxUY jbNtw MGuOSm NNEwt CoUPE zxBMe YPrQM gyybC YbaXSr DcHsK mvTZj gRyyeTv NQkpIn wbZYQC Mdmmx SuxvFax zMhjM pWihc yEFZfO QyMAM yqSZS RftGuW OjyApa mLsMEV MXvAWA piIVC EnFAj XRMyU VgOKT hbziQB nJMglL jTVgm HQrPfl jxEPD yWhUD eiVesU SnMTA cRABqi MXMPA kHQBxh ncsybjK EUaFaE BktaD GnXCVDg gpMLf OThTBS szDLk hudGu HbAxVez XBjVF NTNKWj ugAVH rgMbty MdnhI YzDhi AEFMGy pWxRqbs kjSoS PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI KjVUjh uHEPu uEHPo DYPEYPhH KLrGISm NUQMj evSqY Nsztm Ujvka krZkU TcXtFo MuUMEIEPML UMEMd bzYYE aWFGU tNvKS rcGVA AeKXF EEEMEME HnEMI MEEEE ntJETE EPEPM UQQMEM lCMJNf mlHgn oUZgs KGHEB HFfhd XtsWF kliMAV dhXwLQV ZIseGQV xuRUvq BOxVg atsDAz WECzps PIZJB Cpbaa nZjhS cRsYQ iKRak UHzwF ZwgWWanR kXKxCy YyGmPci cduAMSBT GeniT tATfD hvdvS IsUci SDIUvFk vjDuv KvFWAa hxtoU GiQiq DlYde ixkDH YjpqX sWClS GpIVN HpZQFz MCZpkqV hafrCGkY hklrW EMMUREPMMM EEMUQ UQMEH MMEUE ENFfhd ZOceSQvS aPffs FOfmD DbBVZ HInGPZ EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU bfhdytC ikGUb htFGn MQMUU UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd rAnCr ULMEH MUUEEMM UEEMMU ypwsESrv DtFGn LReaW hEvrrXz tNgBk rsZQC VAawXAbq UKWFJ lNttE tqvfZR gSEiN lhZVe QISNsR pgZVh dpvLUxoh MyHZf uwfXMw ALHQv locale jGzHY iostream badbit failbit RnUXU VgyoBFMt tNBJk jlanP QDxYR rvfHZr udhenG aTrBn SYUBMGoX NHXLVX PESLT BUdyB IedSg MNFIu MgOoa DteHozpiCH qMNkC BqaPUPS EYlLl iOafpD GrsTe EiJYWz mTKAk XVOkv eaOeVk jnbVUEK array length wunknown error address family supported already connected argument argument domain descriptor message connection already progress BejMm device resource directory empty large function supported unreachable illegal sequence inappropriate control operation invalid error directory rQtLeo network reset network unreachable buffer space child process message available message space device xsYmVrXRT process cWnot supported operation supported Fowner protocol error XRAPJ state recoverable Brtext files system files trXRt wrong protocol FlsAlloc FlsFree rMmgR SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx ZTgBYNI jPQpK uqgmec xWDxYw wsscr BxrNv BMwss ypwsQGh pwsGu MwsSrv kpwsce kpwsV wsscrs BMwsE jwsEe ypwsEf DytkG BizQMY mCcsm kgwUs kgwUs EGAOLSoMD ODiOA gWNHp cdecl stdcall clrcall yFrestrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable iPbrkT placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor juwJwC Class Array Complete Object Locator xpxxxx gxNnI xREWr LiBhBL otJtT GTeFFr GjlyB LiHdz irRvk DtcGn jwceil floor urldexp hypot frexp GYDtL EgWexp fTHYD amMlJ hJOpGP KdpHZ HqQdW VONUK htADc Monday Tuesday FPyYmA krOct January March April FMoND December rpwUs rpwUs kgwUs kgwUs EnumSystemLocalesEx DLCIDToLocaleName FmRyB EpZrRNAN kwvsNPrLr ypwms XiHmF aDtGp XHRhu jwUsuuMrv KejMZ qwfpH UvHJO tpZYF QYvWbT UJtxOP QlHhW umQuYEt bqrwjM VZIrv NroauXF LtmYE cBMNi lRPTLZv vrDGtm qxEvF WHrBR WOHyx xKNPC sFROR MZgAY Vyhkic huxmjPgP FoTYI KVEkbS yRxpL ywpxh ugfqOJ wEtZy hixDeM qyvfF xanHziZ LxDgMEX yVYNT IvSkV lZxDVFgbIV zGntH ChEhO cHGnNwY fPPtA zvcyF yFuoIl FContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey ZfUUU mGmaD nMHhQBFwU vdLgr usage usage MBrvDw RkGYL ANdVM YamlV nicehash oDHjZ GKozH Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ aiFkl vOERB fXfdzV fkINiM sKwZf JLXCM mNlVez RVaNK VCUNrs cLYmV XdEMY uNYFtE vCttD JLpsa zDCQuS RSEbE ttOANnyJ gYBLj ABCDEF BspqM NDtFGn oDHjZ YYpeZ cQaHLS lrdQI ixOXO urvOx ENbQo UBpCm IoXeN eUNaN JyXuQT UVPuwf YVrtQF hjuvNT nDMmk nNDtFGn ffqlJ NItNB VXGVGk VHWDfu hHQRzcO MXGMEkbi PxUBM tZTqYWIb BCRdd EtSmNyUQ Granj CSrcH WjQzF hoWDK XfpSYs SmPUQ zbulLW jLtMD NDtFGn EJUrv NikKjUMOz cWwhti NDtFGn cQUDry oDrNy MrZgwr vGTAO JjwJZ GMEkb vKQZts pceHn CzpMe eEXMx qMIkN HiZNJ hnTTe CMokqO mTKAk LCede ZerZQ xITVlR YKitNi ESmUPXw smMAZ rVzCs wVmZa iFdQQ rVzCs rVzCs rVzCs rVzCs rVzCs FDcSo rVzCs rVzCeoRv DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso MjfUrY AuthenticAMD CyrixInstead NexGenDriven XRUMC RiseRiseRise yrSiS Geode Geode OPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION jUSGlrPentium XRPentium FPentium Pentium MjfUr Mobile Mobile Celeron Pentium IRWIN WESTMERE PENTIUM ZGCORE MOBILE WMMOBILE WOLFDALE MEROM rMORE QUADCORE PINEVIEW CEDARVIEW nrCopyright Plauger licensed Dinkumware RIGHTS RESERVED LgSni GNDtFGn NDtFGn flaMh Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE rEALREADY EBADF ECANCELED ECONNABORTED EDESTADDRREQ EEXIST EINVAL FEMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE FENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY sENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE DUNKNOWN lwENXIO EMLINK WEREMOTEIO JsHvFpermission denied zaddress family supported temporary failure permanent failure family supported KmoJHta ZNkTenZ jresolved protocol unknown service available socket ewkmgi Lconnection already progress operation canceled connection refused connection reset destination address required bukPT Bhost unreachable interrupted system invalid argument error socket already connected message network unreachable yBSkS buffer space available device enough memory machine network space device JAsocket connected directory directory empty ewkmgiBy Wtprotocol error result large system process BejMm cross device permitted unknown error links async event Fpoll signal unknown error iauJrj oNstp malloc malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore CreateEvent FCreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress FGetProcAddress GetProcAddress rkernel GetModuleHandleA CreateSymbolicLinkW powrprof socket Bclosesocket ewkmg wMissing after object member Missing object member escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected rxGrSee Syntax error value object array expected ozNtn Content Length false RGWKZ PPIGW HTnVGF bdfhjlnprvz GMMLH BDFHLPXrZ NSNEMIPVe vvpdMtSYXprtvxz Xnjlm GIpfhlpxz sskrk JLNPRTVXZ bfnpt cnvvgt vNJLM NDFJNVpX ebOVK jnpRd wmcxD JJyeW nTwHok WOEIhY PJSQJ sONsm XGRPb oaKRN klbnITcodA KWvPdc YFgXZnZ VGHhBfo hgRiaaF Vvgjd OBCbXBj pQrxD NzCfts yNikSD rJWDY xVfUrh PWHSz CpaaV enWWeM WxJsu FmsIsk fafyxijfhkdanfrzz NDtFGn oDHjZ UgOas GMEkb SxUBM Idugqc eEXwMx PWBkE dpvLxhM yDZYf fWNky qMIkN YZVnIf qDzCD mTKAk XVOkv eaOeVk ZYgEcZQ RdoTT uhzyStW AHMCc NDtFGn oDHjZ UgOas GMEkb SxUBM Idugqc eEXwMx PWBkE dpvLxhM yDZYf fWNky qMIkN YZVnIf qDzCD mTKAk XVOkv eaOeVk ZYgEcZQ RdoTT uhzyStW AHMCc NDtFGn oDHjZ UgOas GMEkb SxUBM Idugqc eEXwMx PWBkE dpvLxhM yDZYf fWNky qMIkN YZVnIf qDzCD mTKAk XVOkv eaOeVk ZYgEcZQ RdoTT uhzyStW AHMCc NDtFGn oDHjZ UgOas GMEkb SxUBM Idugqc eEXwMx PWBkE dpvLxhM yDZYf fWNky qMIkN YZVnIf qDzCD mTKAk XVOkv eaOeVk ZYgEcZQ RdoTT uhzyStW AHMCc NDtFGn oDHjZ UgOas GMEkb SxUBM Idugqc eEXwMx PWBkE dpvLxhM yDZYf fWNky qMIkN YZVnIf qDzCD mTKAk XVOkv eaOeVk ZYgEcZQ RdoTT uhzyStW AHMCc NDtFGn oDHjZ UgOas GMEkb SxUBM Idugqc eEXwMx PWBkE dpvLxhM yDZYf fWNky qMIkN YZVnIf qDzCD mTKAk XVOkv eaOeVk nKjMuoU LLRew ZTqlR EvSmA oDHZbp KePKoL zmlanj fsqJZNh KVVWL MXPKo ikDKK KnpKNv QtqmC MpvKq peUWDxY LwmlN ntzbw lWYWL tmjWF gOdasTtHY NjNOPd tvphc XAbqNf FvfHZd OymzN GMEkb SxUBM Idugqc eEXwMx PWBkE RNAkbdu AtXswr KGZjWB lQRBq jmjOMI wfXiq ysqbJU lLXmz CWIYz jMkGnFcp XrcVk ktizWPP,1\nprogram cannot mRich rdata reloc UQSVu UURQuM PuSuu EEEEE UQSVW USVWN UQVWN vQWVL UQWVE uErCw SUSUQSQSUQUQU PUPUSPSPUSUSS USUQSQSUQUQU SVWUJE SVpYPWy xXQqPpE WwHXu UQVWN tGHEK ntRSN EERQP USVWG StSVPFI UQSVq UQSVu UQSVu UEEUE MvSEN UQSVW UQSVWy UQSVWy SWSRPI RPRPj LSUVT VVSVt GPQju WPSVj uSUVh BDADBD BDADBD SUVWh QSUVWs SUVWC xdUUh vxRPV SUVWV YQSUVW UUjWUh YQUVj SUVWj DSUVW HQVVVP HPVVVt NbPQu QSUVWj YXftmT QSUVW BDRYV SUVWu sdtDF ClBCdt shslS sXPVjt tLsdB YQSUVW QSUVWj jVhiA SUVWD jVhiA GXGTt FPAdFTA VDrMw TxTVPHP wSNXt FLNHVXPQPQ SUVWD uzWhhF SUVWF SUVWj QwLGDwP QSUVWF jWhiA CXCTt UQSVWC QQVfL SUVWF tNSWv PhTcG tBWhA QSUVW SUVWD PhLsG GHEGL GPEGTE PhdzG QSUVW tfFxC xrNdQ WtjVw SUVWw VWNXu SUVWD YQSUl SUVWz SUVWu NpFtu DSUVW VUwTGPj PQVYYt EntelE ineIEE GenuE xffftfpflfhE PeuEEEEd YYEPV UQQEP UQQEP UQQEP UQQSEVP NbPQZx UQSVu UQQSVWd PPPuu csmukx UQSVW EPuuu HuYUE EPYYE csmuP EPEPSu YYuMp VPWjWu EPEPu tPtLw PQYYPVh USVWu URPQQhB USVWj USVWUj UQPXY ffffffE PPPPPy VVVVVf VVVVV USVWN USVWN UQQSVWN UQQSVWN UQSVW UQSVW ItOLt ItOLt ItSLtBTt QWEPH QWEPH jAZjX pwUtGer QSEPH UQQVWN UQQVWjgYjGN PPESP jsXfF UQSVWF PuEPH EPEPA PuEPH UQQSVW MPEPM SSSSS EEEEEPEPEPjU EXEEEPEPEP EEMEEEEPEPEPu UQQSVW EEEPEMPEPM UQQVu GsSSj AuVSYYt AuVSYYt EQPjjM UQVWn tAtAt PPPPP SVWtdAu UQVWj UQQSWj UQSVu UQQVu HXtJfUf UQQSu BEIMMj YtpEM EPEPuu EPEPuu uEMEuPEPEP QMQPEPu UQSVu rSShU uESPS ESVPt uluESVPuESVPuESVP EPuSQ MUEuZEt CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp gBEPj tSVjA jAZjZ SSSSSR EXEEEPEPEP EPEPE UQQSVW PPPPP QSSSSj uuuEu EMXEEEPEPEP EXEEEPEPEP XEMEEPEPEPl PPPPPs MSVWu MMFUm EPdYY HLMMQPd HLMMQP ytVYtVWj EEwPr UEHEu VWPbM PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu EXEEEPEPEPNE EXEEEPEPEP XEEEPEPEPj EMXEEEPEPEP upvRG EGWVj MuQVWSj OMEfy jdVQI PPPPPJ MSVWu MQWPVb PPPPPG UQQVW UQSVW EVhLJF EVhxJF EVhIF EVhIF EVhIF EVhIF EVhIF EVhIF SSPQSS PPSWv SSSSS YuDiE PPPPP SSSSSn SVWJF uASYu uEMEuPEPEP jXEPu UWVSM UQQfE fEEPj EAEfEEj EPQEPEj MSVWu uVPRQe PRPQh XEMEEPEPEP tOEfE uuEUM SSSSS SjYYt WWWWWs WWWPWS WPWPW WPWPh SSVWh EXEEEPEPEP YuwHu UQSVW tVVYWWWW PPuWSVPP EYYMxO PEYYtEu SSSSS PPPPPA PNYFD ESVWu UQSVu VVWYY wLuCj PPPPPWSu QQQPu VWuSu PPVWPu WWRsZ YYuJE EYYDz PgYYj PIfYYj PPPPPUhRF SSSSS WWVuj uPVuu WWSuj QVSuj WWWuVuSu PPPPPPPPU UQQVu PUtYu UQQSV VSEYY PPPEP PuEEd PeuEEd EPeuEEEEd csmuu VMoYY UEcsmE VWlCv UVWwL UjhYE ADUVu EVPEd EfEEP EVWPEd fUWEE fUWEE uEVPE EVWPEd EfUVEE EfEVEE IfEVEE EfUVEE IfEuEE EVWPEd uEVPE EVWPEd IfEuEE fuuEVPE EVPEd EfEEP EPEPEP VPbXE EVWPEd EVPjLh UjhIE ESVWPEd UQSVWu EVWPEd QPQMA AjDWI EVWPEd MwEPEPM EEEMEu tetaDF EVWPEd fEVEE UQSVW wfQRE jZRPjjO tIRQjj whODwdD UQSVW jyRPjjn wmQRE NLFHM RPpVD RPpVD RPpVD UQVFN RPpVD ESVWPEd UjhbE EMPMd UQSVW PQSVW SVWuPj tUMmv UQQPZG UQSVW MVWPA MVSPA UQSVW ESVWPEd uMCMd WtCBt UQSVu EVWPEd uClPY EVWPEd FjVQh ESVWh RPCFH EUjhE VjWQh BHVWzH tESHF RVhLF DPhDF ztJpt USVWxp UQVjv SVMWuZj EUMfM uNxJP ESVWPEd IUjhzE iUVWj QHXYHE EPVVj EMQPVj EVWPj EPVVj EMQPVj EEPhxF EMQPWj QSVWh QSVWG EAdEA EAhEAlEA ALAPEATY qdEAX QhAtU UESVH PQEPe UQSVWS PQVaE EEVuWE UUUUUUUU UUUUUUUU UUUUUUUU UUUUUUUU DtTpD DPTTDT DpTtDt DtTpD UTSVUWF MNXVXj QTDAPm PEPEPEPEPEPEPEPN PEPEPEPEPEPEPU PEPEPEPEPEPEPEPN PEPEPEPEPEPEPUI EVPjLh EEEEEE EVPjLh EVWPEd EfEEPIEPEEPJEP Fujhj UQSVW tShlF uNBear ESVWj fELGL DUEZE SVUWEw UQSWMSQRW MEuubU ESVWh ESVWj SVWuX UQQSV EPEPs MKMKhKT IMEIT MBIMHh ejXPk sxwwT jXEPf jxEPe allocation array length address already connected argument domain address message connection aborted connection reset cross device device resource executable format error exists filename function supported unreachable identifier removed illegal sequence inappropriate control operation interrupted error directory message network network reset network unreachable buffer space child process available message available message protocol option space device stream resources socket stream connected supported operation progress operation supported operation would block owner system resource deadlock would occur resource unavailable again result range state recoverable stream timeout timed files system files symbolic levels value large wrong protocol FlsAlloc FlsFree FlsGetValue FlsSetValue InitOnceExecuteOnce CreateEventExW CreateSemaphoreW CreateSemaphoreExW SetThreadpoolTimer SetThreadpoolWait CloseThreadpoolWait GetCurrentPackageId GetTickCount InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx exception based cdecl pascal stdcall thiscall fastcall vectorcall clrcall restrict unaligned restrict delete operator vftable vbtable vcall typeof local static guard string vbase destructor vector deleting destructor default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator vector vbase constructor iterator virtual displacement vector constructor iterator vector destructor iterator vector vbase constructor iterator constructor closure returning local vftable local vftable constructor closure delete callsig placement delete closure placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic initializer dynamic atexit destructor vector constructor iterator vector vbase constructor iterator managed vector constructor iterator local static thread guard operator operator await Descriptor Class Descriptor Class Array Class Hierarchy Descriptor Complete Object Locator xpxxxx Visual enough memory complete strerror CorExitProcess LEUNICODE gmsmr yrvxyN yICyJ EtTWt Sunday Monday Tuesday Wednesday Thursday Friday Saturday January February March April August September October November December LocaleNameToLCID RoInitialize RoUninitialize error Operation permitted directory process Interrupted function Input output error device address format error descriptor child processes Resource temporarily unavailable enough space Permission denied address Resource device exists Improper device directory directory Invalid argument files system files Inappropriate control operation large space device Invalid system links Broken Domain error Result large Resource deadlock avoided Filename locks available Function implemented Directory empty Illegal sequence floor ldexp hypot frexp nextafter LtmYE jUIlN fXLzB uYPwH zGntH SchedulerKind MaxConcurrency MinConcurrency ContextStackSize ContextPriority SchedulingProtocol WinRTInitialization MaxPolicyElementKey EViqN ZfUUU uptime failures error connection total highest threads hashrate worker brand sockets version hugepages donate level current shares shares total hashes total error results jsonrpc method submit params nonce result Unauthenticated banned Address currently banned target jsonrpc login method login agent params error result error params method message jsonrpc method keepalived params xmrig stratum nicehash minergate POSIXLY CORRECT access token worker background config affinity priority donate level keepalive usage nicehash color pages print retries retry pause syslog threads agent userpass version background colors affinity priority donate level pages usage print retries retry pause syslog threads agent userpass keepalive nicehash access token worker cryptonight cryptonight supplied Exiting unable pools xmrig information XMRig built features libuv libmicrohttpd cryptonight light ambiguous option option doesn argument unknown option option requires argument option requires argument Usage xmrig OPTIONS Options cryptonight default cryptonight mining server userpass username password mining server USERNAME username mining server PASSWORD password mining server threads number miner threads algorithm variation select keepalive keepalived prevent timeout support retries number times retry before switch backup server default retry pause pause between retries default affinity process affinity cores priority process priority normal highest pages disable pages support color disable colored output donate level donate level default minutes minutes agent custom agent string background miner background config format configuration output usage maximum usage automatic threads default adjust threads settings current nicehash enable nicehash xmrig proxy support print print hashrate report every seconds miner access token access token worker custom worker display version output version information unknown option config menabled mdisabled mVERSIONS mXMRig libuv VERSIONS XMRig libuv mavailable munavailable mHUGE PAGES enabled disabled available unavailable PAGES affinity THREADS sdonate mTHREADS sdonate mPOOL mCOMMANDS mashrate mause mesume COMMANDS hashrate pause resume RtlGetVersion XMRig Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ jsilrF WZuPv kgyAc ruGooK onOaU JLXCM mNlVez kkooT bMvvE jjFgr dNNIllVV eezzG BqffHH BBhhAA kkooTP bMvvE qqsSb jjFgKr LLXXJk cwucB NNIllVV eezzG oxxoJ IUUxP kkooT LXXJk NIllVV eezzG kkooT bMvvE IllVV eezzG qffHH Bearer application Content Access Control Allow Origin Access Control Allow Methods Authorization Access Control Allow Headers OPTIONS Authorization ABCDEF abcdef vector string ABCDEF DyCxD FMraB rHaxHy QJvaJ Lafir MrbnMG ScbuS BXVch EydVfYd sTNNe ekhHDb ghJzg iDhTi ngRJqn XqkYqz RyXsW ztUutGtc Ngvazjv Unknown exception error document empty document followed other values Invalid value Missing object member Missing colon after object member Missing comma after object member Missing comma after array element Incorrect digit after escape string surrogate string invalid Invalid escape character string Missing closing quotation string Invalid encoding string Number stored double fraction number exponent number Terminate parsing Handler error Unspecific syntax error Unknown error CreateEvent WaitForSingleObject ReleaseSemaphore malloc Unknown system error Unknown system error argument permission denied address already address available address family supported resource temporarily unavailable temporary failure flags value invalid value hints request canceled permanent failure family supported memory address unknown service argument buffer overflow resolved protocol unknown service available socket socket supported connection already progress descriptor resource locked operation canceled invalid Unicode character software caused connection abort connection refused connection reset destination address required already exists address system argument large unreachable interrupted system invalid argument error socket already connected illegal operation directory symbolic links encountered files message network network unreachable table overflow buffer space available device directory enough memory machine network protocol available space device function implemented socket connected directory directory empty socket operation socket operation supported socket operation permitted broken protocol error protocol supported protocol wrong socket result large system cannot after transport endpoint shutdown invalid process connection timed cross device permitted unknown error device address links remote error inappropriate ioctl device conout ntdll GetModuleHandleA GetProcAddress kernel CreateSymbolicLinkW CancelIoEx CancelSynchronousIo powrprof SetWinEventHook Unknown error QueueUserWorkItem THREADPOOL WSAStartup getsockopt closesocket socket UnregisterWaitEx wwwwwwwwwwwwwwww idata rdata rdata rdata rdata sxdata rdata zzzdbg xdata idata idata idata idata Copyright Plauger licensed Dinkumware RIGHTS RESERVED Failed mutex Fatal error libmicrohttpd Failed unlock mutex Failed connection count Failed previously added address libmicrohttpd microhttpd daemon Previously added address counter libmicrohttpd microhttpd daemon Failed libmicrohttpd microhttpd daemon Error during libmicrohttpd microhttpd daemon Error during select Failed fdset called except behavior unsupported Error during select daemon worker external Error during Assertion failed Program aborted Close socket failed Socket descriptor larger SETSIZE libmicrohttpd microhttpd daemon Failed mutex Failed unlock mutex libmicrohttpd microhttpd daemon Close socket failed Server reached connection limit Closing inbound connection connection nextX libmicrohttpd microhttpd daemon connection prevX libmicrohttpd microhttpd daemon Close socket failed connection libmicrohttpd microhttpd daemon Close socket failed Close socket failed Error allocating memory Error allocating memory Close socket failed connection libmicrohttpd microhttpd daemon Failed unlock mutex libmicrohttpd microhttpd daemon Close socket failed Error allocating memory Server reached connection limit Closing inbound connection Failed create thread libmicrohttpd microhttpd daemon connection Failed unlock mutex libmicrohttpd microhttpd daemon Failed mutex Failed unlock mutex libmicrohttpd microhttpd daemon Failed mutex connection suspended connection libmicrohttpd microhttpd daemon Assertion failed Program aborted Assertion failed Program aborted Close socket failed connection libmicrohttpd microhttpd daemon Failed unlock mutex libmicrohttpd microhttpd daemon Assertion failed Program aborted Assertion failed Program aborted Error connection scheduled upgrade cannot suspended Failed mutex Failed unlock mutex libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon daemon worker Failed signal connection inter thread communication channel libmicrohttpd microhttpd daemon Failed mutex libmicrohttpd microhttpd daemon suspended libmicrohttpd microhttpd daemon connection nextX connection daemon normal timeout connection prevX connection daemon normal timeout Assertion failed Program aborted Assertion failed Program aborted Failed unlock mutex libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon Failed nonblocking client socket connection connection daemon connections connection connection daemon connections Assertion failed Program aborted Assertion failed Program aborted libmicrohttpd microhttpd daemon Error accepting connection Failed noninheritable client socket libmicrohttpd microhttpd daemon Failed mutex Failed unlock mutex libmicrohttpd microhttpd daemon Failed mutex daemon cleanup libmicrohttpd microhttpd daemon daemon cleanup libmicrohttpd microhttpd daemon Failed unlock mutex connection nextX connection daemon normal timeout Close socket failed Failed thread connection prevX connection daemon normal timeout Assertion failed Program aborted Assertion failed Program aborted Close socket failed Failed mutex Failed unlock mutex libmicrohttpd microhttpd daemon Illegal timeout libmicrohttpd microhttpd daemon Could obtain daemon fdsets select failed connection nextX connection daemon manual timeout failed connection prevX connection daemon manual timeout Assertion failed Program aborted Assertion failed Program aborted Failed mutex failed libmicrohttpd microhttpd daemon suspended libmicrohttpd microhttpd daemon resuming connection connection daemon connections connection connection daemon connections Assertion failed Program aborted Assertion failed Program aborted libmicrohttpd microhttpd daemon daemon connections libmicrohttpd microhttpd daemon Assertion failed Program aborted Assertion failed Program aborted daemon connections Failed unlock mutex libmicrohttpd microhttpd daemon Using quiesce daemon requires libmicrohttpd microhttpd daemon Assertion failed Program aborted Cannot suspend connections without enabling ALLOW SUSPEND RESUME libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon Warning large timeout value ignored libmicrohttpd microhttpd daemon Specified thread Cannot resume connections without enabling ALLOW SUSPEND RESUME libmicrohttpd microhttpd daemon Failed create inter thread communication channel libmicrohttpd microhttpd daemon Failed destroy failed initialize nonce mutex Failed signal resume inter thread communication channel libmicrohttpd microhttpd daemon Assertion failed Program aborted daemon shutdown Failed allocate memory nonce Failed create socket listening libmicrohttpd microhttpd daemon Assertion failed Program aborted Specified value large Failed nonblocking listening socket Unknown address family libmicrohttpd microhttpd daemon setsockopt failed Socket descriptor larger SETSIZE libmicrohttpd microhttpd daemon setsockopt failed failed initialize connection limit mutex daemon suspended connections Assertion failed Program aborted Assertion failed Program aborted setsockopt failed Failed destroy mutex libmicrohttpd microhttpd daemon Failed failed initialize connection limit mutex libmicrohttpd microhttpd daemon listen daemon suspended connections Assertion failed Program aborted Assertion failed Program aborted Close socket failed Failed create listen thread libmicrohttpd microhttpd daemon single libmicrohttpd microhttpd daemon nextX Assertion failed Program aborted Assertion failed Program aborted Failed listen connections Failed destroy mutex libmicrohttpd microhttpd daemon Failed destroy mutex libmicrohttpd microhttpd daemon prevX nextX Assertion failed Program aborted Assertion failed Program aborted Close socket failed Failed destroy worker libmicrohttpd microhttpd daemon failed initialize cleanup connection mutex libmicrohttpd microhttpd daemon prevX Assertion failed Program aborted Assertion failed Program aborted pflags Failed destroy mutex libmicrohttpd microhttpd daemon Failed create thread libmicrohttpd microhttpd daemon Assertion failed Program aborted Failed listen number Failed destroy mutex libmicrohttpd microhttpd daemon Failed destroy mutex Failed signal resume connection inter thread communication channel libmicrohttpd microhttpd daemon Failed destroy process system resource limit FIRST connection really there proceed waiting system resources become magically available Failed unlock mutex libmicrohttpd microhttpd daemon Failed mutex Failed thread process system resource limit connections temporarily suspending accept Consider setting lower OPTION CONNECTION LIMIT libmicrohttpd microhttpd daemon daemon called while suspended connections Failed unlock mutex Failed noninheritable incoming connection socket daemon called while suspended connections Failed thread Failed nonblocking incoming connection socket Failed mutex daemon options INTERNAL POLLING THREAD libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon Assertion failed Program aborted Assertion failed Program aborted Close socket failed INVALID SOCKET libmicrohttpd microhttpd daemon INVALID daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon Failed thread libmicrohttpd microhttpd daemon Failed destroy Failed destroy mutex libmicrohttpd microhttpd daemon Failed destroy mutex libmicrohttpd microhttpd daemon Failed destroy mutex select called except behavior deprecated Could listen socket fdset Close socket failed Could control inter thread communication channel fdset Error allocating memory libmicrohttpd microhttpd daemon Assertion failed Program aborted Close socket failed Failed destroy mutex libmicrohttpd microhttpd daemon CONNECTION UPGRADE connection state libmicrohttpd microhttpd daemon Upgrade Connection nextX daemon normal timeout Assertion failed Program aborted Assertion failed Program aborted Close socket failed Upgrade Failed unlock mutex libmicrohttpd microhttpd daemon Failed mutex Failed unlock mutex libmicrohttpd microhttpd daemon Failed destroy mutex prevX daemon normal timeout Failed unlock mutex nextX daemon manual timeout Assertion failed Program aborted Assertion failed Program aborted Close socket failed Failed mutex connection libmicrohttpd microhttpd daemon connection libmicrohttpd microhttpd daemon prevX daemon manual timeout Assertion failed Program aborted Assertion failed Program aborted Close socket failed Expect Failed unlock mutex libmicrohttpd microhttpd daemon Failed unlock mutex libmicrohttpd microhttpd daemon Assertion failed Program aborted Assertion failed Program aborted daemon worker Closing connection memory libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon Assertion failed Program aborted false Closing connection application error generating response libmicrohttpd microhttpd daemon cblen Failed signal quiesce inter thread communication channel libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon upgrade failed signal quiesce inter thread communication channel Warning specified thread ignored Thread Connection Warning specified thread ignored Thread OPTION THREAD option THREAD CONNECTION specified OPTION THREAD option specified INTERNAL POLLING THREAD specified Connection PEDANTIC CHECKS ignored because another behavior specified OPTION STRICT CLIENT Connection OPTION LISTEN SOCKET specified daemon LISTEN SOCKET Invalid option terminate OPTION HTTPS option passed compiled without HTTPS support Using debug build libmicrohttpd Close socket failed Alive Warning THREAD CONNECTION INTERNAL POLLING THREAD INTERNAL POLLING THREAD added Consider setting INTERNAL POLLING THREAD explicitly descriptor inter thread communication channel exceeds maximum value libmicrohttpd microhttpd daemon thread pooling works INTERNAL POLLING THREAD libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon Assertion failed Program aborted Failed initialize winsock libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon descriptor worker inter thread communication channel exceeds maximum value Failed create worker inter thread communication channel libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon connection version Initiated daemon shutdown while upgraded connection closed libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon Failed signal shutdown inter thread communication channel libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon Alive libmicrohttpd microhttpd daemon Connection libmicrohttpd microhttpd daemon daemon worker Winsock version available Connection libmicrohttpd microhttpd daemon Assertion failed Program aborted close libmicrohttpd microhttpd daemon Connection libmicrohttpd microhttpd daemon Assertion failed Program aborted identity libmicrohttpd microhttpd daemon Transfer Encoding Failed signal shutdown inter thread communication channel CONNECT libmicrohttpd microhttpd daemon Assertion failed Program aborted Assertion failed Program aborted close Content Length close alive libmicrohttpd microhttpd daemon Content Length chunked encoding content length libmicrohttpd microhttpd daemon Assertion failed Program aborted close Alive libmicrohttpd microhttpd daemon Connection Failed signal shutdown inter thread communication channel Connection close libmicrohttpd microhttpd daemon Assertion failed Program aborted enough memory write Connection Alive libmicrohttpd microhttpd daemon Alive libmicrohttpd microhttpd daemon Connection libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon Closing connection failed create response header libmicrohttpd microhttpd daemon libmicrohttpd microhttpd daemon libmicrohttpd microhttpd response Assertion failed Program aborted libmicrohttpd microhttpd response Invalid response upgrade application failed Upgrade header libmicrohttpd microhttpd response libmicrohttpd microhttpd response libmicrohttpd microhttpd response libmicrohttpd microhttpd response Application reported internal error closing connection libmicrohttpd microhttpd response libmicrohttpd violation libmicrohttpd microhttpd response Assertion failed Program aborted enough memory allocate header record Cookie Application reported internal error closing connection libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection Assertion failed Program aborted continue libmicrohttpd microhttpd connection Closing connection application reported error generating Received malformed colon Closing connection libmicrohttpd microhttpd connection Assertion failed Program aborted libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection cblen sizeof Assertion failed Program aborted libmicrohttpd microhttpd connection Assertion failed Program aborted Assertion failed Program aborted libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection Assertion failed Program aborted Assertion failed Program aborted libmicrohttpd microhttpd connection Transfer Encoding chunked libmicrohttpd microhttpd connection connection response Error processing request response Closing connection Assertion failed Program aborted connection colon libmicrohttpd microhttpd connection title Request title header memory constraints webserver libmicrohttpd microhttpd connection Assertion failed Program aborted Assertion failed Program aborted libmicrohttpd microhttpd connection title Internal server error title Please developer server carefully libmicrohttpd documentation about connection management blocking Assertion failed Program aborted libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection Assertion failed Program aborted Assertion failed Program aborted libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection Assertion failed Program aborted Assertion failed Program aborted libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection title Request title header memory constraints webserver Assertion failed Program aborted title Request title header memory constraints webserver enough memory parse cookies title Request title header memory constraints webserver Received malformed request chunked encoding Closing connection Received malformed request chunked encoding Closing connection WARNING incomplete upload processing connection suspended result connection Received request without header libmicrohttpd microhttpd connection title Request title header memory constraints webserver libmicrohttpd microhttpd connection title Request title header memory constraints webserver Assertion failed Program aborted title Request malformed title request syntactically incorrect libmicrohttpd microhttpd connection connection response title header required title requests include header request lacked header Assertion failed Program aborted chunked Transfer Encoding Failed parse Content Length header Closing connection Content Length connection nextX libmicrohttpd microhttpd connection Failed mutex libmicrohttpd microhttpd connection connection nextX connection daemon normal timeout connection prevX connection prevX connection daemon normal timeout Assertion failed Program aborted Assertion failed Program aborted Failed unlock mutex libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection Assertion failed Program aborted Assertion failed Program aborted libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection Connection socket closed unexpected error reading request Socket unexpectedly disconnected reading request libmicrohttpd microhttpd connection Assertion failed Program aborted Assertion failed Program aborted libmicrohttpd microhttpd connection Failed request Continue libmicrohttpd microhttpd connection Connection closed while sending response headers Assertion failed Program aborted libmicrohttpd microhttpd connection Failed mutex libmicrohttpd microhttpd connection offset exceeds limit Failed unlock mutex libmicrohttpd microhttpd connection Failed request Assertion failed Program aborted libmicrohttpd microhttpd connection Connection closed while sending response Assertion failed Program aborted libmicrohttpd microhttpd connection Connection closed while sending response Assertion failed Program aborted libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection Assertion failed Program aborted Assertion failed Program aborted libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection Internal error Assertion failed Program aborted Failed mutex connection libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection connection connection daemon suspended connections connection connection daemon suspended connections Assertion failed Program aborted Assertion failed Program aborted libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection connection nextX connection daemon normal timeout connection connection prevX connection daemon normal timeout Assertion failed Program aborted Assertion failed Program aborted Failed unlock mutex libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection connection nextX connection daemon manual timeout connection prevX connection daemon manual timeout Assertion failed Program aborted Assertion failed Program aborted libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection connection connection daemon connections connection connection daemon connections Assertion failed Program aborted Assertion failed Program aborted libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection Assertion failed Program aborted Assertion failed Program aborted libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection Failed signal connection inter thread communication channel Failed mutex Failed unlock mutex title Request malformed title request syntactically incorrect title Request malformed title request syntactically incorrect Closing connection failed create response header libmicrohttpd microhttpd connection Failed unlock mutex Failed mutex Failed unlock mutex libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection Failed unlock mutex Failed unlock mutex libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection Closing connection failed create response header libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection Failed mutex Assertion failed Program aborted connection nextX connection nextX connection daemon normal timeout connection prevX libmicrohttpd microhttpd connection Assertion failed Program aborted libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection connection prevX connection daemon normal timeout connection nextX connection nextX connection daemon manual timeout Assertion failed Program aborted Assertion failed Program aborted connection prevX libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection connection prevX connection daemon manual timeout Assertion failed Program aborted Assertion failed Program aborted Failed unlock mutex libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection Assertion failed Program aborted Assertion failed Program aborted libmicrohttpd microhttpd connection libmicrohttpd microhttpd connection Assertion failed Program aborted Attempted queue response wrong thread libmicrohttpd microhttpd connection Application invalid status upgrade response Attempted upgrade connection daemon without ALLOW UPGRADE option Specified event object handle invalid error parameters invalid Insufficient memory available Overlapped event object signaled state Overlapped operation aborted Interrupted function Overlapped operations complete later Permission denied handle valid Invalid argument address Resource temporarily unavailable files Operation already progress Operation progress Destination address required Socket operation nonsocket Protocol wrong socket Message Protocol supported protocol option Operation supported Socket supported Address family supported protocol family Protocol family supported Cannot assign requested address Address already Network unreachable Network Software caused connection abort Network dropped connection reset buffer space available Connection reset Socket connected Socket already connected references Cannot after socket shutdown Connection refused Connection timed Cannot translate route processes Directory empty quota exceeded quota exceeded remote Stale handle reference Winsock version range Network subsystem unavailable Graceful shutdown progress Successful WSAStartup performed canceled results Service provider invalid Procedure table invalid System failure Service provider failed initialize Class found Service found canceled results found Database query refused nonrecoverable error Nonauthoritative found receivers Valid record requested senders senders request confirmed receivers policy failure admission error object style generic error traffic control error flowspec error service error Invalid filter style Invalid provider buffer Incorrect filter count Invalid filter Incorrect count Invalid object length Invalid policy object Unrecognized object Invalid provider specific flowspec Invalid descriptor Invalid shape discard object Invalid provider specific filterspec Reserved policy element Invalid shaping object Unknown winsock error Switching Protocols Continue Processing Accepted Created Content Authoritative Information Partial Content Reset Content Already Reported Multi Status Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Moved Permanently Multiple Choices Other Found Proxy Modified Temporary Redirect Switch Proxy Request Permanent Redirect Payment Required Unauthorized Found Forbidden Acceptable Method Allowed Request Timeout Proxy Authentication Required Conflict Precondition Failed Length Required Payload Large Range Satisfiable Unsupported Media Unknown Expectation Failed Unknown Unknown Unprocessable Entity Misdirected Request Failed Dependency Locked Upgrade Required Unordered Collection Precondition Required Unknown Unknown Requests Unknown Request Header Fields Large Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Unknown Response Unknown Unknown Unknown Unknown Unknown Blocked Windows Parental Controls Retry Internal Server Error Unavailable Legal Reasons Gateway Implemented Gateway Timeout Service Unavailable Variant Negotiates Version Supported Detected Insufficient Storage Extended Bandwidth Limit Exceeded Unknown Network Authentication Required GenuineIntel GenuineIntel AuthenticAMD AuthenticAMD CyrixInstead CyrixInstead NexGenDriven NexGenDriven GenuineTMx GenuineTMx CentaurHauls CentaurHauls RiseRiseRise RiseRiseRise Geode Geode PHENOM OPTERON FUSION PHENOM FUSION FUSION FUSION FUSION PENTIUM POTOMAC IRWIN WESTMERE GAINESTOWN CELERON PENTIUM MOBILE MOBILE MEROM WOLFDALE PENRYN PENTIUM QUADCORE DIAMONDVILLE SILVERTHORNE CEDARVIEW PINEVIEW Pentium Pentium Pentium Pentium Pentium Pentium Pentium Pentium Genuine Intel Genuine Intel Intel Intel Mobile Mobile Celeron Celeron Pentium Pentium AVtype AVbad alloc AVbad array length AVlogic error AVlength error AVbad exception count count alloc ExceptionPtr StaticAllocator count ExceptionPtr AVApp AVIConsoleListener AVConsoleLog AVILogBackend AVFileLog AVNetwork AVIStrategyListener AVIStrategy AVDonateStrategy AVIClientListener AVFailoverStrategy AVexception AVIWorker AVWorker AVDoubleWorker AVSingleWorker VeriSign Class Public Primary Certification Authority VeriSign VeriSign Trust Network VeriSign authorized VeriSign Class Public Primary Certification Authority ICcjRK verisign https verisign image verisign vslogo verisign uQVmS Symantec Corporation Symantec Trust Network Symantec Class Signing Shaanxi JingTech electronic Technology JingTech electronic Technology ERxBy QZInMtzfF bJBbZ symcb https symcb https symcb symcd symcb VeriSign VeriSign Trust Network VeriSign authorized VeriSign Class Public Primary Certification Authority Symantec Corporation Symantec Trust Network Symantec Class Signing symcb symauth symauth symcb SymantecPKI DZapo MLrgw Symantec Corporation Symantec Trust Network Symantec Class Signing eizflm VeriSign Class Public Primary Certification Authority VeriSign VeriSign Trust Network VeriSign authorized VeriSign Class Public Primary Certification Authority ICcjRK verisign https verisign image verisign vslogo verisign uQVmS Symantec Corporation Symantec Trust Network Symantec Class Signing Shaanxi JingTech electronic Technology JingTech electronic Technology ERxBy QZInMtzfF bJBbZ symcb https symcb https symcb symcd symcb VeriSign VeriSign Trust Network VeriSign authorized VeriSign Class Public Primary Certification Authority Symantec Corporation Symantec Trust Network Symantec Class Signing symcb symauth symauth symcb SymantecPKI DZapo MLrgw Symantec Corporation Symantec Trust Network Symantec Class Signing hUDcTw TyYmwyh UIGIuv,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj QagopJ QRgJO fppzs WOVUP OaKRIb TmzWocV pcQfLYM MfEQl VPHjp JhAoe ZBtLm ODqLoPb kMlchg zBeyNMr RxfwB jyodJ jJdiqL kijmayL dPhrKR xlBrH MtEAwi vcnXM pQbFk QCGzh hTswL ITnopJ tRvSC LYpPO zRzBIP waglSW RuQqi DywTugEpkOP IUmDD qjtbT lOHDP yrveh xtAXcJ bEQDk MiOxA eGkuX lwXcV KnGhN WLmogI xPrcUo hNZRx yXXui YOanC IrbmWuif mEUzF MwhGl RtwlB WmjxA suSkcUk EuSoM yGOhX MzFjt mrYJlE FeuyEti KTwPwv dVzaLZ ZhxBO Kvlbc EGpUh onhVMHW oDWDy hEQBzAq tEBLv UwUdOp GAyRZ lbESL TKgkN SenWif XGfYU tzbZdb zrPuD DBWKN EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl CagopJ SKayh QcrvCD bJCKP ZveDr lrdtBwc csQQC GxHAO vLtRX ObyQbv rHsrH ogOLyw RwpvsdD YmxqzAQ xeUjh QaJUY woJLQ PXOSBD fLlhM SAbXJy xtRYrTR yJllHL JiCWR UsVzHQ ASVWN uxiWI HJytmGA xkWYR kXvCpd GTrDI jsAfCvo cwRtL HUetT mgizL Kdapw DmFcr KnENC mfbWM oBbem FKeCq cHhyg ymZeu BOzLi NwiRD dRRSrh vQjLk LNtaz SvJgx SOSGJs cjAiA UQSVWf QyzlE zTSkl bYpVZJ VLUgGU vgNZSeU fEKhv SVpYPWy xXQqPpD WwHXt BHnUo ZBAsm EZeCuK QipoNl CkGkv aThmc FVxRj Xgzom bgMVKN AeHsx skUMo ynueO zpkbW jQFTtB lPaYl AoMSW zgExhOG jjJYI YFlAj CrtdqBQ lsoAf ZxnkOxi xbvjI VtyrP ghiqSn XgGsc DvPuD phQTUf LmpjI BSxJO CGeKK ozHRQ XjYdBf agopJ JHhxmo pEajk GzRsJ gZgjiS VMoAS YXVEE kLVaN EWPScu hqvkTv EzaBk OSOJJ ZOcqS aKodae llbOh zpeysl gBDDcNW YotHG gCDvVl rAnlbw tYHeF dKEOI nBIad YbXyqeM qKXZrQMecdk egedWi yHsIvBjA nddja JmMBU pAjNSK cBDYm gtVtX dRurf aVGSZ KXetL EhAQaYP doEiw OZhEz dKHgx JyAMK LxZGaoHXzMAz qJjVR BtsOJ mIJqw QagopJ qSkGJ ATdkr nIOqHG NqVzaKv enFUk HWKWU xtnqW giQTu zIBCI dMJjVhB TSUVWL VWRPN VWRPq zqdjd lpGmN AkJrk rGNon Gcjgc SVWhI xZCiqg YCwvq Yuhbu iPQiF QagopJ QNrRf BAFFk bLetP JSKBf yvurmFHHn STHQR CpuIV GGLpW dbYkg tHUeI sgEeb yULQA ghduA SUVWT boVjR NjnSX kvBla UcVnT gkowmG palspQO HesGB qbfkA YcpscIP flpiu QCIHL ynhLu JIfmo gVyzyC aTBBE FubyQ uKRLFr LkiPr qZavQSzXH ZxUpG WmTcI rzegEg dalxhJ hHxNZ QTvPH RIdIbF HLyDRi MnJFh olmTn PWjoI lmJfq kZrnm aahWi CQNkh sbyVew APHap lqbQAF hdlXD mnjpz IqLlt gyFMRO crUpG CCjXw nfsfM WjFSU MVGDd WCygr hiHwFEET LmTStj HQyKZAG OcQPgm iPQNXfkihj zaeDj wyanm JxzkQ MFVJNbA JQjUS cJvYsOoe kqinT TwzqU AElAbRN ZeWju rLUGMC wuSth YFbJt GYzrKy KbMMuWJ rgKinz tlgBP vCert cpBHTfl vRCYgr Uwbski VOIav xncso CWebM HjTokY otCzt QgSUVW kPNQj cmgNFRKsdZ mnmIB VPjLh GTmWPnnA vvrwM tbTotsspK WLxMI jLbPX QNwsy AUVnje Uwift kLsUwk FiEhZ lfjSU ypIMWQ kAXkOX QpdgxO YoVzZ TrDxo avBnwt XeOgj qseDf JKzAka WCJEQzt ShEwA pzmbzOJ rtqxj HOgTJ TvqFLN gFKqH xeUkq GFqlBmYMsNw EOZmM Atjkk LICgiVHHm QFpTjE tIxBF vpYhyg afozG asEwG hizHc lKiGKu hvJLKW qnkjb vxMWG palfu tvhHI uxiWW Ieczr uSUVhI cKFDjA naaNoAx DQiAR pbBUr glkjH qEKYD NRxOQi XnYoe ZZayNt zFZSI sXPVjt tLsdB gesFd CgHnl SUVWC PJqrcLq iCbwn bHQouU MxbBB LDULJ qRBgLE lyzyF SUVWh YMtsZm aUtSi npISE HZagDB mCQSUVW YTkKNm bytEZ DpTcS cVaLAckZmB GXGTt EmmpDl SRyTi zmaiH gaQag hlxyhEY FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS RMBCq ETGqV ORKdvc fDEMl ewLKLZ xQkMQE vejKw FfRTr PTlBI HyloU XQqXj sfjIng FwHap xcpjp DcSdCD BcsGy RBsxY wrhTP RoeBv QYxrBVQkj jUPlTU zJUUix OoIkqt caVOmKHd dSalO noSty EEEEEE MMEMd EEEuM EEEuM MqEPM tDaHVmj YYEMx EuMEEE xYYEe fiIUY scGkRg xPzavtE ZXbbug AUQME QARRu MEEEEE MEEEEMe TSaBy eQagoK OrIfI TSVWu EPMMtM GPXAhKZ CAzRtV Vozlu UuUjhZ upazM CQsEOCI edjfLz MfPexV MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE QagopJ QagopJ MEEEEE zYMBr SXJZfsO RznaM MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP Zrgoj eICeb NUSBDkJ hHcsQw SVWeMEEMM RMEEM gThIZ DGSYz FyXFj QwGaQ mewZitHaMj MlzMD KuXfOMMc WpunLP wMNJXNFH oToHA xqJfZ trgfM lKbgb rOZpj BqnkK JAhQo MmciVKwK KmcWeg EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM CuGiWV WhojKQ MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ Cxqeemt QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU agopJ MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS iuAAB GDcrW WJCLUA qjIyO AjgLy CINVp VUxEG UrTJU viZmy rZFKh ghpwQ HGuXV dSplY UqnQX EesUE RmRutU FfUCt zrtlv XzOhJLb sALGp oFgHh GhWVyAL ibEJZ Efian FsVfe oseRQQ zkEwm LuaUy AzwAb leWrTgN nyHTo NTuof GINfXk zigTVa uphyQ Wzozz DwPvwy ZxtjW YzhMR yJAaf CWNjv ayGRbUng PqYsUR cEZOk uWPvH aEhroD uxXwfJ gJajj DvaHLT rdDTa Qhsmp zhjwfU stAMfN ivmtZ iAvSgZb FKZJUA lmKkY GjbbZH DXuJG DDEEg gOdOWk zrvrN tFDvXG RfAbfSIg mzgXtzY FYRBdh nYGTi FHINR BaPwKTf YydpO xGlwYU myhhsP yCDVEwJ eafAP SwRCI BQJeWQ oPAVbfkI iGWDy ZoBDL SzjSv iEByW KlBPXi FRpqo XHSwReWn hAsAR NsIIg bmdQh hfvkPy jwGFbD xRIrV OQmkWlJ RVUOfa xosHq IDSPCG WLJcK VCtti AGkcs jLIRh Qcqxl Fncxa Kixgm VRHUH iRZcMMZT vDkvv IihtC bUMcm OBMDCIT ulzxq PrvFkFs rtdqG YjffX FvpbK ZbKSa KqpHj NJRFW hdoqo xLGIL VaMDs qXYlSQ YSFAV EbgyM rcxmr gfzCr Lcbuc lfWTgN fuFhj Odsum gyaLVtvR SUVWj BABABA NaJgC khMlka WJFSZa LzSuc eBKhB APCMO PpMiS lakKF nzwVMx LAfwif Paqdjd SCmAd PQYYt qOeRWQwml uYSWu EntelE ineIEE GenuE xJzJDG PeuEEEEd pNVaB DBsnUTyi QPEPh QPEPh IUgOr yUjhJ wUwYrHU ftjGY dPZohdt wRYVW PYYug PYYug YYEPV qUQQEP bQPQSK XxIvHe Ojbut IfRjmv HRNqFTC wpthxK fYUXdb bmrOV VVQYn mSUQSVu aBrsWA HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY mkrFPyn BCgKirLb UJUYG xWffY CuiYM csmuP GaxgC OSqmNU DbuKMmOf VAGAiF tPtLw PQYYPV nqDbT Ujhxj URPQQh USVWj jSogpg NRVnj PPPPPy difiim MeEPj CLgHA yzIlj GdjYG dKtfXM oKLba EQPjjM VPuus edoZJ vubgC UQQVu HFUCkfsU SIJfV ispmX YSXrx lMyNG AUSVWN FbDfy jOOlOu VNrwhH BUQSVMWj yzFJX tRyGh yzFJX ItOLt zFxnex LmRCZR jAZjX HBuNS xYuIUQQVWjgYjGN PQPPESPW jsXfF eFasM tAwIq KWRXFd AUQQVW MDpSnE dTPIF ENUQQE VNrwhH PeUgK GOpAqi nZHEj wLJDqz cdGlba RPQQE VQuuH uzWlP uEPEPWSY eJtTciV FvruI yHjpbQ YPVWSu kPVWSu FLvzsd kHsSXhH iSeHdRY SCayN HCEhul pdnNK Okdch IdTeHS johsDHf FpdWx bJJZv mShbF PmTGK ORHNvS qMJjir BNPGL ynTfy dJRgtlk tojDq siTXX cRdqpB uSrVu rcKNH yPGyjcTD SmTOW eoCEPr ylkvk yxgic uPuSW EEwPr UEHEu CKuDYWU DBKoG ivPfph tzoVkU poosO zmUQVV ZjTkeV nfyDp hUQQS XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu BKIhU lwLWlV NEBZbd uBjAYjZ jAZjZ UQQVWO SVWtdAu MIQmd tLiWq lsUJQ OLdplAVd xiSnZE ucoZpa tghwE AQhLp tgjQDB ReuDq AIVazyJ tXhHWu ToomY CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp obdMZ mTshB oyWvM YPVAe fcxPL dnsLe MEEEPu YgJaln KWUomN RosGO rcrUSP lvQec SOGYu PPPPPt PPPPP soqnro WhqUVu HLMMQP LVxiS ruVuj Eqksxg YYtVWh EWWPb uCYYt uVWTb WWWWWS uxfssj ZpgJs rwsdUZLpU YtVWj PPPPPPPPU tPEViq VSYYt iLiAX pkocX aqMZH EAEfEEj EPQEPEj SIJfV WUOOC xHTjRJL AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW ZHVViOp PPPPP PjUHPh PPPPP VNrwhH IOOMM jGONrAz hWQkzY SUQQfE fEEPj EbdKs qSQYf PCOst EGWVj aGgtW KwWZm riGkF MSVWu MQWPVk ZzxtmDOD EswwCE MEEEPu vhdABJt PPPPPWSu QQQPu VWuSu PPVWPu TrzkK UWVSM Vxnebh ZvfWjL NjlNnq KfYHL CLFSl WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu DAaJsx zBYvr zFNxK QPLYYMt GuxOVMV tDbAl qivrn XoNkW LwYAm zdlbX gALMJ lxKMUM zoswN XtibX PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj JgSRkZIvv WzJnR FKMnXE dkxLfYa EhOqztjI IUIPqtPm aJlLM IpNUmk lOxrHh RCTJI WxxVL WvvVL WHtAtVL aZUQM XNWAn VNrwhH PzIdw ftZpd mdbxsF avAhY JpcfXR vyyin pVxZv GOnObz qbHSx QstRb YYJTBq eqEhS GZcpS bgVfb jcAHt wwhlr AoUOxI zJUVu QQQPu MEEEPu EEPVYY kOclTi yaZaex BHSUE fQshE WcgMo mBPetWJm fmnNC dxpAGv hxKFp JZshG EPeuEEEEd csmuu UEcsmE PEEhg sYurMnX jVroU uEkqt UHHfFtIZU VWlCv fyuaB UQQSV mLFfv GPOGS VIdiU wvspD vNcMXuj SbnZm xkjXU ZaDwF LTgahd cALNP BivWPt jpdwAe emzrc rfxts RIbGc PtdXs pHMsM dGJYFL dnYMD fnIwye HgtHI PUrIv LMhIa adfJG Lwdsc nApeG MXUkA osVqz AfZfxS RqEvhF zNkJLGlV GRAiZ pBVYl pIRIq JLvGxQ Xvfoc HyupAp oXsjYG IFbxO rBwbMu rKtXN SQFcw ssGUEk wmgvp MxUIs CWVoV nEEbUPda XsSYb jYwvg xllePSr DWxhAw NnWRm fRRxq mZiDNBES YjiBU dashM xKzvb iFlZT WGktVo RGGci dmngF lfUxJv QQKCJ GQjpj TEMIwOpj LBZJf nUCtY gjLVkf hZWww eQsrY Kqsjjs ghOQc QwcaQ BLgpl LDzvn KeRywF WQgrA YoJnV OUkzaeY LFMrk dhHjQh uXrZh NlHAje UpqbI UQdRy UjoYjq iiaOq kdXwi hCbTL NUqhj zIzyU qnjxQrx ngTTFE gCIPZyRqk qyOOgim KRgyaUcuVze IDKSg KIMXv ZZfAas QzjGP yaJRbWw NjaRL jxEPD juCHy KQoNrLiru vUqbyE SiwrDqMXMP lGFWhn lGWhI otKVE hHFQQ wrCob QdEKf tbeLkl nzbsw IGvkn mQQXG REuTx TDsRE tfJDDk jaWxm PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI noDrDR uHEPu uEHPo DYPEYPhH yjrmXCmi fpwStp yiTef MuUMEIEPML UMEMd kEDpB vHUjh gypdnJ fLXSwlg EEEMEME HnEMI MEEEE ntJETE EPEPM TFZdvuUQQMEM iCubk koIlV DeJBUzW QagopJ rZqfQ POJVQ nWcfGAMM mCvmb lZSuL CfLDG zhOLv gbHwPKt wEPUt kTGRTd cmIatpHdy KgjPSMVVejhl mUhvW SNzUs jfjNA EQfuj NtQAx cCVsw eMyUp WOPxF FBwUN qiyEgl Ixnyt fqvpM NNolrZ GpMsAt UjKsI WpeOf ZQhRU FqdSk KUqklq OMHaD EMMUREPMMM EEMUQ UQMEH lQXYI MMEUE EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU KZHPX gvMfS amNsnd akvLNy POXTb YZYLj MQMUU vpKfy dIaRn UQMjE obUQM EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd WFtZdQ ULMEH MUUEEMM UEEMMU VeOKj wxGdq NZaLy yGAxJrvX jDbpyaKho ZvJkpOem BGuLiG eFxnf DRPMytd lsnQZW bJndL OLwsz WbnZv Qfxyukp fqVnLWR ikAbk PTnDT Uinjp hpQoV PwxWe gAxXq ZdkVL YNJllq EOvca locale icRcg JIiostream GcVDios badbit failbit PenuIOtv PzrQV csJjV xrwaE yQAxM ljNbPah tGAjw ZwXLkjp mpIev fyfuNV KFcEC hEGXx OjQRay DiOWOp OGkla DYOdJ gVoih Hshpo xZkVLK lqAPc Nznjjd LcqkLph ORJFr IGGvI array length unknown error address family supported galready connected argument argument domain descriptor message connection already progress device resource directory empty large function supported unreachable illegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device process supported goperation supported owner protocol error YIstate recoverable files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer mwdMd InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx wlzIo UFDgbm oJBBA XGJmH mHRdWxz oJhqfE cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx nTakUN PNuXB kvlqU BZexL jefqJ wbIaag YZUzB XZiNe tmEua FpqHLD iPGyKwB BwMDw xnmwsdv EiwnN floor ldexp hypot frexp wsgdN nCvdY Hwpow Monday Tuesday January March April December rSSBfG eOFjV aDUKe EnumSystemLocalesEx LCIDToLocaleName eatUK fnKmwm GVvDmLgai rJgUFo tXrJP mugGk RDQou lDHmrA tkuZD YlaAA XBNsB tXipB piUFCQ nAnbk oUJIz rPrmXn LtmYE XeMeVaS nqJHI PmrEm stGmME kPdXVd cJVWP TztJN XUKivo GhJGm MXizx WKmdKjmSz VrwDd YYgHcE WvhGm kyITnT OaBdK USzewsq WhEfwr zGntH yrwgun nGOFL RvMRX ContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey pmOOO xrtdSLLGa ugsqrt ZfUUU gOrwi rMwBXUWX fJqURZ XgTXsM usage usage xnevb jIoDH nicehash yPHVB wGTahH IDrDv Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ eitJTTU jbYgWOM GSrCR RooVlv FJKjE JLXCM mNlVez YsLYD VjxxMJe JgCmb GfMgWQ wewcle YcsSn JrQKJ AQRJhUE nhyAMJ GBKit cXEkhZ SukrJynBD ABCDEF lDpLx SBBXN rZOtYV buYiwn lxkaEU tnWJE EzIBr UbQtG rOUsW mPMST grWJS qDDxOOc akUKMT VWLJj qxtesgY JWDRPMy CrxMD DDgKi TJakUK EzIBr GhJmH MtmHQ pnmIw KfrCxkaJ eMJakU xkaEU hbucl pZmIKp oFmfalacs ZIfyO vzgXy pnmIwsd rCkaP mvLrAQ dqAVPjV IDSJM kgdMg omIGNp Fqohm AXZRflq qCBvl ebzOL vBiCF kgsgY TogKe YIigga FIFyQbT lgqOvF goPzV TvPXQ iynjpNf WoCCmowDHg nnJur aEeCY AysZMA PYYWx pxXjY ZMJakU VAnNu EzIBr JakUP DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven RiseRiseRise Geode Geode OPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION Pentium BCPentium Pentium Pentium Mobile Mobile Celeron Pentium IRWIN WESTMERE PENTIUM MOBILE MOBILE WOLFDALE MEROM QUADCORE PINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED RyjBu TusdZ pnmaJMsd gZiJgf Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN znjab AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF ECANCELED ECONNABORTED GEDESTADDRREQ EEXIST gEINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY ENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK EREMOTEIO permission denied address family supported temporary failure permanent failure family supported SSHSnresolved protocol unknown service available socket Gconnection already progress operation canceled connection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected message network unreachable buffer space available device enough memory machine network space device Gsocket connected directory directory empty protocol error result large system process cross device permitted unknown error links async event signal unknown error malloc malloc malloc malloc malloc gQueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore HxfyCreateEvent CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress kernel GetModuleHandleA CreateSymbolicLinkW CancelSynchronousIo powrprof iGsocket closesocket Missing after object member CbUwKi Missing object member escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected EsugSyntax error value object array expected GGkcEHIM mContent Length false tvihmlm PSTQNXS yDZVXYJ GMMLH MQdgUb BDFHJNRZt LETZG vjSzY Zplno Ipfhlpxz tieexipms PRTVXZ bdhltvz qPiZkJ njDDn VfuKg yOrut TGOIi EeXrf KZVMgoF MiHoE iDWGAmDXT NZwZwM dRnkn nuAyZ QuPha Anfra EYgiS PPRUKq OATaKB XMfAuv pvMPMu OIIhMK cGZCu wTvlT cAnUx fafyxijfhkdanfrzz pnmIwsd xkaEU EzIBr hbucl ljibah wLoOw MtmHQ HfrfHN ebzOL dOZec ARoqi QBRaP JWDRPMyd VaxjVQ AmMDJ eOMvU TvPXQ iynjp Xgzoih KhpDoMV KZkVL yTOdX WMGGN wJllQmR FgAXqDE YqrDL pnmIwsd xkaEU EzIBr hbucl ljibah wLoOw MtmHQ HfrfHN ebzOL dOZec ARoqi QBRaP JWDRPMyd VaxjVQ AmMDJ eOMvU TvPXQ iynjp Xgzoih KhpDoMV KZkVL yTOdX WMGGN wJllQmR FgAXqDE YqrDL pnmIwsd xkaEU EzIBr hbucl ljibah wLoOw MtmHQ HfrfHN ebzOL dOZec ARoqi QBRaP JWDRPMyd VaxjVQ AmMDJ eOMvU TvPXQ iynjp Xgzoih KhpDoMV KZkVL yTOdX WMGGN wJllQmR FgAXqDE YqrDL pnmIwsd xkaEU EzIBr hbucl ljibah wLoOw MtmHQ HfrfHN ebzOL dOZec ARoqi QBRaP JWDRPMyd VaxjVQ AmMDJ eOMvU TvPXQ iynjp Xgzoih KhpDoMV KZkVL yTOdX WMGGN wJllQmR FgAXqDE YqrDL pnmIwsd xkaEU EzIBr hbucl ljibah wLoOw MtmHQ HfrfHN ebzOL dOZec ARoqi QBRaP JWDRPMyd VaxjVQ AmMDJ eOMvU TvPXQ iynjp Xgzoih KhpDoMV KZkVL yTOdX WMGGN wJllQmR FgAXqDE YqrDL pnmIwsd xkaEU EzIBr hbucl ljibah wLoOw MtmHQ HfrfHN ebzOL dOZec ARoqi QBRaP JWDRPMyd VaxjVQ AmMDJ eOMvU TvPXQ iynjp Xgzoih KhpDoMV KZkVL yTOdX WMGGN wJllQmR hbucl xiqtA LrLbW iWiPA czSvg jKJwrh URflp ALoIDy uKmrNZ plFxL vWWrILk txEeH uFHMh kZecv JHcVM EohcQ hbucl HfrfHN CgRVbV fgCpctaA ebzOV dOvZe ARoqi QBRaP JWDRPMyd VaxjVQ AmMDJ CvFSUD yvrEqp iynlu BdjgMQB AQCPw QSbkL Peorx,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj fEVSovd ehxNk Sgkru Djbxp dvYAb xKeqd SYPmd otOvhl BTISw phdxjOrr fWzXCjy pbkDv hnpuM dbcWH ZxDuV uREvG qyMxo KFMLm UbDUSxV kifva ePNTL GvfHo UPxAIO vhLeIP bkZtw BcznTE rRUIW GukAkF GtKdm sKYNyu eoxhs psOxA SdVnB VEgwt DkqYakE Vqkkj dVrzjQ BQoGz myWzc UwSeo voHqC EoiiS PYjso kSrHCPh nKlxwA tWtBf jpUsdt OKNsC DjQXr BihBYRF fKTKO snQyPE hwddAj OHquema zFaKg BgbrlX XLHRQ lBhME jPUJrMO rMlZg cbEdYU wTVkd dbwrn ycetWU LkSar JIEtQR DuxTEJvs FREvuO BklOH nsdwQ fOVRE BkSbu kaann muJqc mTIAm hiBpkN gbUdsI kjmHefA VjWDv EFGXz djUBF gTssf HgRuBl EePwrM ShcKgcX EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl KvwQAO irhjs nJadx gluGf BKIvD InIFY XycPz idoKo qyJQP EgqNw vkCTuP ffHFt VCQbf rHWoKq xKnalv nPhHz duRNooJ KgtRX UOWvN ZbQkcC sNEEo NSVWN rovAnb FiwRi TvWXUv GFtzMu xXXQy teews TCNqN xwJHEV qYnsYN qiMJe qXgwV VWmVBXq PtPAV UQSVWf nFxkn nrcDy LpfqK OxedmJ VQhXD MQtfV krJCmzq QYxFfSimf wwbhbO SVpYPWy xXQqPpD WwHXt rHKbi HeAfZFRot LzjgtNAa ISSTe nyKTW qZLpX cuysX CPhhh kZRFg QoswI WUPuP fylqw ysUqe rRqnHV gipSw qKPYJ CAbsM avpsZs RwLxlG RojYm tpICB pXvPe kVesxFh CzjEG vzpUV LSViU QkZBER iJFzXx sLDaw fJafB GMUpoC ymDILadb EyvKwc xqPhul bZviN vDKiI meUesF GrALHK ykSGT ThCtJ UDCdv IijxG HSEba QiKkU eROuP AFdLK aqDwn yDNtI arDPNd esWmD xHDop oTPap QhtDq eXWjs nLbzsa uDckV bWkHP LsvNpsSO oHcOaj sRrDc BUDOY OWatT tyfNs amwOX HYYVx WGqGr bJqUni XvXSzpB SdIWb khgZD bnOQL hXZkvJ RcPqe galrPf bHCunK hgDeQ pwnqMx WOATxcM oCXSi nmuSS lfiRTvz IyAXt ijwkT uqXvu QryYGV VpOGxB sVrqI IaDVy SGrTOK atHNUf VGGml mKdeC deoGBe pzKtx ZtBFN EeQDy AGgLp DCQhoq eyizKdk BLRNBg zddSX uhfgM AsdeXS UsQsk nlCfH TSUVWL VWRPN VWRPq orIJpM RzhfjpG NiiIp MGYMt KxMqlN SVWhI TQFvh UWdoA ypFxw xPhTA RcxZw JlNSXw xkhcX WAqcm eVwot JIqgwA HNIER IfXZR eCnVP sAvoAGJ HDTIt ZhxCH fQxwgA rsiFX ZaaFo iocGw kHLNj BRgfw daTIVi RYGmCpvx VDMaG SUVWT YVcBG qlbzQ uBdicx JNkDU BkdoZ hWWvF QLNci leRfR pqGSx AWUSG dWaan dnwTrd fFMEf NvIZy JiKaA IjJdQG ZczePC eKBkaoM XwBfWK irrsn zxBwn FwFUOL XrzhbEo GVKRU JKTwX lZQFW jkvFV UpjueQ FEqml AnHTC VIQHC EpeXukgx IDlZT Wywnp qruBj KhFnZVW qoBNV mRhDrj hzjYy rfLgK OLcdQ OxvCH PKNvWtJUP zClTI eJeFsT MhdRaaugZLR akrnF eXvYc QnWteR uLEkSb GiOIn CDWog tzCmQm tioEbi dSyJmM GigYsZ oXbDZpPb rfXDL zRwopkf KqKNS QBjvQa aCbQS wHQoi NRRWu MYBbp KiymH nQfDvD vynfr ikoOC tnhWf KvzUpg Acobt uxraZ gRcehE NPkISP upHuu HRdyL vOgNG FLyYm LqASJO wjAQzC VPjLh WPWkH emnaid vkIqs nlHAFtY gAbHS jMWpR nxcskv JfekOUQR FgfkVxp QFhCH fMFTZ UAqqi sqZyp nZzLgUg TUNZH mbfGt NJMjL XkTqE qvkxJ AoiOp Yalmw BqCkU CPBJOcgp GjpPIq puxtc rhNCfXmnN NcNzT IDDuaCYB rQjVb StxTR YkQUNf DJbyA TpoPt tRoxI NmMhjNj giGGT zUiUy kiThC EbZwq WRIdk QMleYP KtSVW QMleYP Cgtac bbffn dAobbE fJzJsb GkIUCz LQLbz pZNbR AIJwNUtb tvhHI uSUVhI ILPmlb GzHxCJ omwCA MQnYVL kDhzaU mqjUO cIqxp SqFQJD peFHccbGTHj GJNXo PBAjv NPqbI sXPVjt tLsdB UCYSB TPXui OEMby EaTLv SUVWC TkFHx focBB AtvEzU GIhxB bYQoVyCFV qZkWD QyxYG SUVWh IBgIi cAQSUVW bLVQD GXGTt DGEIb UgsRj FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS WLzRJe vaMFU MaxsM onHFa dFYHYb aJJTW EuqDKk EJkObQ qsnjA nKcWX wmXhf KHNRA ftCdSG LzGOL eQmmHYgx HbyoSm RjjkDbz rXDeaxP EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE xYYEe XGuEK acUjh MEEEEE MEEEEMe ljIJs TSVWu EPMMtM KuGsm EuFvh mKjIJN HHdnyJdtFD zZtXd MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe FBRmT EPMEEEE MTVMMHVE MEEEEE pVCnlo gAuly yEMNY vkAPw MEEEEE MEEEEE EEEEE FxHMo NQrwM EMMUU UEEMMU SVWeMM MMUUEE MQUREP ukrwbbX SVWeMEEMM RMEEM rHkFMg jJdRG YwXSx QDhzaU YNbVo uRdPc OMyLK Rviix lJKyp EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM LBFvh FxHMo IJQeP lNQkEwO MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ zvYKY HyVhl Cemom XrOMby QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU BoULc EEMME MMUUEEM SVWeQ EuWuS JHFkh lwDXV MtuUJ IGySz cJphKpf NkIehm JvqBx xavGw cfhWPLzq gtmgwL eLpUAA SEHEnX PXwYuMA EkGON nQScm LcXHVQ Njapr wrQDj XHDIQ ATzdbpkE LMkUm EpBmWklXKQd arysE rCCzXlGG NKfdw sBCdn jVExzOG OMbhMLZ wKYzrI XBuNEFn SdVpSty UuFOc yhzzSTLy IzMUDX jZLMdH CuaZXhj BPWrm kvmgdwDN sqALN RFHsR ApUIEz TOKBF CDLVbC cjMhv FEatW FkMMv EXlMh cetzKQ XxieXQmu AjkAm XQsbh HuFxGN uDgWD UWRIm TxlppQ RXACpw CBDot NlkJZ PUQszS BHBOz wLODynGr oRTDS ulNrXW ecXLr wIjANTA bIfuJI YMQwn BHPUcdK SLzBA SPBGH FbkpkR hQplJ RcPCwF zzNas rUxhlM XYXwdm iQKdy zhDcq uSKVhq idhPix TdoPw cJghZCZ HOAio eZkTmOr EzXfw nCmGI HQqKRE bYHlD BUCqS UqvTkQ IlOlYyM UvJBV GyISvW Qnimf dVsGY igSVo RmChluX vPjta pnUmDy pqOxH cQtFp LaclM qBXAX Yewlz Lwuag DeRpt qpaYQO oMOzWi Crlyrl UUPYYhaH xGKZaK DKJycs VFlKAS LBsFz zlQRq tqYdJ xZSFwp naSXGPm hlikrI OPDQF TfPoTLW QoJZp CfvHzi cqevrJH xUYfVAG MIJLl boRcZ SUVWj BABABA GIxJqxB LOYvI EBxzg YfEBx cTaKy coxjy Xbwzl NhvXr OXuHj pFliWg PQYYt CwZZVK KVNlLQ uYSWu EntelE ineIEE GenuE xdtSu PeuEEEEd muHOp rIUQb QPEPh QPEPh UAOzK VMiYR cdfeI PYYug PYYug YYEPV UQQEP DVhkA IOrYcw QEZot KdojY JdYNeJ cZuLM VVQYn zoTmx wUfcd LbdGE UQSVu jIJsN kVwcW oydYb HuYUV EPuuu yUmfh SVWUu tfVUk tLxXj USVWUj UQPXY Ozmgl zqkhH gQztUVh CuiYM csmuP SWAKD dkqqVf DzFtIkpkuMs xYWkl tPtLw PQYYPV Ujhxj URPQQh USVWj HPmTtSTzGp vlGRdLk PPPPPy MeEPj smTltrGi xBEzlipLgP dINrH EGKtqt QMSbmZ PMvji cNjcf fTvZY EQPjjM VPuus UQQVu LBQeqA bDgQw sJxEXZ QGwmc USVWN dXntqc lVnJPvQ FCsUD UQSVMWj equdB iXUDJ egqud ItOLt LKIjs NsHeaf LZixl TrZXIXkw vsCGmO FIOye Dkafwn safSjSgs dFwUQSV jAZjX YoUQQVWjgYjGN PQPPESPW jsXfF nCnDF cYNXPs XSVWF UQQVW mlPAN rFCBODMLa lYzPP cAfuI TEcZM jZeHQN RPQQE VQuuH ooLuU bZChr uEPEPWSY KjqJqb YPVWSu kPVWSu OoYmrTbJ GBuKm keDVFp UTFyndNQY XuZcN NFEYM CSBvV qVSPK NjgSx yXNWSC UmzRvVT bPOcI WNUAtVZEYB npAIh yetnNOnB mqiXX aBSWJN ekmpH cNnMD pxXIOD uPuSW EEwPr UEHEu ChYKp AdKTud cgxKy EuGsUA XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu DeQHKp PckuJ SSBSV LpDbR pTAwn JdsZYB TpNRe BqRgH uBjAYjZ ThaoM jAZjZ UQQVWO SVWtdAu vMteg RUQVu EiMzCth NuZxtsO MlQHUg KNsWl FQtfn ThcYka UhFAS CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp odtFr rXdcC VTixI GFPpz ZyhOs braUfMht eFGeN DfFthBO MEEEPu GJCzD EABHgH wRzEy vGJTJV YIiaJV SOGYu PPPPPt PPPPP AcffQB HLMMQP AcffZQB BxMRE nBxhhZG VGalpCZ eewnp YYtVWh EWWPb uCYYt uVWTb WWWWWS ohZBMva YtVWj PPPPPPPPU VSYYt rgtUP tOdbgY jgLis OtkAG EAEfEEj EPQEPEj uIjiXTI IutxB mEIyU wKehz AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW vTtdf mwLcTwL PPPPP PjUHPh PPPPP oiLKKE KmxYo UQQfE fEEPj USmxuegio GkYIydxhfp Jhabbj qyumkS imuGCuU sflUQH dgifWH CiMVe qdKcl OKUQH EGWVj XhBWs kqMbU PbYHj AulFQda WsAWy wnpUC MSVWu MQWPVk NCmLS fjWYF rvOOY MEEEPu PPPPPWSu QQQPu VWuSu PPVWPu UWVSM cdGNUU xYqDcn eCKnfnO ykwwD UFBCg WXNdG WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj jJMfV wHuhjj YuwHu RYSDy CGOfD cADjF NzQrqq cAQbm puXxZ FjkRC YoUQQ LmHLkt miOpuE QPLYYMt UZUWu txVRY JYDAA YVVcP qUQvdA Ygdlp GrZSw gJXJU PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj FkcNqtC byoCQH lgywrQdOD CQhac FBKnl VseJw ZkObq syUys YoSTM ywZVj ndmGj WxxVL WvvVL WHtAtVL ZFCaH gZuqG pmrHt fKBSQlh YYXjl CaJaS kciXNUt enfDp vGHsGe jFRZj JTtcn ZrCvA QUaleC MTtGSK QQQPu MEEEPu EEPVYY NdrqGi lLDYn pMQnb lDqKbcP ZVNVWm uIJsNEUGSOJ KQUuT vjFbi xfqKsI oCRGh sHIbl xGNiq XXskn oAIJslH qcgfE RRRON KUlBR EPeuEEEEd csmuu UEcsmE PEEhg JiyfY YNEck WdOVIlu CPljxI HRLkfW VWlCv UQQSV SjJJQA QbGnPNi cfhpD crzAB ckaSak IRoSa hdSLV tRxNA tHXwD YWrgM JPIoCYn UoYPK UbdhvO oZzLM iAeVVPE ADMUp RtTds qgXYc ZZqTCxRiBS hrKJdg lMTpx TzEfK KoQiMVkUz nobVO giJxg SrLYUuSU vsFYK nOOuwc UaiCE PbhoJ eEDjl aVumd pzsyXv nPRFV lsrdx EpHOeg rGXcaQU WrELNv Ggntvcxd tToUEc VSpQi jEsvh qrPPnD BFYhB uyedJlK pBdsFb dseEQN LzDQT nhtkgi ckDVSF JedAFL yhnNy vIiZUZdfZIs VlZme SydbFf GMDPHB YhxWjbfdm sODPs AIQPtdx yzOyOyKE LhfdZ YXPET DXennLD ysKba PNCsE hcqQp TVAYB vOtNi ZxpwI RtrGzygBP VLiiqin iOyic RFubwaB tqYlSR JnRArb lPHiM kXZdck rrvbm ifsQD KuaXy aztHN ZPdGq tpfvz dyYkQ RUIXt dstcO NScBx wuKKd CzwiHo fknPg SVAgU vsbZT AXhvzl cKNZvx YdhMXv JZbjZbO SrlDf coNWqi MXWnYW jxEPD YNvqm Ucjls MSMsr srmTr lsrMqM ksrvq mksrr Ydhpy YKqvD vFPve uGKss ADeBvyV PWpyR yqoxS nctwa PqheM NHwZwo iFFIf jMqLen PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH buFvh dwUQMj EbtGBz vXRojx mKVRC jQLWl MuUMEIEPML UMEMd HhSIG ZWyVdVr SNThPCQxEP whXAV HlhNGw EEEMEME HnEMI MEEEE ntJETE EPEPM tgFpX wqxAR qkOmp UQQMEM QxMzG rtLpyh NeXrB hqgHJk aLLtXr hmrHe vfKoCQx tItFXX pgFgw bKKFbuw fLhxB pHZxF xudUd eGKQE YitvA sFkyf PTNaJc OznoZ rYjHSybVQr wsGJl OteObd WjaCvI PdhOp NtgBI Dmvgj TdvaDZ kNSFy pzjmC ZpElD btkPwQ RfdPb aIDau GODdNkY wSKRc kFZSp sCVYS uJIbP tzCCqSz fAxFbL TprID EMMUREPMMM EEMUQ UQMEH MMEUE KpQMcL xxlYG tcLWKw TVSlB IqzDU TqyUQMM EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU Idkqx vPEXml JMPbt gzAzfo MQMUU rPlAZ VzAYY UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd YUQME itbQi zMQOV fruuJ ULMEH MUUEEMM UEEMMU zIDtu vRPNz jvhkJ sqArrl peYbI pAQdV pDktar qBFnz KBbDD THEpFL olmyphd ROjJU uFljmeu OUDzT ZFapf ynUePQ locale tKerOE feiostream badbit failbit feQjv NLNgP deXHr njPgq MQXPn yGgixm olmphdC ggnjyn Ilyei vvHzo UFSPG IUmDT qVKnH qjDwmq rPLcO CcVkpuI QxPYO array length unknown error address family supported Ialready connected argument argument domain descriptor message connection already progress Ndtqc device resource directory empty large function supported unreachable illegal sequence inappropriate control operation invalid error directory RcWmoh network reset network unreachable buffer space child process message available message space device process supported PVoperation supported owner protocol error state recoverable files system files Jwrong protocol FlsAlloc FlsFree dfFfu SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx pYUjIJ lhvXIHHp uXHAru caetY WjIJe WbjIJ rIRQQ hssNIt cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx ruNmSV TYElsu oNjxqvAa idHui abIaHe pAPrU aTZpw muwrasin owrsin floor mwrFFh ldexp hypot wrfrexp lccts fkIthc MSQaD HfEVdx WrWed Monday Tuesday January March April ZuwrKh December jJKjIJ AnYMAa LCIDToLocaleName hhsHF cIldG qudFrLdN zXILt yfjbd PwnvL DcoZF JNUed JQdaP Wcfhr Kngcfts lnVKb vXUMXO LgWRA ZikczWX LtmYE YUEEO FzeqJ pYCut MYjFzAu sxxsJm ivfDc LasrTt GdBcC quUPi sHsNa wpunz AkkeMhi snIZN CYthB pTxhW HLmXRjMGH ojzOD iwWpU bQcgrfp dCSDoez XUstd zGntH UXYjNm ContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey KjIJs fwrYRh ZfUUU bNUCwD WZbJk OfVAZ CnppH qykWS usage usage PPPBIyIm qXObh cCLCsm qudVW wrwlh qZjIJZ aLMIX nicehash ijtura wrwlh Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ EJQue DxSIPD NZvSVu EphVT lmqVK YeiPx JLXCM mNlVez UrMIoh dDCGi zcUTHo BLjtk XLICxMt lKLov WnydI ABCDEF bVbXr RckOy KjIJs CAfAWgn taLkA WeGauwC jyiUB vUtIo JednKSX OmCzg UDALn bAyNW VQYcdQ xcNoQz MpJhi tacLjB mKdeXH HSVofw bSPKC rZIMx YKoKk MuUUq PKEgDFI limlH KjIJs VfvDVo KRstrA jhuncV gklKd yqacRX wcetY KjIJs taLkA VjofvD mKdeXH HSdVo viwTi EudQPqX ynYRfG QYRrf QYRGI fTQYRWw fQYRQG fwrYRh jIJgP fwrYRh KjIJs fwrYRh KjIJs TtQzG fwrYRh KjIJs fwrYRh pBHSw LcYpkK hcdtL jPlYw lerrGw cjbduLh IiHRv asrmt GRdyRim rePII LQRPv TcXLe WBfmn fForS ZMVHv OGtmvf aCfCj frgVK siOAr cKrTP PlBfX rPLcO kVfge tauwt bzIIWZ fwrYRh KjIJZD bcTtQG fwrYRh fwrYRh fwrYRh fwrYRh fwrYRh HKjIJZD fwrYRh fwrYRh fwrYRh MKjIJ fwrYRh DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven GcKoa KjIJRiseRiseRise Geode Geode SrOPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION Pentium Pentium Pentium Pentium Mobile Mobile Celeron rPentium IRWIN WESTMERE PENTIUM tCORE MOBILE MOBILE WOLFDALE MEROM QUADCORE PINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED KjIJp fsCwoC KjIJszD Unknown system error Unknown system error rEACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF rECANCELED ECONNABORTED EDESTADDRREQ EEXIST IEINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM rENOPROTOOPT rENOSYS ENOTCONN rENOTEMPTY ENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK EREMOTEIO permission denied bdaddress family supported temporary failure KjIJpermanent failure family supported resolved protocol unknown service available socket connection already progress operation canceled KjIJconnection refused connection reset destination address required FMFil unreachable interrupted system invalid argument error socket already connected message khnetwork unreachable buffer space available device enough memory machine network space device socket connected directory directory empty protocol error vresult large system KjIJno process cross device permitted unknown error links async event signal unknown error malloc malloc malloc malloc malloc ZQueueUserWorkItem malloc CreateEvent xJTBI hscMS ReleaseSemaphore CreateEvent XwCreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress kernel GetModuleHandleA CancelSynchronousIo powrprof joTIk socket closesocket Missing after object member Missing object member vqmxJBad escape sequence string Column additional characters expected parse unicode surrogate xAaYD unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected Content Length wrfalse SweQk AhSJCx XSQQB LntiK kWjgp GYjTM NmJwIZE VdskUCJ QZUHax zbvTOlV rQTko fVTViS azzaG ffZmTR buoOcm yEwjx NcaAK ZUccCG vJqBxR Cczlo XmAsb ApOjB NQPNw FixbhTQE dtOGQW QfcoVo qzSJO yTQdTN oceTzf QbgPl fafyxijfhkdanfrzz KjIJs taLkA mKdeXH HSdVo kbSPKC jcfhp gBXCI peLasr FzoyK ROaDL GqvTW LQRPv RTcXLe ROjFJ TIcIHle vHzoO pqAZe AnUePQ qnHVQ cKrTP qjDwmq rPLcO zdQkR CcVkpuI KjIJs taLkA mKdeXH HSdVo kbSPKC jcfhp gBXCI peLasr FzoyK ROaDL GqvTW LQRPv RTcXLe ROjFJ TIcIHle vHzoO pqAZe AnUePQ qnHVQ cKrTP qjDwmq rPLcO zdQkR CcVkpuI KjIJs taLkA mKdeXH HSdVo kbSPKC jcfhp gBXCI peLasr FzoyK ROaDL GqvTW LQRPv RTcXLe ROjFJ TIcIHle vHzoO pqAZe AnUePQ qnHVQ cKrTP qjDwmq rPLcO zdQkR CcVkpuI KjIJs taLkA mKdeXH HSdVo kbSPKC jcfhp gBXCI peLasr FzoyK ROaDL GqvTW LQRPv RTcXLe ROjFJ TIcIHle vHzoO pqAZe AnUePQ qnHVQ cKrTP qjDwmq rPLcO zdQkR CcVkpuI KjIJs taLkA mKdeXH HSdVo kbSPKC jcfhp gBXCI peLasr FzoyK ROaDL GqvTW LQRPv RTcXLe ROjFJ TIcIHle vHzoO pqAZe AnUePQ qnHVQ cKrTP qjDwmq rPLcO zdQkR CcVkpuI KjIJs taLkA mKdeXH HSdVo kbSPKC jcfhp gBXCI peLasr FzoyK ROaDL GqvTW LQRPv RTcXLe ROjFJ TIcIHle vHzoO pqAZe AnUePQ qnHVQ cKrTP qjDwmq rPLcO zdQkR CcVkpuI EAAKjIJ XfvoCx LkAjr mKdeXH EzHSj okRUQ LuPMIEgJ rQbzO aGBmUf olKpq eosDdU bqpYn npYCA AkhARP OCtlu mKdeXH PpsXN jPOqB jetYb kbSPKC peasr FzoyK ROaDL GqvTW LQRPv RTcXLe ROjFJ ZUlSBW GOUYj OaYQUFp pUMvhpp BSFMC LNtIqX iNnsl zpYhgy HlcVkp cXnvE,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj ZEFQBEyMo QjYcL HLjgh uAnMW MKPon oKLDv QNIzTA brPyp gBXPe scZOidnEZL lINtJ Itjgm MSOTI yCrqa DxpoK CHaFQX rTWFwC yvzEb IzYUe lYFIg cuYkVBq GoLxa FXSBN iJBgB nxuVGHXB CKKmm aVpCl dshPX GDcDp BQrLqC RpqwBe MWKCu kXhiy dqpMqv ZnUxhtof jSBmx yxPQrljJ erJWdy dMtOj QlCNaw ijJqVZ nUxUJ aYXty vpwrY OwTff JwVhgD SSUZh opJSz bMAtP TDRzXbG vbQYY adRJP pUDhf xKhxxib vDUeir DQoPatJrJ uIcukz yZJAM ibZWIU pXimfB mKSpT FUZyS uKMGl GAKuP KvArz HfvYvQWT FWOSc hCoFc MnYWhO xrkmgV nLNEA ySkTFQ BMrxU TKouH OFjiT KqbLB KDLZT Rejyp Oezjx thGbi UrbTh dhSfh jvaDN oJTxF iFTIKm NSyYGEc iwJHFN ZaVtF KqUGl EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl qwQLO lxPoY vXTvcedZ VQdpZv TUNwz hAokTN jaQAP eMXeRMY shQAa MchOONq KXYeq CqOat qAkEK qylRv dEmcT aLXqjv ZqEHg HKhOX UnHLCx mEVWx ypMye aLXqjv fSVWN aLXqjvIPA kpVOR rPYYP eHMXE JewvD QyMAI xsKEN EVQNRl mqEIK cqjPv hhDPr XdGQg iYODZ HKajQ heOfYVF vWMgR FHMMg NBpyVk DaZrQ maxQqm UBccR kyvMPlX UQSVWf bToUs nBqiMkmgY SVpYPWy xXQqPpD WwHXt zZYIh nbgit adMci eliKF nCpdth EBHBe ORnqtD LsmKU aMSRzD ObHltw cHXiD XIbVl RrxbAHKC hiFgv pGTxXE HxItK FrILwJF VHgMZ OdVmc SQeleL FllNo yxBUr JIInS mOHcX kneVN KlGpQP eJqnzc jLZTL RLCCc fRSpX liYPR HSATTZjnLU vEAav YYMyPaAC KMMtZ joSqz lFejbP gbrkg MkmOr faXnP JGpeQ oCkjb BwVao ILJfK zSolZ kjawS fKHJG JRchK wAzqk GtBXrJQ RPwrg qUnZYaLI JLazg xGxsf EMvDSB LJdhp jxWTO UmlIq Wpjbt zoHThm FFgVi eTHjL rFRVD ITYMf fjDevmp CsIau GXfGDOCs CsCkjb Gxrtn Dtjvawrt qMkDjk Vygxnc LRPoY EYpkUC xUTtd zmyBRqn GtfFh jkiHMz ZGtOG BaLXqjv LyvFz TzMZl xBWmG coafM HNwHV Dtjvax ZqfWqSkT rdfbzH ismCt nMequJ QwjDBq JGBXjRh giaLc qiwkbef lGhYqu KwPId TSUVWL VWRPN VWRPq hSnuakt eQCRdT USVWhI vINXBA hnsezs YSVWh edebt ArZmX QsZYI BdchpU YzAgON yUaHPL YCEiR InmYIpQSu TNzmm FYerm SUVWT yPeNCL kyXGNBuIwvrH PaRjyf jmKQh ftWdA UqQuZ ZSAPMR fARviIA zmaZxM xkvcL QZOOBo lPsOGgQ TENxA volFH IGlZt qRfjvx MRjLVo nEDHo UQJfQ uVoXx avuJD eiAKz rIgIt rIwNX njonP qumSpgT DVvMm duQsZ OBsCcl djlOH XXKHH qMjQcx yThch HgQSjR fkNyexoV HdaWl KggrvY wsYTk BFoif IfiBCx iocyX QtIeu DlXoK ScClC iHgVbk PXBNB dyTVa IvRKkn CnmvM KVcVa OfeOQk uOpIW aZgkBu VHkPb HRcko PDDnW IytzA QCanq ZHkGE rjZoY VrDoEG VxyDXr TDyAh YSFMJ UklCo HynPb abPPw ocgFm fPngu anNFH jBjwT ubKGTs rKqhF lokmeXrN CZmZOW zidyYYp zHLuHV mooiH QEfsn tXWlX kCGSYR FRzyo weyXO KWSUVW AXCiQ fTsHXNNp jRAbc VPjLh llWnBj wnztS IiqSyFPi gGCKQ kDNlFvQL sKHHj TjWMa eiIgt SFXSN DcXyD zHpUx IkZzw UMwxRi cjseZ Tcvgl pdQBPyZ fxxZVuz WLgdo tIYpAndg VucRt XophlB iPBNzo XiPAiONZN YOvsh dsqeQ NHcQs uRslk QWLPu kTZbg CKcko nFjQC CfDYHp WrqvPx WYcGR XLCCv AdRXk LlOpe WhKngH uQqHnQ yCIiUMwD vCclL GZYky MvyyM SxmpJ aLXqjvV hyVLm tvhHI zjvaT uSUVhI NMTFPJ Tknhv PTDNtogPb WMoHoVCi CPwks UmuYs cSATni zgHBGeDOY ilgcMsX JAbFUW NYPPU OktGj AWWaNfcqv sXPVjt tLsdB ZDjWv vmXqvvig vlOwLN MhajHL SUVWC hLCQYlT yTkTY HUoPD kovcL JNQgzrjK TIoAq jHiCvj SUVWh BhdgwS QSUVW ZYIhYPEek wHbwY BVbcLaYCZ GXGTt VEXHW DyRmypn FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS brThTi VHanAE DtQJl kbfuvT RQLHi CJGVP lCxalHrtz qLSwD fOGFVW RWZcG NILlk ovdVQfh qfVOXw OOHLZxrm JffxVWw TmDihoDp hdYnf ymLYzHS vPUlt qWIgrHkx keGUr EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE LDjUA csCuvWFmL xYYEe AuPImd xvUjh MEEEEE MEEEEMe TSVWu EPMMtM ieJwS VAZWy wHtcm MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe CVqUjh EPMEEEE MTVMMHVE LfVeF MEEEEE aLXqjvd nYIhV WlfvCc BukLc tbneY MEEEEE MEEEEE EEEEE vARoM EMMUU UEEMMU SVWeMM MMUUEE MQUREP YojfRO AMNDGt fRHrA jckKs xVCPOfY WRzXc SVWeMEEMM RMEEM aLXqjvdS MRtCug WMZjH YmNOSN POThY LEgAL IRZeOTf QIEfZ JAyKz qMiGXyXFU zzAHq kppIQR EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM fZxdeI mPHlV pZAvaY caQCTWa LAhkm MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ drcDN tLXqjvdS Egvrfnem QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS EfgyY iQBrXA AMbkoH yzlrT kZgWl GmPRm JCOCsw AybmP XdVaR BQfiq xyBzT XUBSV fcUvF JhFTIH HUZGK yseam ebECq PFiqR LkQaRii Jnkjd IJvOB MhLiqivgQwG ewAQP FaIIcm jYUrRHPIr lYKfdgpL RSMZjFw YWDor DHvZTP PxvIAob JRrJV wrBOfWlP jwHmHN XKXxL IPiDJN MSNsI LiGjq CMZIBeb xnKUrx Lzguc nQVehJx lyPNV GtLfjR rbYHQ qmESR xycxc inIlb bJoYs oIomE RbDrm ypECyJ wCMaabcnWmV tgGTmKEx HJURWY JTTfhe GzDeEv NDcSP FuPFI dfwMRpf sTDQj uzDEm nYCoZ oUVmRz VuqwNgz FMNsF ZButksMDHC ZlCpW XlVSW TOFQSba aniLIA sViQA sOvMRF Gfrvz nmACv BxvQc KgyKTos BaiXv dyWNj pORVsK duxiKCK qQHvjN ZbfpsP NCnGkK dKzMCL WUDuTE oxnzb YIhYN cayDisnpdH hszCt QDwIJ KEdfSVN YAVEYHo AOxTm JLZVBkb VdpoCLDe SqNEvQe KxqJVd iapTv QNuTE IlLQA DVRXS xWPQF ILklC lxdeX dxqgH SnXzwk ZxIrMwkgG wErBnT SCZIRZp mufXI KYJYGI PKQkZ XUjjyh YXTFGNoa QkeuwUO RsmZx LZeHFW rueHA CELyT SpbQN VNhuQ RwShf LAeQuF FJPsL ihfPd xhtmg gDLvXE iANZxj farfKUsr eFDiON TwnJlAt TsMPDL TKvvU mZHOE glXALdZ esGoR kcevf SUVWj BABABA jsxcm DBctri kAtau vcLIv YfRHs CbCEqk PresZ sgABHZ AmCwp mwgqw ArbWR PQYYt NvJVHO uYSWu yVBmb EntelE ineIEE GenuE PeuEEEEd elEFP elEFP ExwAc VOQuT QPEPh QPEPh KzUjhJ lmbcBO bWUVWj PYYug PYYug YYEPV UQQEP vtfnU lSCcS jcnGo WFzwz rOkftulO VVQYn NhNwem iKIED UQSVu YKbSBo HuYUV EPuuu fnbuE SVWUu tfVUk tLxXj USVWUj UQPXY UowVW mSYUVu rWGLPi CuiYM csmuP PAhlS EicrW FlDqt alRvj LReNg tPtLw PQYYPV mBQQUU Ujhxj URPQQh USVWj vjdZN oLpmoG SvXLJyYJ PPPPPy MeEPj xWEnl gSber IFXTF gfFddd TPKMf MSFuZ EQPjjM VPuus DjhPcy iiIHV aUQQVu UDbIeiXiJ ZLSIE EYlKk CmWkp peIXb wRXxXd USVWN EfzGv ukwUV KsaAG dWmUM QbAUQSVMWj VnqtEx ItOLt XQxeb GTVKs nUToFO NUQSV jAZjX zcmqZ XqHUv ziWUQQVWjgYjGN PQPPESPW jsXfF tUSVv UpKlbm MRbtB UUQQVW oIGbr EPDWB nlOil PcXeC EydEo efgio mnzBce DODJNr pAKSZW RPQQE VQuuH uEPEPWSY YPVWSu kPVWSu DJCXTV RBRUj ZqUerk NKAUs BggOl rpmkk MXxeP eKKlg PvgtU EjEAOSIz wxLfm ioLTwv nMgLcWa XLjsM eHTqv kwBbHwPl gFefTB LjHku rCbsn jPNnj gGmio rYGtE cIkrq wLvnZj bicmu WgYBq QJHzE FdsYbP qJeAS DGVEO cvFaU WUQQE uPuSW EEwPr UEHEu TkiDRF MdKzJI kTPPw RgKxm yfVyt jUQVV ysyle XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu zrfKRqm rcrkR WJrGYwr uBjAYjZ nNCnc jAZjZ UQQVWO gvriIK SVWtdAu TMdAnb toyAQR YQsIj esIdT TRLrq GXGNfZZ oXLXcA rmRjF CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp XUWUXYdyq dUQZoP IHIbb szkBB IzbIv QedhHz Veifp eYSma ADCmO MEEEPu KXwBVZ jdkDL upmqm Tjdiv sZbOH SOGYu PPPPPt PPPPP usLff HLMMQP sMsNN vgvzWTSkrW hFfBE pTXqG YYtVWh EWWPb uCYYt uVWTb WWWWWS YtVWj PPPPPPPPU VSYYt IWllxb BaMCSD CNeZa oDwxiaTLs SuHez EAEfEEj EPQEPEj IAtVMow AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP QyAchwI zutCoI PPCCs ndvcaL xVpyI iUQQfE fEEPj ABLCf NATHT pHVaHs QbHAeoWhrI EGWVj xbGgC eTMvV YRVpm hUlNlT jzAzn PhIjT MSVWu MQWPVk RckaB mMNrD ejSxI MEEEPu kTMqC bxUmVFB BOKMf PPPPPWSu QQQPu VWuSu PPVWPu UUWVSM aHIAX vqrXi OeZEUg WPFCC gYVjF PdXwdZ kvHuK WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu SMJcmD jMoiI bImcYm ukeqo xziWUQQ CoZIc ryawn IozHW XolyI KyBJRollIH aqPLrq QPLYYMt tYlZV ACyftx fmaZY cLCpg uxcQmA aZoesH oLQsN KCJEV wXiuWg dtvNIU DjUEE dEIAS CaUfk PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj BEuXj dzobg Ngmep pZQBWvJU PifBEZ tVicpcV QQLoI HtepI eKqvs sfNLq aAsAGHKC eaBDhP IBFEx WxxVL HTnnBopC BQQUM WvvVL WHtAtVL CGUQM HrdcwpsI QGYCw FxdXQ xNkeWT ayJpUxA DiadZ CSYXio zrRDe HtHyX HbJMg oUMzr eJwKC bUdaMK MhRlQ bDmmt vHZXflE QQQPu MEEEPu EEPVYY wAVWFkn NfVeDW tYlZCP JafGq ilWVU EPeuEEEEd csmuu UEcsmE PEEhg tYlZV ordRa XQPqoD APBDisV VWlCv UQQSV ZFTCT TilzdUU ohgfL euyYxUA kfWnipzpv uIEwVus xGOkT MnkqkO OvIItPBC pDbkJ FokqW XWxQr DDLNl pFixU ZhxqwLL TUEIy QFgFZ TmorI UUswYp LUeMfc EJuDeW LpIWas yVRlN MKXmy DDpuL YSZsB ZlOHpG MKEap hqbaue yinlB IKCYRb gSFBsf NUlVRBp wDrtQ rRxVJm FGjAMB FnAvmViwGM AHquZ yRqMi racCB JlGHHWJ yXVpZ tLhYSb ZNFtN UnhVs PVMIt lObBM IGLzB yUXMeR PZkEl HeoOr iDwQV hbEsMVB fflyE tLbGI DgAXOa SRizRr pnRba BBntyf LDBXQ HJdst IcIXDu CxxFGvz vFNviG MidEZ rQkIf QEPLZ xXuMUS QgyGS TkWme FPQww SafaOz txYFhc BvvKuI oAELN lohvp MvLrV Cgmyt yyaWK GvuEQ szdVT nkqNn TexRBR jxEPD YIhmLw YHsNv eKhAz WELGG retbZx iTNfg NPwRP xQQOu YrNzdz gVYOq ruxBw LMyosRoL SAgexC FwEEp RcbpwSb uQEaM WgxcdA WBzCp TnqpjBQ oTzQI MDcDG AZJTf IZMAE PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI kBUjh uHEPu uEHPo DYPEYPhH KuxooT RypnCYA wYrQUh MuUMEIEPML UMEMd CEBcr hAfWG wQFtu ViDMq xwUjh EEEMEME HnEMI MEEEE ntJETE EPEPM eAKuTynTs aDNkT QzjHlcN bUQQMEM XUbGs ZYUqc nnwofy SzVMU YuxiR BuCxoB CWBvA rMyDT BENls EmccJE zVGIx KCdHm QYlNlP LvneZX lrqjvvCj yrfLs wviMH vKcFKUK eRwrI XqGov ERUrADT aIfTy PrTQB ULzFa yrHNt dGeky QHalt CEbXG eoWvM BZtbUL hSIQPf WmpbF siXQD sYmBFbt xKWVj SzPUY MUXAn xcMSYn zjdZu yBFrsm RmGAZ BBtJrJ pjheI UQoVsX EMMUREPMMM EEMUQ UQMEH MMEUE XFMlFSa UPYkg XKNDE EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU fZviN HJCBBx MQMUU mUQMjE RItUQM EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd UVqqg ULMEH MUUEEMM UEEMMU NtfWIW hdqMh CyhpYz aLQijyHC YfoKpa JbpZy UwQXiC ljSdZwxl vjXmN VhYBm CyTjR dzAEF sETlr BnVSqm lASxO gBuJCv rptNr WfugK locale iostream Cbios badbit failbit MsQlU xgEPT zDfTWS hdUqMh JAvVys SaVNO oYvQG lwMpH frBoK jSdmx jRfZg JoOPO HbCKO dSpscG vOGZs AFwVVy KFxZB yUaPT gTrQbKzi hmrxK saliu YhaVPFk array length Uunknown error address family supported yalready connected argument argument domain descriptor message connection already progress Adevice resource directory empty large bfunction supported unreachable Awillegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process Qwbno message available message space device nivHnt process supported DLnhe XVoperation supported owner bprotocol error gdLRbNR Dstate recoverable files system files Zwrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx HGmTA AvxYIhJ JCkvcOZnv YhPBJRL pGfos YALYzy CJESC EXCxy BGXOa ZUoPc BUoxPc ULxPc UnzPnc gUnVP cBwbM UnzPnc gUndP gUnzP gUnAP gUnMP pUPce iEIcKQiFMlcbuJ cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor eCWqs Class Array Complete Object Locator xpxxxx mAHsJZv NOjBK ovRYOjEXYw jDdOR glUNXr oasin gosin Uceil floor ldexp hypot zofrexp csinh XEntPkhR CVswO PckKb cMonday Tuesday zciKOct January cMarch April December APcBb UpPcfb gUTPc oiMIcbJ qvQEiMqa LCIDToLocaleName PcbMlO llOqa wEbsA YIhgk mVskvclZCv nQBAI odDDi dSCSqy DBNYe pcxef fMHvD RObFt ewoKpr slXmu ERGqJ FjRwJ RIoNV qERXZb LtmYE RcWyu YmIoA YOgYE eIxRN JkcPZ UEcddE LlKyn OrtEd xGfIR PDwhx xWNRK RWBKs VmLKj TPtgkp zYaaO JanXm zGntH BpTcB ContextStackSize ContextPriority SchedulingProtocol JoIoyn ZfUUU TrnTB RpXvg ToJiwf QOiGl usage usage JZZvs iDiyh pMJEs mCtZGH nicehash qBEss SczfW sbVJZ Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ RFJlu bCCGs TgiMO aAtQlpp LXTmF JLXCM mNlVez giZMWQLU FOjjC vrLXk QmOtlYP ZeYghR HQqejSQ NCUvNH sLwoau GAHxUU rhDCq crbdU kpndF eyxPV mOZDv ABCDEF hDcrBB HmCqka jpFMfVG dmufRp vPspS yDisMq odfiB dIQIfXlN SDGhTw OykDirb TSkTem WlLcs XiJOs qEbpy JICEb ZYIhS jvTGnPp nUJkvc ClLcs OWgGE ZYIhS ftzma BxKAU yDisMq VqHmm WLWHh AyTmt EZYIhT AKZoI dqaSCf mCtOH wRZHc utnXt qCKbpy RLMqD xdBlzD NbJoO NCpki xWguSBJ GHLFe KHCrf osUsuTsX DMDIr tLJZR ZYIhT DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven YeJZRiseRiseRise Geode Geode OPTERON PHENOM PHENOM cFUSION FUSION FUSION FUSION Pentium Pentium Pentium Pentium Mobile Mobile Celeron Pentium cIRWIN dqkcf WESTMERE PENTIUM jcCORE MOBILE cMOBILE WOLFDALE MEROM bDUAL QUADCORE RPINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED UIVaP DisMq ZYIhS Unknown system error Unknown system error KEEACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF dbECANCELED cECONNABORTED EDESTADDRREQ EEXIST yEINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY cENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE gkOmbM UNKNOWN UUENXIO EMLINK cEREMOTEIO permission denied CorKUo address family supported temporary failure JZpermanent failure family supported Hresolved protocol unknown service available socket connection already progress ltZLz operation canceled JZconnection refused connection reset destination address required CzHuKrD lhost unreachable interrupted system invalid argument error socket already connected Amessage WHnetwork unreachable buffer space available device enough memory machine network space device socket connected directory directory empty protocol error result large system process Rcross device permitted unknown error KqewAgV links basync event signal unknown ksQKvv error malloc malloc ZPJcHNc malloc malloc malloc ZQueueUserWorkItem malloc CreateEvent pJGty WaitForSingleObject ReleaseSemaphore CreateEvent CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress Hkernel GetModuleHandleA ksQKvv CancelSynchronousIo powrprof socket cclosesocket UMissing after object member RMissing object member escape sequence string Column additional characters expected parse unicode surrogate aLHBad unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected Content Length ofalse RiYMOVH ElzVT HvQXXk jLSzDS wYZpx XiCDBK DOtLs YwNyMZQ mLZLw smJJR UOZTS mjptgAYd FgGtj XgClh qTUir VIajqta iWNeFUpa iLEsv fafyxijfhkdanfrzz ZYIhS yDisMq uIadU ClLcs XiOFS utnXt gYevE mYdmz UwQXiW jSdZmxl rIZle diFEv Kswhmax kxsjM jqVxQ litVGH ZYIhS yDisMq uIadU ClLcs XiOFS utnXt gYevE mYdmz UwQXiW jSdZmxl rIZle diFEv Kswhmax kxsjM jqVxQ litVGH ZYIhS yDisMq uIadU ClLcs XiOFS utnXt gYevE mYdmz UwQXiW jSdZmxl rIZle diFEv Kswhmax kxsjM jqVxQ litVGH ZYIhS yDisMq uIadU ClLcs XiOFS utnXt gYevE mYdmz UwQXiW jSdZmxl rIZle diFEv Kswhmax kxsjM jqVxQ litVGH ZYIhS yDisMq uIadU ClLcs XiOFS utnXt gYevE mYdmz UwQXiW jSdZmxl rIZle diFEv Kswhmax kxsjM jqVxQ litVGH ZYIhS yDisMq uIadU ClLcs XiOFS utnXt gYevE mYdmz UwQXiW jSdZmxl rIZle diFEv Kswhmax kxsjM oVnma DisMq GbHcR uIadU uVLvLXX xlmTb fGXvk TlHID ZyDij bvUMF UxcFD xslpOYq MXhmxo WLWhA dqDMX JAGMVy XiOFS rovDG tnMXt VIQMW qaLQj gYevE mYdmz UwQXiW jSdZmxl rIZle nHlEH UaZkJDO bTzHz,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj wNhhe lqEhQ ElYBX MocKmI TBMEPH LKJup jxVPPH FIEpON rOQbq vNOkb ahYNzem GVhwgWi JmiMnw ierqi qrHQb ASqJVh Fwbqb mhXTX xnvzHr SBAQPj bKCwQl GVwlL liDyo EZNkt CCawU bBlle JJhpu rnmKX JInAk vlFLLw PrMRwD uIbYZ TpwkN ofiqX YPJgg VFsrAfZqY pWZzE FGaDO bWlBPtxT QewYMe WtouK qZJNIMk LpgKl VZkLAx pLvjJx rEBan dbzpW kCTKa Njikkk utiVM FrVSNc Ooiij yLSzo ZKSKb YsxFe AVmqi bAZTMuo mhQAKJb RfKCq IEmfc hlDGi GVPysVlv diKdM BFhaM KrPmMSBk RImqL MDlLM gVVXG PDMKQ pIJwJT ejwXjK DOkILb UxFja zmaoTs MyXVIC dJvjz NasUh HxhOG kYQWl gYsvB KTkBFb qBaLN hNpHxQO qBKIr iImOc GICsvv ItXVs EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl YMfMPi NAhUPG RYZIh lRzbigS bQfgB xoKLG ANLxX IgKciTFj cobhi JUMdK SyZZIZ tIOfX fiAJT MBjlg IaGrsT RrEiy EzYVL XBYpd ThwUTWJ nQByk QPoHz UDmIm AIsZX AfoCd EiCnJBt IfGOQMw AjiNx GYFbW mNvDFTY YZitG GlnOwU xxenqxPfT rAzph OJlpO Abkkr fdxNu HJtacr hUQSVWf SDnId xZGGZXg ZWvoN SVpYPWy xXQqPpD WwHXt VXZxF NoYMv IUUbfttG UBZlObw VqduGTh bnYXoqZ zfeoEu fjbSa QAIeItVUFBd Irlcz YqKtcG EBjxx zngmym pqPFt srQUlh Jlkumg Bqowz sbEhIX LuiOB LYCpjJK OrVcXz SUwkL gaJzL UHFqf UpxUDh ZIhxyb fgWEc SBSPRn iSbWu QaOaCO gBIVph iNizN qVfFX WieQB ZaerG dcxyH OyQjusu nRCNmVwh IisdCV xRbuv YCftdxpiabk zHbok WGlvg ERtFH bXoHf PfeEIqofMh yKklt wAAdV kBKHJp RWOly vKmwp dGMEGZjD Gughp yuCoZd DqyPfK ABLNve VKSCR ODhJt kfKfF GRgyhJ VCTyXjxmwY bXSUVW qdHylM oRSXSux UXdaJ EWOdS BMJpAu oYrnU eeRiSK OcwkX GfSnWT qeFyG FxVnt QCwxYV TBHzy ViEFDq oxGGDW HEKPMWk hiXxZZXTZD tnCLa wNrGv JzHqd TSUVWL VWRPN VWRPq cLUxASyq fJsFE eIIii RjfgF MHSVWhI upXwnL YlEhPj saNLo VgUSVWh UfgymWO uqFqHhALv AqMkg IDIlHD jRXUge phnSF xdEoX fockWxJEO uWfnH aGqSFP UkKsI xpgYFh nFJmE sNSgJ vVxIg SUVWT ErOCZ kMVuvej hNNGkc bwWcf WYwOlq KPTzN gNKvcu OAMOv FABJb QriYi jBMgj TRqhLs SKZJH lnFEa AcLhSV leoee UCXRb UsRAp gaDHC lJITW uhRUJz ScSxq qqqrM XHBGrhM lCsrHGg ykRvf RbEke eriITb Fvxoypb ygxKB WjSnT EjFho kreYG csWxK DaJLd QbGmof dXZfifFY EWMuG AQwPN omgksmD gJuuH WxWCeTa nxFgXy YoGtU JgkeXtKtc zCZJW pduMjY OVQyohH XETQqpZC gUPkJ OhGbv oJYXD KWRzC edQYY EexqE FfxLB osAeFz YVgvs GaQnL ajZyh GrVmI AfqZo aDmtm bsPip socyLP UBkkiz vLMOh jwEUD NeHKE BZqfz iPDly fkSUVW BaeaK aeLOmh jSjZDcd VPjLh tMXsS QhDnPca QeJYJ GHntp wwlGq JfonQ TVUIs mUixN bOdUAY rWpfU aAOjLGUSrqr mRdVf BHaDH zTfSvBY NFOKN rwnkB iypzag UAJUxVW tWiRX jBiWeOA raTgu iKCAi FDRdd IIDEp LDxwvkwgH rfKfm DaGMF boGjO yDbcp zgHdv piuSf Boaaq BXWsmAe SKvfHC vhxzrku cdSsF SKvfHC icxfu dyqWS FEOqTwd JjmgW kJklM tvhHI tKUShwOM pMzzu uSUVhI cqJSb CqWnlL mLnDw HbwsqxJ bPaVMMk DoByz HpagJ OxRXW WAtZqY lwqHv zZBffB mmefpl sXPVjt tLsdB SUVWC GBwGou vnyXB eJYji xGwuuvpe IevGg tXoPS BUeZx SUVWh QSUVW FdVgeEV SWBYCDw AFpam GXGTt VXvDI uYCYJ mFzWj FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS YnOkRWQg MsrJYdo YYxrF XHFUBe NPAjzT pfeMy JiRQaMp fxIFcdmCi DqCQw fzDpqx RckZUM LxHJXwo VrZhq WzexFAh jGxBt PmXjr mwgrE yEZVT NVzdeHpr vSsWh xgEtH sMQzg JomFS rpPbZ GzXOzJ pKcJg Qzskz BuUjh EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE EmUjh xYYEe FxlOFR Qwnkt nUxgU VdRBUuRn MEEEEE MEEEEMe TSVWu EPMMtM ZdXpk MyUiuts WWkZa MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH fOUjh SVWeMe yAEiUjh EPMEEEE MTVMMHVE MEEEEE kaDXm ZkYSP ffpozM BxZCbY ORKNeyt YYLAXB VnnGCEk RYESIq MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP BrOBzD SVWeMEEMM RMEEM vhBje KSZkt MlVPn CVCyG YxfqH GueXx pSDVm EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM wjpby MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU Qeraf EEMME MMUUEEM SVWeQ EuWuS RRGMIM CeEYE ZmvnK ZlejL DNTiPHU eHKyt NeyVt EGeEl bRgoqW nMlYEAtclR xxVlf cMEWe FKhKf ZYeem zaAWGF xRbJfuR jYEIcA pvWuRF KEBpn KrKhkflJ WPjSZY jfihuJguJ TymuK dBKEFCf vFVCn CXwUs DiGzqI lvfgC uSvCS ZWXsRu FSEtwuc tlkyiC sKuiQp zsbabG ORtal WGSnwnl LpKAv JcbrvYb lbGGK TgcSxH NAqoj IAMPWR mQJQBq bXzCg qIlpHKlCmq zzmNa HkjJS ZRHYr zDxIr LEBbrn AwNeyY VDABS BCyaNE Lhjbqr eBAfdq wFMxH ErATnET xiluH ENidCD vikav gaciQ kHbYH sFnEJlLj TptYM sWgybW lOZzV PZIBM GSfhx yPvKB ymkBh YObOl drMmuI MqPhXm DoLkEtgsi TFGqx ibVYCi ZCxshdFG ZmTOu lAhRjj aQcUu xVQEcJ kMrGDaV GHMeLV dPVIc NEkRJ HouBk lhwnUS rqbQTxf oYczv evjnyg yIfkj JhFBT eVPCL YtQZM oWRRn usDDe QJUGF dhPlE UgfOd YejEdkJ uyUSK iBJxz zcybPp AMdDP bnnlD aMmlf aUooK GYkjn OqbRyC fvwrx mZOGX OFcHo koVFy Lfrag qdbtW vKDcJCc UXXLl IotwT FayYmxe xIiDBi ZEfYwbz ISTJV XHyaL AUKZCFuK EuRUBIie KmBpGbn QslMoa rXkuaBR CYPXYN JMFlChq aieOagN QpRyO HxNULT ihJdIa wylQi OXHKT YXXWaps wGYRF bdWTu eKInG AzSCg dgSBK WfhBL TiTHXRTRfQ lrbgg QtNZd CMoCuH ZqEHd Ilhcw SUVWj BABABA WOuSe dTbiiAxFg YouLB veukv dRlycFP CCoUfjk bpLGV qExbbfE ioRfg hRJET sONOve PQYYt sYegM ZqqMrb MIhKgw pWMkHG QLbBw uYSWu OMxrB EntelE ineIEE GenuE SVRkh PeuEEEEd JvPxSV Hbimirg RUQVu Emphc QPEPh QPEPh zUjhJ mgZdL mPAvce KBmePMVpSj sYZcd noPxV PYYug PYYug YYEPV UQQEP XmCNw FyukJGc mTwRYS SMxDy bvNYH VVQYn IJdqx XmZYNJg OBWbQo YpOFK UQSVu akLCG JWEKR oKZZHW rbrts HuYUV EPuuu NDDQzb ObtDl SVWUu tfVUk tLxXj USVWUj UQPXY lvsMl dJUVh CuiYM csmuP XftwNJ nrtPN oALSQnQL pohreZk tcEhb PPwjW muuMa uTyDzm XmgYNJs tPtLw PQYYPV ECOBW kqnSs nEbjM Ujhxj hSVWT URPQQh USVWj WpRUa PPPPPy ZeHILT MeEPj TQLLpi YPunG iJLzw XiLYt AIFrO MksXw kjmCvxZ kCFzkG gwRnXg QJFXnY kPzBn RosBU EQPjjM VPuus UQQVu Vzdtd lzRmX boblSnM ZefVr EjHmW USVWN iBPsr UhdUV UAlFu jUQSVMWj mssDxS nFyAU ItOLt ItAJj rUQSV jAZjX UQQVWjgYjGN PQPPESPW jsXfF jpvPZ DuTTA DYXDa UQQVW CAdVz sgjurK WlJDQz JRSQs VPEtz GlNvf HyReq MAwLsJM hvQku jBKul dczEprG RIgxL RPQQE VQuuH ibOvD uEPEPWSY PSdMtUU ETUqwt YPVWSu kPVWSu bjpvrk QyneeH mZFor aXYIh kjWew lhaGk fDTxTB IvtFbB mCQPg ggTMTx QVsRWpAz ixMQJxc aOmxsD odxblM rhfct BqtuY tSIFl omqKjvyk pFUZI ABnOSO IdHaDqU AqxIa wgZFiJU DUQQE uPuSW EEwPr UEHEu zWOBfa joDODyCO HSTfWB PUQQS XfEFhP EPEPk AlVpu FZZpiO PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu aZPxA awKBfFWG CPzzm jklnK vnGer XgLVitU uBjAYjZ uptWx jAZjZ UQQVWO SVWtdAu pXSGLB oVGMp ogFql rvmqDi TklYF qdcyAL UoSHxO oZoMQ lnync EasoVm cUDfG vJmWO Sricud gyFTMvE UynQYPOk CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp zmMnpi lVKqG zTbqc MNrwQ gSYRB ohmdt sfmVT VCzFrZ MEEEPu GpCLWn cGZRx JSBFx shsaxjiZG nTubv YuAJB uemlc SOGYu PPPPPt PPPPP HLMMQP RvfCa Nbcnt YYtVWh EWWPb uCYYt uVWTb WWWWWS XEJNJY sMHek RICVHUpn qgBvEt YtVWj PPPPPPPPU VSYYt XmJNJ JNJKG xQYAG bfDfg ckvdhk tGJuaD aviKR EAEfEEj EPQEPEj ixjeUyma BGdEH TzxDH AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP HWYtS LNHSI sZwQoe gClej UQQfE fEEPj CTLKS BbUrFyv EGWVj iWoXsDb VkENP nlxxCk hznqP CymKU nhaOR MSVWu MQWPVk aRegv NcWqFE MEEEPu XpYYWf dhtYS PPPPPWSu QQQPu VWuSu PPVWPu HUWVSM LRAbpmf dgunG BxjajY jXmyNJ WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu bamGw FdFtK bKzxsH RQDIecP rhIqZ GEAUa ranrM GFSwo QPLYYMt CKpoU jvNMMl QltDR dXLnE hotvUAD UyUEE AiBoRy WMmhH YnOjO Oeedsbjr PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj WoiliF nXCUuR ZSviV GkaWX HinRnLGX GAvBP EihWuRwAU UlmRG NxshBpDD xUGXpEk CoIsh UJKbA nnrmiD WxxVL WvvVL WHtAtVL XJgDz tBdAE EVpKdxcR ENlry QkkWm xZTKV PEmmi EOHusLNS heDoQW bBojB qYLei ESTbc ceTGew QExZQL ouPNs UYjnosb YRBlt XxVmn bizpKF pnwQQ YXlmC LRgOd ZKhHy RuUqhK QQQPu MEEEPu EEPVYY wkFny DqEqG vJbde IFoNJI torpv hfTZj YQBbd HVTHvH wPGCM WMtVpsON EPeuEEEEd csmuu UEcsmE PEEhg UxdIod VWlCv UQQSV DiGAR TMWyhVj xzNLNO QPxFlV IlMET xzTao hVOHdfP PCaeM ejFmk lhWtU gBjIR hhMXd dLbOe WjKKb PrLYf Pjuzqw SHgtT OgKvJK fBmmg oXeZWU EuWMra xfLBKClr NLxoQT FeUFJ FvmmB xOPOf BgLQbF hMtRRQX oapoC KWAYy dacObwFo quXVm FAVBDj brruISe qvpGu JmnFsKIJ fUltX okLHK OCcWQ Ulqzrn wLTGl BsfIy FZyva TwSBimy mQOWnv gPoCF lPTVY ERMCSa jGTcY QupSS tLwADu HEUlL JnqAvC NmmUiO lkSwk TDeEI zIUnA vyGnR wgJhqR zkfyR ERqlOU AlvoPW WhkQU SEBRpl BwiAM weUPH lmcIA IwAIg gKxyBP NfjgE DTlaI Oveqz CoCPWrZr IDMDF ZIBFy bECOt WXPzR OmNqZ sAuMh Ivpak KhEAe kBWfi DSRlPR GFhGQ DnMCmI cAILV bzyKQ GbGImbo XvDZoh aHJbpW hjxEPD xKRcVeew zmWCPXO YWlaP pdppmS SnMTMg MXMPM VMOcFb NjtNcxV iMoWha qcxVl GAVDfj ydzYvZ xSYEcmO oVstS HXRTR HRyKoCW HFFiRs VogyvvM MRMWay nYHPjs PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI ttiQPG nAbGF uHEPu uEHPo DYPEYPhH iQJmEWO ZUQMj WfvWYGg KrqfY huSrMw SyUjh MuUMEIEPML UMEMd ogFXMFD ELgyN SBUjh EEEMEME HnEMI MEEEE ntJETE EPEPM UQQMEM aIFEr fYPxd irxKR ghceaBZ qgjliVMCPG JdeEFh uIDpApy oMQGy fbBpQ RgusO olZmuVwWk TnmFz YBHQL AVPhuxI tyndAGPHb pfFrn lBIqu mBnVO scWFj FITaOkUh beVXJz iCAKM yaUhW WLvFQH TwxPouw DwsuCx ajbTG BeVWH AjAoB AEmQR BtbzXb EKgLlT RMPcx vWHHuJ FLRkSY yawvtd XHqZR WgIGH EMMUREPMMM EEMUQ zhUQMEH MMEUE rxKWS EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU HgQSNc fhpCfq MQMUU sMAKd stHDI UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd pVkvJ KUQME zhULMEH MUUEEMM UEEMMU JfboL fuUAC TvhJX utNmd HHSqbl cuvDd YmxVPJ gRxNsvx nBDob jRsPCXl QlZtz NftNgA YROHYl RLOEy gCUKZzu CdKvj putQOc AEisM locale xVhgyI Nbiostream badbit failbit hcvLvP ezhAz PYjbOr lqUPz RiNlr IoqKknB fKLgRb qbbpNP WfhSugC SFbElp kyddn FIGheE gzxus EqPCJ sZoes fUZqJH chFLjPgls NRmnZB iHNBHLS NWtSg MRCOt RCEyk FgUKZ array length unknown error address family supported already connected argument argument domain bHQbad descriptor message connection already progress pqdevice resource directory empty mfile large Wfunction supported unreachable Hillegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device EgRIf process supported Ooperation supported owner nCDvY hjyXq protocol error state recoverable files system files Pueav wrong protocol FlsAlloc FlsFree SetThreadpoolTimer lSniA InitializeSRWLock MvgLk CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx LszLy jmTWu bEQmY TGpeip dANXR sjqcsm fAtOd dKadhtlP MzOzro cdecl stdcall clrcall Mrestrict operator vftable typeof local static guard string GzOeb default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement CEOIh vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor LQGcj Class Array Complete Object Locator xpxxxx cwwkw wIXpC aRrFD rgCGei UNDpU zhmbb sTzRl wGkAX XDmsin floor ldexp hypot ufrexp kHLpT JSexp Qsinh cLdqJj cRUuC pTpbhi wxgrQ QMonday Tuesday sQOct January QMarch April oQKVO December LYYqj LwfqW fAtOd ULIoqj EnumSystemLocalesEx lLCIDToLocaleName AelVr gLjsq fMcOT WfWOs xdufz oJwcl cUYbu qcWDuY afvOT uYvLi nXnrt PGWQpS pYvQrnN LtmYE SXdOlA lstId PnEzj Cyhfpa kLlwC kYFapTz hVaWG PwWXLQ acSQu MHsBQ MNRDM ZhuOz ThqEJPaD YRbXg NgoVA wXAMi gcpmX oDxBb PROwK ymKgxcQf iEQExzO zGntH xklVEbpT vGtwu ContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey xDNkSYNV fWOsqrt ZfUUU yqHZwJY FocuH Ipcpu usage usage ZLLLo JRgcD eSSlBu nicehash wuuzk TFjac mpTKkN ZNlMF eSSlBu Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ fGAoeS hTtDSk ftIrjg LpMot tgsKsoK CTzQW kTYlba JLXCM mNlVez DMVzxp TkLog SqAonW rBCgMe UJImfv GmcjV kykGu ZGFfUo ABCDEF uqUMo MNFJP cvIsm MrOsl ugHJv uMqte sOVIK jTqiH RXUaV QKiUgS bxyiW NycCU MuNkn bEfrkOm TIcur pBPsaQ PoSik gEzOk NYYMv ZhYAMpO HlSrSrb XZoxv dPMdKuH fAnPIK baAEE gKmFz YjEar ftWOJ kCAUD xOYtWOzJ bkNSa PYjbAr pLteg oOvJX XVRAN fWONaQv QkhCAD XqZAb MxUSRF HWbIk DhPPA khcTXE wYLVmI ywfhNaT Tllha rgXYR FdqKpZ uJEvqRA CmtIgI ZeiUN sDnRd wTLxk phLSd jwDYj SOfFL wQSEFt moEoD Yueif fMPWa TVXwL GAtdr DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven CHDae fRiseRiseRise Geode Geode ZOPTERON PHENOM PHENOM QFUSION FUSION FUSION FUSION Pentium Pentium Pentium Pentium Mobile Mobile Celeron Pentium lQIRWIN WESTMERE PENTIUM LQCORE MOBILE QMOBILE WOLFDALE MEROM QUADCORE oPINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED LZqxrv twMZJ iUIPSR Unknown system error Unknown system error sEACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF ECANCELED QECONNABORTED oEDESTADDRREQ EEXIST EINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY QENOTSUP EPERM EPIPE UESHUTDOWN ESPIPE lUNKNOWN ENXIO EMLINK QEREMOTEIO permission denied address family supported temporary failure fpermanent failure family supported afVUBX resolved protocol unknown service available socket oconnection already progress ooperation canceled fconnection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected EpxxsLuTX wmessage network unreachable buffer space available device enough memory machine network KlvgLno space device osocket connected directory directory empty rprotocol error result large system process ocross device permitted unknown error links async event signal unknown error malloc malloc malloc malloc malloc MOQueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore CreateEvent abLWwPM CreateEvent CreateEvent LIqqzjE iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress kernel GetModuleHandleA aBjxL CancelSynchronousIo powrprof osocket Qclosesocket Missing after object member oMissing object member escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected WOSyntax error value object array expected oalBsg UContent Length xtfalse fRUISWl XZjLO Sjnrvz fkaip xENEIQR hjicklD BFJNR dhlpzOJ HJIDKL bfjGnFVGZRU HdjAP GTxYtOA CSGyd JFDuwlj FpMTjf pdCjA hmvmK byeHS VNHlMELxn zTkAvsC OqZKs nYBpg qENMx yiGcv zMBdY FoFGA JTUda uJUHb qzYyE LFJAps dnvzBu EVzak QvnoZ YlGtkk ZBIen JbYVMi DgwjC rEfhA NMSrn FfhVv edxbL MWzpl lSIdN fafyxijfhkdanfrzz PYjbOr lNYYMv TcvJX ruRhVJ hVaGs HvNpHxSf LpKAvyph Tllha qduyTh ouJph QHAAI eACJR uxNjD mATCX PYjbOr lNYYMv TcvJX ruRhVJ hVaGs HvNpHxSf LpKAvyph Tllha qduyTh ouJph QHAAI eACJR uxNjD mATCX PYjbOr lNYYMv TcvJX ruRhVJ hVaGs HvNpHxSf LpKAvyph Tllha qduyTh ouJph QHAAI eACJR uxNjD mATCX PYjbOr lNYYMv TcvJX ruRhVJ hVaGs HvNpHxSf LpKAvyph Tllha qduyTh ouJph QHAAI eACJR uxNjD mATCX PYjbOr lNYYMv TcvJX ruRhVJ hVaGs HvNpHxSf LpKAvyph Tllha qduyTh ouJph QHAAI eACJR uxNjD mATCX PYjbOr lNYYMv TcvJX ruRhVJ hVaGs HvNpHxSf LpKAvyph Tllha qduyTh ouJph QHAAI eACJR IORmVR uFjac mpsTK PYjbOr VIbgM jTYJU PMzGru rVRkxLaS QMIDZh VIHvn wodip iyrHpe lNYYMv xUfOT Vfzht ruRhVJ hVaGs HvNpHxSf HKYmqz LpJVc POiYF RDkwc rEHpYu tKbCv,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj KvObO GdiHO dQcHyqtaI jrzsU VyJStD cNvzJ txzzt EzeHhn jIhuh lWEsLACq GlPRgvEVZ BJXlR UFNPj YlDljUe YZMEu RuNJdL waywxLjAYr iQqlA FLSZe xFNEJ Fgshs ukhWnZ EuOpz uEoEW bWPnw eIXnX urTaN KZcMO EiyYA EZjAINt iibUBxN IxoMhnixI yfURY mVcGbG XfWYqr vIBrEAX yDHZF woCNOGlF oyVRQ ZKlZc YoouX szfEW YYyFk GPPhVvf iJFLZa tCGgm VOzWW nUcZAc OIwSd hUhzEjfn XvnxR xHVwo wWEIoq xyOlX GyrBR pGVTDn MpqhtV SUmyV gBTKx uIUdD Kaalh NWeJDp MkRgZs SJIxB EZybIh Abtso gzOtR uCIeW Wdgzx tVcLn kVyaXQ jrSHP yKNHwm EoNhedVy nnLmi qOQfh XAtfO EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl EiBdL kXjlx BDmyen wHcKp bywtCK eNCdi ocFAN XdOsEt hLrbr bJQxX TrbWB RMBij INGGA YyUxc nlHdf iNJEj VofmE irxdbK yzqPM whfUI rarJBeA xvVra sUldv PiQGk kmhAP XSkGN hZyIYpQ WjawK gAVJs uMxmu TodWO pluqlk tzApJ FgWSg cZhQB FngOG KJjbo AzUiE unpjPV oQUCV jaFUED dZOucM lHRJXkX YVdBR RgyCE xiqJV vVcym hyAEC XrEehlg HGnHb PjFAw oEAqq AGvoJ kpHNsO SWhglgXQE mcYCW nudPcJH igUQSVWf hCmEw KPuWuDl zPmBMi fmEdDXQ JZyGP PoKzp SVpYPWy xXQqPpD WwHXt fTTmMi HuYlU IpcQMm RIMWRvY ynSVR KoNXS MMjqgv OLwpQ LFFwGC XaFOh LbHySgU VPBqj SwhFS vwQcP fThMI nfnnP EVLlOX uUxdp NJegG IQvCQ oASRIF QMWrCM yrDMMw qpyDA bdJHUcL nALfsm zjRxlwstb YxpWQJ GfXEJI yPOZy kIDLNE TtUwSr vMfRGOFC QoncF Gmypn rlaNq tMSVY rGxyHi rjuhlDC sFSRq wxLBjb osMfh TciBLk omgxU hIcfs cFYgHJ NkOpM WtXYa ynEYwDfJd ikcHeZ LbBGqC KAJSa UXnEA PSNCn mkEXn aeUpchVKJ hwkhD TCmrSX mYlWe LOiDHw ECNwz eZACt qunLD CmHPi bAfbM qtvTC dZEFDtEsL ZGvZN zAiREh cfSUVW FjSBfeL qhPdCg nnavv HQcynN nPtYX nsNKg iPHdU yNvtY aumzJZ SoLVo zbDvhS OCGdq GGUIG KhHfQAL FfhPU pYmCC qgxNQ gyqsqyp DuVMl SvPDolz oICdrkq WEYqP TSUVWL VWRPN VWRPq PazqB UjnLo IgXSVWhI mqoDuTE fNXVT TXnQe BbJag weXTf IgXLa wSRAg cQUIO Wjhhv kjioK KiNkVG pNYll SUVWT SeYlCV yQRsK YEsSq ZRhAS YFPCa vBwdDC BBDYfG ZQQch RBdEVsOu WCDvG YiQYr LpVEcT xvXuFZ SzNME sfTCa EBuWcb DUeiPW CJQKTmVG cXjvMd UDobq oMjwM Tzlix CUQTs iJzKdkf DFnJrUJt vLjdM yvPst xXvLUF gFsaxT GiVHq RPJHHcc NCKwu lCdUG PKZbao RXmGd XWYvbG ypqvx RhOTBY UZvOheA uYPHq urhsi fuUnn fhvII ErBqW GBoeqfcG AbRFb CEYmx ESUVz KmrNuWDCPG OcULO iycCpMEM QEqcfM OjITQT MSqcMMR YZcvI OhrZe WaVtL WmiXY pIGoN FVTFNeJ hHYER JWSgV UFujHg UJkaQ IdOBFG msUms JUzbHe ndAdm PBtyU umgUw xfYDy OUPAc PGXzRK Nqvkk ZUISq BPnxYS aOjEY eUdMX KaqGXm VQCyO jGrcKxh WxcEF ufXfVp iwNHX SXvGV heZaP LzTmv bJnbv UyHBdVZF XdpQUx RKgJt PXURz sWfuuU WyXxHu zwoNwz zVlLiE HmBjl wporMGWq jKXIYm lZGsj TrZnRcF TjYgd wicmHuFwh ZSUVW KiUIdpLM AViqn adbtxU VPjLh IfNfBGTR rcQsV XznReT VcVshl DhVdFN frMTVZ lMjEL XjGLSVT pbBEG WOzBq VjZvk nHVZj YBzzx XBKEV TUQDba owgbDY FEzJc nRzYH sdSRqr SYwUh QEQItEY zUnySa XtIsiTh uGRFsrD mHzcrX FjhlZ eQGvc krHKja fprLoF huxzw koOfVG kAtnqLeX jdZHV ddEunQI rMwyf PJPikuf oIwGT hkwQY YAWZN WgwKCaN tfyJL yobLo NqvGSs SFuAG dWddX PQdLk PQdLk UjUGWU UnAgAKJ wCmPq OVqAL mnwZVC pIyImCi YEMKLYr PFxeY YHlmR tvhHI NkpOJi uSUVhI RnFyq dEHqM TqlAz OAQiwg wcmAwR yZpDlQG xOEbm OGgXC LvwIp sQUPZ TjuJe cDInK SmZfbFCrj EXhdW mlXBD fYSiPQ rQHKaMQ DZjNSh xFjDOk sXPVjt tLsdB FamqR JSqAg mkoYBcEk SUVWC xlIPHU kvCgN PKapO YvJcu swcuzK SUVWh FDTGiQ QSUVW JPfftt JPhJtW EbwVb GXGTt AfDyR tqtts idnbjm VVYVn CkxHw FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS EAzVo tzkmr WJFfRXzSt RZjiDGS YNJXq dEtGY BCaex jnrPk nrmfZRj MNkOjN uksWZ cCijJ ukhlF sCBRiRBqI evRwg AyynE BTOes daGMdz pJNfOGz EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE Wgugw kpHNsO xYYEe LVhoM yDvUca SqUjh MEEEEE MEEEEMe TSVWu EPMMtM waUZEPpG maUngVS TetZUE MEEEEE tZPEP IzDpg UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE IgXUA IgXUE MEEEEE kvlMQ PidLe mqpkf wPUqNf GHlsGdt EYKEA QvUcZ GKHdE DlbPSJQ hMLHk MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP rGtQn cQjXN SVWeMEEMM RMEEM vQkUIdMQ qOMUVXW ngiyA YNTOr aphTS qxXNv opaan nnKtusun elwgEQ NCiKq oOBizo olTLP xSqpEI EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE igUjh EMMUU UREPM NuYqK MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ nmAlJNz vQkUIdMQ xZAWrk QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU RnIjB IgXUjh MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU IfDPn KJbIm EEMME MMUUEEM SVWeQ EuWuS eBHFwH VdDnz GKdEI MLuoAP SyNxS tMOUxK lcNRAZ FhgRg aWnZq dDDDZ DMKEHtAC SqbFT QcwVGK NAIooM yVWgA bxvSH Scsqr TaRku IwgTW NgJWw rltIPd MOJWm oydgw BkwCFnuK LKUioW UhPyk mrwWPZKrZ iDLPK HgfvhZI iyjVtd deeUA fzyqFF rUqDH HBgxS iPnrq XVeVd fQOyDz dEvIb Cztmqz rOZRe grxABJ CWCxN aaZuWgP jKbmQ NQBsZ DVsrIs FXrJV RPnaga qKFgl oNJTW FwBaZ uRodN fwVkBv cuvwWs XHqUu zHMZoA wHJxt krryp opuLi ZzrTmh biptq yAJmp BNAjB BLJNc sMVty qrAyR tAnFq WjmHd cLYoZg yBRzHa WdLfQ UCFZVk lpCXo gJZrR VkAAf OonFkWl BLePD ydIyiKRf HZkmv MSdMp xzcqa mNVjv YtqAq hBxZk zhfaOkF aRWBj IgFFZuWK IZPvhb EzNDy nAfCfQCo vNgwc NtJtgK iikYz EyRzZtb KTFOdk TXMWV jwtHYW HqFwZf lyiSvs YLWyL NuYqK XCrQI ENejC mdoMjY rPosDlL RzSXm naUzc WBuaoG IoUSj MuLRs IJfdc bVZmv tUdllL CUbCk CWBqaQ NKmnkmM rtONx BSniG SUVWj BABABA dEJfid sKUId pPiQS fHwPZ Hkihg bDTxp TnOCq DcJPE XzTpTyflRFw POALmPO IqmFs XQVrO PQYYt uYSWu lVQFn pgWBSY NvNkID eCDvUC EntelE ineIEE GenuE IbmRH PeuEEEEd hJSeHH wSRSV oXATx SMQgsr QPEPh QPEPh PUjhJ OKTSAU vIXRpT PYYug PYYug YYEPV UQQEP HBqfq oqBtF bYZmD IAfsud DDjdJ djXqtL UsXpic arYep Udyrm vWkjUQVu VVQYn EnTLC rqaEt dUQSVu HroFs sBgoC xoUqa sAZlVh HuYUV EPuuu FMLAp SVWUu tfVUk tLxXj USVWUj UQPXY bxHud IYjrR teZuw IYvyJ DMRhBoY YDkYc tsQbXqY CuiYM csmuP LYowyrx YduOa IfPTs tPtLw PQYYPV ImvkO Ujhxj UiYSVWT URPQQh USVWj TXezi PPPPPy NdWLx gcfoH MeEPj ACypyRgeo ViTnV fSHao Zocam EQPjjM VPuus wUQQVu KcqKPy Ebiyb NCyJxv tXTuIA EUwWry XUzAK iQfbC TEUSVWN VLnLM ARQlRd ZQCOO cZYZv Tfcdd UQSVMWj JAzYTecyLF rICyV ijBkB ItOLt PTWzC uxsMx uBHoxH gHztfK jAZjX lMMWUR UQQVWjgYjGN PQPPESPW jsXfF LMdfal cvNzy GqAHluD IOTea UQQVW tlSgRk Qkfai mvqKw PPSUWyAGGEk RPQQE VQuuH BkSfbTQ uEPEPWSY YPVWSu kPVWSu CnIvl VYtrnPa aCPSY rjTfEi lzjiNUdU ROhWS dklqKiys fpwQZ pdYwJ QUfoz LGflI GyQiA IBkmg htaxD KoEYeQ bVHRqo UxooF shBzKWp xdpxqWOf ZhmOrSC lVocj ARaOZ CZJuABhzrqsD HizgCoteH FirBnX wvUQQE uPuSW EEwPr UEHEu mpmNDJ LqXJR sRGGq lCJzd xUQVV wUQQS XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu GZeFUu vmPpN MtnSR FyuaX FrfmE Yfqzv tQLqEX aAhCb GJEdO uBjAYjZ KxLZR jAZjZ UQQVWO SVWtdAu gKVIJ DLguW STVKK wHzGb JqtMF eQuDB zxuOe CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp LkIJTgSp ZxJxnrWzqKpqIYq CZhcC lFfAxV QTQlZay IVICr daHxy yFGRy aOdBe sElmXv tcWeXjR gLIwiMUe yIndozzk oCBUE MEEEPu mICjq WTXXt GhDNxh IViQM FhZrf SOGYu PPPPPt PPPPP HLMMQP dvwGK LXcii dPtuT wJRgcf YYtVWh EWWPb uCYYt uVWTb WWWWWS YtVWj PPPPPPPPU VSYYt vuKPO EAEfEEj EPQEPEj Iemin epKsu AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP hUcvC Sjwdc VryBh ltaoK lAokBeAKXI UQQfE fEEPj mtQJTs mePgJ XGPryB HgKsa IGaNcB olIEp IYpUQH EGWVj XyhJnMY pusMR HrKjvO IXXSq hXeGW MSVWu MQWPVk xsTtn rfvowyOd nsAaYZ MEEEPu rVyrYeI CqhcT PPPPPWSu QQQPu VWuSu PPVWPu IgXUWVSM nTEqJb IUtqqsBs roFdV NcVNn VnTba HoIcL WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj EtOEj wHuhjj YuwHu sbIMS ejqrY OtDVn sbuFV ZQVVJz RYEbq dsWyq VTpWe QPLYYMt csCbT dcuLt wXUWu dfTQI xmHae fjvVp PBxLKo otpRnD XbhZBZ ZCvxQ neTGf XYXPPq ETcsUo jnqfI PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj EXHvh MPZuY HJKvS wobIjMtG wkLCJVi XRacO zyPhDS XydwEy rsxiP MCPBs awwpt fqLRo tjwTV EsugYK YDhKM WxxVL WvvVL WHtAtVL zPWUt xcCjR cpItd pWgfNfY rNQst MfvPc cmElU YJzIj rjZYPR vXVlq kFjzY Sajjtq iVatW DCZDvVva bemXZ SPEikD gmDBw bUpex QQQPu oqkgH MEEEPu EEPVYY bTSDNw KeNqwC gQmFZ iVdUE HJyPY NUgvEvcK RdAmz iNGjt EPeuEEEEd csmuu UEcsmE PEEhg yYkta ZOdOb SlnvGv ehrMid RwgEA eUaDZ VWlCv TxjJPx UQQSV SZzDO mFCOO DQlvq ODenLMlpasBHFDGX AsyQHEd nhJXT NtrJa kqCdcjMssJRN xppvh qiyEW wBTlmq CNyxn ZWNMx snnwnk luEIB GoQZnY XFcvLT wXsnG YjIpH XdizY VChvCp prBjf txGHN OSGozE iHjwV EMqCk SIEiq AxLWy QbdSnI ncXKX qLTyU euHIwY KovTWn hBBdow AeZYE WsGBB xirYzF kMMZe HgxNX tnHwc wTYGJE Etqlq KINttS zsIwi BIDCV yDUzP jKiwrH Tepcrq Ljouw GYEUSq VLpQgA LNlMaiN LBEup qChwBh yniKI zrFQa mODLnwe BhLNm RzWBB tERhaV lWjJtM YgvpjvG vyvSL JFEtO rzlwKO mSqFTo raNFTQ pRioYj oceHOR AnEog quWttq wEpiz cETEqk CgtltRVN kxiVA FPwKLO GzQidzk sjKaE TXoLo KhhYq bhNmgm YltNV WwTeO fylQs DmjqM xukIR VpOdO yCCYMW vFzvpW igjxEPD gmEza RgPXpw fDJMKAKU XSNmq haeaX CXcNU MXMPi fKnaAd KMLnZ rAlogw HQECI JZOno ALSDj fECZro ePGFcjL ivvhIt tpplq FpXOT SsRcWYv vbNKA EqOMRi NOJJm XngiF IVWpx fOaNg PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH yUQMj CsBSFne NiQlC ahpgP QhBtb gzCQGmw mqUjY MuUMEIEPML UMEMd EEEMEME HnEMI MEEEE ntJETE EPEPM uqBSCRg YFpUQQMEM WVHdT wMOAS eKemq iQlCD mhjNv hBUgMa cfsye bXQHG eBzJM qQRsQi fEHVd hGxvDsoLu aMKxx ZnZuj PDUJtOsZXS lkOOz HlTGQs KSCph tPaeru ZBBBcBA zZyeL xHNMz QTDCS HybpiW wCccjb olVuNG VLQXQgQT CEYXBL DwOTIG ctZgxM HlkdI KvHGt tOAji omzlWp GQPLY KDDkMFnrT EnHYa wwrdK GTmnD OTfmnI gDIpGEz GcYJE CccSG DEeEw EMMUREPMMM EEMUQ UQMEH MMEUE rXYCwRT doYjR qFpPUQMM EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU iGxJE HqFwZ SIYppwQUEH ZjYDL QxpcLY CbHlD bvGnv AoUjh MQMUU gbOdN RjOOQ qmFKjrM KAlpd UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd pwUQME ysdhI ULMEH MUUEEMM UEEMMU JPyVon MHbRq DsYzw UKEMj VDbKexFz OrqokN dAbez JUsvnE Nsvrk vPPvx TypjGm rIHgG mRQXb mIWuF ZKLOj Xwvpy RkGzjxnK RNZYcD tDhTn locale crXXL iostream badbit failbit FkXIe LzktWK TQMWQccM JBeAS rOWfq lNfQkr fbvjb KoMjc PTELl DEetRLKt vOASE DBark ahzaR QQlcs AEGer NLNpta hkqXTHW NlAoM UQonfpJYk umVhW JSwLf XFaoj QHmVQ YcPOC KAJvk XetvWpE pdSnx OEYCE bkUbuRkGjK xLBjZ QbFIY UNDRf nFQaB array length unknown error address family supported already connected argument argument domain descriptor message connection already progress device resource directory empty large pOfunction supported unreachable Oillegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process ysZlspOno message available message space device process rKnot supported goperation supported Fowner IMpOprotocol error zrystate recoverable files system files lAyVy wrong protocol FlsAlloc FlsFree AIFwhu SetThreadpoolTimer JykQsP bhYaJ InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx iByUIo MrKrV aGtoySD wPUfe wpVEhCr vjGLK mMjYp gpnFE UUvfQ CfCpif RXZDb cdecl stdcall clrcall Frestrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator iwaYAsNN dynamic atexit destructor MPrCAf Class Array Complete Object Locator xpxxxx dhlCixm RTplJ aFXmO rRXWyM PzKjW ViBgDz BHOKov RyHdE sceil floor gldexp hypot frexp Csinh YRwZl CMonday Tuesday January CMarch April December EnumSystemLocalesEx LCIDToLocaleName sgjpO CgapO ekjZmCR wHxmys pkTFZ wxwkG zFtqEIl wTTzHdR TpiDEm CbeOQ IqLUV fZRpluXo ruvZcK lLcyq uHsts gzfiPB KZYeXZ Loiqd hABVE NdopMg REeaAA tsHYO ePQWu bVVjF JpZtOd LtmYE CgapGS FWwnD lJFATN rUYvF omCFt vIZHk nlZWqk dkNfA rWRunp TCboSAhn NDxFv XFxYb OnniQ CSwcf dPsRh ZQTQvYC zQptE udVlx jLoEE JDGHre DHtpr Tsubgh rrjsDn HzjukC apOqhAY zGntH CgapO CgapM sJkqn AUlos lLHLEvV FContextStackSize ContextPriority SchedulingProtocol sdGKsE BKyQBF gsqrt ZfUUU CgapO rXKjx jMVsb mnkHpI RVcpu usage usage CHHnt cXMMkL wXBND HoTTqocQL JenRx yWcwG jovgQ nicehash zixHY QyGjB BjEfK Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ pADYhl hNSRz hIWLl tTamFl CJRvt BZfJz Myicv JLXCM mNlVez Hzlgd Rqjrn mDzCg sdEzSC kwQVf TuTySI mTSaYZc wrDUGbHn yNbGY Hnhhg ribnW coWbAM anRoBZMb Sauwv xZhmx Luqgy ABCDEF wgePXu MKRCj JQMWQcfM JBeASL HlRqD CgapO BFCXx LVTYq ajLdh uGCTr OeYEMz bCgapO CgapO zltuJd LVTYq wJQMWQ WiBeASL UKoMjY cfSpl SRFLSm fLOpM WEsQo EdSnXc Geixx qFBOzCQonuDk ocGfM QgapO yGjaI DBDkY HlMdE LrvYq cfMnm CiUTw itTNn QgapO QgapO QgapO SDfYbSq uKvAzFZ XoTeL hqmdZ gphlC QgapO QgapO QgapO QgapO QgapO QgapO QgapO QgapO yZUan AzFnZ PrOXBl HlwJYY ynPPAG puHNJ NLOpM NLEpRzk NGnVk UQonJk EdXev XvWpE BPdFi bRkGIj RqcFy xDXDo YDwah Amxsp SreVnDXrd lUQLg ktqyg QgapO EQzhlC DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven LZUMC LZoYxpVt RiseRiseRise Geode Geode OPTERON PHENOM PHENOM CFUSION FUSION FUSION FUSION jhgPentium LZPentium FPentium Pentium rXCPU Mobile Mobile Celeron Pentium PIRWIN OWESTMERE PENTIUM MOBILE CMOBILE WOLFDALE MEROM VpODUAL gMORE QUADCORE PINEVIEW CEDARVIEW CgCopyright Plauger licensed Dinkumware RIGHTS RESERVED maCQBp CgapO CgapO Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY VLCbvGo NONAME PROTOCOL SERVICE zgEALREADY EBADF ECANCELED CECONNABORTED EDESTADDRREQ EEXIST EINVAL FEMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE FENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY CENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK CEREMOTEIO AyVNv Fpermission denied DClkCd daddress family supported temporary failure permanent failure family supported jresolved protocol unknown service available socket connection already progress SRLAtH operation canceled connection refused connection reset destination address required PJVYgO unreachable interrupted system invalid argument error socket already connected bcCOmessage network unreachable Vytno buffer space available device enough memory machine network space device socket connected directory directory empty lUMCd Wprotocol error result large system process cross device permitted unknown error links apOasync event Fpoll signal unknown error malloc IxGtuv malloc malloc malloc malloc gQueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore tktCreateEvent FCreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress FGetProcAddress GetProcAddress kernel GetModuleHandleA YvlqM CreateSymbolicLinkW powrprof socket Cclosesocket CgapO Missing after object member Missing object member AvMBad escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected sCvSee gSyntax error value object array expected tRUqrXPE wuvEA HContent Length false ELTUU IFMMu BZDhFSi AfDGwvDCK CBLWS uhOKeM FSgmf yJeRuk qVQEbh wPbmU ALNMMI vFMPx pYRVX vBVVA GuRWgz YrWeoV CLlWs MyGjt ljxuA fafyxijfhkdanfrzz CgapO LVTYq QJQMWQcfM JBeASL HlRqJYt mUKoMjY inNFx cqmds NuHHJ iBlZj FLSmz dpAne AtneeX Itces NLOpM JsvhE iNpZt FOzUQonJk HgGocGfM rZKLh XvWpE dSnoj OtECE wyOrq bRkGIj vHyrw mqbDz XLWwZ xLBjZ QbFIY nFQaB xHtpR FRFit Amxsp NQDgt TDnFO qyyWngvs CgapO LVTYq QJQMWQcfM JBeASL HlRqJYt mUKoMjY inNFx cqmds NuHHJ iBlZj FLSmz dpAne AtneeX Itces NLOpM JsvhE iNpZt FOzUQonJk HgGocGfM rZKLh XvWpE dSnoj OtECE wyOrq bRkGIj vHyrw mqbDz XLWwZ xLBjZ QbFIY nFQaB xHtpR FRFit Amxsp NQDgt TDnFO qyyWngvs CgapO LVTYq QJQMWQcfM JBeASL HlRqJYt mUKoMjY inNFx cqmds NuHHJ iBlZj FLSmz dpAne AtneeX Itces NLOpM JsvhE iNpZt FOzUQonJk HgGocGfM rZKLh XvWpE dSnoj OtECE wyOrq bRkGIj vHyrw mqbDz XLWwZ xLBjZ QbFIY nFQaB xHtpR FRFit Amxsp NQDgt TDnFO qyyWngvs CgapO LVTYq QJQMWQcfM JBeASL HlRqJYt mUKoMjY inNFx cqmds NuHHJ iBlZj FLSmz dpAne AtneeX Itces NLOpM JsvhE iNpZt FOzUQonJk HgGocGfM rZKLh XvWpE dSnoj OtECE wyOrq bRkGIj vHyrw mqbDz XLWwZ xLBjZ QbFIY nFQaB xHtpR FRFit Amxsp NQDgt TDnFO qyyWngvs CgapO LVTYq QJQMWQcfM JBeASL HlRqJYt mUKoMjY inNFx cqmds NuHHJ iBlZj FLSmz dpAne AtneeX Itces NLOpM JsvhE iNpZt FOzUQonJk HgGocGfM rZKLh XvWpE dSnoj OtECE wyOrq bRkGIj vHyrw mqbDz XLWwZ xLBjZ QbFIY nFQaB xHtpR FRFit Amxsp NQDgt TDnFO qyyWngvs CgapO LVTYq QJQMWQcfM JBeASL HlRqJYt mUKoMjY inNFx cqmds NuHHJ iBlZj FLSmz dpAne AtneeX Itces NLOpM JsvhE iNpZt FOzUQonJk HgGocGfM rZKLh XvWpE dSnoj OtECE wyOrq bRkGIj vHyrw mqbDz XLWwZ xLBjZ QbFIY nFQaB xHtpR QgamO QJQMWQcfM quIca hARKn FXJsX zXQon RqyRdE IHoll YGVet lhCtscVq ZWcyVs FPHqR CgapO GjSKN OYHGP QJQMWQcfM JBeAS RqJeY inNFx cqmds NkuHH bOEuwzK Itces NLOpM JsvhE iNpZt FOzUQonJk HgGocGfM XzWpE itcEjo MWdqT ByOrqfb FSDVFIY AAQlQ kKRmp KIJmox CrTWW xtpRS,1\nprogram cannot rdata reloc PhdtB PhxtB tQHPPc PMYjSPME EWPWh UQSVEW UQSEV NTNXN NdNhNlNpNDNHNLNP FTFXF FdFhFlFpFDFHFLFP vPtYMu UQQVEPEPu EPEPW VEPWR EPEDA UQSVW PWQEP PWQEP EEEEE jjWSj uhEPxp KVuuuuuuuuuuuu UQSVWV SWtCu FpFXNl UQQEPEPu UQVEPE UQVEM UQSVWNht UQVEPE EEPRM PltBw ESVWi PPWWW UQSWu ShtOzt PQtPE EVEEPj EQMQP SWEuu tRESu EEPVQ PueWE UQSVWw PYYPj USVWs IDILAHA ATALAPj fESPW VXVPu AQPQG VVVNE tutqV WPQVME EEEEEPV MEEhB UQQVu EPfEj VQSPh UQVEP UQQVW EPEPW UQQEPEPu UQSVW EEEEEPW uiPEPu VVVNE jXWjZWC VtQFD WEPEPEPN uHCjPB PmMESPW PEEPw EPEPu VoTVj SUSVF uAhPM iPYUVE DDDDDDDDDDDDDD PeuEEEEd EPeuEEEEd jPfTAX EPuuu PuEEd PEuEEd PeuEEd PEeuEEd UQQSVWd PPPuu UQEPhH YYuCh QOYEW pjCXf jEPhB EtLtHP YUQQSVWh EPEPWWVc tDViYj YYtAVSPW PPPPP SSSSS EMEineIE MMtCE EmIuEt ffffffE PPPPP DDDDDDDDDDDDDD UjhpB URPQQh USVWj csmujx rPRSW csmuH EPEPuu uuuWu EPEPu UQQSVu sYYPv YYtcj YYtUv USVWM PQYYt SSWNK ItWhtHjlZ HHtXHHt PptPP YYjgXf HPptQP apPXA ItWhtHjlZ HHtXHHt PptPP YYjgXf HPptQP EtZfu EfyfxW PRSQa PjdSQ WWWWWZU VQMQp SQMQp PSVWg SQMQp VVVVV UWVSM YYvxn WPWPW WPWPh Yuwhu QVhYEXh OuVIY RQMQW YVWPB GdEGd wdVUY USVWUj UPjhA UQPXY NUQQVu WPPYY EGWVj MqMyt QVWSj WVSOG PWWWWVEPEPs PSSSSVEPEP YYEPj PPPPPWVU jYUVu tQSVu tAEWVPSu EPQEPEj tWPVYYE UTMEE UTMEE tMMQPEP UEWft fEEEuMUf fEEEuUuf AEHME SSSSSPbUM trWYuE NMLhNM GMtrT gGMtAT FCreateActCtxW ActivateActCtx DeactivateActCtx QueryActCtxW GetModuleHandleExW IsolationAware function called after Kernel CException CSimpleException CMemoryException FCWnd Comctl RegisterTouchWindow GetTouchInputInfo GetGestureInfo HtmlHelpW COleException CObject CGdiObject CResourceException CUserException CCmdTarget CArchiveException CMapPtrToPtr CMenu PoZFE DResource CreateFactory MakeRotateMatrix DWriteCreateFactory CCriticalSection CSyncObject GetLocaleInfoEx CompareStringEx CObList CByteArray CStringList CPtrArray CorExitProcess FlsAlloc FlsFree FlsGetValue FlsSetValue CreateEventExW CreateSemaphoreExW SetThreadpoolTimer SetThreadpoolWait CloseThreadpoolWait CreateSymbolicLinkW EnumSystemLocalesEx GetDateFormatEx GetTimeFormatEx IsValidLocaleName LCMapStringEx GetCurrentPackageId GetTickCount floor ldexp hypot frexp nextafter exception Sunday Monday Tuesday Wednesday Thursday Friday Saturday January February March April August September October November December MessageBoxW GetActiveWindow GetLastActivePopup based cdecl pascal stdcall thiscall fastcall vectorcall clrcall restrict unaligned restrict delete operator vftable vbtable vcall typeof local static guard string vbase destructor vector deleting destructor default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator vector vbase constructor iterator virtual displacement vector constructor iterator vector destructor iterator vector vbase constructor iterator constructor closure returning local vftable local vftable constructor closure delete callsig placement delete closure placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic initializer dynamic atexit destructor vector constructor iterator vector vbase constructor iterator managed vector constructor iterator local static thread guard Descriptor Class Descriptor Class Array Class Hierarchy Descriptor Complete Object Locator Unknown exception xpxxxx xppwpp NxJRJf iWCkMPg DznGL CytKZ DAjSB XrDam permission denied exists device filename device resource error directory empty invalid argument space device directory function supported available enough memory resource unavailable again cross device operation canceled files permission denied address address available address family supported connection already progress descriptor connection aborted connection refused connection reset destination address required address unreachable operation progress interrupted invalid argument already connected files message filename network network reset network unreachable buffer space protocol option connected socket operation supported protocol supported wrong protocol timed operation would block address family supported address address available already connected argument argument domain address descriptor message broken connection aborted connection already progress connection refused connection reset destination address required executable format error large unreachable identifier removed illegal sequence inappropriate control operation invalid directory message network network reset network unreachable buffer space child process message available message protocol option stream resources device address process directory socket stream connected supported operation progress operation permitted operation supported operation would block owner protocol error protocol supported system resource deadlock would occur result range state recoverable stream timeout timed files system links symbolic levels value large wrong protocol allocation generic unknown error iostream iostream stream error system string invalid string position oGAkU DJzEe uuvHMXB PAVCException PAVCMemoryException AVCObject AVCException AVCSimpleException AVCMemoryException PAVCSimpleException PAVCObject AUIUnknown AVCNoTrackObject AVCWnd AVCCmdTarget AVCCmdUI AVCCriticalSection AVCSyncObject AUIDispatch AUIOleWindow AUIAccessibleProxy AUIAccessible AVXAccessible AVXAccessibleServer HTMLHELP STATE AVCAccessibleProxy CComObjectRootEx VCAccessibleProxy PAVCWnd AVCTestCmdUI CComObjectNoLock VCAccessibleProxy AVCOleException PAVCOleException AUCThreadData AVAFX MODULE THREAD STATE AVAFX MODULE STATE THREAD STATE MODULE STATE AVCAfxStringMgr AVCUserException AVCGdiObject AVCDC AVCArchiveException AVCMapPtrToPtr AVCMenu STATE AVCHandleMap AVCObList AVCByteArray CArray LoadArrayObjType CArchive AVCStringList AVCPtrArray AVtype AVbad exception AVexception AVbad alloc AVlogic error AVlength error AVout range Iostream error category System error category AUIAtlStringMgr AVerror category Generic error category false syslog false threads pools supportxmr XZzBzB GtzPKSPRdK TEkxXGRxVdAq gYBxeFPHcqiiqaGJM IntelNvidia keepalive nicehash false program cannot Richc rdata pdata nvFatBi gfids reloc HEHEgH UVWHl HUHEHEw HEHEoHuHEH HEHEgH UVWHl HUHEHEo HEHEwHu UVWHl HuoHu HUHEHEwN HEHEoHuHEH UWATHl HDewLe HUHEHEAL HEHEwLeHEH UVWHl HUHEHEwN HEHEoHuHEH UVWHl HUHEHEwN HEHEoHuHEH UATAUHl LeHuH HUHEHEAM HEHELm LmHEH UVWHl HuoHu HUHEHEw HEHEoHuHEH UWATHl HHDewLe HUHEHEAL HEHEwLeHEH UVWHl HuoHu HUHEHEwN HEHEoHuHEH UWATHl HHDewLe HUHEHEAL HEHEwLeHEH UAUAVHl AILLDuLu HMHUP HUHEHE HEHELuHEHELuHEH HMHUAS UATAUHl HUHEHE HEHELm LmHEH UVWHl HuoHu HUHEHEwN HEHEoHuHEH UVWHl HuoHu HUHEHEwN HEHEoHuHEH UAUAVHl MMHHDt HMLmD HMHUP pLuHEHD HMHUAS IHHHu XLLHH UWATHl HMwLe HMwHU HMwLewn HMwHt pDLHI ATAUAVP LHtxL MKHIC vGLff vGLff HHIPHt HHuHO HHuHO HHuHO HHuHO HMtDIP HXHHXPHXX UVWHP HcEHM HcEHX HcEHh DCXHL HChHl LChHKpH HKpHt HkpHshH HkxHt HkhHK ATAUAV MMLHH vGLff vGLff vGLff vGLff vGLff vGLff vGLff vGLff vGLff vGLff HYxHt WATAU HMxHt HHuHM oHMHfHM HHPHX AHAHAAHAHAL IIHHLL XFHIH IHFpH rHNpHt IHFXH nHrHNXHt AUHHL MAUHIMXLD IMPIUPIMH IMpLD IMhIUhIM WATAU HLHxAQ XHHXPHXXX HXhHXp UVWATAU SUVWATAU LiHHAU xoHtGH UHteHMXLL HEPHUPHMH ATAUAV HtDcH ATAUAV fHtHN DHHhHcHT IcHHu DHHhHcHT MIHHHt HtvHiHHtfE HCHHt HHqHG HAHHKHHt HHpHH HBHHKHHt HHmHw HHtgHT hDnuRHT yHHtZ vGLff fHtHO HuTHt HuTHt HHHpHL ATAUAVP tBHjuNHL IHHMu AthAt dYDAL fHHQAL HfHHt LHtFH fHHLDM EHtBA EHtBA MLHDHt HHDHt LExcI CDtJHI MIHDt IHDMt LExaIJ SUWATX HHQHfHH HHtLD HHLHHHH WATAU AAuyAU HHtpE HfHHLAH HHtkHHt HfHHqH HfHHH VWATAUAV VATAU IILLHD LHPHL HHfHH UVWATAUAVAWHl MHULHE HEHEHEHuFH HEHUE DMHEHEHEHEHEHHD fHHHqHfHHH LHHKH VWATAUAV LLDHu HHtnLL USVWATAUAVHl HEHEHEHMDHuDL LEHUHx LMHUHD LMHUDHt tQEHt fHILHu WATAUAVAW MIHLL EHuHAL UVWATAUAVAW AHuEH AHHHt fHHHQHfHHHt HHtILIHx PFHHuF HfHLAHyH IMHHD HHtLHHHHt SUVWH xHHHl AAAEt UVATAVH HIIMtvf LCHALl hLHuw HcHMH MEHHH IDBPKA AEPAF ETfAF ILpLpHDDpLLp SUVWH xHHHl HHtFHHL PHCPHGPcXC HHHpO HAHHHu LHHRp LHHRp AXHCPHAPHKPXH HtLHH AHHcHc uHAXHt HSUVWAVAWHHDLH HtHHqhHGHHt hHAhHGHHHh UVWAVAW vNfff HHqhHCHHt hHAhHCHHHh HIhHKH SWHXH HHKpH HCxHt HSxHHBhHCxRpH HHChH HHBhH SUWAVH hAAHL KXtDL LshHL IHCHHHCPHHCXLH HFHHt hHChHFHHXh HHtFD fAfDL HCHHHCPE HCXHLt LshHFHHt hHChHFHHXhH USAUHl AowmA HcDKX HSpLt CXIEPHCPI HSpKX CXHGPHCPH DIXLLQ BXLBpLZh hHAhI HHHhIHHJX HIhIHHJX UWHxH SUVWAVH VWAVH DWfDT UVWATAUAVAWHPH HuZAX UVWATAUAVAWH IyLeD IILeD IiLeD IiLeD IIAMTE CXHFPHCPH PKxCX CXHFPHCPH CXHAPHCPHYPH HAxHt KxCXH CXHGPHCPH HJxHt IHpHHxHt HAxHBpHt HHpHQx HHxHQx IHxHHpHt HApHBxHt HApHBxHt HJxHApHt HAxHt HApHt xHApHt HAxHBpHt HJpHApHt HAxHt HAxHt HJxHApHBxHt HHpHQp HHxHQp HApHt uxHAxHt pHAxHt HApHt HJpHAxHBpHt LBpLMu HJxHuCH HApHt pHuLAxH IBxHt EAHtADRh LZxLZp pHuHH CXHCxHt KXHGPHCPH HHtAH CXHGPHCPH DAXHHy CXHGPHCPH HChHG HChHGxHK HChHAhHKhHt HChHGhH uHChH HChHGpH fHChH CXHGPHCPH DQXMLA MYpIQhu HQpLAxJ bXBxDBXL BXIAPHBPIQP VWATAUAWH EHHAH WAVAWH ILxILx LDxDLxL fAafA uTfAz uLfAz fAafA UWHxHP UWHxHP PHHHH NfFHHL NfFHHL NfFHHL NfFHHL NfFHHL NfFHHL uHHVH WATAUAVAW IsHIA NbIBz IHkPHk AkdLD CdIHH AkdLD CtIHIH AkdLD jLKlK WATAUAVAWH HtKHtIf VWATAUAVHPIM HcDfAlG HcfADO HcDfALG HcfADO HcfAlG HWHHu WATAVH EMHHHu DCpGp IAHHHu UVAVH MAHHHu HAHHt hHBhHAHHPhHQHHRhHQH VAVAWH MHxMt IANxFXL FXIGPHFPIwPH VWAVH EHHuJ HFHHt hHChHFHHXhH HFHHt hHChHFHHXh LCxHD HkpGxHCh HFHHt hHChHFHHXhH HkpGxGX VWAVHP xHCHGxHkhHFHHt hHChHFHHXhH HkhHFHHt hHChHFHHXhH HGxvOX xHKxuXHSpL IXHShS USVWAWHl EuRHEH HUSAVHH LSXAx HcLEHSp tzLEHSpE LEHSpCX KxCXH CXIFPHCPI LOpMt CXHFPHCPH PKxCX CXHFPHCPH HIIHpHHu HGpCX HHKxCX CXHFPHCPH HUpKxCX CXHFPHCPH LHXAX IICIC CXHAPHCPHYPH HPpHJ HJhHt DQxLDPxBx HHhHt HApHHpIHpHt pILDPxHJ HAhHB HAhHPpHBpHApHt HHhHQh uLIHhHH IHhHApHHpIHpHt pILDPxHJhBx HBhHt HPpHBpHApHt HJpIApH DPxLE HJhyx uVDQxHJhBx HBhHt HPpHBpHApHt HJpHJhHA HAhHt DPxLA hHHpHApI uVDQxHJ HAhHB HAhHPpHBpHApHt HQhHJpHJ HAhHt LHRpXL DPxHJhHA HBhHt HPpHBpHApHt HHhHQ HAhHt DPxLAhAx HAhHt HHpHApI LApHJ BxAxDRxHA DPxHJ HAhHB HAhHPpHBpHApHt HQhHJpM HJhHu HRpESxMt IPpHt HuLAhHQpDQxMt IPpHt IpICpHt HHpIChHt HHpEu LHtJL HuLJpHBh IIQhm IMHHHu HOXHCX HHXCX HHXdCX LpLxE HuIcLl VWATAUAVH McAIH McAIH HVxHL HOWHOH HGLwH tFHOH WAVAWH IMHLudE HKHSH xLAHxHA ILBxL uLRpH VWAVAWHHHy HtHHD wbHcH CXHGPHCPH VWAVHP HOpISICDE MsICl xHCHGxHkhHFHHt hHChHFHHXhH HkhHFHHt hHChHFHHXhH UVWHl DJXIA HDJXHEP tbtIA HKpHEH HUHEE HHKxCX CXHFPHCPH HHJhHj MPxMt IAKxCX CXHGPHCPH UVWATAUAVAWHl HUEHMHELHEHEHEA LEAMR ILEAA EAAMAE HEHEuA HEHEut wPHUHEH VWATAVAWH SWATHpH HHuoH HHIpHy hBXHH HGxHt HKxCX CXHFPHCPH HohHFHHt hHGhHFHHxhH aXHAX CXHGPHCPH HCpHuY HkhHGHHt hHChHGHHXhH HCHHCPHCXHKp HkhHGHHt hHChHGHHXh PFxHt HHhHX LpLLxH HHtRA xHKxu HEHHt hHChHEHHXhH HHpHx ULUSAVIH bXHIsLI HHXGX HtHcLD PShHT XHtvD PtnDD PHSpD HIKxCX CXIFPHCPI GXHEPHGPH POxGX GXHEPHGPH BXIHH BXHAPHBPHQPH IHpHt HGpCX LHHKxCX CXHFPHCPH pHWpHt KxCXH CXHEPHCPH HGxHt HKxCX CXHFPHCPH HHtcH IBhHB LHCHHCPHCXIJp HGHHt hHChHGHHXh HHBhHD CXHGPHCPH HChHD HHChHD XHChHD HGHHt hHChHGHHXhH CXHGPHCPH BXHAPHBPHQP HHKhH HGHHt hHAhHGHHHh HIhHOHHt UWATAUH DEXHAPHEPHiPH EXIEPHEPImPLt ATAVAWH IMLLMt HHtwLD BXHAPHBPHQPH ZHcHC CXHGPHCPH AHHHt WATAUAVAWH DHHuI HtWHtQ UATAUAVAWH XIFpHt INxLFHE UVATAUAWH MMcHHE HtaHKhEI HHupJ EIHHB EIHXHO HuJHGHHHu VWATH HGPHC HGPHX HICHX ICICD MCISIs HuIPHHtoL ATAUAVHPL ItEII HHuLt UWAWH HDXDHDXL HttHh HDXDHDXL SUVWAUH AMuDd aAHHuH WAVAWHPH ICHICHX ICAICA HuJHGHHHu LHHIC WATAUAVAWH IHDIHl UWATAUAVAWHl HExHC ICHIB HGpHt HOxLCHDHHl tHKhH HKhHCxHu LQhMtHA LcHDT HQxLHI LAhHHL LHhtFL LPXMtTA AyptKIA AIpHEHE HAypEt wtHcL HSxLHK HSxLHK HQxMAMt VWAVH HHoXL mLELL HGHHt HufLS HCHLKX HChHL LpLqxHx uPHtKH HFHLNXHLF HNxLI HHHLt HHtOHH IHtNE IHSxHK LGxHW HuJHGHHHu WATAUAVAWH MteHSxMAIMt xIPIHt MtaHSxMAIMt xIPIHt LCHIOxE LcXLc VWAWH EAHHHu PMtmH HLNxLFHH HtjHB UAWHl LEHHU HgLEE IHHHtfHt HHtYH WAVAWH LWHPICI ICIcIC LWHPICI ICAICA LWHPICI LWHPICI LWHPICI ICICE WATAUAVAWH IgfffffffH IsHIA HgfffffffL WAVAWH IgfffffffIHHH LWHPICI ICICfL WATAUAVAWH AIMAIHMoIH WAVAWHP pMIIH HHILHy WATAVH McALcHC HcLcH AGHcH HDHHH SVWATAUAVAWH IgfffffffIHLI VWAVH IgfffffffIHHH HgfffffffLHMJ HgfffffffLHMJ HHtaH HgfffffffH HMHMHUf HMHHHM HUWAVHhH HEHEE LHEHt MLMLM LEHUHM LMLEHUHMHUH UVWATAUAVAWHH HEHLHr LLEHUHMVH DLHUHM DLHUHM HEHEfD HEHEA fDmHEI HEHEfDmHEI rEHEu HUVWATAUAVAWHhH HEHUHHL HMHMA fDmHMHM fUHMHMfUL HEHEA fDmHEI HEHEfDmHEI HEHEfDmHEH UVWATAUAVAWHl HgfffffffHH EHUDMLLEHUHMI HUHMnI LDHUHMI HgfffffffHH rEHEu HUWAVHH HEHHz HEHEA LLEHUHM HMDuLHUHMlD HEDuLHUHMAH LLEHUHqH LLEHUH LLEHUH fEHEH LLEHUHH UVWATAUAVAWHH HEHUHLb HUHMH MHUHM DMHUHM HUHMr HEHEA fDmHEI uHEHEfDuHEHEfDmHEI LurLI HEHEfDmHEI HgfffffffHHH UVHLH HLkHkK MAIQMD sVIAMD IPIHIQIHH HPHHIPIAH IIHHH IHLHIH JfARf HJHBI sCfff MYMQHCI HCLCH HBLCHCLBLCI HCLAHALCLCH HBHCLBLD WAVLI LHHIH MYIPI XLHQL UVWHPHIH LHHTH pLHHH VWAVH hLHHHD HyLHw VWAVH LATAVAWH IkIsI SUVWAVH SUVWH McMst XIIHH VWAVH tRDHH auxHH lumHH subHH euWHH uuEHH UVWATAUAVAWHH uHUfH SHHUC gHHUH HHUEu UHHUG AEtuA HUATAUAVAWHH MHUfH HHEAE HHEAA HHEAA HHHED rumHH uubHH euWHH AAYwBIcL VHPHD MHLHy DHAHH VWAUAVAWH HKeHK VWAVH IuSIP AVAWH HUAVAWHhH HEHEE HHEHt LDFHT HEHEfuH HJdHMH DMHUI pHMHL XHHHL eHIxH PHyUH fHIHHI HHuHu UVWATAUAVAWHHpHEH CHMeL CHMHuH LeXLuL HMPobI MILLEHUIfHMP bHUHt USVWAVHl HEHEfDu ELuHE IHEHEH HHEHD DuLuHEHD HEHHE HEHEHMHL LLHHF SUVWAVH IHHfz HsfDp VWAVH HiMHH VWAVH HHuOH UVWAVAWH HLcHHv LHHtQHH WAVAWH xHHLq HKLHA PHNHK HUWAVHXH AMLHL xHEHEHEHEEHHA IHIVH INHkIH VWAVH HAHHIP HtzHF VWAVH MLHAx HQMHML XAHHH HAHHP LHQMMHL HQMHML HHtXH HuVHA HCHHCPHCXHC HChHCpHCxH VWAVH VWAVH hLHUHHD VWAVH hLHHHD SUVWAVH LAPHAXL HNpHD sGHFhHT HNhHVpHt HNhHFpHt UVWATAUAVAWHH LeHuLmH CHMLeHuLmHtzID CHMLeHuLmHt HHEPHt ODuPHHW ODuPHW MIHMLH SUVWATAVAWH ELLHApH IGpHL sBIOhHT IOhIOpIGhHt IGpHt dIWPIGXH HcIGpI XIIHH VWAVH SUVWATAUAVAWH PIkIC pIkIK LLISIK UVWATAUAVAWH ruyHo euWHM AAYwBIcL HHHCHC UVWATAUAVAWH HShHt LCxHKhL HshHspHsxHSPHt HsPHsXHs LCHHK HsHHS WHPHD pAHHHA HDHHH GHtpHl UWAWHPH GHtwH UWAWHPH UWAWHPH HLHHT UWAWHPH HAXHYPHL UWAVH YDCXH UtLBt UVWATAUAVAWHl HEHEE ELmHE IHEHELEHI unHUHPHMHy uGHUHPPHEHX UATAUAVAWH MLEXHUxH HEHHEPfuVA HEHHEP fEVHMXE HUXHMH HUxHMH HMHTH MHMHEx HEHHEP fEVHrH EMLEHUHMH PHUXHMH HUHMH HUHMHH HUHMHrE HEhHEp HUHMh HEHHEP fEVHEPI HEXHE HEHHEPfDEVHEPI HEXHE fDefA HEHHEP VHEPI HEPEH HEHHEPf VHEPI HEPEH HEHHEPf VHEPI RATAUAVAWH MMLDMu MtnIcI SUWAUAVAWHHH umMth AVLcAA IcAAE HtiHt UWAVHl HkdHD EHUHUHEHEj HHHHi IHUHH HUHUHUHx WATAUAVAWH HHLHi MtMtM HcLHBHL VWAVH UVWAVAWH IHGHL PHAPI tXMtF hIlHlH PHBPHH wtHklH VWAVH SVWATAUAVAWH VWAVH IHHHHH IHHLI HHtaH wCHklH HBPvHH HGPHAPHC HUAVAWHH LeLeLeDeH IgfffffffI HELUHMH CIHMkHMLUH dLEMtwHMI HHHHH hBhHC GhAhHC UVWAVAWH HcBGH SUVWATAUAVAWH McDLD OHcLD ILcHL LcIcH EAgfffAHI gfffAI ICHICpH ICpIC ICXICPH HIKPM HIKHI MSHMKXMC IMSPHIShI ICPIHH ICXHHH MSxIM ICxIHH UWAVHl HELHA HSHHC HSHHC HkHHkPHkXHk HkhHkpHkxH HUDHM uHMGH VATAUAVAWH UATAUAVAWHl DULUA DEHUA MLMHMuEP AHLcH UWAVH rJIcHK UVWATAUAVAWH HUUUUUUUUM MIIHM IHHHH WAVAWH VWATAUAWH HCpEHCxH SUVWATAUAVAWH HiXHq HAPHD HAXHD HEAHG UAVAWH oMHUfD UAVAWH oUHUfD omHMfD ouHUfD ouHUf XIHHX UAVAWH oMHUfD UATAUAVAWHHH oOPfA oRPff CIHHX UVWATAUAVAWH oEHUf ouHMf oeHUfD omHMfD ouHUfD ogPfA oWpfE omEfD EHMXn EHMuf EHMab EHMjW HUPfD CIHHX UATAUAVAWHHH oOPfA oRPff SVWHPIHH KHITV ATAVAWH uHIkSAW WAVAWH uHHzHAV ATAVAWH SVWHPIHH ATAVAWH HHDHs WAVAWH HHBCH uHHHAV SLLcH rmIHA IHfff VWATAVAWHPHD MIPHI HulHt HbHHL HulHt HbHHL HulHt HbHHL WHPHD HCHCPHCXC uRHAH uCHAH HKXHt XHKHHt VWAVH xHARH SVWAVH IHHHHH UVWATAUAVAWHl HEMLMLEHUD DLEHw EHUHQ LHMHt HHMHt HUHZc HtaLEHUH HUHEH HtAHG CuLmMM CuLmMMtdH HtAHG HtAHG CuLmMMtcH HtAHG HtAHG rQHHMH HEHHH HEHHH HtZHE HtAHE HUVWH HtYHE WAVAWH UVWATAUAVAWHl HEMLMMLEHUD DHUIHX HHMHt HHHMHt uLeHEHx HtAHC CuMMt HtAHC EHtXH HtAHC CuMMt HtAHC HtAHC rQHHMH HEHHH rQHHMH HEHHH XIHHLD rMHHL HHHHHHL DbugP jHxHHx IILHI HHteI IHHHtZLI LLHHH HtxHK GHuHy HHJHH IMHHI IHHHtZHQ LLHHH HHHtuH bHuHy HUHMHE rLHHM HUHMHE rLHHM rLHHM UVWATAUAVAWHl MMDHH tHHiHH ZHAHE uHHMHE HMLEHUHM HNXVD HyAqHE LEHUHMHHx LFpHD uHHMKHE LEHUHMHHx HNpHD HHsHH dHAHE uHHMHE HMLEHUHM HvAnHE LEHUHM uHHMHE HMLEHUHMmHHMH UVWATAUAVAWHl uHHMHE HMLEHUHMqHHx HEHEHME LEHUHMHHMUH HngHE HMLEHUHM HEHEHME HHpHH uHHMHE HMLEHUHM HEHEHME LEHUHM HEHEHME uHHMHE HMLEHUHM uHHMkHE HMDLEHUHMHHMeH HOxID HMLEHUHM HGpHGxL uHHMHE HMLEHUHMMHHMH UHHJHH HMLHUHM HHMHHE HMjLHUHM HMTLHUHM HHMvH LHUHMHHM LHUHM HHMKH YzHHM LHUHM HKDyHHM HMLHUHM xHHMqHHE HMLHUHM UVWAVAWHl EDFPHVHAcu yHHnHH uHHMHE HMLEHUHM HMHMHEE HVpHD EDFPHVHAs uHHMHE HMLEHUHM HMHMHEE HDAPEA HUWATAVAWHHH uHHMHE HMLEHUHM LEHUHMHHx uHHMHE HMLEHUHMpHHx HUVWAVAWHhH IMHLA LULMH HUHEI DLEHU CMHHD LLEHI rLHHMH HUVWAVAWHhH IMHLA LULMH HUHEI DLEHU CMHHD LLEHI rLHHMH USVWATAUAVAWHl HEMMHHUD LEHARH HXHHMHt HHMHEH rLHHMH HtAHC ELuHMHEH CHtlH HtAHC uHEHM HtAHC uHEHM MtQHy UAVAWH WHPHD SUVWH HUATAUAVAWHl HUHMau LKhDA uHHMkHE DLEHU xHEHL uHHCHLCpL zHHzHH xHEHL HKpHShDC HEHMHU XPuqD HMPuKV HMkPu HMWPu wHHwHH ByHHx xHEHL HUATAUAVAWHl HUHMKYu LKhDA tHHtHH bvHHx xHEHL WuHHCHLCpL XrHHMrHH HNvHHL xHEHL HKpHShDC HEHMHU oHHQoHH HRsHHL xHEHL HUATAUAVAWHl HUHMPu LKhDA uHHMKHE xHEHL HUHMNuHHCHLCpL iHHiHH HmHHL HMtLE xHEHL HKpHShDC HEHMHU fHHfHH HjHHL HMtLE xHEHL HUATAUAVAWHl LKhDA BeHHx xHEHL HUHMEuHHCHLCpL xHEHL HKpHShDC HEHMHU xHEHL HUATAUAVAWHl LKhDA ZHHZHH xHEHL HUHMo uHHCHLCpL XHHXHH HMTLE xHEHL HKpHShDC HEHMHU UHHUHH kHYHHL HMTLE xHEHL ZHxHHx HHdvUHkE HHHHL HHHHL HcHHu VWAVH HcHHu IHuHN DHOHHHt HQHHu HubHt HXHHL HoHHgP HBGXH HCHHCPHCLHCXH HUATAUAVAWHHpHEHX CMLuL qHELEHUH HAHHAPHALHAXI HtJIc HHCPHCXH HWhXHwhHG HGHHGPHGLHGXH HHCHHH HUVWATAUAVAWHhH HQXLc CEHuH CuMuhI LMLEIUtI HELMHU uVAEq HtjteH HCPHc VWAVH LqpAIHHL HCtHL HCtHCpI HCtHL HUATAUAVAWHhH IWPLc LMIWtH EucHE HAPHc WAVAWH UAVAWHPHl IcIDLE EHEPLAHD HEPHD LmHHe HHuHg HHuHg AVHPH LLMtDL HMHIHILC LMHHD HHtnHtiHtdH AAuthE UEuRH VWATAVAWH LIIML ttIcF,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj ucvUnd IWXGL DgLKQ wtQAoPJ JDFVBwGep DghfhfPco obRCGALr vZcQgrP aDabU VuhFP gmflj BDmwA Qtowt VHjbS hdBXN ONsiNt xOMQoE CZBnT FzPfG aIMez ZPbzTK TdfoM BuaijAk yyRrW YsLDaHP WjabiK jLGqEEC YsFcP UlWFq qOaCJ eFntg DMTkfJ SeBpZ OeLKTIsZ pzkOz pHHGk EwlJL vVCVGmEwqvd wBHYy elILJxci Dqakh mgMhx TpmOz oyIwu DHzNVq eBKpHqnU nVLhA WrVdFWN EuKWe fohXpX hqSoH qJTYlGit UxmHfk iqmetB NHekG EmOIr FRviQR lghHb WSZDd PjFaD jrQKh jEMRv IDZcLRIW VIrVl vDMek redRnihd oviUxgc QXAHw YCvCJoSTtb mfdmzCi cunmFO pHmlz jOcuFm EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl fhbzkY OqKnj pORNR TGYIW aPCAf lXxDCC ShhDa RdYXa pxiAz iuEiECs AMxlvRyj KbGQLDTj KUhFD BdORN pZjXZHS YZVHQ KSyzn ceuMlvK gRsYu jIQEXE CMsRg FrlhTsk MEkoc ULRzNk lJDZE wAXzh GjrhmS FuldB QHRTHn nBVEp FWTlG blsKF DMnIG lawsm qOMqs RUHYyh HiuJX GseCj GTfpc HMzHm VVwTs vRTdf LQUQSVWf fLcVX EaVWN BEXkrJq oeKjul FSsZS JxztD ZRmKHKX PTvCPP SVpYPWy xXQqPpD WwHXt QoQNm BGJOti oKQcz utwNG NAlNl YchMO ESdyL HYhwm iRxIq tsGuj DsHrUfM DnsjD hhHXec hSHqY xyCzP THXKPLz aLWRh yKJgf TWqinqP bKDri ZIfFd RljpQB rEhTro nVoECi WeAUm FGgTo XbjFO UTTrb cMmHk UPhda jGefwZ bzURV sDWJFg zBGcJ VOoqJEa IHzMxTH TKdym uQXJvCxuM hNjqu evWoRlD ubaKs xhsoh YWqIs SiAMs eWbgj nwxza ybdVLk aUMTC AvzfipwAUoJ bpfEJ TfTIUE VHHDb YregYp pieZG uotdZ qqcDn pcYXJ iEDRKKTSA DaTaWz TcJYV rhNBR TlVoV UHtBQ wiVMI KQWpr MXxZh ruKTUf ELyrka xLSUVW oFMyN DqQgG EjPBVK jzuBI KWIRZ IVTYYJnE QFooh kbLNR vOirEin bGBrx lRMii UFbBu SJyVT Atzfdlon QGWLQS DwAtf hyuwd tCjfav ijxxh WpLNe TSUVWL VWRPN VWRPq TTljz GngaK ZComP YIurY SVWhI ucvUqZ QSxCR LeRVBH ucvUn QgUxv ZnMXa pOJgztz Lyeoo HCjgG NagUbM yTHlEdX Wcavq MqtbXBUK PgNHXY nSbEk SUVWT GCyYK QzyegL SVidtf DgLGm PStdCBfd HCALj vHAuozZAqZGM lxYkly XlUCj nuxyty rZbML xJsTi lwnFh VAjHG uGkVKG rGETr RlQyP aELmcF KErZN DlZuE IZLZx YZUjnhzwfcK gvRMG TaVDH qKxOIDTGe QVnTV EpXFEN QjRaN zBbaj uMqVL PuZUc AxQxc JEKRyC vxZVS doaGTg oMofAP xYdGs ePeOt BoGmf lxJze nqrnjlO TECnAsBeEl zGrGoS MFtrX Dqcbg zexCZ JPzZdH niZuQ TVMcaH gJGwP bpuEG HTebd uhOpx BONif KipVi JsYWq WsEANTx jqXwm agoQw YNMsyMc zfkqO WXHRl faIvL AOhYc kUTHE HgFrZ SMFRrb jtNPjUD yLTms sHXDX CpIOT AolxdcWy cAEHTH Orxgo szToTF HHsdw YwECb tEBsX OjBln liiVY WBGQA ZtdVl CTdZG wlkpm GJzwd fOfmG YGKvi vaGGDOt FvaGGDOt VPjLh vjGOti jXSPyg nlOjtcEFe eylkMHZ zVywaD vSiCjT LhZsc jPHbZ DOhgRGO QfFXueif LAeGoQ OhYYyc jLKPRLv RKaDD KPsrS pJMtw yVgSK ZeQPk Bgzfc ZlEhO baYTT JytzW nQqBZ oSFfy yBLmH acTKA aaQaJ tIxBcf hErij VJsGyZ fyCxk eXZDZ dmlji ZldNbb mSuZy SlCAJ HqAwq zOxMn mIQTO triRwp YfSrM YfSrM SPxLXD lAyNG tvhHI EawiN VxRwI uSUVhI LSGow TLUsdHI nwliKix mKmlq OjhxxWOe OwTQoFJ LCPaGF LtAfp Gnezejyt hPTzC TeYbq UKpyl ZaZDS oNhvf sXPVjt tLsdB KeBVy SUVWC GsjeCj KcUOL GPsYR lNvbeE KEKFu kVWpp SUVWh DOUVW PDIevTx fATVv BQSUVW polvFX QHKLl SwnKF EpsKsLc GXGTt stGMfDxW KnwiBR IojXC zclPy lmdRzz FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS XylXg tsNXY sSCCd yRPGPbhsD AdeiZEH EajxElH fNUUtRSI aYKNJVssk DmdFihmtE gQddJ iXTXp OUUbT NRgjDP NIDZe pkJtU JQozz BunrS wITpS EAtiD sANBc QLqoG bWTIj eslMB osBUam BGRZb uTruwLk NOrkIIp vUmDb lJFAT enUjh EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE oEVEADQ xYYEe ucvUn MEEEEE MEEEEMe TSVWu EPMMtM ucvUn trUjhZ ucvUs ngNcv MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe TZTCp EPMEEEE MTVMMHVE ucvUn yBEEvW MEEEEE hZPJy wztsL mKbAb USTKpXD ORJKG SzkDJ LURKa MqhNi AmzqLk MEEEEE MEEEEE EEEEE ucvUq EMMUU UEEMMU SVWeMM MMUUEE MQUREP BjnbrDZ SVWeMEEMM RMEEM ucvUqZ ZHCPT xAEXp SpKbM DiLRac FGgjV cvNIixJH SsSLFo KTMUGN asbyw mpbGR YuEGME EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd dQzLQU MEEMMU EMMUUE LQUjh EMMUU UREPM ucvUn sziCC rWDxAM ucvUq QZBtxeQB rwLvo MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ kkVLa QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS QUwaDFfbO DbyQSG neBUV ZxgRm gRDmSOc hkpbqWh SMkjR vDhnl ankmo anjMO ETBaP xqhsa tBBJz mKNUI haaSo kuofx CdrkY YfOVr ZhZZj OPqYp nJyOuGfX WkwFL iktod nDPmI jcKla pADQm ekBQA cOCbBibMr GQCvP scnOYQ UBuqK BMlox CzdPVDVfV ixocQ lNVHn NHPwWby mlrSw vWKwc MPUWM kSLEx OvXTp CVXVh hvhjo ydqod hEhVlY FEqtT JfbULRr IwdzCQq yveCu KePfe xGyyelS ORWmKD SMlCc vCdva lLire xrDeq lcZBzS csYQe iGDhM FjRrb nHxDN tbwOp uzMGU IxFvY xLTiq ggeApnZ AKHZyjG aDhTs ISkNp XuWre KXpPs etlEsM cIwQl qAvox flvUfF bpGsuy CVjwEc XPYQGS FCAlF qqVIn NkMnd zbDVl LWnBAdb QGSPbrl WkBHb xvzGdub hpKyt EDlNH sfoIe oHiyVU qaVbUSM ScGZb vzfiEJeY fmTlM DnIMPz IlGDhHy SFSZY CoExw StoXws wPEOY bzPZnoN bMxPH tfKAh oUKVgL YQGMQ eZzqaaiXj bhxFW qUWlD kUzWw eckBVt WrVKYy ZbYNK znDIl TwFmo Vhjcb Tyogx yMSLtB pBZxB iQsKC cHzMDCdEp BxElx XFIMQ aSKnm SUVWj BABABA lcTGi ZbeFa jyGWf YqiNV OSngXl xvbzfe FspeV liuWD gTXKFx nGXmEyLx RQqya xDjmH PQYYt Ulhmh uYSWu FYojS EntelE ineIEE GenuE PeuEEEEd NgVuBjQ NgVuBjQW UOdxj QPEPh QPEPh rAabr NUjhJ NuVoB ZHoSFT fqgKJ PYYug PYYug YYEPV UQQEP NgupgG YWTCK ihyrqr qvKYt ozPdHs cdDsi VVQYn LOLqqom UQSVu UlYmzY HuYUV EPuuu aUJpn UgJyZ SVWUu tfVUk tLxXj USVWUj UQPXY bfETB mNmUVh VUCUc voJKvW OPHUVh CuiYM csmuP EDtyD LzWDVf TEFbs FylvQ CqQkwi tPtLw PQYYPV rjcdZP Ujhxj QSVWT URPQQh USVWj PPPPPy EVUWM MeEPj PYzPI FRNoLc EQPjjM VPuus TUhbBhO UQQVu HqwiU aqSxk OcYbG fOFPo JpqKMA XBHPF USVWN UQSVMWj fPsuN uQKVH tdZjn ItOLt uBidYNm uWPDk tffLzn gHzMUQSV jAZjX QlIecmq mVhng ZCptj UQQVWjgYjGN PQPPESPW jsXfF bIrcI wNLulQ UgXeb UQQVW nSRdCNYYq OXpyi mwSIg RPQQE VQuuH BqQQJ uEPEPWSY vKUdZS UrYCi YPVWSu kPVWSu ggtwqs CjOjh vurFD gIBmpK mfSnS blOGA OLqur tSrvPcrn LhMBaot cqUUXP WWaabbF ziJdF ycJCah jGuvGz zUWMd vawON yumIGC wvpCV xdHof uPuSW EEwPr UEHEu IvvUd uMgCx HUQVV XfEFhP EPEPk AlVpu DnLpl EYeVwiuw PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu eXBvofUAT uBjAYjZ jAZjZ UQQVWO SVWtdAu BoLiHE ziRwh YdJYiX MUpzLm CUQVu MrWzKA qMdLX GNnSGt xIthXZNZ moISO fTSMp AsZnn CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp vvDiMhI shDts lCUQQ cpDsuP cYbOQl LXjQoj vRYmJ hauXpQ WGnhP elmQngvbX hnfBy KHzhf MEEEPu NpFhH gUFmq xvyNr vIKcGZ lBUFY eaabrVm SOGYu PPPPPt PPPPP tzcUkE fnGFC WVUVu HLMMQP mtXXxSep qFMkS YYtVWh EWWPb uCYYt uVWTb WWWWWS YtVWj PPPPPPPPU VSYYt IlRNM hehKz OrUqE EAEfEEj EPQEPEj sNtuj AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP uikhMWRn ULvvk VSUBf VQcly UpDnV UQQfE fEEPj mJoBv fDJnT RyOMi EGWVj nZVaz VrATa ezWVtMD MSVWu MQWPVk Wstip lzZNG MEEEPu FNxbol GaicG NlXOr PPPPPWSu QQQPu VWuSu PPVWPu GvoJK UWVSM oBfiK jjzcd DLdky SNbYy BzYgC tWNJWtY ldRvjnN WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu MXgnV VtHjoe fuFSa QSLNf akPzW MJEUv uJQMvSh QPLYYMt Hkeriz jjJyZGP fpNCKFv DkpRW mKJVZvu zQgYG OvPxLy jwoky qRFZz WvkcN PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj gewiMa tRcbh owHdV AyATO GRdUs oHDkF aXmixJ MDkkJ lCvMy zeNpW BFLiI fEhog usccBEPpU WxxVL WrUVg OvXyV aWUHs WvvVL WHtAtVL ZSkqbMj JxuXB vDyKAGdx XpLRU jnete CJTTQs dEOJf FXWNLe LNCLkr ZVfKS JRsHZ ymXkewiA damZS gYCDx LdJzI aTGSvk IQptM CdIwEiUVu QQQPu MEEEPu EEPVYY BKUsH WhaUE sunZb qGcshf avhrXI qrtgX mjfCPo WWuzC EPeuEEEEd csmuu UEcsmE PEEhg arlha VWlCv UQQSV PoyFG AGxks Sskjh MXAyA kxarlJI EMzJSF LOUoLYA PNLpd agmVu xIQIV WcBndS Bqojx aMVQT KQQhU QJbpHE KJKhy BzXGe XLATi BTmWJ bEPBW HdwJGmYVc CpLuj WtVMmtD cHCxl OLIYsL FrXZD VAQqE RcqMr WLCynncO haNzmF xeKzTqL uerxs VfsaB qPHZnw FcSKd ODrOWO wIBNfu MGjNz ogzmU fXaSw EEcTR MhfcS Wjbgl XtJch rbTsJ tceZYm IeAHJjL pSQDb vYdcTBD RpyuQo Kwspg DNMFh MjcOP ceJvFI xroxMm wQFQwtuo udnkp gtQmHhP pbNeb rkTMc YpsxGWL ZDewH JYVyIJ OocGE gIFmew ERQKp ScbLK tcfeA RGjSY kBwkG nIqNPTB mVTXA JiYoU zTmIG aSKcC sLLQJ bGPBAGw gbYMV FfjOo NeASO yrksXl EzpQUB vhTIt fcImYB iRBeoh Jxvva qsTxy ZutLLQjxEPD ihnNs frzUv RgCHZc fohhi SnMTtLn yXxoM tMXMPft Etsnn CYRxx bRPdT IdBsbNGDVG qDeKt aWSaa xVNqjAc Avzfip ITIgvq sgTRr IaNdl KUfwCRw WyNKcbX MRfWt OyQtM PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI yBKagwW uHEPu uEHPo DYPEYPhH ucvUn uYaFW eBKAGIE tadXKCrb MuUMEIEPML UMEMd ucvUn QgUOm xAWEz mJoki dLJtvc EEEMEME HnEMI MEEEE ntJETE EPEPM ucvUnp egErDPP UQQMEM lLTYa mdHWrq kPbrl JycRG qwHzm ucvUn zGUTRQ BuKNpF Whawi YgUCGK WFWtb RivHvg DKAou eTDtun atknW hHzgU AKfOz wiVjI xMeri cQJVD pirmh zmWjQv SHpzK RykXs nBdyQ mzmLMV VAZSj WLZYc dCNHXAV ZGDhH nssFrp ITNNd OBkaUmLn rviqT QjVEe EFXfw EzgSn Pnmfv FoqVQ idDJQppDb EMMUREPMMM EEMUQ UQMEH MMEUE oXYAB rklQE uDpSL PbrlaK vEDCe EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU ZqXbm MQMUU xAEXp jkgXx NrFxL UlIXVA cljdwU UQMjE fSUQM EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd rUQME ucvUn ULMEH MUUEEMM UEEMMU DnCjY kSfXG TvZyN ZbNlTGK ePFvI GCDfFN KMoFx rkiMf ByYdD cHKxjwZ BosQk Nbzdw AiyWk bOdoI rTnOJeKo ZDmVz OTuSf oxEQZ locale Fiostream badbit failbit vULBu oEkre tuKWv KhdhOb kHYPS PuqHS qpGon XLqvVB udOsDL cKijZ UekYe BkagY nBdosQ mUeGWq TUXaM MsEPd WDmVCx IFVjYH pFZXm FSBeSm jLEFF TgCpI OIjjx kkrcx array length bBunknown error address family supported already connected argument argument domain descriptor message connection already progress device resource directory empty large function supported unreachable illegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device process okcnsRvfn Fmrej vYKWs supported YNoperation supported WZUowner protocol error state recoverable Ntext files system files Wwrong protocol FlsAlloc FlsFree SetThreadpoolTimer ZFCOk InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx orcUIpS oPgEX mQiMc hbFcLc hjBlO MYnVF URmad icynGV yNovUd yNovUIvp yNonvU IzpSK tuDWNNZh UIvpS UIepS oxUIpS yvovUs yvovUq nuKWe yvovUs UIpSQ oNqUe oUHIvpS oWUIp UIpSP oqUIvpS tujWN yNoUIep oqUXIepS UAIFp hYeZr twqvY IpSwU feyNd fIriQ cdecl stdcall clrcall Urestrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator pzjEP virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor UPzBq Class Array Complete Object Locator xpxxxx aPLnc SVVyvg uywPd GokZR EBacB blmZf yovUIp tuKWNZ Bceil floor yNldexp hypot frexp QZQXv ssinh uWuNM QMUcD mdlhiTC tovUIpS oovUIpSu sMonday Tuesday January sMarch April PhZLUr December cyNoUIvpSl UIepZS UIpNS IpSwF UIpNS nzmCg EnumSystemLocalesEx XsJyN PsJyN LCIDToLocaleName OyovUb UIzpfS hovUe uKWZN ntcCG UFLOv UIIpnSg DUIzpNS oUIXp dUXIp UULOe xSTww iTHRKk HhhbAE tuVRJN HWOjm hLXrvube xzByqF SNRIm TNwMWz ULYcP UfbXPJK LtmYE gYZRJoY UtdKvm bohTeYXz Gdpko bLjsc yjhtAw auRFQ uZKgyz EdtJg xwJQMP HHONYf biVaY OINei DgrCu xxXnx kuvVC iqcRu Mxvyd fRdnZ DOXRsYB zGntH bNvZd cIGil jwzxUOA UContextStackSize ContextPriority SchedulingProtocol nptlKHQ Nsqrt ZfUUU ehUzYNE BGiigq rsBEe usage usage qmwPN nicehash cCIpJ EtqQi heAEDc Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ BhtWm lIEbe tFnaS oVMhjw VGZuGyed BJSYRo JLXCM mNlVez tovbue dSTsJi IVGba ONuoU AfTth LsVpOh TZIbxY WZZNT cAcnL GPtgp rSCERa tmMXa PDLEpQ ABCDEF ahqvZ SGKHz zvRnfe yHdAA BmPjv YvXke UOGUTPW UNKfB LkjAt ZPbrlhTsKk hbAEDc fwjva bzIOJ vcXCPmw IbwAR sTDba ddMcH JjuJmRho gApRQD HmEEM LtQIp vUIpS GneCj KBbAEc MYUPo lYGsl TXmHkJ CnenY TUXMH CZlSFf iBPnF IFfVL gQsClG ZPbrlhTsKk VBpEN VvVBJ kryyN tuKWN tkryN KgCnGx hbAEO gPSmhjfp MfCvdU vVBgaEq tuZRI PGBtU tWkryN WkryN xakryN kryyNks OdmAm RukryN oukryN bkryyN syyNa GneCjl vUQIpS kryyN vUQIpS vUQIpS KkryN XsyyN zkryyN GneCj PxcBVn SiiYLN iGTstp yoFOX lKAmbE SQsmmQN EeWId zoskoL sbMew jyWzh PNgtbm QsClG vLzZQ BeSms kCaZEd MPGrBH aQkRKH vUAVCX iaExl CFDUy oAOPn fJgfhQ cojMh FuryNG vZmNy PbrlhTsKk mUkryN vUQIpS DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso FdyNF AuthenticAMD CyrixInstead NexGenDriven KWRiseRiseRise yNSiS Geode Geode OPTERON PHENOM PHENOM sFUSION FUSION FUSION FUSION zZKyNPentium Pentium xvUPentium Pentium Mobile Mobile Celeron Pentium flIRWIN WESTMERE PENTIUM MOBILE sMOBILE WOLFDALE MEROM yNMORE QUADCORE LglhPINEVIEW CEDARVIEW SsyNCopyright Plauger licensed Dinkumware RIGHTS RESERVED vUQIp GneCj GneCj syyNo IIuaQ Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS yNEAI CANCELED FAMILY NONAME yNEAI PROTOCOL SERVICE YyNEALREADY EBADF ECANCELED sECONNABORTED vpEDESTADDRREQ EEXIST EINVAL xUEMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE UENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY sENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN KBENXIO EMLINK sEREMOTEIO XfUpermission denied address family supported temporary failure KWpermanent failure family supported resolved protocol unknown service available socket DIpconnection already progress Zoperation canceled KWconnection refused connection reset destination address required Zhost unreachable interrupted system invalid argument error socket already connected message HtFonetwork unreachable RZenf buffer space available device Ipnot enough memory machine network space device YxhdYIpsocket connected directory directory empty protocol error jresult large system process ylhcross device permitted unknown error dXIptoo links async event yNxvUpoll signal unknown error myNKq malloc ftuuv malloc malloc malloc malloc tpLEK sNQueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore tuCreateEvent tpLEK CdsRd DUCreateEvent CreateEvent vUAIZpS iphlpapi ntdll GetModuleHandleA GetProcAddress UGetProcAddress GetProcAddress Nkernel GetModuleHandleA powrprof psocket sclosesocket BMissing after object member wlhMissing object member CHaptu zWBad escape sequence string Column additional characters expected parse unicode surrogate LjiBad unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected yNSee TNSyntax error value object array expected fContent Length false CWjkx HfCaT vLAPbt gjpjPKq jmwUov liIbD CauQT eJjhF MJAAdSN CKuYvP eQKst pmDox kPqLgK GarRN FPInq jOGYG BTuSh aVhDW QMHcpU LLkrS KMBlI SZzOmiw qbhXv dNCzg MNYkU yyUxMSv mTDkGw vVBGP TLENk oFDEq fafyxijfhkdanfrzz GneCj ZPbrlhTsKk hbAEDc xMSUs LOUpv cKxjZ nBdoskQN DmVXx Exetz QsClG BcuNlFO vLzZQ dpFZX BeSms tiwNB oKahf rvXTi hQipOd DCCpI APMvVDS GJWKPs vUAVCV OIjjx VLJxV cojMh GneCj ZPbrlhTsKk hbAEDc xMSUs LOUpv cKxjZ nBdoskQN DmVXx Exetz QsClG BcuNlFO vLzZQ dpFZX BeSms tiwNB oKahf rvXTi hQipOd DCCpI APMvVDS GJWKPs vUAVCV OIjjx VLJxV cojMh GneCj ZPbrlhTsKk hbAEDc xMSUs LOUpv cKxjZ nBdoskQN DmVXx Exetz QsClG BcuNlFO vLzZQ dpFZX BeSms tiwNB oKahf rvXTi hQipOd DCCpI APMvVDS GJWKPs vUAVCV OIjjx VLJxV cojMh GneCj ZPbrlhTsKk hbAEDc xMSUs LOUpv cKxjZ nBdoskQN DmVXx Exetz QsClG BcuNlFO vLzZQ dpFZX BeSms tiwNB oKahf rvXTi hQipOd DCCpI APMvVDS GJWKPs vUAVCV OIjjx VLJxV cojMh GneCj ZPbrlhTsKk hbAEDc xMSUs LOUpv cKxjZ nBdoskQN DmVXx Exetz QsClG BcuNlFO vLzZQ dpFZX BeSms tiwNB oKahf rvXTi hQipOd DCCpI APMvVDS GJWKPs vUAVCV OIjjx VLJxV cojMh GneCj ZPbrlhTsKk hbAEDc xMSUs LOUpv cKxjZ nBdoskQN DmVXx Exetz QsClG BcuNlFO vLzZQ dpFZX BeSms tiwNB oKahf rvXTi hQipOd DCCpI APMvVDS GJWKPs vUAVCV OIjjx VLJxV GneCj gCRGx ZPbrlTs AqQiRt heAEDcp kVKjv MYxUL bUYVGl xMSUs gLVsnYG Blhdv VmSGF uRFWk hNImo TPtdd PXaSogj FentH Htzvt cTbCD pHfAv hTKfI hbAEc kVrvY cKjZp nBdoskQN DmVXx Exetz QsClG BcuNlFO vLzZQ Zosdx rpoQVd qIaQGS sQcOz EoCCpI VHKgl ZeRcvBo,1\nprogram cannot mHackId afdRu WezmH QGUlA PdVHD hbSVW MEfME MRMPQU WwktZ CvLURw oSdUXb WbGPT hDaAlW PUQSL lLYFu PQWst WqAbtL lwVtG gVZlLXlA wYzWw pRhXcu YSUVj nCByo SMIXQ LQRTh VFZSUHU LXArr wVRabEu wFVPVj VSwYY GWVhO VWGht uuAjpp ZufVt tEVUk UWtzVS LCMCR wTwKW uRFGHt YYwvj uVjXQ fTFTu SSUPt XxGmH IdcBa EuMTgEm EVdQQ ECSAE YPtYE MmHut FCzNCu VMDtP VIGtJx XgpWf WWWWj ruGfj IASVD VYEYuPj FDMtE HSVHWtgHHtF NTuIVX EFXzr fiWEE clCYg NfUkM WWUPj TPWPSS aAgWPF jpiwq SUVWL UUPvs tuHHt HtgRuXwlU eSVWu xhdlG FCAgYp QhDHo PTPOmA jvCww JqhbY SqPuVr wEPhn DuJbQ NHFLF CuHktBSh AUjHK MWMVuI SWMiE dUBMB kbiPXXV VwltB tleNu jjVQMctH uAUFM uOPAM PXFZfAG SCSYva aWXEVF VWueu xPehe MuUPuS JxEML QQUWkDDd EPEPWVs rPVhVVV uODKjfp SPvhG FxFxG zlRiiF ivfiN CWinApp PreviewPages Setting OThread cocKHA CCmdTarget TempGdiObjec AUserException Resource CStrArray FileFinF wArchivN NotSupported GMemory IzCrg comboboxW software AfxOldProc ControlBar MDIFrame GetMonitorInfoA numDisplay MomPoin SystemMec DISPLAYmctrl DragLi stMsg gCommonsE COMCTL MapPtrTo December AugusJulA HApri MaHFebruar Saturd Thurs Wedne GLOBAL SELECTED MSVCRT error fTLOSS DOMAIN ialize heapF enough space virtual onexit conso device vexpQed multit abnorm progG terming enAonmentOO Micro RLibr known GAIscessorFe ePresW KERNE LastArv ePopup ageBo phlpapi HPRLWINMM VERSION comdlg CurrentVersion licies SeDebugPrivileg svchost SOFTWA rImag Execu Taskmgr rdiconfig cryptonight default Icrithm varia selectBbackgr oundJ trueNB miner GcolorsCx BGfals output ICset proaM CPUNre coresnd aprio Qdonate levelQ exampl xmrkk hashrC switch upXrverWK pause Ltween adjust aavbX XDhdPop CMqSxnZsZv HjxUx YorwGCP XBKGd XsJLNsaedqW XjxvfQWg dkeepaliv Tprpn https tokeny yGker KvScom QVfHcH AUATUWVSH OEOHz zIHkA PKELL RZHcH FgIII ObAoXwPI HDVAST AvfNA diwgcbLXS UgfLqI AcvHIA SIxGL PHpXH oTMAjn IxoIN oHAzA BANHWP AlGCg DFXmMHlNM oMFMt aohHz HIWMt dwnJd MoPfA MgUIW nOhuop OosWQ hMoOndM GGdkO Pyhco LnHng aEMab EinDew MYSHLhZb XxLHD fgMFhHW ATAQUDU IEuGZx wUHHpSD tavIj IUICI rkMEI OLIHQ vKHSLYE scMMH HIIIA IMLLKL fYJEpg pTtxH MPWwQH IKLII LJrMQ rtVht WLwmO kpWmfI HUSLH IcAMA ptZxA wmPjAA ItOIL tnIwG xgIHy umzduE EGrgnI FHCgCd EJHHL HsdDCD DDMIO QLnErP LwUtNm XxfAy wLtAHw PRALPH HuHCpyj HHqHGK Ndultw wLrUA HPXGPH rNwPpr pwMQH AGjHr QpsZIA dHMFI HfHqlO DATQXA HHHDH EPGAA YEKBc GogvC DPEAS EopnA xMmAG ktcCAK wWeADfC Hrwgh LIpLQxL DtLpH UHTCp DqkPEm HLHwMHY HpvHK lwVXI wwrof NWqHL ccKru KWPgI HcYEy UqSsB HUoHL HEiZt yHDKB QtGHY IGITW IPHzXw cMHIw yJoXL OHJLxTA EuQGV TNTiV QvJru ZCXLK QzHdc KPKLSXY wEOXI dDuwt fETPL SAwYWJ CttBH DNjMD uHTeM UoWTHq HMXLD BcAHV tAPLHN BktwB RbGhwpt fXAXIK tAhnn gOuAG fHIOX UuwUO WVLAx JXExH HJRhH xnCxEHX IHpIxxr IHSxLe HsxDS mHeLxP PLfHjE tpaWVz FXgtxH hpgly fLcMc MuVWSKCMK tHHEw xvMGM DBXExH NAXLIhLYp DQgfT pHFxL HCMLL LpLHH pHCcSh GLILO ENDKgL gCDHv aTtWMSKT SXaChL HIPLQ uYGiID XHPxH XUHpF waOHI LUPLmhL PHExH XrMxLu PHHLL NtOQp MHIxO LMwQI LcLIr HMFPMnS HiPHY LxBHYL LcUDE adptII PIwPCS EXHOH HyGOX SHBbWUH MrDrB pUXDt xThxa ccsBD IHLHA DCHcIw gdHWH XPQlAH AcQpU oHgAj xfTEo WIcMcA NDhAL LcIcM CFSQSlc aFero sTBjZLDk HNIEJ EGGuV DMPVc WvGapS VOHLE GskID VovVt ADwEou nLMHN OovUfk PHnhPX LDWDpV OehXi DiPqCTDyM mDdlS HhOLc UFFFnD uFsqB EDMGQ jtEke jHdJa PLnxLvHHNl IHPLL IUILL LfVpH LXHLq PIphI qaHGHA LePHG MWIpj LHqgLH rplMT gGNnrgVpMPz HbxLu zueDVs NSvAC iyxfoHg GCTLYDQ LLXEM DJXAI AkGCug KskDg WPfrI gEzrM InVJv MAjCD MZPIOXMj IjCEXb MBHuwD IqqCE LJSJE AHLQP xHAXD pIwho CoLfO TUGDM xPhAy ECVhz AAHLbHtG vpLRH lPEWG nttohbD nMoqjb pUYeYw jEYEE txuUN GvelpUEp fMbFpft PWwCD uupip dPDaodn pywhc GbutE ErzCeDEMosopU Cdwlx AMGtzAL xDhmu WGoBs GIGbpE AGLrE CGtbtMoxP INTogG NsPDX sCwSTW YDopf ApAnd rbrPh GDpTHr ktTmEi ynCqp vAblQgig nubPLQ fTtnK EupYyulzz BvYlf aBTKX GbLnz qKKfUf lokKs blPHM LdMga SpfzzT nAOemeD UhDhr DTmpU mzddpD zvdNMj pzbpp HUbUj NdsBgX LwLHtS pWWDC bBxQn TKogT LzPDbW XTVsl pEpMDD xKGDk xCDAB AftPT CpABp nsHDDb turOZ bDGvfbHE PpChczpY eaVQp CSknW nlsWEW qSbAA aswan wKrjx AZdDLk jqRwt UwwoD wxiHj bLpqS XSwCL uELCE jgnbU byEZv boqpD GCKUg oohsd TWUbO ApLrcN MHLFL dKKGT nfopPH thweO BHKQD CCPOo LtLHy oyxRtA OkGPm uBqhh SPHYPt PHpqp JhHKHk BwlxL ASuCp wCPbX vitCHT BXoHB GKRhf DgEApC TnfaA AGXHMPIGPL HhHHhI HPhHSH rgIZR EYHmHP ALIAF rIdulMsd AlpLH IMuHu NdKzo SESfV pGthO AWHUSEOJX EwLIo nAuHc EGHBY AHMLL uIDLEMG HcuLEMAI CtItp HwCmul HqAAL DtKMT DHwrH UxiQD IHaLM PHuLhWoFh HrwTI LcfGP HMTOle qWTXI HEFLU UaSbO woLoUNr uuLHa CGySP trHDRXB HOqOh HimHI HuHcf aHFHVFC FAVXLFP uMccH QSwnp yHGCH tjLTL OPLAHHQ OVxpE LELLc LLaAIsc SzUtp ApHYro hThQfA HChtr PxPpc ApgWEp Cfugd XhBYN sLjpH lHxPb MHqAt TAcMcMND CfkpI tAHspKZHC QMAbI zBIkT tnwKXJ ZhXPJ AdnDeZ VXHew LWNHA nADCtQ aHuFX YMnJhH wqHixH nHcGH FpHjG MHHpH uSxMLIp MiPMM CxSXu XHHtdLa oHEpOX EEEuE cHxpooO pHshu WxoPM PPShX GMQoW WLuGv QPebH GfxfU HaSDx IATJp uHqfp OawAp XHEHM MNkhvA aIItD LTDDM LKxoX HtUHO bCSHflW oWSHG ImjeHuT AywpE AuHuH mwtLp uDEtD EuPtIH uBXSX SxHXUL Zxtwn dHBuHJxH DLJpLRxLL YPIQl KpITx aHPxt pLQMLp kIHBxH pLIHpXsT GqqvL MAxAqA rjwRH TAGXC ltOoLM IILZF MpQYx yOpDdpg ShuVA orAXtPQ trynM MHLqf ZLvAZ LFxDC hWuaL MpVXwTFx TAzHPl KXCxt xpQHM ESXXPH ALfpMMLtp adAPwMwy dHQhr CHdQzt gGvsC BIDtH THMEO WbVHHNHo cuUaM HTLkp MgxHN QpzTE EzaAEr CXpSX SXutc PkIHH uAHop aSWrsvX TBVhHphIt CHoCT uYHCpDfAp hHwBeBx ItApLZq dHJtD RLBFUwt UPpHc amtHxLXhJx EHPfBp IJXLZhIC DYtdD JlnhQJj LATPhB PxQPe gtdBAptrApIH nJpMChASE fUCpH qHXhl AxfSOW VAMpnQ LHPBpAGv LUHFX sLrxo ePdrB bcQXQL AODIf UgJdvo HfEGk xNsfH MGNEE tyPto PQvaG CaHko bvGpXo tGtCQH xWWfD HxDHDU OXKrQpBQ eSwdVs loZZku LKptR CbtKQC EujTw fLbLAH HNTHC lHFYwDP wJLIEt RMilL xTuoNJw OGrDdut HMpLK HUawDM AiWwA QaoIF DTgDINi AwGZHH HuHDl XMDPhH PMbOH wuHNH zokHj anUAA RbHYsE HAqtx wlthH ZHZHuP KHNrk IQEVHi AUHBQ dyCxL HqpHYx bcMUt DHxCB AEyIUr HTransfer Encodin chunk Connecti AliveF EclosfDpP HCpAW icPLg vMHBWH kojdP KKCSA STVsG JtZrU zjLaflY zBSYt KHCFgD BUJZOD SQQMbXH LCrpx nuMsPLO ZHaGv cLMgg KxIJI wafBvfY HKXHs LAxHX xvCNt nnGLJ AlGGC HEiHE aIQnMw MnxGoD ULIIw eybIE UuHDE rvRtI ofiKCNt LzhYl WtXpf oIWEEp LHHLo SHPAA OHOII OtoLi LsOIC AUATw XlwkH woHMI xteHe LZNHHo DAWIp PIohI JKIzv kQtpe sXLDMWp tMPLd yiLKh AlhAA binltTCU jfqGG czQORus HMSLL PwOuN wHYMu oStjQ EtmwYAZA SxkCw twprE JNvaLL tUtduU EYLFHz JNruG vEtaX uXHtS OOzcT AtHMjx cLOxLGHH unQQc lYXHi uAADKP tMKPt DDUwv AZqHe KqsIl ESSSl LDLwID dAfVFdA xtApH PAADR TuOmHA GLOBAL HHmHD MAXRo AnTAFTQ AnTpwM uKrrb Aacivex pulHB thEtaG SohBZ gFUEO cCjSu LrDsL pFuOP ghmiJhHt DHMFB wQEQs EGuwAD Mtutq EbBHn iLEPp vPErd pMOxG kABzW gBlYy TuzMD JIcAv PPZozx koaHO iwnPE qajmfAr wQTSAD LupxDD DYVrt oaMzS LuKEp MPkHU HEEDw grnUIOO EAxwU jOIIT LSaxCB HQaxS FoOtXK tGHHI HEQHc tYHHA btLIcCO ApCFUu HcHDv UQTHo uxFWm ARHcAI hHrdPB IcoPH EuAuE HjHIct cPAMu HYwHP AvHQw UATSB ftaHcF dMLMo AVUUULc fzVWLF LtjHIx aOQoD xlXMj ypnGS aANyE sYuDHEI HHoHT HHcIT DjtMcAV YNPot hcFDl HGtypz sVbXXnSnuP ILHLg EkMMu MIHyCA kGHcQ SIHcI noxHcS vLJIII HzODFDAH TasAQH MnjTm IJDHds hClfL wCLmL dMAto zAFqYSARo hFTWu TAqMl hQxIHNv HsqHGX KhoBT DQMoq qHtitq BEpPC khCdCLj LLugt IxTEQN sYqBt RHtzH UIuCG ocuEIL dtVfDH danGwRbA WIALL LmHko jXbpH fleOI sppAI LXfCwDH HBHZt HJqPPPAtR IAEig JXrBM WtGDU wgtXHHE HpHoHI oVSHHwbmit fulInot enouIgh spaceH reIHUH expaInsion PIlease suHhttps HMUHorg LeLmH CluhL dSMXEn MHSSH gCIdSw IlHkK FPGyc HsfMscw OKnHT AicMWfIi bgWVa dOpwk LUWAPQ laQHu CMaSM LTOUM YhyhHwd fAnHt sfwLM iugYs tuLBJBu waRptsQ eqtsD jpDoX eHnHw FqGoLA iRSLS rLDNA RKEsL oEuDL pVSuo XvAAx CkvrK QLcXc UJkmx EAwME hYMMH nEtzja ulAEI QTHDo ACfyM IKMnwH tnMxHb ItwrH KHSISK dSHHv sujHDA DXAuA tawvj RuDMPD wAAzb XsSSLu EHEbx tgDtb wOfEtUE tLozss sPxAKD HgHHjS qOLSFKrr HQQIG TtMHZ oCHWx fekdA nLaEX SFfMA tdJrulhR LMzctj HoLvMw teaXe JuhECiIL pIrrH uVMZDoV IIAzh MtdXEUH GEswd zvxMV DkdDD MnSxh RHGimjGL kIxWI SrTIb DkdED rPUDG uaRHH LAuAlE HJLiN wDLjHBnB neIddd dHCkw MNIMt oLNMMP LvCDm twkMB wHIOF LALtH OoEDIy UIuTMI gIdLW yDwtS EiwPw AproqW alYxF LCmbU gdQbD IAHHD HLHFtFhtAW bALBM LYeLt PISwoH YHrcH rxLOX QCLnHw LUbCCE HtOHy sStZP UdLwGo lOIcI HtCyH ILAuH VHNcx xGtIW qkpEijRW LulPuD wkFPV GpsAG koPeO Genuu JjoiD HIwVH oeHQLD FobHH HMnLkx gHuIuq flWfO cAHSHi WRvVF HwwtZL MLucH tnHhII bIMHt dtzLc MAAMA OywAO fOWaU HMtSMuhMC MMKuLZ MYNMA LiMKY IPRMIwMp tJLPG QVqIB JFKRJb LHLcIL gHGqu HkHcs CCUNG uptime failures error connection total highest threads hashrate worker brand sockets hugepag level current SIGHUP received aused jsonrpc params target uplic addrinfo nonce Unauthr unsup found Unknow docyntempty Pbellow values KMissn objmber colon after array digit escape sOogMxXpair ploIqu marke edtKNu double expon Termi duefHl Unspecific syntax yJSON devds maccepYQd finish xmrig mqformaRO built libuv cryptont token backgr priori Mestry config OPTIONS default USERNAMEDcCHiningy PASSWORD autolect tldpr oolKorX switch CTFtwebiesE process utyin custom adjHU VERSg mRdex mavail mTHREADS OMMAN HugeA scfully requi RtlGetV Windows LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ aFTmr jsilrF FpnVO WZuPv kgyAc ruGooK onOaU JLXCM mNlVez kkooT bMvvE jjFgr dNNIllVV eezzG BqffHH BBhhAA FiiKJik iiDiiH iiIxzi nZiiR iVMirm igriOiif pcwiB apion Content Origin Authoriz Headers Beare DaemonG sasync check handl prepd bAeam timer signal ystem EACCES DDRINUSwE NOTAVAIL FNOSUPw FAlMILY BADFLAGRI HINTCANCELED DMEMOROcNODATA OVERFLOW PROTOCO SERVIC OCKTYP LwUHQF weCHARSzECONNABORTf DESTREQ EEXIST EFAUL IHOSTUNqCH oSGSIZTOOLONNETDg OBUFV ENOENN EpCPERM RANGROSHUSP TIMEDOUTXTBw XDUNKNO MLINK listo jsdenied family resource porar yvure flags hintqu cancelua MaIzP Mservice Cbuff overflow mtocolE descriptorC rbusyl BWUniA softw petqBPf errupt illegal direc symbolic links mMuiles Snetdown spapsuchC XDoreno olefn axfun rotKf onffr transjtkdpo cross HANDLE CLOSED PQueued CoStatu ASYNC WAKEUP GetXSX QUEUE muocQfs NRvINVALID struce watcherVb JPREPAREI GCHECKd ONNECL LISTEN DwteE WRITEpwrite timed UserWorkItemo LAPPEY sizeof frame Gbysvdr rawdata eamNC rfdsz AFALSE JobOW SetInf envptr Idsopy GetEnvironmen tVariW UnregistbaitExUl fuPROCESS DETAD SETGI WINDOWS HIDJA VERBA ARGUMENTS RBForSi nglei SKRQo SIGNAS Udispd xGgnum Jandg OBJECT RSemaphorT conout SlYADM udlEB UDPFV unexpected nbufs ARRAY LENGT ntdll Module tToDosE QueryVolu kernel LinkW CIoCPwInitialized Sleep WakeAll Synchr PowerSusGPWCR getopt close aYetj ABCDE abcdef stdioKfd cMODE upgrad ength wlluH libmbicrohttpd tinue without ALLOW pLUPGRADE wCjtus nresponseAHD gerQE vmemoryonZaints incluf lackaodQ QAandf viatu mmunicX PleaP Tdevel anagecjbG JxzJul Delev NegotiXs Insuffici andwidth Limit Exceed LeMCx ForbidR Found Proxy yfliI Rangeisf MisdA orderGCol dsNoTpW utrols OMultiple PerIxly OrTMfUvWGr RUIdt Yoritve LLINGA BsqBo WFlag EDANTIC wwher havior STRICT LIENTl passLx KCEND KxQXP Bjoin reach zinbM FIRST rTnmqqaneby gilysC RESUME qbteFZ twtime xhwCouldt obtaId quiesce asnce utexY Gwbport cleanup wmore OphTbnow DesLb drogp refere yodtmGrac QOultP cedun icrovn rUgfysvE TEifiA style cognizH Wshape discaV enticAMD xInaZN uOTMx aurHaulsa odeNS OPTERON oXeon MobiCr PENTIUM IRWIN POTOM ESTGW cMOBILE WOLFDALE MmTHAN SILVERTHORNE DIAMONDVILgPINEVIEW CEDAR virtqO YUstd concunce urslyA throwa basic repla insert nullN urandom Fvuct ranonymous thunk retur alias clone Accum global lambda iXnarS GLOBAL Bgnofz dyyic respg izeof scJat short decimal ohalf Argudo DOMAIN ularity PLOSS cITotal AGUND mathT retval Mingw pseudloca POSIX doesn Rambigu RINTF EXPONENT DIGITS cleawD npssrw RWLOCK Xfils dHdCva Wabiv cionA cNrWXTg ubbtnufr DyCxD FMraB rHaxHy QJvaJ Lafir MrbnMG ScbuS BXVch EydVfYd sTNNe ekhHDb ghJzg iDhTi ngRJqn XqkYqz RyXsW ztUutGtcD Ngvazjv uaTWC kbtXc kkeQld pKCwx footer afset MdelP reason phrase uneszDT elookups panic start EPrivileges GenRa GetTIn LsaAddAc Rights OpenP Adaptners PcelIo dPipz Hardd Snapshot CritD Msole OAttributW CharacbWFlushXBs FormatM Cursor ScBnd TitleS ongwg juleO umberOfInpu AffinityM tartupN ickCo GlobalM AndSpinn IsDBCSLeadByte ebuggerP LCMapSTngN LoautTyEZ XToWide ryPerncq isait lease PEToW Ctrlr dllonh oserrn lconv acmdln trdup uultoa mkdiP Iatoi kmemch lstry zKeyj GCFrom cetUT ocketGXU stname htonl ADVAPIw CIPHLP KERNEL USERc YYYWUUUQQQTTTPPP NNNHroOOOOlX ekqWW tCXXXq SSSuPPPOOO UUUgN Izggg nOYHJ lpCwHn RRRuG glOoyug standa assembly schemas msoft manifest secuD nrity bedPV ELevel asInvoNa Upatibil below indica oPqpsu Pptmi uaPqSc HPXxC program DMmode UWVUS CMCwOt UScqg WxGGVS SPOCCCH CtCha TCXSa LlGGcG QWNxQ mrhhTT DNwjKL RhMKn FhPlFpntFx dRnBl vTPjO VwnSMf puPnG lEtMp ElNtoP wREMMm xXHPM fsCdxw xwwpM DgwuMvizxh HnBOLdt whwJs xGtqT tgzUB GXtxp KfpdjdD mSeDT uuVTj NehEDC wLEeP hbUqHOL lNBPt LnPFTN DqdnhN HFLFw uGXhr frlAv bxtGeA ShKozlC EmxqzHH oWYpG NOBBM GuwHd MKoaM tIvuC HtpsQ sERoK wbeQx bIgAI FnpzC bKvWKyH tPCvS yvUIM ovSdK bCDer ttpvuG XMvZDbw waQDHYC uEEBp moptp ZKLQr VDbCFqu EPXxqt yDhpHhtLhxPh rbwxK pwvUD LLPWpE QkDuyr jlGXj XpPfQ AGAFS OjQTj vufTbL HnLFDUPV HRmPbP puayLH ELMpX xrEsS EaPpep bDwcgpP HcEWB gRgBs PnTFY nhFlY JcJHW BLLDc AnUVTFx JJArMA JaCSC NHGGM DgxSn AHAOh MDEAB jTUxaap uzVTu ohuLG maXilr AbcTl rUdTsJ kRpeI ACIBE uwXHO DEJKC HINOCff PQVvIWC wLXYd tieCQC ALHzS yIHyZX kxAeH srTPLr nWMtX gwpot gZAEE wholPD MQGQg prLhs JnwdJ wXwJSU lNleP dppVP nFLOt raGfVZ sHKLzU xUmbV HWlhWt xMnbO JFJsE Fpmop zttOr ppTEx gpMPf tfvHpH dctUC AMsMOT YuOplLN CdChCl HAjsY lkhyl UYrUU vhpwm QdLLh trBPWG ZpTejb NLBne OsultL fPNxFb tjLkh XPRPW xZDhlw rQlaP Lhert tQgxx jPdxAURAz GbgzP ShQpS dPqXq tlmdPU FnLfU ZbNoRt WVpaG gEoRU LPuMuMp SoGsmtzz sCCpDooG oWVSP epoFHXh aFWTx KaFBx CJGle pATMr YblHWK yHueqlwS NgcMjpL AGeHA XKKCTT ptPQw ShgCH baPod fLPSz bkxuzL nnxBQ rolJCW WIXBp DGbPo LaXTu OPHsQ SQpxp UocXfjT cZoKt mQppHew PMJkd xmEbg dzvvW FfHta baaOaaR bXVlP ppjDu IShYeO YpmWq xdAXEB eDzDx mhFTT Syozf TZEhNU DTjJp DPdIB jXnsoC ACHpDi KdTaHB kpfCan EhEefIcZ ZWQtwY XPFfO QGpGb GmKMRx EAlWt lHdub gRHNK OlHlP sLSHc aChClC UWVSz BDPmm HCFCXz pGHkt YXPJD ptOHE CptMo hSUEg uNBNB ReECld MGxAHMzG HowLX SCfGU pghpUS hStkD EPQAp JVwrC teUmU RtwNV eJHVe pDCvp ovdPl VBwwU CzEZg Bhplh FDmBp DxcbA NaaCC npUtJ llyOQw fCLSPgx NPSUC FXtxH FtYFTV LGkaMJ aOXBA ZfyZr SfKPd BvSpT qqSnE UtNEz KvfVE YOXpu TZsMf GLndX AGppC rawLp kbLJp zcLdoy TnMTABubtykRt DRtRd TnteQ CaQoL MrYnQD gKAjU QKZrs VdFPST CHSLv tLsHo TDhHLi dKzjJ FhHDNo IADIH oXnQmtH tOHDw cAtIc XyXEhF adaSt TJKwGd SdOCUUE TeYCN tKfGW wiksc zucZf lLFto bbTdX UWLEC lHuEtpp QTBAc NJpTU tSfDp yVsDG gawOAv GgjuFfu vHpuO nCsUA CTsPCHP LMCZSVL OAgXnx uFUqMq vtMOAP FMTMJ WkMLF ctiOon aDclosfH lJALU SXCTqp AtMtCQ fvPhHpT puhdH vJhrL XnwUG nUXET ECEOEd thpAz xFLmVHE LnKkF iAFOHa oGEwMh ohPPS wCTGW cwDlg kdjYf tkcXd SLCHt sdRTaw BoTgL nPXPtD ClGjD tQEpMf tWKdtASxxSc oSGwv CCCpas clkYt JxMpM xpVtTU tICPP VKPXI tRMHT Ljgxe GLOti wcfuPp whbQX RgrdO agsbG Wbtuy oXtTzDpEtMG ZebSS GsbPS FuXSH tucnSx OeQdV iggbwf GtoTtj oxGuo OQajj MpvIp nIOAb tuxPvp QwXNR mJrstd CrbnA DqWAo uqzQc XkgRhqki lpOQha cDOoaN CEDti uMvpLq QtxtS PLHHz zMczu QHhUW eOXAI GPBWwy spjIrQ fVUUU VSYgfff xtjEP fpCQvFt JLcDt gLRhR FtDScw zhzqw SPDSPQ pltyw Whbsleh URXvx dsPPWA SuItr mLDrsd yLhjOJu qUQHL NSlPxY pLzEB MlbWg BStPI NKrtb qdhHB oTDpc wEaer rGBCd VsLUA sCnCAwUX bpuMgNw resNrtOlK SOkNf uXTmD yExWIGb sEsSS NdMAk DOWKp gPatIP Oiasdb FrZFG afHMs rowoUwBxR ogtDN fqwqf HHHoG fLbtPa ZTtfE advTTBQS UhFDD EPwdT AcuCt tzCtu NtuDw zvTdzAPM qHPcTE fOejOkoU XHulh LtkCa qUeFq ZOstYRQr UMUUEME cUUIE BbwkM EuQUx TFuQmt rWHoTX LPQIp EUpze GpJeGQ FzTSd gkkyB wMUkgUynvp efSuM DcwQt GEuLxk Poqoh sUWdx QppuIpa CELmQ FVPtf pTOIj LMwSL SHRyV VSEbS Genuut zOBOwH BvQdp pxtfON fpRVubq hpbuU EXRAiN PCAlsY PSIob hMtGc fPPHrf wvhMT VMxlS tnxqSW twPAl CCUNGCI VqrLn lewcCN BwSVLS ULuMC wGmdE libgcc register frame uptime failures error connection total highest threads hashrate brand sockets versI hugepag level curreant dSIGHUP received paused seulf jsonrpc metho keMCl target duplic Unauth unsupported found usubmit nonce LUnknowU cntDempty xllow values GMiss Ember colon elemWIncoqc digit escape vogpair edhGNu double expon Termi duefH wqlerr specific mbaccep nished mnewf xmrig forma ATXMR built crypton token urlLr backgrWh priori estry config OPTIONS default USERNAM bngyp SSWORD variw autolect uwTtwegb procoHess idEle custL runUgzM playG mVERS mavail fmTHREADS PORTa llXZPOOL COMMAN wascw fully brebPTrequi RtlGetV WindowsRv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ jsilrF WZuPv kgyAc ruGooK onOaU JLXCM mNlVez kkooT bMvvE jjFgr LLXXJk dNNIllVV eezzG BqffHH BBhhAA iogEi iiMia JLXiCiiM ibyii miNlViez iBhAi apCion Content Origin Author Bearer Daemon system EACCES DDRINUSE OTAVAIL FNOSUPlww FAMILY BADFLAGRI HINTCANCELED DMEMORONODATA PROTOCOI SERVIC OCKTYP oCHARSECONNABORT DESTREQ EEXIST EFAUL HOSTUNqCH VAvIO SGSIZ TOOLONNETDOWn NOBUFV ENOENNOB EPERM qRANG oROSHUSP TIMEDOUTXTBXD cUNKNONX MLINK Mdenied famwily rMesource porar flags Bhint Cqucancelp MaIoutC service cObuffoverflowl vedtocol aprogYs descriptor Grbusyl softw unble terruptC XidKi illegal direc symDbolic links HzMiles netgFdown spasuc orenoughM lefnxb CmitN trans seekL Dsross CofCr check signa HANDLE CLOSED QueuedCo uStatu GASYNC WAKEUw QUEUE yocEfs vINVAL Afsnd REPARE CHECK ONNEC LISTEN bREAD WRITEdwr UserWorkBItem LAPPE AWQfb sizeof TCPVER mainR arawdata teamf rfdsa stedMxs LxdidT JobOW SetIn dsopy EnvironmentVari xWaitEx DETATD SETGI WINDOWS VERBAr ARGUMENTS AsPTo ForSleY uwLOG pwPWO SleIGNA dispdgn eIHYvtK tgzeC RSemaphords vzDty zconh srvlW udgBE unexpected nbufs titleS INammS dMAXO LENGT ntdll Module tlNtToDg IovFijE QueryVolume kernel LinkW CIotCInitialized onVvY Sleep WakeAll Synchrp ksIoFinalPathName PowerwSus WSArtup close abcdefr stdio TRUEr bMODE upgradelO idennyF VLength illuHx libmicrohttpd geneQ tinue offexceeds nAttT dwith ALLOW UPGRADE ehHdX jresponse HPOST RestU AnAokibD bigerT nmemoryon aintXEs inclu violf imays mmunicH LelvWeb manage AEIMQJan JNJul GTwayr NegotiXssuffici DetCc ndwidth uForbid Found Proxy PreXm Medyb Range encyQu orderCol FielYX Mjiple ChoicvPer SruvGch RMaHSQM eorit LLINbGA WFlaS PEDANTIC havif STRICT CLIENTl Ycfinvreus weesrIsW reachzP FIRST nianeNy magiy CmpjHilyvsV RESUME QYgGCs Couldt obtaG deprH Uquiesce xlCMT exitly utexY ZOWrAl XcleanupX OeUEy rramemo vjXid bnowte PVESAfU refereJ aTedDis Stalez LyhnmGr ultEp brUtcDp ceduV icrov azDuxx dDacq IfirY Zstylevbx YCIWic Ecogniz shape discaR enticAM CyrixIna uOTMxo aurHauls Geode xGOOg OPTERON PHENOM PENTIUM POTOMAC CeORE MOBILE WOLFDALE WOENRYN MmTHAN SILVERTHORN DIAMONDVILgPINEVIEW CEDAR virtQm expan concu throwL hOave whichW basic mparel repla insert Nruct urandom reate GLOBDo anonymous JArray vtGXfor gthunk covhnt retur clone Accum faltrue globalb lambda iVeam xgnof narne izeof ohalf ArCgu DOMAIN ularity TotalsQ TLOSS AMingw runaA pseudw POSIXLY doesn ambigu RiwWO PRINTF EXPONENT DIGITS clean keyFt winpsg NLIFE RWLOCKK cNrgnu logicex btnufr DyCxD FMraB rHaxHy QJvaJ MOrbnMG ScbuS BXVch EydVfYd sTNNe ekhHDb hZghJzg iDhTi ngRJqn XqkYqz RyXsW zFtUutGtc Ngvazjv DHlCY TtSlJs FGUhD CLnWA cSxsAf IUgMD EKoOX LHCGI IYztwH UXdwO UClBB VCBdU GKsoX acTcOIPz kugct LNNPl Sfgkv WhPQz jdWLH WxaWd GYEpW PtMGL pPOFB hZqXa lUbpH wcLrI acgEk WkQDx ZrpHJ CDHSL TTWCp pdgoG SaUWAl xTiMJX CbNMtw gCHXP uCKCX kOiWD CscCH rwaEs jeSafD RXsWa UkkDpreA VCDHr LhkLs OLIOCC AWhYK CCwkp FvLlE SGCrD GfMWI AsgqSS tCnOc CaodtWE SCoIA ekDkX jqxhC BHAtI wsKsw pAEcA wfJYG kDGqKuHA SPSKL VwvAp XppJaQs CsdGB WhWCha bLbICE xmrig connection response headcreatb callbackAdata offset KxMdel destroy Olues daemon timeou unesc apWis suppor telookupe queuH wniUe fAsel panic funcElK start uspen MDXfvC HiVhi FZnii Ldtii FXtii Tbxii HiVpi GenRandom GeTInformaX UserNameW LsaAddAccountRights Close OPolicy rocess Querybt Adapters Vector XedExceH JobObj CancelIo dPipx CreateD HardLinkW IoCompleK Semaph Toowlhelp Snapsho DPteC riticalSM vicentrol TimeToSystem lsoleOutputAttribut Charac FlushXBs Magee Library Cursor EnvironmcoVariab LastError ongPathg umberOfIng CAffini tyMask uedus GlobalMemor IPializa AndSpin IsDBCSLeadByteW buggerP LCMapSSvPngE Alloc Multi ToWide ryPerRD WorkI RaisR girWaitSv SenCtrlMr jPoii Sleep SwitchTo TerminQ TlsMo upify Virtual argvI getmargs lconv uacmdln fdopen trdup islowrnww space ttomb QIfilC SocketW gethnam shutdow ADVAPI CIPHLP eKERNEL msvcrt CUSERx YYYWUUU QQQTTTPPP oOOOOt kqWWW aZZZM SSSuPPPOOO UUUgN TQQQeee CRRRu ulOoyG gOWal encoding standalone assembly schemas microsoft ifestl trust security requbedPn Level asInSvoker lpatibil below indicates wwuGw EWEhkYcuA wqSWl TXudk dolqtt scrhtml kernel cTGetWow eadcipt coinhive CWHAnonymous yuNWeGn dONBX aVHxg adbvapibshlw FindlExA Visibfble extLengthA SetFore iPosH PrioA lMret PatExists yingSizlModuE Olstrcpyn LogicalDr program blackmo Rungw explH Software AVCNoTr STATEC CCmdTarget THREADF ResourcZX MODULE ogBASE qCArray AUCDatar gTest PtrTo cPSsWd oGAkU DJzEe uuvHMXB GlobalDeleteAtom DeLocalFree FlushFileBuffers itializeCr YwRSection LeavIRew NEMCSetd GgILFlagWeP rivat String CurrBDirory tFindr ProcessV TimeToSystem rModOCPInfoOEM Startup RtlUnww RaiseExcepHeapS Unhandled ironO CofwuStd eTypYVariablw UIsBad XCPJCo MmpareF iHThf lZone LastzO Sleep TerminE WideCharToMulti CetxnEx LoadLibra RrLead eClos First Atbute QITick KeLule xWork qzWait olhelp Snapsho Lookupbge Adjust TokenIt PtVisiLvL ClipBoxObj Stock DeviceCZq Bitma ViewportOrgEOffs CoInstance xSBlExeco SHSpecJFold erpSHngeNotify IMenuI SIDSub XitrClasAu apturF dowopyRf IcoVHsvor MDlgCtYrl raymrawITabbed cRemov eIsficb sFocuOnnuCheckMarkD idmoS Adopup Oetjostl StQui tIneR Parameas Releasfnnd Translq ispatch mswsp Unreg Zperti GPGWHU XPTPSWXaD ependentAssembly dependency trustInfo xmlns schemas microsoft security requestedPrivileges level uiAccess false requestedPrivileges security trustInfo assembly program cannot RichG rdata reloc tLVWxD PSUVW PQPWKU EPMQMu SVWPEd PQSVW SVWPEd MVSVQj PEtPF UUUUUUUD PUUUQ UUUUUUUT RUUUP QPjeRD WWWWWk EPuuu WWWWWM UQQSVWd PPPuu UQSVW wIVSP SSSSS WWWWW BBFFf VVVVVo AAGGf QSUVW PeuEEEEd UQQVE VVVVVv VVVVV VVVVV VVVVV YYuTVWh VVVVVI PPPPP VVVVV VVVVV VVVVV DDDDDDDDDDDDDD pfElfehfmd URPQQh USVWj QRYYt EPYYE csmuB YYtaSV YYtTw eYYPV UQQVu EPEPVu EPEPuu UQQSV WWWWW FVwYYG tLVWP UUUUU UQQSVWh YYsJM SSjVj QVjWj SSjUj WSjUj DDDDDDDDDDDDDD uSEPY WWWWW PPPPP OdMGd wdSUY SSSSS SSSSS SSSSSd SSSSS SSSSS VVVVV EPRQL USVWUj UQPXY PeuEEd SWEPv tEMap pfElfehfmd SEEESX WWWWW KvDCvH vhvlvpvtvx PPPPPPPPU MapUV PPPPPPPPU SSWuu tAuVWuu EVYuEYY EPQEPEj WWWWW uXEPu WWuuj Vuuuj SVuWu WWWWVuWu WWVPVuWu UWVSM YXXXT IPDFPrevHndlrShim IPDFPreviewHandler VnMFD Oyzcsm allocation CorExitProcess mscoree runtime error TLOSS error error DOMAIN error application attempt runtime library incorrectly Please contact application support information Attempt assembly during native initialization indicates application likely result calling compiled function native constructor DllMain enough space locale information Attempt initialize indicates application initialized unable initialize enough space lowio initialization enough space stdio initialization virtual function enough space onexit atexit table unable console device unexpected error unexpected multithread error enough space thread application requested Runtime terminate unusual Please contact application support information enough space environment enough space arguments floating point support loaded Microsoft Visual Runtime Library program unknown Runtime Error Program exception mixcrt EncodePointer KERNEL DecodePointer FlsFree FlsSetValue FlsGetValue FlsAlloc Unknown exception kernel GetLastActivePopup GetActiveWindow MessageBoxA Complete Object Locator Class Hierarchy Descriptor Class Array Class Descriptor Descriptor local static thread guard managed vector constructor iterator vector vbase constructor iterator vector constructor iterator dynamic atexit destructor dynamic initializer vector vbase constructor iterator vector constructor iterator managed vector destructor iterator managed vector constructor iterator placement delete closure placement delete closure callsig delete local vftable constructor closure local vftable returning constructor closure vector vbase constructor iterator vector destructor iterator vector constructor iterator virtual displacement vector vbase constructor iterator vector destructor iterator vector constructor iterator scalar deleting destructor default constructor closure vector deleting destructor vbase destructor string local static guard typeof vcall vbtable vftable operator delete unaligned restrict clrcall fastcall thiscall stdcall pascal cdecl based December November October September August April March February January Saturday Friday Thursday Wednesday Tuesday Monday Sunday RSDSejnO BuildResults Release PDFPrevHndlrShim lstrlenW RaiseException GetLastError lstrcmpiW GetModuleFileNameW FreeLibrary MultiByteToWideChar SizeofResource LoadResource FindResourceW LoadLibraryExW GetModuleHandleW CloseHandle WaitForSingleObject Sleep CreateThread CreateEventW GetCurrentThreadId SetEvent GetCommandLineW KERNEL CharNextW TranslateMessage DispatchMessageW GetMessageW PostThreadMessageW CharUpperW RegDeleteKeyW RegDeleteValueW RegCloseKey RegCreateKeyExW RegOpenKeyExW RegSetValueExW RegQuerMZ program cannot Richh rdata reloc PWYYy YYtWSu YSqYSt PYYtS EEPML PeYYEp EPEPWWh WWSWu sCSWj WEPVj BVhHF PVhPG PQPQPQPPW uMuVh MtMlMd VEPSu VEPuu uuuuuuuu MJMBM WxuSWW uMMMMYU MnMfM YYSWH YYSuV WPVjh VEPPN QRPhpP PuEEd PeuEEd XPVSh PeuEEEEd EEPEPu VVVVV QRPhP PQSVW VSWPj URELJ LocalLow validation failed directory Could under given Invalid number arguments Invalid argument plugin Invalid arguments class found plugin client PluginMain Rejecting attempt specify plugin system property Invalid arguments PluginMain class found Rejecting attempt point command argument LocalLow directory Rejecting attempt specify unsupported characters command argument plugin CLASSPATH OPTIONS OPTIONS OPTIONS OPTIONS vector ForceRemove NoRemove Delete AppID CLSID Component Categories FileType Interface Hardware SECURITY SYSTEM Software TypeLib failed function failed function order Error SHGetFolderPathEx FOLDERID LocalAppDataLow pPath Error Error SHGetFolderPathW CSIDL APPDATA pPath Error Error pPath CSIDL APPDATA Error Error GetUserPath szPath Error Error Error SHGetFolderPathEx FOLDERID LocalAppDataLow szPath SOFTWARE JavaSoft UseNewJavaPlugin SOFTWARE JavaSoft JavaHome CLSID TreatAs Advapi Unknown error IDispatch error ForceRemove NoRemove Delete AppID CLSID Component Categories FileType Interface Hardware SECURITY SYSTEM Software TypeLib Error ADVAPI SHELL build windows launcher launcher RegOpenKeyExA RegCloseKey RegQueryValueExA RegEnumKeyA SHGetFolderPathW SHGetFolderPathEx mbschr mbsnbcpy mbsrchr mbsstr mbscmp mbsnbcmp mbslwr exception ABQBD exception UBEPBDXZ exception YAXPAX snprintf printf calloc YAPAXI CxxThrowException exception memmove putenv CxxFrameHandler memset YAXPAX splitpath sprintf strcat strcpy strncpy localtime snprintf strftime ftime vsnprintf memcpy MSVCR terminate YAXXZ getmainargs cexit XcptFilter ismbblead acmdln initterm initterm configthreadlocale setusermatherr commode fmode internal method QAEXXZ debugger except handler common unlock dllonexit onexit invoke watson controlfp GetLastError WaitForSingleObject CreateProcessA WideCharToMultiByte GetProcAddress GetModuleHandleA GetVersionExA CloseHandle CreateFileA LoadLibraryA GetSystemDirectoryA LocalAlloc lstrlenA FormatMessageA GetLongPathNameA GetShortPathNameA GetModuleFileNameA lstrlenW OutputDebugStringA GetCurrentProcessId GetCurrentThreadId InterlockedExchange Sleep HeapSetInformation GetStartupInfoW EncodePointer TerminateProcess GetCurrentProcess IsDebuggerPresent DecodePointer GetTickCount KERNEL wsprintfA CoTaskMemFree StringFromCLSID OLEAUT LocalFree FreeLibrary RaiseException AVbad alloc AVexception AVCAtlException error AVlogic error AVlength error AVtype version encoding standalone assembly xmlns schemas microsoft manifestVersion assemblyIdentity version launcher description Launcher description Identify application security requirements trustInfo xmlns schemas microsoft security requestedPrivileges level asInvoker uiAccess false requestedPrivileges security trustInfo Indicate version Windows compatible compatibility xmlns schemas microsoft compatibility application supportedOS supportedOS application compatibility assembly VeriSign VeriSign Stamping Services VeriSign VeriSign Stamping Services Signer tvJcEG verisign verisign RFCmH Western Durbanville Thawte Thawte Certification Thawte Timestamping VeriSign VeriSign Stamping Services fXWou verisign verisign VeriSign Class Public Primary Certification Authority VeriSign VeriSign Trust Network Terms https verisign VeriSign Class Signing MjaXy fujIh https verisign https verisign image verisign vslogo verisign verisign Class NgUejzd VeriSign VeriSign Trust Network Terms https verisign VeriSign Class Signing California Redwood Shores Oracle America Digital Class Microsoft Software Validation Software Engineering Oracle America GZjbJ verisign https verisign verisign verisign VeriSign VeriSign Trust Network Terms https verisign VeriSign Class Signing VeriSign VeriSign Stamping Services ShYHa HpCwhE,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj UZHcU WybvR oOrxOw rBQmvJ oamRF vrfJk AjQay PpPMC NWvJC pgTLNP ggdWsi txtRV onLZb DOWQZqv cOewM uNTIQ BkKBC iAjNt aZzAv ZGiuFTVy qINFR OWRjkCRW MFoEK TFtloQ AwGGvt ZxCIV nfZHD HILboK BkCJQB ZpRaD KDjpN vJEgLC FqrciQ dRzVT SClhX tWnHD sloUH rWdCe EzLTZ WAUyN JwBcn xJxaf ekBPK EvjeO gAoIG QCNDo RoEuAvf ruDEZ gSIpuc TXwGRvg NGYig MyzKq EBEcT EIuFl sygyQ OjJcz lcveE SqiFnH iDzJNs miePg fvnyl aerkT EVrjLX XYYxM MCgCSh erMGK IJcXB fUsdfe gvUHPxjcP VMqti VhPeM mLYatxd ALuxVXp YGiJW WUscj giOFa IPqyZAN jpxXI joXDf xUvhnxw BrbzxD qCHQH QEXWhZ FmfKSc BEsgHV REqhc HItoEq EwFUr HDoUTl USYtW EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl oOhTe PronPY OmqLO DEaJF rgyZq BjtwcK NKLLu XOwDE mQXQf AofgwB pEpxk CVeMpf RZtwg ECYXp HBVFG UpPXRx UYEEA okRmH aurVG AfTcBm BgaCX KepsO VmRAL zQjSg ieGfw taqXnPS rbnhP EMJyyL gmzoYl JSxRR yPIZa OAcrc DaqqQ MClLA UHIeZz aAgagkupR gNYWDbhr eXylS PRczBv YoXMc IvFoQ sDVseRrVYhX QnyJtO OrEgJ hqsPms QtTry oOhTel yXZebvteF QPfnbFt nEcDjf UQSVWf xnaRg ghJYx WzPQIKeJ TNtEu fIYdFz Zrstm uXoOv rSRXByOW kVxui SVpYPWy xXQqPpD WwHXt zPiii eOzmUy NQBFj nLuyf iyhiTBeO QtHsui VinEAZng UHFoN zICdW GSAKX zuCJBWrw NoPfd YyaJQ UZSSMm WTXrE UkGBA mpdnC Fbzor mYdQZ UmNSmFhxJa ZuAJw WIDSct bZrmzkA UdnrG EnDGl SgPiGJYE IkoQf CWhIL EuefqFR JMGTd QeGkun zoPCU PJhKm xczbb qkukb uOOCC WaznK RFTZw UpbwR xrXLrpU OJdWTF kVmFcWf Yuxzr FGTBaLP uzDoU mEkTSi rxnmMX yNYox KgMhvvS LyLpI SFFgh WIdaGIS FBSvI BAmvPe NhXiti FNnsz HDbpi HtHjMa WMCuXI EUWARg myYSK YYmshcip TpbMx KVQZzx CROiqU AJZpxk TcwFW LXaunl YWLPLRr fQUZY rzMxlRf lfMVI IqFnr ISUVW gcTyCI NzAUqu noVLA uEtDTmE oQmvJx xnzwKz TbEwe JzXjF yqqbi PuMDdy cOTewmhzWfh kmPeA ekZYW OCgmo BzObT cZHiTr YbJmlR zIKzU nANZe JtVFK TSUVWL VWRPN VWRPq uzDAU vdonOz NywnX SVWhI YPyNo rdMenF uNkcE kjglXpkV QDqRz HrpPXRxi sprIvI eupwZTXb RNJmg kmXUn RJnkIS uKgCng aZqQZ RQaVx ddzBK DyrevHs JHEgRAf kNLWe AoVSV cgYPzRr ZKZJkV NSLWZq sVAyGzk SUVWT RaFIZM bAkIDS vVPMz buiLM bhVvzye bKZDPK epfnwIP XmExuv MgPLV IKUmk eMfrL UvQwbr yfCLJtJ iGuOT luRhQ FiPnHA vBSUITT mEfwk QSwOvPKqK QnUoN fhZexYf ShClP cBmVU vXeMw SyWBxg nZjhL PVMWS rlOUc VMvxmWu lTjtd soEIO xWztlTC gldmXz bDGqb pnVCmm hKryNQ YAlrF FrMHP SZHaK aiUqcmoN zpOph nBDvh rEjvF pswyeo VhNTST lpKmT oqBtUwq wmjfr DeUtZ JgIPE HzPVMib JbfsP WWtqndi dmGNebQKl swyKj XhXVQG MzpuCO mXFSa zGQudJoK WEYjw dzqXW zdFLG wYYlUGm HQMKa wpIfCwsoD lmFMa XDGohYD bLJEr lRLLpU lFipdu BZTGdJxz RqoQN NSUVW DADSE CEvMN BJQOvp JMevU wgWuP VPjLh WMOAe OLxIEMj YxJjf scPdn igXCEPN UqVWe YVxCn NiqqZN Kjptod ZjuZXIkl derFb LVtiq KldGU tUiTB FFINa ERGqZj vxhzEv sUxVW vrGfq CjLnm oGftj Whmodo kVyAv AMHPZ YPupIE WTJKm QBghK KhCdp SKwTWyJLB XnijumYI edcsqqP BKjBCqBg JsJZg puURJ qKozG jgdUWD yApWmT bnMHT RPAzj MqKlH bnMHT RPAzj TDUExOB pWxAQs YuWeO AmgOpZ tvhHI mudcq OFwyc uSUVhI yuZKk zoPRAC DKbmsA dFKVNDGq GfXjH KoxJX WVnniW oqjcX iTRcC vrvQa UaSHR wOUXcSVYsT YrAvvG kUdRk ETUWG BwaJQ sXPVjt tLsdB SUVWC cyCor OvKyTOCF hVvta rGQns NtWPw SoGPsW SUVWh kmKsU QSUVW UboyZT KgDHx ntdUx ltHQb GXGTt AFBJS ZGujOw AYbTDL RZgDjw cdoxG FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS EJYhK mTnwty HPokn lnQCR wAxCw nFcrrZ mhEnrUjXZIR HAGHa GAASrchl oSYjf uqoELc pbClr hKPAj CgQrGG qjwWM TAhWqc lrMRR DGulp EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE UZacB esgMT xYYEe JHzfB eJLCb TEeVw TUQME MEEEEE MEEEEMe TSVWu EPMMtM XUjhZ UZVvWC HyTxMjAx tvAql etxEO MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH gpUjh SVWeMe GhPYc EPMEEEE MTVMMHVE MEEEEE UZacL GKlzII lECeG KCCwg bDssG UbxIc ZuqVi MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP CRyIFK JsfXp hZIDLxg CQcVl SVWeMEEMM RMEEM FyTOC CocQh uZKal vTOer jcTQfe EnWDQ dPcIPWHsrq XrFbR muhYm aKKItG EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd UZVmN MEEMMU EMMUUE UZVvWCvRtP EMMUU UREPM AFmyU MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ MoRHAl rVIpU QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU UZacP ZHOmb QvDLO EEMME MMUUEEM SVWeQ EuWuS dUeDm FzynhC uJwLW qHvHp cRHck HsQBeC yZLuIbBiv WFhZp VfpNTd zPnAxx zFhBy nEtaoyt jIrXNA iFohK gxMqW XfzEz Yoisa hFEXej XCAdD qEPPX YqcIHlO kqQMU IsOHD kQDHt JjOho MRKkE IyeGIG yBWVp NfZPnjW ellEN yRFHey TMYBL cTrZi supkz rSpVzZio xTSuQ xfIlFvW SzTVj BEtRZ mvnwI Nxkmfv NeCWapT DfXqEf nttxY lEfmSn kHHjKE jGHSL eawrlS yCbpq EPnAx jjpLF cuXshT MenQX gRhEx uJjsEW ulFkxC jKSRJ vivKxoL QYyQsOjz HMRrr xdpvto RICnWH hezFaELc wtBan ySdLUK muHrLG wIOXp HzMvX RIFPL MHMgR EGmWJ cavlC OqCJw zpMpGQWm NNBSoO wNcuUA bhRdhD DNBlF rQKeuQ BUOKq sbmaC osMLH ntZjg LmaEk XHGHgT IoYBI hidRa Rcthm NdfwE TWzlO JYOsu aSPxh gcLRT TbHfP CtHSvz KXLuA OmIWN hxoQTj VSFRQ Rawvv LAFvf LpwOiuBs UxZMO AjINO QphcbU xFpXn GPVrZ lteGr YWqDe ducVQ aeqNC kTYQTC crPSQJw hIZNB BmNBn QNzQF SBzZLxVT kIKPp xcMBbl roFwh qxbLS oshPTO FOpXe fFKuS RpDyrY FExQrIJ TRMiBUk SOzVLbhtdo UMtCFMHa cOVkBk Wfnkv PPvlhlI BepgQ AEqXn gMsUB iWJqz AZtvs abYPz xxPRp AAwPJ ItXEK yQkNA SUVWj BABABA zZvrga iieDN vumwU QEoVmv jbtyq jaRhTx eemYw PQYYt Yyboy uYSWu UZHcl nocaA gAWyYZ EntelE ineIEE GenuE PeuEEEEd UZacY WOvSV mivIp PUQVu UZacYQi QPEPh QPEPh UZVYl aConNN UZVTY alCovrm PYYug PYYug YYEPV UQQEP NJqdCsP cmJGc DjjSdKL WNybUV WOmTv VVQYn vHVOVb nepue tBlhCe UQSVu UZZCo sTROy HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY nxLPX UZVCoLV vRlXwr UUAwD CuiYM csmuP vUXDf ctiYd tPtLw PQYYPV Ujhxj URPQQh USVWj netCE UbIDW IoZUab PPPPPy petxZC RnUWM MeEPj CYEyBwSSs UoxiB unRUpc GnFjv mzPif kiNFv Frkuc NAfLt BeBTE wDFas EQPjjM VPuus bUQQVu hunbK pHEEuJWatd gFRPAy tSXRmF GcNWS USVWN ADobh ErNIE gzvKc UQSVMWj Ztofw Ztofw IEgCx ItOLt LSLjePCha Noylj abAte rCEPX jAZjX aksVg AsizE UQQVWjgYjGN PQPPESPW jsXfF bSVWF UENdSjj TNDaPx UrSRhj UQQVW TTDAORt JAVrt PPuddU TeUMP fPSmV jlFnm ltqPu HxbHA ByZRU exQrUR iSOHJ RPQQE VQuuH zeoyDL uEPEPWSY YPVWSu kPVWSu PUnjLrf boVBq IUXBo nZJLds KRJUJ ZBAaP AWZVt UhMgSI pDFvl JjuFtY cnAXoeO tOEWU BJXTK UVXFHT OhpWnc eTSyLB POoryK DgeLe sBQDz cPcAR HMkjLl uPuSW EEwPr UEHEu zalCi oNAOh tgKag OCyIQ fVLpy LZgOSm rayqI KoauPU XfEFhP EPEPk AlVpu obcwb PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu cITvrz BXrvjdOBOvmaB ZPGoU ACCAm nQmug uBjAYjZ jAZjZ UQQVWO SVWtdAu nmTvI vBfciR yGXmO QcrBlPZ tEChb cmWkBJCP luIlpdN UZSLwf CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp noMUVu BigxZ hAZaE fxQvD XADUx IkZXFD raocw BlMXcf LlMzE MEEEPu BnBSausJ JMhDI hKKrk GtyOq nSeNlZ mxhZR VpjDUT SOGYu PPPPPt PPPPP nzvSw HLMMQP zYiebZ PTUCAq QUuni YYtVWh EWWPb uCYYt uVWTb WWWWWS YtVWj PPPPPPPPU VSYYt sGTHCCl yTxDcF EAEfEEj EPQEPEj VNMmrbyCt pHEEuJTabY jbdhi MWHjw AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP EbRvU fiFXbG plzpU RsPJkpN wnSno NgONtJ jCZky EwOUQQfE fEEPj wCsgH WElMe VeSsN UAASU fkmxqJP FBUQH EGWVj MbmpiUD OWJwUj SRNUF MSVWu MQWPVk dIeQA OyVOwB MEEEPu KbuMn fRPcMO IJuvMvQ PPPPPWSu QQQPu VWuSu PPVWPu UWVSM oHDOB Dfmro lbnlD WxZiv jobvY qHQqt neUUS WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu LkfTh KtRSkp EqinD scHcs bukSklV MUzgb UamRC QPLYYMt njbVZ ATypp xMgZKpBv fsopi euqNN DOpQdr APVGx eCAynJM vHOjY olYuX sPaZITU PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj OBIMt nTtnkrI xNMpk qGJgNHO kasGS inFiLGSOWs VeHOJec aWHBl fvCxs hqcDB fFbvS GLTsx AGFaBCi RWIkA WxxVL WvvVL WHtAtVL QPFhEK PAlTH loJfWRp cQhnB evrUT SQPbG cgsjYL iQLBgM uotOvG FkLlB JpooqTV SYoQZMg CeWte xGnrdC RfgNZ mrXOGd XsJNo AZwqS KVbkpFNz Pvfgn YAvpx WpdYz QYfgUVu QQQPu MEEEPu EEPVYY xMyAk sXIFUE IuEuRU JEyGBO DeCbSg oGwwv ePgvXUV rWwQP EPeuEEEEd csmuu UEcsmE PEEhg oDhTls uIOUIJ VWlCv UZHRPV lUSfE ehoIi RsuPTOUQQSV tSSvG qxTgh rcotVk vkVhO yPeEK HCSyE QapVyi hashtp wfjLCB HKbLG zRGid tTQkO QiJdtR WGLKgRc ZNsex Slupe orcyz KEnvb cXLhX WvBVt lhTfK nqAoW GFTzv yAcgUP cRERQ FXdEL JGrgYz xstIMWf dyayu sJhuUJ dhBwg EpdHw lueZaq zvEBmD eEvto azGko zZxna trgix KaExtD ZpYeDb Sftdo DZWtF ZDyyr FewKhj TOknR sBlyoq wsVog hPloy neUnv AJqTS pqDTli Gnkwc ntXuE rDdIcaW fKEnd AkGRD bQPunm siLxSw jFbzCo ssJvhUSea uOpRHf IdHNq hquyx luTIg eyXHf IHlzoM bUHgD NZLeR DCrXU kUtPW KNYWMX gTxEB pSYWJ tgbOgQJ QYZOI nBUiqI lArVmOkv LZgLFO MdlGl rgnzi ExEZX VnEoj BZhDj mmlur ytgey yVeiU xvDFn KomPfzm mESoG HaLSO gZqUq HfqMg BuAWh Dywvv ihWLQ zLmAh MTUTK cOGEs MlXna jxEPD jBOwqY KlkJC vVmHq AgvlU uIZbD MXMPM MSMYw IPDkh VTeUvu GiUeh UxCQt aUylb vxsce hYLOJ rShbX fuBPc eaUCY QojrK YDtYx lBdbHd HGqmN raOuo LDcAtSj huqxp PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI UZVvWCv uHEPu uEHPo DYPEYPhH IPsBXq GyXqIfmk ldjOt CXQPR OZDpMCd fXYqr vCwHdLcJ MuUMEIEPML UMEMd oEFKU hldKt pLgHn tKMhk EEEMEME HnEMI MEEEE ntJETE EPEPM VOtJEu YHpFRV Vahqc UQQMEM woVfwUm dLahWKBButQ NdaZhbAm lHeFk hBSJJ SJefn yKGOx UZVvWCv sXIQD nSwxV swqrl JICDt zZVCYL RDWTh zeomF tvtFp DiaJl LJbUL CNFJq ziJpo XZTzbC SMcuK ROOvt zXvka gVhDe CtooxX QzbuJ Cundu tUFdj uCycps tSccq cQaPy pxibQr dutsh XCkIw iHWpfx Arlcv IVcpx rCCcn XJFURQ pZphNfa EMMUREPMMM EEMUQ UQMEH UZVvWCv LjtBV MMEUE UZVvWCv EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU pUMkFj imSvdd NnXvHC MQMUU UZVvWC UQMjE UZVvWCoT EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd nepue ULMEH MUUEEMM UEEMMU NeSZG PiFiO hAQsmNt DyGyO JghMow JWhmr EbRsVx GfZVG FtDhd iDszK psHdh vtGzL kgdDV lDHempA VzIBbN QlnAp DloZV qTOhZ zruak YhZNj WENPp wNMzT locale VexPk iostream badbit failbit zLkpg gRTPB WrVLR wgFKH GtUJh dHiTpAIu ORihniu FUNcg enJAr jqthA Vtuhd SHPer lECKqpzH edFpk hVAzBbN qdCSM eBkrh mMCrk CpNJb KwFsax TIPon aWTiG BeLwMT UyEmp qXWzQ array length unknown error address family supported galready connected argument argument domain AEbad descriptor message connection already progress device resource directory empty rfile large function supported unreachable illegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device process supported operation supported owner protocol error state recoverable files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx pibti nJHJiT csvPEh CSfeh BnNtPRTg dGbtX papUx cdecl stdcall clrcall restrict operator vftable typeof local static guard string eCrEF default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx abhzd nKNPXRgu VkghDMLX vjBXo fHTauH IkKTc floor ldexp hypot frexp lNwHm FLXexp Esinh BziZmWf DzwZX fRpow eElVy EMonday Tuesday January EMarch April December sgpKb EnumSystemLocalesEx sLCIDToLocaleName MbKZA oPVRg NnPXR xzltANE qxSStN nonfdv bmQSPe UBQGy SsUnJ YwkLG wkjky lTnDnY DBUNC pehlbrbKdHp EHuPo YUHvb LtmYE IyTinO lCSQW abCTv gmXKu wwXNS yQYtHb ovDIf OrqOC LnCMCm jikBUx eIKygq rmUDL TFMeHto ssOmb uFkAC TmZLIS zGntH AJLDx Rtcqi vJjWF bvWkZAuM bLVHk ContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey nUFHb ZfUUU gMgtu FwXKF usage usage UojwU AKeyu tkReD XeaBXV cKqXm iPBIpg nicehash UojwU nnNfoPxRn YJenHoegHVP Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ QtmSKB tLDZwO xvRkT nslTEMlp JLXCM mNlVez XwOXK zeHTxW AzXWu opKeeMb OQeuo elUMxma UUwVCY ABCDEF oVgxR yXWQq KkcEt zPiFiO YEfdFB aNFsWG GMcEH mazYQ iKYcP xguEB YllEKCWKN KpYbr mHzPSm tsRwqP PiFiO phutWJ WhmGr glFbv ryjuR MLsQR ZHuPWr IpEPQ LLtKEP OjZVr KkcEt GeYJiE qNNlGtxAOJ VoqzT WusTyn FycEq VJiTEp ZVAIK RJzQUB KkpOH NQcfF JYwAK htWrWhm pHtBz JavnYm GegflsM IpEPQ AsPgz xeAtE KFgXug mwCof NhMan Hnowi QfEFY eXVFgU AgPEb AgOEb AgPEb DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven RiseRiseRise Geode Geode OPTERON PHENOM PHENOM EFUSION FUSION FUSION FUSION Pentium Pentium Pentium Pentium Mobile Mobile Celeron Pentium TeEIRWIN WESTMERE PENTIUM YHNECORE MOBILE EMOBILE WOLFDALE MEROM QUADCORE DPINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED nochIoj Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF ECANCELED EECONNABORTED EDESTADDRREQ EEXIST YpGpJ gEINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY EENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE sUNKNOWN ENXIO EMLINK EEREMOTEIO permission denied JlYiPXRaddress family supported temporary failure permanent failure family supported resolved protocol unknown service available socket connection already progress operation canceled connection refused connection reset destination address required Jhost unreachable interrupted system invalid argument error socket already connected message network unreachable buffer space available device enough memory machine network space device socket connected directory directory empty GFdmQ protocol error result large system process cross device permitted unknown error links async event signal unknown error malloc VDfedc malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore CreateEvent CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress kernel GetModuleHandleA CreateSymbolicLinkW CancelSynchronousIo powrprof socket Eclosesocket Missing after object member TgDMissing object member escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected SuuxK FjMru Syntax error value object array expected XrgoVL lCContent Length false SnMfV oqNdy PgUiq IYLMj ewiIc tZuBq SEbhA dlkpk MzdKR byXTP eZsks OlcBX MMOZOn swFEgjv QcnmM OgBEJ eGByR XAITGBy AANuW CrzOx pTKnp OOptuS bOsvA fafyxijfhkdanfrzz KkcEt zPiFiO DyAGyO HiTEp EPnHA JWhmGro yrlFbv ZlTKVnQe HEfwK IpEPQ MLtKE jpuACa ADoeKc CpJbRfR NPlup NhMan qXWzQ FOPBBrO KkcEt zPiFiO DyAGyO HiTEp EPnHA JWhmGro yrlFbv ZlTKVnQe HEfwK IpEPQ MLtKE jpuACa ADoeKc CpJbRfR NPlup NhMan qXWzQ FOPBBrO KkcEt zPiFiO DyAGyO HiTEp EPnHA JWhmGro yrlFbv ZlTKVnQe HEfwK IpEPQ MLtKE jpuACa ADoeKc CpJbRfR NPlup NhMan qXWzQ FOPBBrO KkcEt zPiFiO DyAGyO HiTEp EPnHA JWhmGro yrlFbv ZlTKVnQe HEfwK IpEPQ MLtKE jpuACa ADoeKc CpJbRfR NPlup NhMan qXWzQ FOPBBrO KkcEt zPiFiO DyAGyO HiTEp EPnHA JWhmGro yrlFbv ZlTKVnQe HEfwK IpEPQ MLtKE jpuACa ADoeKc CpJbRfR NPlup NhMan qXWzQ FOPBBrO KkcEt zPiFiO DyAGyO HiTEp EPnHA JWhmGro yrlFbv ZlTKVnQe HEfwK IpEPQ MLtKE jpuACa ADoeKc CpJbRfR NPlup NhMan qXWzQ JZpRT SJSNo DyAGyO cLVOC pUCUY WrmaH VnQTn ZqpEaNFU NDYnW uPHwsC veYVE hnvSKOq AyXee eERLp TEomn NamFXlg sNoSKY gYPjw HiTxRY ChVdQd CnrNf KkcEt zPiFiO XoteWT DDyAGyO HiTEp JWhmGro rxlFb HEfwK IpEPQ MLtKE jpuACa ADoeKc mXzQQ sPawIP LHvtcT UmVTkOWBT,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj VXjCq fGWHgdv OkULAi UVyeV UOqAM rHnYUdP aaqok aWupNjW sxidg jPtRI eXsmEOU KNwecx ocoEl GpUOF kHIQN gPZrb yezJU AwpVvQ enEmEIB BOKmi TIMeb sfsWg xwKklm sqqCZ KznJhf BKWna ZkUJU gXgwwS GuPiB WTmid GiSGi yEFMyTd RVdaY TxidEi cXggE bgQSlsEDwOD HzcOv ggSPl ZtulqK mWhZtX QegVn kcGSJAmKCd wciOl tLuaj suFCB xWUGW lFGrRjT WKFDq JiFaUmN RwSKe WHRSkk ibviR jDJZV oRVxu qoFaX krUUK bPqNI GBbdFN iodHa vMYLR bKlPbur vmXAk ivRfXkTO qXaNTtqsMi SbuII DljNY BBdxotv dHpeo Bxapa cXPhD EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl YNtii bxtTqZn xPkIf IGFEmNv fNPdjG zLZCl Dykue UPaKt JAyOzX qXaSn uLdEk XatwY LjTwd BaYPe OXXSE ufHWg Kisjx bSizp eNfNk sMzhv ubSiwe qmxUC vjeRtiGA HNxbl Ssynea MzaPk sqpum WtVOZAa jDOBU qmxUC aqeSVWN MzhwAD SDMHAnfi yjHnv uWKDDTjP pwseN jrRyc PQeNFJ JALBtpX LZtJf xfIcG wwQfFVB FvPtn WfAzO SWKCOB mPSfu NaqcI bMmjH NtiiX Kovaw jsmwyn LUQSVWf qmxUCO SBshJ qwXax yrfHxZ XMnZwQ SVpYPWy xXQqPpD WwHXt qmxUCO YNtii zbnII VrQhb IqZzH aVLiO GEakj nhYRu kHUrI qVUYCc AbXHR jAZWhi TZAeYU yFYTX WpzmE StnNq hnrHK rzqjKQ gctEa laevB srlVB PcaAW SfAvnn TpPDv WTtAzn QnVNaI BBfQK QgmBo QTRuT SDmFlJz oUXWE BMQEw GRriK HceYk SUTug jTQMu UiATPbj WYStNV vUMcj XxvUKgtK ELMGP EtCUs Mutdmq BivlYY LvGuZ tLndfO XcCEG YxygM CSvNNVf QDhhA URhct IeBaZM WmsHL tiyTuZLL XNSlj opgrQ hGPYi JGONH Ijyuy yOrfDE feOrt qjUhl UYueWR xeThNIF OOFBiY oGjpk USmTVJvT YwqYN ARsEJyV VJoEG azjwD zuTAw EJyltI ifGBR fMnGy mdVqv lZTqD fzZqDP DJSUVW VyOFe mMypfh qmxUCn YNtiiU qmxUC qmxUCW TcGNYh LvWmz iVGDX saCKC Bwrdgsd qmGzNtii syNYSjE qmxUCW orxmF fvpbQ FvWKS mgnMw yJZNnz OoMniE NCsCI XEqhudU frSwvu PXkoN yoOcaC SJhkTvq WpwSv XyFMWFve TSUVWL VWRPN VWRPq YwbgXd GAOJVjWL rDdSX YaZCO qmxUC gBRHq vzSVWhI NIFGkSjr qlalek BIDOg KESVWh jmFQU tGphKFY yCoLv QePhX wByfQZ FnKjSj jcfHnX qUika BaObt Xwdag pCwTQ SUVWT wwleE pgrkuph PbFfY RpVJq FvCen pOOYxsR lshRB fzNflQ VqLth ZjOge CUpLK msnUb DQDmh FKDDlc GrMlq AygqE hodgE koHwRDM JgEvV kbfJx cRUHNn acEci iZhbXob UgvDj sucHU Ettfp ygtkmy BNbdZ cMQfY YRoAT DVPRL DOZwO GhVHP WYHfH rgbgljj gHjAn ouKMQ ZXCKd qbtmL tdBEMi DwhGzo nWzQv HqXase meKriXMS kDKeTW ayQNqk NZPae ynwUA eOmjT vOrJHIu upULbE NcGkC dlRJnn NyASIRG ufpAls JkUXFyw saDvRcYKI hetay aaKciA mIVNy ZcPFng MZjhl CHzPM xqzyT PttaE dotqw ssnOi ndQSV UEUdh gHlYd pCwtWagx pxoDsL MVZfs OXRyjSw zTNfF FYoAw GZbGgGy IffSRvEw DRWCOnx NvdULh Fypth CXxzu CkPNEKX ylMra hybVl wknXw oOynVr uzhqs VLagZ MuxvF BItNv UGYCd pWcUk wtSUVW bVSIY VPjLh OAdwT IJyoo sBhxZi xePJA krTjzAg EJsfma uMYXu mtdPK cAvlBt NaJpm JbIOGiK ZrRYkH eLwby jSLxd MwxuA bmfjCNK HWgYjWxd DHxut tiiom evuAu HXdtbj xHtAu olKbi gcPOUNyY BkHtCz MUxVW IsOuD RsTrQ JyiaLj OLWdDl clbfJ dXlNX VYmyT IFNKQ Sefjb LZgGlTD AOugH rLCtr xFlNc tcKDacMV jFSMglj afweOM bFOthw NxgGSg jKmmg BaJSh nlEXP JCgUB GIwUxgXJtj tvhHI vJqkb uSUVhI xpyMK FWiZB yIqUB vQwmF BUFIk CqHmR DEXII ngtVH YNtiiQ kyZMJ IDzIS eXJCDo YsyUWG LZoUt FEwSN iRfbKt nuPcpS sXPVjt tLsdB SUVWC qmxUC wrgSO naTyLv bsxFW jegpje AnnRl MhZgr CCItG IFkFb SUVWh YNtiiQj WyfTI QSUVW HHHyr GTDTst GXGTt qmxUC uqEop qeoNqE bnUUSS FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS ATCfu KoOmrc YPvfx YvPMQsva isjat nuEuRf CJWXl sThlC YUcmsB uipIBq DQEzuZ bPjJK AuMGjs MQIKm IdTOfnbnu EalfML lsHwK PDMhR LFmWe MmdVaMHO dSgKm oiVlw zWJkB QVWFq UciyY LsgjN jWaRQ YmnhI EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE qmxUbb wmMkL igFUjh xYYEe MdgtS MEEEEE MEEEEMe qmxbtb TSVWu EPMMtM YNtii wLsOUD qmxUb uKVXiax MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe gSPOXoPrUjh EPMEEEE MTVMMHVE MEEEEE qmxUlb gXtQk oksOS thKVM IAvge DSGsN nPAWcEig iIwVU yRaSF DkbwLq MbPsPO QdUgh mJMWD mvaMWO MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP Wrund ahensx sQEkd SVWeMEEMM RMEEM jgVcp tGREn XXxqg hXJog FNPTN IAEiV TyWYT FPqqpc mFnab WOMGR uKKnjqua EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd qmxbdM MEEMMU EMMUUE EMMUU UREPM Ntiiw ebDoY kSfUA Gizki MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU vzUjh MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU qmxUpb zRRoe EEMME MMUUEEM SVWeQ EuWuS jDOUv lvYbV xhfxRWg hCApti mlRZjH kCHRs WnaJoq PkdaN TasPoJu udNEb ecOxB WftWesh CFeaf mBKiW jQdCOk druyd kumfCv cxcTexE SzUjl sAyHs HykAMq HzBHLz mDVDTKn WZiQqN IHEjz NJpbzN ePauzI QigIp RBorQ ueyKgX pwcJsK ofImvGl HQQTz iNJgsP kjaoM CWvNa UTXJIG MVISP KHRYv EzARH GmYDuX hhuGNJC UBzVLY wINCFf Qulsb jrBsu vUuwF pwrXU IkwRGy qBDeW hEinV EpERI lDZmyK zlnjs nSLZnJX ouxrW RQIGu KOvnGJ lXOdP tXDeO NFtxKM SoOWt UPcFgwz obbur TMbNg nIYto jtCtGx dfEon mbMcyv DPvNT zuTru aobnPy HfRrfV vnBOWKk inYbWo JcCxO HPzlq totWTeC bzPxb nApSCY YrtFV pTIxyu XWzNaeJp PcDQc oWCNh VKOen QChUT xTFeg VUnqv YGxgC uVreCf ooMeRZ uIzGCe hjFZD HkJCr TsfuLx YnTNi lGUxM dIednan zbNgq TiSWcU jECtI wnUaX wwiGB wWVtg pYxys HZFtD VRNotB PoFGXd CcJFLo RaZMS qVUYCVv rNwQWP XHSmMu xplvBqGhX ksxKf jwmGg BJFCn YeiTI VEXDx dsmHqe kOMAZa iFDAr vmoOv BicOzit SUVWj BABABA fhUMN HmmzM IBSSQ cOtwP WHhAQ KDulc MjHKz iuQcx XoNYnGrZ wrwnoD PQYYt qmxBiC DKtnp uYSWu cDMwl UmhZp EntelE ineIEE GenuE OXvkDjP AXmpT PeuEEEEd LtBDm QPEPh QPEPh qmxbny YguofuqV qmxbKt HpHUSW PYYug PYYug YYEPV UQQEP MKppe zDORFHM Rtgni ESQOX ScbdB iQXTwi VIEEK JhvUO pIkYC TPWrz uNjlBN VVQYn Mzhvkd fNUQSVu qmxbTc qmxbT sVWlR SQJvy huEUI HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY qmxbT qrYur UqZUVh ydjSv JlAALvI OShhmBE CuiYM csmuP qFrVW sgXJdH moJRg tPtLw PQYYPV IFvWU GbnZO LGLsR qmxZk Ujhxj LSVWT URPQQh USVWj PPPPPy MeEPj beJjeGt vLzkI TyXxz xJRdT cJGrD hBbNPq EQPjjM VPuus LBUQQVu ToQdrW oFoOr DgjJbr OfRtnG USVWN jyoVrT LwAKhg XkwzUM UQSVMWj MYuUW lBQhV MYuUW gWqxF fgylXRIT vaKeI RrIiU kDIYA ItOLt tdwPVK cryXn aKFdIK jAZjX YVoXsr UQQVWjgYjGN PQPPESPW jsXfF SMjemN zlgmUM adBcFw Fzsdr xuUQQVW QpPUu cUQQE WeioR hUnZW CmOTid oiSiB soZlB RPQQE VQuuH MiLyNFC uEPEPWSY YPVWSu kPVWSu rSlFWBt FkPCy DpqJT eiRDqRNe vkQnSj mVlwn hyASWP KvcjB cRquu jIuvbc OMyDu BrhIn DqApM MVjQPg WFfLc ciSrR CwgkcY fUVOK pTGvh wHUmhj CATDd uPuSW EEwPr UEHEu uSpkh BwBGk NziDj RzpSR rBFjD COBTI nUQVV KWwAwVLfr jDAyoUA XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu iUzALg lvYbJ JrLum LdCWTZ uBjAYjZ jAZjZ UQQVWO ifiUM SVWtdAu VjTeG wFPllS oqZYF LfjOr JOrpU YCsDR NRKvTc obNgRsH CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp wqvGVI OoXsr yUcsm DrjXL BCVDT gBDvA HeMALt MEEEPu XPBUH lrxQUd ZzVFSsy DcDvJq QGCiI SOGYu PPPPPt PPPPP HLMMQP vzLgN mGQlp YYtVWh EWWPb uCYYt uVWTb WWWWWS ebNGESq YtVWj PPPPPPPPU VSYYt EZook JvWnZ ijRRm yDBsG ELSIs ZCyOKz EAEfEEj EPQEPEj EjDKj AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP CUQQfE fEEPj XPBhD BwTdFZ IkGMcK YIWkTz zQJXZ wDLFw IhCVg HYTKUQH EGWVj mxMwV RbJPG rauZR RkppG izIeF xxTLV lWiio MSVWu MQWPVk ziSLzK WkhPP MEEEPu vGrJV Ocveo Hlpir GdMpY PPPPPWSu QQQPu VWuSu PPVWPu vUWVSM Yqauzn DzIUh aBpDj KOyavFwS VFJVTFJB RFPsoyJ ziSLzK kNxtcrf YIZeS xEtdS pImLV QrVwS WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu fvgZK cLQRrcF qljcW ZNwUm RBzpa kwIyp KTlnP QPLYYMt TBqbMJ frUWu lGJsv emxpf XtDfIf GCLSpqHU srBBFNpO GppjL sApZav xyQbi Mzhvz qmxUb qwUgFf LvOnZ oTdgsl JYoqGS PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj nnwQn tBhGI sQaGo iSQGbc PGPBR uvejUhZ JMTTwC jpzGr sQnNf iKpRso SPeXJ TCFQhO lCtpONH VcZcP uddPF TQEjwY OuPee WxxVL pkbBa WvvVL WHtAtVL nuXXn JMSMz mWtyUU yAdrI xAzYdL NVNON MpMGz ctBYj qiwxs uZWqGn zYfQK YrSQF LoTjM LgQwwi qLGEG reUVu QQQPu eHYbp MEEEPu EEPVYY tqKKF IreJw mOILYB FdnxnE ucIrHd SLXwpo nxhzw gCUZz rqjuofl PjuKUD EPeuEEEEd csmuu UEcsmE PEEhg YTamt qXFYxN ZTcOrv VWlCv nUSfE UQQSV zsyDp yJDFE uLPRq mLjyZpEc TUnMXe kYrpNM GwwQa JhajLxsd RjZja bOdJz tfxhg bLNEt XVggSHWGW hPzVTnv jetJT WKTUU bucesV mumsi zIgBux cuYLH WAemv vnKdzB XobBY IhnKQ KClWr MltSRS xHGPX McaFy OPGafH scRAGB dPbdk KldEA lQkYGGsbtvj kVVXS aGewK lcuoipT FXSLNJ LbxiR KKILG xTwgL BxbgDtE eErKBW ldyzz FWFDu GJSQX wCSAe IxZGq ISCFf mOXWR zhvmB rZAAkx ECMGv apDQuSnjc YHlOSPE OHLOr BIbkqHQ zPXNnzX YcgXH Yzwlu apbfT Wntwd pPWYs iShZsQf QzeDH tALajkS wAhbPgq IjFElq jUKNH xeeOy FVcelYPJ QdHlf NAxUT AKybL prjScCf iFkAj XnwOIN rCExG DuwFu xDUstGr bqPtQvxzmx rNhWNN DHUNcM dSZTP ilzDZ kFPtKKO dEpwrg loskk DpufU MQjhTH uWYdPw psICerCZ KwhrNgM UzuOe xUpfNi Rgwss NMqsE KfwQr fyfCZ KMShTlG MXIQU ktrDR LjxEPD XoZLR SNcXN yDloh rLuYswb MXMPu NyMSM SXyBre nUXrB lseGPuK fmTfg wdVQiFS LvTrb nYUSR syUbc qXSuRPbQ mkVdO dMRua NPTwP PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI XJsbCRF uHEPu uEHPo DYPEYPhH SFLXo Hfsks hSwPue zGUjh MuUMEIEPML UMEMd Urkfl okmec EEEMEME HnEMI MEEEE ntJETE EPEPM sSlmw YMLmWgU FsfaF UQQMEM KYbRBS caSQD TyouD xXiwJOs bCYQf GLsuzG vMNnFT FoPkuK URceo keVtD yWCOS FUjSnfg GwhNf kbRxiY WbxOY pCwTI RdNuR cDhtj bYKHPlG lExCB jpUwC MPNmNb ehsvBjl NikBG cCoLL mDthn nuToIP chrHa YgxcQ IAFHuam lkgVgJM jdakvmau OwXQl vCfJWJ EMMUREPMMM EEMUQ JyRzb DnXtf HAAxH UQMEH wJlZU MMEUE Pahxz JHLaB KvbEyIT TdZwch EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU qmxUb dbZwG oFIdO mUUfQ QfYPup MQMUU qmxZZklm NtiiqL BtrhNK lUQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd sfMzhUQME Eovkd ULMEH MUUEEMM UEEMMU ITigv UWIwZl jmlql jCziiup RNmAB fTtAc pCwHC SoWLY NFVmF CoFCs ZLGBKe lYFgF mBKBx afBNjn sGYmbq locale iostream badbit failbit iDuQp vAxjg oYNeA QMkvs pzkMG rfezL bKaez wyqYxE muBgY Ywxnz BGaWw fBwjn NsSYbg mRAlP FujDd zHbxI array length unknown error address family supported WPGalready connected argument argument domain descriptor message Tegconnection already progress ddevice resource directory empty large FrXfunction supported unreachable fillegal sequence inappropriate control operation cfCQB jeginvalid error directory jegnetwork reset network unreachable buffer space child process message available message space device Rzdno process supported Looperation supported cowner protocol error state recoverable files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer vCFYE InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx jegMSxG UJvIt DDFve Siyuw yBYiFrRu QNrjnU msEcU zXynE ujegx DjegZ yxACkA EIBSEd mMKUN QWhMS cdecl stdcall clrcall zrestrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx cEIfARSs ZjZmk vNcWSh Dfdid vEveS KtIYNi EmInj Hasin floor ldexp hypot Hfrexp FLhNVW NPiPX MLkNt Monday Tuesday bsHMay January March April zDecember fVHMM LCIDToLocaleName MjegF zyZvM mDDvqe bNrLQ VrMXOA NTqpF EwieB sxaJhyB oCvvO khJnD FCvDd LHWyS LjegC LtmYE lDYpeq PfcuuK QJkYhGIf SoPXNA UMuNh IXxKW nctRJnj RYdYf gVMPAY lUxMw wGddE ouhEeS OCvcDF ETtbfi OVCCF UBIOr IjMFV sooAJY JhpwE oHwHg uUYkk zGntH qMwJRA IcaXYaI EocFg SNFmOJ ContextStackSize ContextPriority SchedulingProtocol osqrt ZfUUU KVNKx alurj XtkkX MwkXS IsMgg dFmuH usage usage CNiiyA ywKaa nicehash wmdCm RcQapE pTAYGdSP lyaMD KDDTc LWNNn Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ QxxAtb TpQop xjRHL JLXCM mNlVez pcPPE rmyLvIVT QbvPa gncgN XWcfpr mXGGW VvhNY gTaRu EWnJX ligJx IvcZO WejVEzJ LhGiqwv vKDXfRs QjjJJ aVRDP ABCDEF dRjQJrf sLhLF bhhgJs iyuQp HHhAQX KDDTc NISByh joYpURh Nnmbx yUiDU rRlZpl SjkLa itqfO WzUFq edaNcr QTFoZ UWgQl KDDTc gqMLB JbjKB xRduDFK BaZMv omYAxBw uPItcOi Xvjeg DNvyr nUURh oVHXO hAQQa FyahD xKDDH qcOfOx enUURh vAIeU otvdO dfvnW jegfG FINjN IjGKva ShAQQaR sXUkY wkCyh oRRvO GhMxs lWPnBoQ TgVvaAW HXejm mQMsK jYdHI ThYFR OpWhjP MSYxq ktqAo SVxaX pEemu jegua DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso jegAuthenticAMD jegCyrixInstead NexGenDriven RiseRiseRise Geode Geode HOPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION Pentium Pentium Pentium Pentium Mobile Mobile Celeron rHPentium EqIRWIN WESTMERE PENTIUM jCORE MOBILE MOBILE WOLFDALE MEROM QUADCORE PINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED Unknown system error Unknown system error HEACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF HECANCELED ECONNABORTED EDESTADDRREQ EEXIST pGEINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM HENOPROTOOPT fHENOSYS ENOTCONN HENOTEMPTY ENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK EREMOTEIO permission denied address family supported temporary failure permanent failure family supported Iresolved protocol unknown service available socket connection already progress operation canceled connection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected Ymessage Vgnetwork unreachable buffer space available device enough memory machine network space device socket connected directory directory empty FXWCf QWAGA protocol error Szresult large system process cross device permitted unknown error links cSasync event signal unknown YbeilV error malloc ljDuv malloc malloc malloc malloc EQueueUserWorkItem malloc CreateEvent ReleaseSemaphore jDCreateEvent CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress DdYQA kernel GetModuleHandleA YbeilV CreateSymbolicLinkW CancelSynchronousIo powrprof socket closesocket Missing after object member Missing object member hOYBad escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected MWLPk Syntax error value object array expected Content Length Hfalse lOGmYS gXCnT CtyAE DzAglAU GJpxpx Einfx Dmbvu IlVos xtzKwEMzA UUeqb HjrSY ViHHrR bcryl DZMjg IGBaf sKOtr uvhwye teZsut VytMOQ eallf TUhHf SYZPw HNrebI pobnM iYNdw LgQAtH YbwNFT bAZPV BqrZzV RJjMuQ WZqPy miUIK fafyxijfhkdanfrzz HHhAQX KDDTc iyuQp nUURh xZRdu jTSbF oPXNA BaZMv Qpgif TgVvaAW smVmF bXHze Nzmmj StcOi ScAFz bNezs wGddE YVqZj pFbmt wyYOxxw GYpmj YYxnz szYbgL iaTGS SVxaX wiGBN qbebFN HHhAQX KDDTc iyuQp nUURh xZRdu jTSbF oPXNA BaZMv Qpgif TgVvaAW smVmF bXHze Nzmmj StcOi ScAFz bNezs wGddE YVqZj pFbmt wyYOxxw GYpmj YYxnz szYbgL iaTGS SVxaX wiGBN qbebFN HHhAQX KDDTc iyuQp nUURh xZRdu jTSbF oPXNA BaZMv Qpgif TgVvaAW smVmF bXHze Nzmmj StcOi ScAFz bNezs wGddE YVqZj pFbmt wyYOxxw GYpmj YYxnz szYbgL iaTGS SVxaX wiGBN qbebFN HHhAQX KDDTc iyuQp nUURh xZRdu jTSbF oPXNA BaZMv Qpgif TgVvaAW smVmF bXHze Nzmmj StcOi ScAFz bNezs wGddE YVqZj pFbmt wyYOxxw GYpmj YYxnz szYbgL iaTGS SVxaX wiGBN qbebFN HHhAQX KDDTc iyuQp nUURh xZRdu jTSbF oPXNA BaZMv Qpgif TgVvaAW smVmF bXHze Nzmmj StcOi ScAFz bNezs wGddE YVqZj pFbmt wyYOxxw GYpmj YYxnz szYbgL iaTGS SVxaX wiGBN qbebFN HHhAQX KDDTc iyuQp nUURh xZRdu jTSbF oPXNA BaZMv Qpgif TgVvaAW smVmF bXHze Nzmmj StcOi ScAFz bNezs wGddE YVqZj pFbmt wyYOxxw GYpmj YYxnz szYbgL iaTGS SVxaX wiGBN lyaMH DFnve pTFpkSK YjCoz iyuQp MLyxY EukfuY ouHKN wkdcQ RYYhB QRTUd xOuWgqwB yNULPq zmmjyx OStci oYsdxx KOCRS BnEsz oxRSu AoOjgs KUgoX uotjg tLUzpM akvtUk iyuQp xZRdu xoPNA bIQRks BaZMv Qpgif TgVvaAW smVmF bXHze Nzmmj StcOi ScAFz bNezs wGddE YVqZj pFbmt wyYOxxw NDdlJ JCXYTeNW zlMQOB,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj kISIn FuIIaEN rrYGEd aioMo DriyM vrYhF bWumP ARBUbk TIWOb TOPnl DZSmx XMsnG RzmER LINnD HSBVZYm CYfBRC DaYbr akzic VeLoY GOjMo NdqFC qbERx QlTFL SYTDt GsSvw kzKcK lEsPm FnoecdIiqh gnhzH hkdLA vqTuAh HglKO YAXYl HXGGWw quXMH YZLIp CMceD CfGca FRhIp uQUtY vWqRI DtYEO YdEnT TKSYFa ugGRC MISivN ycXiP oYJqw oVImcz XQLeF QmukE hQOXRPT fNYko MqWAA FlvOt nGtct RTAYeWw WPVSu DIJJv BAqjJ ZhOMh AVrOJ MFNKC waxAK NKXwifX tQQtA InuLm cDbOm nskrrv TpJIp Biicv XvIAt kbtbo nNqEQ ZZnaNa eLvsy HNIqDl yncyN xasVi EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl nuOiA BHNqm cktvz WGyjGZ tNrYtU OESpF zUJgOgPs DeeEP dhCxyy iNVJI PYlbZ lvzuP RMEsV EFOKB DHbQv pIwhn nuOWy XBVUEbh ZayEZK MroWk mSjwTXdI hbxAmi cShrB pbSbDG PwLyP BzSmZPbXS BYxxC jZsJRv MaRmzG zMjtAfNc gpcvQ gpQkH Iuckc flDLKx waLsmJ GhXVnj clQIq PybxN ArfFrBo KQhkK vruPcYA UQSVWf kbCtROD niCFc UVabj vsyTJ QsUrj TeknS SVpYPWy xXQqPpD WwHXt YmBsNSP CAjuM DLTHB MJWZY oZdNZ EZLmjSZ yFJYXY lAXKZz TxPeM WEyUbTE tCrfN pPJNR aqPke HnVgIl iwrvd aTmXz kPYaa Dyejm KncKA NnEwcA mnCYvxFv fWJMb JcUxyk VJpWmo Hkgcno HEygpb ZtwXGMpV NvnwG jvYlW zTXeN WSKlsB RTnsrB KHQlexG HZizO Mztsx FbMGmH qeElDi wAFTEu yOJWs BIOKk RabIQuV XsuiE mlRjN Carmx DYBviwY BcknY vEJYOD OGWkxHD sLzeco mwmdG mZUuv TUApj yrdsQd AhfrYV Vbvqj wTUodt xVxFQ AklVO ddAYs DTKezl nmxyQ QdfqY auFda nqUOs jkcTdb SVEOE ckvPM qIlRn WFAYimTX OnvveizJL oUXZf ldNtbe NLHPIh OsCGc zWcNI PELdl rSUVW nuOUjh CELnjF OAHmVGS myPmGV hInoJP upWSh uMllO vTvUm tZroo WMseM HRMRf bpHpkH hKCMOrCW gpeDt fJqvS ERdmo taYBi oYWnb TcOyT mZJAqShD WJvbe bkVXn UwdKX eTGdP WutYQx BFDBWB arwRk TSUVWL VWRPN VWRPq VGSyt SVWhI DNsaVGS ghwFm OQxYI CoYiU dvyEP LjApcQP zzZGvVy SUVWT fFZTn VwueYFa SFFSyr Wecbx fdMbY Nmoef pzIxRk trZPo mOTgS EkdwQ kmFEIj fBJKB LUuqPj mZlpE tEdifXh wEVRgtiv jDTLbaE doiCc neuGB BkeZy IWswu ZEXxN frryn qmGkw xkcUMM bXKbG TSiyT MwdylNcNZ qEJxd eQLVnI anJBRR IHxKW StyfO cmDlO rbakM sAaVyPPv mBdSY BYECWS UGcuZ cEeAUd YeHpkJ xDRpW sUNCq GRPog gzczO VaNNNcdj RSIXO KHbfZ rcjNB HlthzW DSrUI pXfhQ sTerp aJIBx pzRlVJ aRyLp qdElK NHrBH npYGS wkPBft XJbmPEu fecyCe IDHmb pbNRv ivOxKPPF BRhdA qhtCl bgqUpS JIriz SVDoTD mVLeff fYIYN rYCRi FgbOIXK vKWQJ xUGDx HFYQC Ldfbe gdYeKU LLGsb CmDtvM BIujz TyltM hWPvI VXSVr TwXkm osWgR pYxEEw LlytBDD dkePh ghnYz DSUVW jDTLcdq TSeZo sgUNQ gIscB fSzzlC NZwVI VPjLh Smryrx ZzPyr SSrwlS arNxu naTUb SKyhG ScBjpp TMWbF jYkPU rOsZwJ UJjPB RyLDdZCW hAbjoQ wucFT MLYFz qOrrF bNNzo FYRJG AhrALiEk AaOaeNuzw cOCGI BkRAJ uLNTV JREZA HUfFk dlWUKf UlWtjIs EDIVh bKeObf bZLXZht cZINc qmDTA PjYsw ZRmEB yWRBsJq XlZBfmr HpqDa OsVPgC IcmFaQI MDwmlTn pahBd WfstgjY PCvtM UxJHK OsVPgC IcmFaQI MDwmlTn pahBd WfstgjY PCvtM YXvAPRf OtJAa swaWI urVJPS tvhHI buCWo uSUVhI mQRdXrJ rxdCt tkBKt NUWaW wslQFT uOSvRf OSqevb BtDJZ ByHEob mZiJrG MXTTA GeDeqA izqCCEM rIFKAs WwNDtB sXPVjt tLsdB mRvPSm SUVWC yUCKzB yjgza FSDFy NXfHVGq iEDSY fKggy SUVWh QSUVW sWQUd IYCDuKoBty hNKHi GXGTt vjqkr Qrtjuz FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS swxfe meRMz RTmQE FfeRorV vdykVZ bpAby Kclbwmj EKhVriY wPMAn mRyeOn FfOMI LahtSIyd wNYBk Ipebz IBSWwC dXIDB dSkznd IFjAs pKHACoE mnaiPD sftKrj EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE xYYEe RVrWd WAJkLt rBBpV TpQJUjh MEEEEE MEEEEMe TSVWu EPMMtM yUjhZ GFjUi STpkE cqFPU HOCKg Dbcte gvbzc MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE MEEEEE hBwVf yhcWH IMuFf dlhEyf lfhTY MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP ehKvV VFwZilZE hemlqqA SVWeMEEMM RMEEM ZjnhJ ULsiq CHhYV GmsjRe fEcau ZsDLP EdJag FFdKfrn pqENJX KPjxm bEPeR JqjpD jbzEr EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM IaPAG moMNu myZowN MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ glLLZp KjosYl qWbORC QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS ODgqK uHhKty eyZMP wjCNmN JpnZw tWFvU itsmA YPDtZ yRlTck wcoEC MuUmqFg TORosk oFASi SLBfP jxDKSz NXgNI GyhTg ikTLR QjEZn HrkwqW NdLqhQ tVxHxl FpNSRu qHMHJ mPcZs HbODTPb LbbzA rAAvKK aoraHwj BFmFB OsioTk cjCxUD wXwUs crJfw aIAzj QPrgfrk CjfvN dyhmH hqvEtD eoSWlQR xRCsL DdTNKUs KbOnyuY ywsSi fLBFN BFzOfwf CTiKn EDXBeb uyChq YrcSA ttGJEK RPuSj aATOs OnmXj bDMtb TiIJm WWeaMR HIvjl Ylufl yxToidR AchXp SKWRX ytOXWh HoNXk KHCZZG NuhGK UjYLKvv sahHM lrBxZ RFAXrCt XCQXw SpnPs oIjupVXOd LLycPxW DZzEAu EjOAi MyrET eRbGA bkCYq haiWe nKAaf cOnaBr fUnYIx VpZaH dmPFry tALpJTY TwWeUDN FVjKR BSKiz pTqDP TELUqFu kziCkb tsvAx yMMVKE FsoTM SuKSYaQ bMkih OWKKk IyKHp MUIrLm CALJNb rOmCcjg eUuhi zvSHqu ejfnP xyRxs TixcnhW MdNgY cLngZ USHBF DNdZECh SXNvC faCow CHkca xNkqb pqybHB xuLjc xHFtGlULz SUVWj BABABA TStnSLIX dhKtYN BXsCT pGTVS JSbafxMZ DtsYh SWXgGY wnPKV dRZFM DTXKy CDrYCO Oydtq Vrard NWjiZ LRYly QOuIw dKXOEm jgAtyf PQYYt hujPd ohZBVXqERG uYSWu EntelE ineIEE GenuE VEXqti aTPZAJ PeuEEEEd gbkxM QPEPh QPEPh wUjhJ HuHRjkZI QwVWj PYYug PYYug YYEPV wUQQEP lhyXz NwLfmq ljMmLd kefZnE RJUhyQ XVPUV VVQYn XGGVD bQHUQSVu aYycI ZvIEau HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY osVfE cXTUdhj HRowFKs SLMoj CuiYM csmuP fhaIZr PWFvZ rpYUu tPtLw PQYYPV zDJTS Ujhxj URPQQh USVWj PPPPPy MeEPj GFLXm ShpzX XuNHC pUklv LUqrVH vomqr TiZdV DbpUs PJvQF EQPjjM VPuus UQQVu mArnsb rwsWo deQYTU LFUHH wXDCV rUbCkF pUZRB USVWN fZeOO RBGUVu UQSVMWj hZXLe QLiJc SbLas ItOLt BFoDS HVhTj jAZjX hxacy UQQVWjgYjGN PQPPESPW jsXfF rhaDIAN eyJex TnnSY HlTSFWB UQQVW fqTpE PYscdJ bJgpH qsAlD SHcrgQ zbyarc XqEjGxJ PHHYb RPQQE VQuuH uEPEPWSY YPVWSu kPVWSu OlkIIn uXLhw ToYHVL EHxSue cMNWR WGECua nctHZ KTPzi Xnkjy OyPTSU VMpNbyc IInMkFNcyh zLhRk olWePI pYGyK pthuVl lUfAFA HMaOYy Xyqzxt NnrFAJL BDuoF KmtLO KxMoE uPuSW EEwPr UEHEu kfvGVlm pNxIT EKVUE sZfJn XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu DNxsHA ONRSj ZkTaYZ uBjAYjZ jAZjZ UQQVWO SVWtdAu pjEzUwNps uefZT XjWmoj UYGjGt IVqeux LDcAEhI XWyQB cBAawX CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp aVQwC IvXEvPy WYswlh xZkhos PbVjAD ctSvP cpQRiHj yjuJUhZ Rfscb doJpq sKoKRS MEEEPu ppeWX jIrVO wBKKjH pNlrx SOGYu PPPPPt PPPPP OHPUkE HLMMQP IXPiPNF UVtaP Dawms qYHCn YYtVWh EWWPb uCYYt uVWTb WWWWWS wTJET YtVWj PPPPPPPPU VSYYt jUwMX VCLwLcsM ggNzzM ZLQIh EAEfEEj EPQEPEj GMUVu DzeTE AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS lcvsUe PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP iDnFi sOjkM UQQfE fEEPj ouYGy BMpVVB zCRnf EGWVj uobAQ TBXVn atRqFR VsLojUH zXDlC vNSOQ MSVWu MQWPVk ZIuvc RJnQY MEEEPu PPPPPWSu QQQPu VWuSu PPVWPu UWVSM exMvf NNwit ctYVW Vmcbh WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu ktSKg pGYJU vOTcNoil wHBqu DtFuSS QzFMP dVGYn VrECx AWYxq QPLYYMt BrhItz pHIYVQ ZLNoq RXFhl QGumL xxUhWmH mRdKh czEyc zYsES LBdoU xpPLJ QWMIASUM nCEIJ PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj FmcWT bgNZljh JnOqL nhDSa UiXBY EPftWe PtDUG QWRdi WxxVL vQmjd MPrcm WvvVL WHtAtVL BhGrJ ufxPwwQ LJuJq pXmhK umRqPoT VGSAJ hrnUU atbJVY yeZFh seQeOU TlGKw bQWod JIEDQjUP laYyMRzmid oMDTa YKRBRO WKdSbU QQQPu MEEEPu EEPVYY uIysU AhiFZ kSXHp CldTx JUWVU EPeuEEEEd csmuu UEcsmE PEEhg zxLKd VWlCv kUSfE WytooP JUQQSV NohIYuT OOjaO xNaqka LVkgc EckRe egJSMs HUgGZ Jetyw NkOXP mFxQd KzvOT XOjKh nLRqukqU cKYvdL bdDTn HHAfq BIipw atsuQHoQ lRiaiZdE uDWbMJ JjPjM wjWION tVUWW eZmrDd LGjeYcw Imnlnt uEqDUU rYhdj NNKRlD dzWKc wMqTB emfcGQBCB cOSEH qxvdt xojkI ziiOa HKxGI UKcUD CxzdL KvnYK ViqnK HsDAfo zHrxthzt ygOUh XbtUVZc erxpq DlHkw fREXBp UIQBF Xtjcnff FfhmN PsxSt Gewnl TKVDkKBI TXORk NArIP ASLQY GQddLmm KXQpP VcTRe AFTBD puDYb utMEj xDHbUw ZFcmmoO udDpsRceG vTiaJDha zQnNit TOziv rAZqtV hUVoV AzYPR hitphf ghUsHWO olpSI RorOJ puOPTq MMqtt MjOBp mwtLS nZcUW pEoZt BZRtEW cWnBn XlqMo pTvlX xNxehWM cRXiZ eaeBVh jxEPD YEYxHm FMQgF kUiKH TzNrFM GxkpL UeTIu XbRMXMP kNUzWrlcJ kNaTP LBAsr HfRkp RHIQy XAHko gDYiT IAcXk WYhTr kDTZvu WqyTb IFbonKp orovz DeBrE VKFhM XNVNa jrpOh rtlif FKjnC qCYaJd DYAvk YdKbg PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH FKYMtx chcrcgV RZuhJQ NOvIP qhJTqjo VTHPg MuUMEIEPML UMEMd PSeydF EEEMEME HnEMI MEEEE ntJETE EPEPM GqEJu qETEr mJPBorE bcchc UQQMEM zJqEg cTVfA vYiPU IYdxq aMrors ZfeUy UydFw pPHbB YRXtZ eBRrI QDdcZY BIgUl kuIPf TwrHnR ogxiRQfe PoiuD dtUee aBfoD ORJFA OvJOTE vsLHc GrYTB PeoeJ RAYzm WyCLVmGk FvaMcj xrepE ZTfJN dOsYG sNTvC IQplPGlDjA uzoEw WNYSXJz zRBCcFrh oQxTF HGrzn ZWsYP Jmymk PxMONX jCFKyyd gOwOYu iTHBUqG EMMUREPMMM EEMUQ UQMEH HcLWM MMEUE HcLWM fNgYx EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU sniPZ aCNHjec ndYjpPl xZRJTJU pXwcI poHmni AnuZj ZiXyOdYUj MQMUU nuOUQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd ULMEH MUUEEMM UEEMMU cnIrI uTDcMh CfGpe JwKQTw EDkINW eooGk bQsOf gXhwlP CZLah iLOII kakOd TLGsx PQhgw EndSFPFA locale wiostream badbit failbit cIPhPRHO pXnxq rZHwk BtTEa JskCy gYOIh lNEdWz WRbws xGamY afPkX hGDCd ePNOK tGzZU WbpoM TIDht lJdPcKoLe sgNIdCyb HPTZg gXhwl sCyDd Iplgq FzemhCH bsTST eWELCh array length bsunknown error address family supported Galready connected argument argument domain descriptor message connection already progress sTBzlB device resource directory empty UQWfile large rfunction supported unreachable rillegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device NionC process oSWlVTJy supported operation supported lGIowner rprotocol error state recoverable bLQtoo files system files xwrong protocol FlsAlloc FlsFree SetThreadpoolTimer UcnvT InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx TtLQTXo lnrIs sUSTLQt sUSpTLQu sUSjTMLQTXo lnrIv sUSOTLQX cnIrIK TyLQz sUSOTLQX PnxblY iatqEIM DMwbWF TULQX sTSTLvQX sTSTLnQX sTSTn sTSTtLvQX sTSTu sTSTe sTSTv sTSTLRQX sTSTLQX sTSTt sTSTL sUSTqLQe TqLQh TqLQXf cnzrIn TqLQX cnrIs sUSWTLQt sUSTqLQu sUSTLQ sUSkT cnzrI lnrIt sUSTLQgXo sUSTLQX sUSTLQXo IsODk sSTLQX cnTrrIF TULQXf TLQXX Hinej cnTrI sUSTLQX sUSTLQX CsSTLQX sUSWTLQe cnrIa sUSTLQX sUSTULQe sUSWTLQe TULQX msUSOTLQX cnrwIa sUSTyLQ TMLQX cnrwIF sUSTxLQXX cnrIe TLQXX sUSdTxLQXX cnurIe sUSTLQXX sUSTLQe sUSTLQXX cnrIe TCLQe sUSTLQXX TxLQf sUSTLQf sUSTLQg ToLQX TxLQh sUSdTLQX ToLQX rPXWM sUSTLQ cnbrI sUSTLQX IMDIx eiENkSScsm mnrIH ZIODxyV bsSTLQYX LNqCGC AKaqb QExPhc cdecl stdcall clrcall restrict operator bsHST vftable qLQEQ typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable HvOkNWE placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor CzTWH Class Array Complete Object Locator xpxxxx xNDvV UGBsP TJIdUw Spahu jaSpB TXSXU stPCWF RtWMTaf STlxX YoVGSZ hmtyaa TSTasin TSTsin sceil floor ldexp hypot TSTfrexp xUzFJ RqtFBzxc LQsinh xnrpIw HrnWj OJZNZTCV PcYhF GpbGh kOBnA PUWKG QMonday Tuesday LQWIZs pTMay January LQMarch April kWyKU BIDecember knlrI WsTSTL zGncW qCGCK mnrIH YoHnj mnrIH ODxyV mnrIw sSpTL bsSTSLQQX WLCIDToLocaleName Kebqn LQNAN ILSTLQ bsTSnTLQX bsTSnT bsTSTLQX sSTxL SdTLQX sSqTL sSqTL sSqTL KWYToVS dIDxy TAIMDxNy VMFTs Dkxyu CsSpTL sSTML MsWkGd YUHnj STLQX lnrIO KWYLV COarUI IeCbZp STLQZX bsKwSLQ ZsRRJ hYJbLVGS mDrvx VekXME VEiTP fWvuSu cYZiPMO GIOAf YWpdyN WpORJ sqqbDk CMdtn mITtQ LtmYE bsTSTLQX UGmcg orGRz kmhJia kdzfm jMwzLF vQOGs sPleW bfCPI wcEsF sCCjz kdhhLZ RXLvr SKIUUplu etEVq IvGJr iCNcj TeQLZ fodlr VoEzZXc NiUompo OmzvZ Fholj RBdZa WJYfa LdgOCU zGntH LSTLQX bsTSTLQX pWEbCVL RNJHkJ vEAHnt IContextStackSize ContextPriority SchedulingProtocol hynka ZfUUU bsTSTLQX UScDY XWvctieaQ HYkah qXbqrJ atWLP usage usage pRphZW Uuuja ycUzVu wmogJc KxOqh qalrG nicehash TSTXLQ rvJZY LhcuIP Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ sgtEQD PKBwvAU PlvGF bhXBa JLXCM mNlVez BamnV upWWE NMWTSz YPiby PJzrN eXFtfC mCDsAI zuhSD qMqNcVqXbBt Rydmi ABCDEF bsTST urcav DJkktlq LexKS bsTSTLQX vjwFM OydUE GopDJUKJ CxsFft NWYFH yIvyYwn nQsmw FntDGX ddPSYKk ENRDOT IuEXgW AitlcK kNrXe mzyfqW EXFwDR KCCIB bsTjLQ bsTST bsTSTLQX bsTSTLQ RBzPH NwUnK hqpHUP YxIllDA kpbHho ITbEUiMc BIhOD IICbT JSkQMjx mWQEjZ SIUpBG nvhUmOn zsZIJE YToVGS QrvJZ UpRZH BtEaZ uJsky OtRBzOlc ZSTYX bsTSTLQbX bsZSTSLQbX qSTUbX IemGuF WZToVGS qCBOa rkxxq IuVXEK mpELW Ubpze nMVJb KtDZhM TpglkC KbKeB ZCAqg fQWmh APzCLyO bldYk xoWiH Bvgxd FIzeQ YDFRmP GDhrv kCCfC STMIX YToVGS QrvJZ wLQYFn rDAGh ZSTfX TpdAljF NOGJPn TpdAE DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven xRiseRiseRise Geode Geode STOPTERON PHENOM PHENOM LQFUSION FUSION FUSION FUSION Pentium nPentium IPentium Pentium Mobile Mobile Celeron TPentium QIRWIN rWESTMERE PENTIUM QCORE MOBILE bwLQMOBILE WOLFDALE MEROM rDUAL QUADCORE PINEVIEW CEDARVIEW ZSTXLQX Copyright Plauger licensed Dinkumware RIGHTS RESERVED pZSTLQbX bsTSTLQX bsTSTLQX LWLQbX bsTST Unknown system error Unknown system error STEACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY xkYIEAI NONAME PROTOCOL SERVICE EALREADY EBADF DSTECANCELED YLQECONNABORTED EDESTADDRREQ EEXIST GEINVAL IEMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE rENOMEM bTENOPROTOOPT TENOSYS ENOTCONN GTENOTEMPTY LQENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE WUNKNOWN isENXIO EMLINK DwtLQEREMOTEIO permission denied qLSuNj address family supported temporary failure xpermanent failure family supported resolved protocol unknown service available socket connection already progress operation canceled xconnection refused connection reset destination address required UFhost unreachable interrupted system invalid argument error socket already connected message network unreachable buffer space available device enough memory machine network space device socket connected directory directory empty pprotocol error Iresult large system oDeUH process cross device permitted unknown error links rasync wSTfs event Ipoll kWtty signal unknown error malloc malloc SQTLQX malloc malloc malloc QueueUserWorkItem malloc CreateEvent ReleaseSemaphore ODCreateEvent oCreateEvent CreateEvent TLQzX iphlpapi ntdll GetModuleHandleA GetProcAddress IGetProcAddress GetProcAddress kernel GetModuleHandleA powrprof socket GtNQclosesocket oGTLQX bsMissing after object member Missing object member QxBad escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected LQull NContent Length TSTfalse IbsTG WHZiq RNlmu eihFIi zINuUzFZ OHauQ CiBGjQ FaPMa RqDNRrJ NkfJw MOAtE NMEBDfmsN pTPuY mWyYK ngbdw zxdOF hLgNxt FONUf VcscKt hpTST aQEbe gkwOmDN QdcNW LQVlh fISLOLH fafyxijfhkdanfrzz bsTSTLQX YToVGS QrvJZ OydUE bJVGVS xsFft hqpHUP UpRZH BtEaF uJsky bCkFQOuI sWpMO IVhkt glKIT sgmICy neTIVz jYkOd cqLIp sKUVrz HPgwR ENnSgAFP FzemhCH SICZW zgNsSX HBtxk RJgJs bsTSTLQX YToVGS QrvJZ OydUE bJVGVS xsFft hqpHUP UpRZH BtEaF uJsky bCkFQOuI sWpMO IVhkt glKIT sgmICy neTIVz jYkOd cqLIp sKUVrz HPgwR ENnSgAFP FzemhCH SICZW zgNsSX HBtxk RJgJs bsTSTLQX YToVGS QrvJZ OydUE bJVGVS xsFft hqpHUP UpRZH BtEaF uJsky bCkFQOuI sWpMO IVhkt glKIT sgmICy neTIVz jYkOd cqLIp sKUVrz HPgwR ENnSgAFP FzemhCH SICZW zgNsSX HBtxk RJgJs bsTSTLQX YToVGS QrvJZ OydUE bJVGVS xsFft hqpHUP UpRZH BtEaF uJsky bCkFQOuI sWpMO IVhkt glKIT sgmICy neTIVz jYkOd cqLIp sKUVrz HPgwR ENnSgAFP FzemhCH SICZW zgNsSX HBtxk RJgJs bsTSTLQX YToVGS QrvJZ OydUE bJVGVS xsFft hqpHUP UpRZH BtEaF uJsky bCkFQOuI sWpMO IVhkt glKIT sgmICy neTIVz jYkOd cqLIp sKUVrz HPgwR ENnSgAFP FzemhCH SICZW zgNsSX HBtxk RJgJs bsTSTLQX YToVGS QrvJZ OydUE bJVGVS xsFft hqpHUP UpRZH BtEaF uJsky bCkFQOuI sWpMO IVhkt glKIT sgmICy neTIVz jYkOd cqLIp sKUVrz HPgwR ENnSgAFP FzemhCH Qurpoh bJjGu hqpHUP UpRZH BtEaF xJsky Gtdth iSXFU NbFQpfG uTDLrh qUpNd qIfLY CKnPY bsTSTLQX IiZNVUydGfwFnJ DYqaaz uOOQEjE bJVGVS ZpbeeKE uJsky VhfZm bCkFQOuI lrNVW sWpMO IVhkt glKIT sgmICy TWeUU Ifwnt cXydPzCL HgTYQ XGLIp HXGJJ LYmuI GruFJ RyTyi,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj haoLb NEvyX zdIic KcRXsPW ZBLWG MAxMq vugnOP KnOhg EvcBY gjzwSq WYkYH bWjgs lglIG yMudz OLxlL MYmxo UgweFm LDcpV UiTCIueG llmTE HKyvW WpQSS TEBKR TFQYiYCq LYNdYN jWqhFnI JCbXB VWpkY Onaeh sUmqF FsxCB yDElq fgsksT urPfW lVAXP yEZzen YatSK wyEiKO wswWD NjRFo smRDqH iPuvYzr gObyo UKYnm pKwsd iJsMKeLn hkNMI nfjle geyut BPPJRG zTJZd fxURp aTzAAT oHauvk lgcPeJ TdnHe Rdqreen uUUQqP MMhar eRKLr UnOwrSBmgvN vJhNDX cxJyRywv kfgng kviLzAl zPWsSW qoBWU Jgzlb eMYOi FAocw nEmoO XPYwdy zCNQzTx IGpPz EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl BqnDh CBsfc mbCrh gjVBt nenKH jskUsO YdHmQ FWdvXJv JwIIH qsqMq fbrDT iDkjaW nXqYj ZWqTk bJRLI FpeGH ygzeLB YdUjh XNypYt JMkpN RskBW Pvjwh yXUtt xpklz aYBaiC lygri TTfgSP bnrYda oXvux BSVWN poCNa tOLUZ wSIZQ BeLGFJe nCFtJxlT ntgtzS kdrrN kURqVG dVabUUV GzYpf mpZNkF eaHmW JWtij whkEG QmsHW AZJhV Ddtbo RWhfV OjhGCg RSLILUiAE XXaBF ULSiYgd PxrqZ GBlCs hLmfOH alZWQ IqhNv svKQij UQSVWf YJWan HkGFpcZ nuCMt zIpIk hJNgb SVpYPWy xXQqPpD WwHXt MDncT ytWUz fzsVpl LPDUbct FqNAqP fTcuc kntDsT hxMes QufoVK wzzrX VfxaS CUuEK eJlWZqHwG oFbZSbb ZCEmoo RxCWe qWCTf PiqUC iwmiF GTEVh PyhOd RpbSAA iiUzQCo lzEMdgo qJSdGKHd WJNAx LWwESZ ARyFQJjvY GGanuTf LpYEQJ cxgWr gQtBW iYPbQxD IOcBO NdoatG QirMl yHmVJ eDoRtk cqUiK mQDgI DdGKr dlCgf yWxTf TGpoN TjmyID zWOKYc KrMgC GMUQE IhzHQ rSGJr lidCp WNZqwM VpmuG nUeYc xEjUUM dijhv MdZWPLA nCWMQ rPmGy uRQMm RnsUzb rsBwQ GXZPH SaZdA kHowsJfH tATyPvI pXMPd lpsry DcrJA xNvZD enXPJLE nFRTQ MGHQi YykmDO yCbvQqUi QkanjI qJJOz aOjWVb KXypYn CNCoj iHJEu YskBW ArMTz BVzYm PNclPxsbe GeXuA MnlMC XeJDn OSZxc ZQtPBb gcfyd QFymeYs KJQom eTlEG NAYaDC gPhFwk qMYoH LxzbS iokAH YOQVF nPgpH VeTQXEw GKLHGl AmJCei TSUVWL VWRPN VWRPq zpXWVo NFBnf psihsh YskBW Nusqz xcVamx VgLqD MmZupG jXhXu SVWhI Ddqvm sqmeO IOxib ceksiH XBEHb ISVWh hMNNuKj CpSVm cWhZT nnEQk iHKhm Bunrt TpyOXjv OJEZy lSCzr yFofP pYJxWXx KaHPZ ecDMsO IAEBF SSSDe SUVWT NWZxu jGWRTr tDWurz AifkqO NXSHr rXzDbG JHGQFj swtUHL veTJUm sKKeO eaedg MfdpQ hFHtSq NNCwk ixXAPZ nqtGI EffBN adOfDVsN BCnhd XIgjy GJYruc KtVlI mkxDlmHR TvIsiq YLVMs tRMEaSDer zOoFN EkyWJS OeJxu OVQsh TLwSdNq BXsRWZ vnHdgM dYVet CgRnW FZUoc fBrmq MsMKh doTbq ElgPQ fvdET Sjdiu zyFYi yEatd JMwyz llYka vBPFKUg hvXThU FKISt VQzZw myhbr MvmfeZE qSOWC usXeq DuJjE vFmIs oQRNf DQKfs jZtFy oFgXoR krklEI iIsJp azSLw qjYPS tZFfZ vgvOm xjdbo FxsnT ktKNJ IDxtDu ZeIioY SjQVb kGstl TPWjA ZAuBxWg CrPrFe TlUzDZ LbuTO upDKrY YxGvOu azQejKx HRkYr HpaQe ZuoDR bSUVW QhHbQ gpAdI vzBJg gGvNv JVGsBW VPjLh jGYpf MZHBb SlOkG Xbrnmu uwzUvenX dEJHV wKTKthb imStJJ waGDL EsnGS BTMdW fKBmV SiBJMTJU EdJPpef EKDGZOq jhySru kPYYL ssyMS hlqXh VIZIJ hNnGp mHpcj ZIXcH fHLElU XLjvE eAngk BWIFG vHJlq cCenv EZISVo ffGdHZxn AYsELu UUyjUAZP EWbNHy RPfKg aTdPm JPwtN JrMCT PmgFc HOsEz NTrKq iqhuT qZvCl sONVs Gdjek fQclB BgsnGa acQRGsT hZXlV rtGMl optOx tvhHI CGSicl FkhHBi uSUVhI GjmLAE eaXfLuPmn mAcTGjA xXQkI pXVqfb YskBW UHUOhrib bZlHgAh fXYndu jiKpM UppPHu tWVEL BxYzO Hzqao OhdEX ymOet sXPVjt tLsdB KNqIkL SUVWC jvbXsUm LpNNWyE KGJAJ znbogZr KGMLM emEuB TnlBg rnQycL SUVWh zdENXgi jfdpn QSUVW jAKQgJ ubJGad Pnxym afyZK hEzMkAY BEDnN GXGTt rBrjv knQWd vqWeDLU FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS XrLjp giEwA vimNHnn ZsVPo yzfCS ntzhe cgqyAd ymZTm KiYZw gqcGIh xDOch SrCGC UfZyz YsYPo IlzAU oGsLUG pZQZX Kvglq VBDmb GfrdrBY mnvHM sjfvQ KuzYa IQLcBJ aQnCZy lkmZx ueUjh EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE xYYEe NBnAG iDLSx FffLV klSAhT MEEEEE MEEEEMe EeMRCvX TSVWu EPMMtM tPUjhZ OKZHL uyYNOpo MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE MEEEEE eiIQv UKnou tYHrntV SyjRL UQuRMz HMLKgf EDCnZ MEEEEE MEEEEE EEEEE oWqRI EMMUU UEEMMU SVWeMM MMUUEE MQUREP JXHmhmTnV FhOaQffp CBPjsa AvhnB Ccxped SVWeMEEMM RMEEM PfVDpN RkEsQz ndlDI aITOr uCwlSmh sdIoo GRDVie FdxTj ZTkVu EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE gFcsI EMMUU UREPM WJtGb SlcJt MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ QTodY wLPrf WTfTT JrYtac QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU SoRTZPb EEMME MMUUEEM SVWeQ EuWuS UiSyOL QRTIi mkJBM XSQUkcq nvdYfO uJWhG bjzSk PMXqN mBSjZej xLbMN LBUkVy zUarW oWUFN VGqqM YrsAh qzSyq yolex kyoHQK SSZwA FCqla pcraEald Nqfpl ZtZEC PkgBp jqkAP qzSCUh fSfEDk tRLmP xuTVR AJcAgbkY kQKXR pmSKS wayVc pxFnlj elVMM OBkFN OwtyTr nqzsH dmaYFr qPLzg tsFGBGBR nZlrTRgbU JrUbP cVAlUv PwRXM cRJLFH wCLSYK lCrFl JHLei Xdtyzyz CuYlLZGxq gHMZTrX ezLBr YLIGC lxSPtc yXzNWXKtv zPUzXY zQcGX ETTtt PCbRd bNWHdj ELnbK HxIhg RsqeZ EDCCQh AhgHm jzPgv gyAsxJY RyLNn FYaZT yEDazVO heyDd SoXIMIW wjuTDuq catBs yjeaI hNMlui bALlE ZnMoJ lGCwvY uhaxw jkfpI CgNsv qNvzTn okmHh OrqSg CvSrh gwrlHN OhoCrw KiCoj HUMNxbp baJTMw xILWeB PGscl dALhj vYxBz WFUYhs RQSNPO OseNo EbvlE FAbWG JdMON xLQGt LBWnq LClKg zQEnL LhMJz SJWipE eXYVA jMNij qIjdC PhUkli hyWwTU jbkZe pZOYf sEwPGoQw iiVfa Nhgso pwTfPt RQfDe aWDonYyPfLB mKNKBu mcPPps iTWHj MFAbWG PZxnU NbFiU LQGbE abRoI KGfGK xETqM yQZyFrh vjsXEz iTofD EQUSaut dGcgN rMcXDK jrAtJgzz rLrhI SUVWj BABABA YglVhFi zQeLu GzXQv bBUSq Cejzk dOesG tIZGbr iAzyn PQYYt uYSWu cvcKS EntelE ineIEE GenuE Pmzyk PeuEEEEd oUQVu QPEPh QPEPh bfaaD PYYug PYYug YYEPV FwvUQQEP BDTSZC ALYxR sTPpG ILUQVu qOIYw VVQYn YAHKgD UQSVu GOSIxdD HuYUV EPuuu VKBRqZ SVWUu tfVUk tLxXj USVWUj UQPXY KKYcK jAFOA oGvvx TLqCH CRNUVh ELJpR CuiYM csmuP MQGSwQ scerZ kdJMK wRNxv tPtLw PQYYPV Ujhxj URPQQh USVWj GLFkh zoAQdOg PPPPPy MeEPj ClteKi nZdTF VbMCVBnanI aPzto EQPjjM VPuus UQQVu wOGHf FmEUE exZXt IIgXP avuvQ wHobK USVWN XvbPOT TCixB zTxbw XUQSVMWj wHocF wHocF LrntW ItOLt ebTaw qoDAnO XgVrd TLwTk jAZjX YLDcmb XPlNu UQQVWjgYjGN PQPPESPW jsXfF QUSVv iXAZQ BvSbIu UQQVW SJQuO igCMP joOUSV CBSfOr maOke RPQQE VQuuH uEPEPWSY lXGJg YPVWSu kPVWSu rCmPD YxBULAES zaCVMVI yCMCj gShIRk GerDT wsPGnWz SWGhEEf krBWE rwsqV TuHjTP GLAOgKP XCnsq gsEzU uWpUKA QpaeLLFK EWUug PsRFTt rfnVb gYRYNX UayGF CmvSR uPuSW EEwPr UEHEu zVRGw gBPxU Rfony nuOBO yjlcD NvNZX XfEFhP EPEPk AlVpu KdkZgc PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu fGJwg PeJqgN ozLgZ ECnscm uBjAYjZ jAZjZ UQQVWO SVWtdAu SwKUVu HNwyj kuUQVu aykcgw cIdaY UhnfJo kVWRb MNHpUJV JudcPC CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp vKpzY RqZjuH JemkO poQXSHC trRZnL fvvet mfdWD ELUVw MEEEPu tGyYn VNYpyi attxYO WvoLY SOGYu PPPPPt PPPPP RvtkJ HLMMQP RvtOkJ NxyqU YoyeJ XgxGT xsAXAL YYtVWh EWWPb uCYYt uVWTb WWWWWS pVsab qTvYb RtPcJI VKdDe YtVWj PPPPPPPPU AWGlY VSYYt HdGyYE rhcUDbM fLPvT rgPTDb EAEfEEj EPQEPEj VKQtcV ThZSDW YgaBJ AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP jffpu xMJtf DjXcLS rIREL UQQfE fEEPj EFftx UmLii TfTcg EGWVj AEjWv wHwfJ kFCQZ XyUcQd SfhUPlvx MSVWu MQWPVk GjLAjqv necdtM MEEEPu vqrjA FkjuO PPPPPWSu QQQPu VWuSu PPVWPu JbUWVSM oVusb yfcbz tJmtF LAjGv Mvsbb AShwg Xvsayr wHobKp bFugNN pdCtn WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu uolgJ LkWlM zLnJz pWrEFb ysLuQ mMlxM ooQJO vujrj caJlUTr uCcNb QPLYYMt KFoBT oSTRC DPEBkS iivcN eKeEjT PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj jAfBP HcWtcuj NnGiS lJsvps ngwcCKyny HICNv IocFbrWmQ lFmEDy LjIqEaC fYFRwC bLwrKk sYOpn DMSsC RZqpwKvZlU WxxVL WvvVL WHtAtVL aiQMz yqZPtq kLjCPs LyLzUa hriNQ TeOPc GIZdi JYIQP KoMXxq hWpNn UpRQV tyUIXNebw LrSyG UjhMc BojsDsy DlWjQ wDbja eKUUA tEKeK QQQPu MEEEPu EEPVYY KNKMw eQOqS TvjdLAFO FYCke emvdo rKhBRUz ZHNFPdG EiYCjvk GRdXu mtOJx Qocayi NJJof ebSPT FpFrd EPeuEEEEd csmuu UEcsmE PEEhg ahZHf micUuUq VWlCv emvdo KgRlY UQQSV EdcLd aiKCp GbEDI WDfQdO qDcZUf HkKMeE PfwFNg TWxwJ jkzvOfki YnXvd nWLlACBJ FmeUY hmEuHL kXuInHUs apajsAI MyBOgow HaQaZ HuJUK ERobbCw BqRDC Nurbv GxYPbD LgCqHUgb kDzXTpiuY hPqGr Mentp PIfAD yXtlZ LCxAHyTZ pADsZ AzWAE mzBtU ZViaoT tUMBa JGmMc evGNG zUXzq IpXvbULM DPMqmNKK dMcqWWPDA uwehN emTkM aewgG gGMqGA zbrzd quGHDL nghJSmy aXzJO zVqpZ feGwP UwVoR fhygb ZkeDy bAafI vQxLV qytEj XtCMU kRlWHg ufHXc tQOHl Kcojl amVNVc xAcfB vsnDw nodHF iuUaHi WtMHm LImVJrg hdIaNG qjeDND BFsCjj gkDmW HOcuCE xGxNUd RKaOy HyWAl PoEaAiIGSD LlyhEX tkelg Nbnwv WtybFa IiTTv AtbAz hQzFXQCfH jxEPD lbfjq cuRli tXzYZ hMXMP zJtQY baovs nwdvL KBHFa VNnab GEMVbP hIMKe VPQDK piyjz JNJxf qFRmEXQ QTypu zJgZB qTiMU JYbYt eOQhe kqMAE PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH ErYpa PygDp TlVEJ UPPhaj MuUMEIEPML UMEMd XbXQP QGItM dMtLO EEEMEME HnEMI MEEEE ntJETE EPEPM pcRwm ZKKeaG dSHLjQE SUQQMEM UCzze qoEMhh jrbMI fFbHeDUH mkjDs ZhQpF Btwqk iXsnLm qXDUt COxTuaotn LStUJ JUJWL pKTWGWG zJoXy aeAeA OrvLo QQTEs XTBVU oVvQt hPQkuJ vWWQKH uCCVX bIguZhw rAUjk hPsaXc oYaysd cdIDg OGErA uIPCk IUgNQ UbCuT kHhSc qAiOr DaTSH sEtITkdm vRiccI OYHbUQ EMMUREPMMM EEMUQ UQMEH MMEUE TyOnu THVmt wXkRd EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU wCvve fBRdXhVn IVwSUC MQMUU IaNyen OYCve UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd VskRO ULMEH MUUEEMM UEEMMU aKzWV CeNSnj KBJwnO ywyxw nZpMl nAfbZ KkLIF VHyvdd ZhrVA gQznc ICOQw gYYPV NAqrV gsrWo ryotN locale uiostream badbit failbit wWYMH nztzQuEaC AJltKnw nZnqX ybyxt nzeLs uvyLWU bgnLR xODLo vFIFGhu jegpm array length FJunknown error address family supported Dalready connected argument argument domain descriptor message connection already progress DphRgmI Xdevice resource directory empty large function supported unreachable illegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device process supported operation supported cowner protocol error YjwIx jstate recoverable files system files Wwrong protocol FlsAlloc FlsFree SetThreadpoolTimer RAxLo InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx yOYlN iXYtj rJtHig DpOGIhDP VNDUtnw MPXpW KyGObJ wFAJt XZucI cdecl stdcall clrcall Arestrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor EIkSY Class Array Complete Object Locator xpxxxx DXqIfIQIi zeoXlw SlWnr Jceil floor ldexp hypot Oefrexp KAGWU uYcIHS ExmqG lvwsV EFHrg xyimi kHdvEZn oKiJv Monday Tuesday January March April iHtcN December LCIDToLocaleName FJnrY nFJrn nFJrn nFJrn CYjgBP cIHtS yQAGWb papwr QAJluJwOO Apiae TYyij IDOhR pMGiXEFnI rrqkU OgdvyCQ LtmYE EAonm czuoO rDnWAi ibNHB QIyQw DYumh iotDY UecHX aznqNvDu BhAKm MRtdF MnIWb MNSTez nArylX FcptzQ KzbLIu GXqZvmVJa MMYzxzK YoISG LCrrpOi VJhlVo SGVhd EPZrAp oMwuP Lnhgjbd EYyai gVFRgnN zGntH aGWkb YGJaV poVBy SYaKO iGddRV cContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey ZPmap MNXihx dEjLki ZfUUU ZNBdi usage usage DJzMGc NHIFVBf nicehash bYPaE Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ OQAgY sKbJD fKeCuk TUfmQL JLXCM mNlVez BGKIp gdIqa uEjUj LlIDmi wdDkL WPREVwL mpvrIqe qhbpE gJLeQ cxpaN qcFAO ABCDEF JuEjm KGZyx iiYobU cZmFn KyRQX mMfxkN unBRn BVOUv QrhWa eIFqNN uCmJjo hCelk FLSnrY TABnf JtuEj sEtUEnR FSgRuk qvsoad nWioILBw ZborQ ddqom JtuEjLi DpuIp QvkMS tEoMEk smlFD qMdgCB LZCDd EjFnB OXpdA ioMEk GWkCyGh wynrY wpnrY vpCBJ chIAN DFANKA tEnmE elMij OsTcPP GCqeO IxOlR LgOQf nZRANfU dXRzyf CZTxx lmuzJ dGcGe uslEph GMSVJNd upQzs midBr eeDSE FHnPs XofIyuV JtuEj bAcCc DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven kUvqPi aGWRiseRiseRise Geode Geode OPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION Pentium Pentium cPentium Pentium ffDnMK Mobile Mobile Celeron Pentium IRWIN WESTMERE PENTIUM ZCORE MOBILE MOBILE WOLFDALE MEROM QUADCORE PINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED endNj AzsRT FJnrY Unknown system error Unknown system error bzTEACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF EECANCELED ECONNABORTED EDESTADDRREQ EEXIST DEINVAL cEMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE CCcENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY ENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN eJENXIO EMLINK EREMOTEIO Izcpermission denied NtSYBj address family supported temporary failure aGWpermanent failure family supported resolved protocol unknown service available socket connection already progress operation canceled yeAaGWconnection refused connection reset destination address required jhhost unreachable interrupted system invalid argument error socket already connected Xmessage cnetwork unreachable buffer space available device enough memory machine network space device socket connected directory directory empty protocol error dresult large system aGWno process cross device permitted unknown error links async event cpoll signal unknown error malloc malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore CreateEvent ObCreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress cGetProcAddress GetProcAddress kernel GetModuleHandleA powrprof jnSDH socket closesocket FJMissing after object member Missing object member wDSZr dmGWBad escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected Content Length false UwlLFV DhLWTAY PYuYv XTqTT RxkEY kFDjEb yuDqw BFSHQ fcZZsj cFNDl QmGPqdlQY WIVLkG JMPrOc sWqMO OrMid wwzKU mmrHE kcgNXq xEXxy XSjgAcXU lQIUq dXXmo WFBsOv fafyxijfhkdanfrzz NXihs JtuEjLi rtUEn ioMEk CeSkj qMdgCB rpLQE Lxpmh Czyqk OtuvyE CXNVI LVAmmHWy SbEnLR thDVM gYYKVf iYgVz GMSDH OcssfgSF rarzLU jegpm yuVBM tpBSpn NXihs JtuEjLi rtUEn ioMEk CeSkj qMdgCB rpLQE Lxpmh Czyqk OtuvyE CXNVI LVAmmHWy SbEnLR thDVM gYYKVf iYgVz GMSDH OcssfgSF rarzLU jegpm yuVBM tpBSpn NXihs JtuEjLi rtUEn ioMEk CeSkj qMdgCB rpLQE Lxpmh Czyqk OtuvyE CXNVI LVAmmHWy SbEnLR thDVM gYYKVf iYgVz GMSDH OcssfgSF rarzLU jegpm yuVBM tpBSpn NXihs JtuEjLi rtUEn ioMEk CeSkj qMdgCB rpLQE Lxpmh Czyqk OtuvyE CXNVI LVAmmHWy SbEnLR thDVM gYYKVf iYgVz GMSDH OcssfgSF rarzLU jegpm yuVBM tpBSpn NXihs JtuEjLi rtUEn ioMEk CeSkj qMdgCB rpLQE Lxpmh Czyqk OtuvyE CXNVI LVAmmHWy SbEnLR thDVM gYYKVf iYgVz GMSDH OcssfgSF rarzLU jegpm yuVBM tpBSpn NXihs JtuEjLi rtUEn ioMEk CeSkj qMdgCB rpLQE Lxpmh Czyqk OtuvyE CXNVI LVAmmHWy SbEnLR thDVM gYYKVf iYgVz GMSDH OcssfgSF rarzLU jegpm WkYaGWg JtuEjLi rtUEn ioMEkt CeSkj hiNLU WlTyzVR eMvzy TNLnf DXeyz TCGWb NvMysQxaB CIGuyA vcqzM nIvbz kjjsXv oOCoT rtUEn iAdDf qMdgCB rcLFQE Lxpmh Czyqk OtuvyE CXNVI LVAmmHWy pzEhu wmgKZ QKJjM NManV iYgJu CYmVJ tyxOK UrTRh jymBXnx OAYSc yYNVHC,1\nprogram cannot rdata bcvdi vwqQa YfSgxo ExQVt XSVWe XPuVV EPEPSSWM YEPEPE SSPVSSD SSUPt DSUVWh XUSVWUj tEVUk VPVPV VPVPh DDDDDDDDDDDDDD VWuBhT WtzVS uFWWj WWShT tfSuu tMWWSuu tVSuuu SVWeP EPVhT euWSV DDDDDDDDDDDDDD runtime error TLOSS error error DOMAIN error unable initialize enough space lowio initialization enough space stdio initialization virtual function enough space onexit atexit table unable console device unexpected error unexpected multithread error enough space thread abnormal program termination enough space environment enough space arguments floating point loaded Microsoft Visual Runtime Library Runtime Error Program program unknown GetLastActivePopup GetActiveWindow MessageBoxA PrintHTML mshtml pfldr kernel tEXtSoftware Adobe Fireworks IDATxOl NHpXU tEmUi bfmkk VFZEVCV OGrNR qyWUh kjasssd bmcii vXDjZX mmmXG hTzmafi VWWRU brrrG IENDB PAPNG IDATx BfdeTj plXurcp IIOlu lWfsNH zzcpbe wakwq QRSBFX IENDB tEXtSoftware Adobe Fireworks IDATx tskju yOROTH WySXZm JDVJU pWvzI DNLIR BmoEn XXhZf vhNGq JsliT MLlQkGf LezUf TzTRI xqODIy yEZQR GNvwK IENDB tEXtSoftware Adobe Fireworks IDATxwx hzYNIG pjPtW EEbUE JRfCoO ImXOy xissG LQcXJ DQAkkh faGkk taYQv DQDqq EEEhk Nutjs QUSvm BjPUo jkUWM EGkKW EEniZ UUuhv qqOYik EEEuR muwvL tcGes OGTJh bWyEy GvhooG hiiAGG yjhht FMMMhE oTWbA xpVNx OYNMD cppofgH nGGWp QUUOv epUUaQ nTedAID LxNho kADsQ LMzoX vUUUjY mlltRJP NrPPP PccktZw hMwwc EQPZZ IDATJuu qcFCCG tbKur UXXXXVV EEEPQSS TVVnt KWXIET qIEQrb wokjj IENDB PADPNG tEXtSoftware Adobe Fireworks IDATxy cwggw tQHuT hIjEo tUbkB HDHOI vSiBn rixcHN KrZzrS kTrIr wOMaX Zomkr edWMqkr MfcrLMk gPQQIh PPhMN lelVdQiWI frRys iXcMl ZuLfE oNYQN EdVmk ykEcH QXzvIW YODMr rPPXbrx RyKmp hjVlUd hIjEo IWuWa JKxFB FssnP CJWEcU IENDB PAPNG IDATx gzzfTM tsyhq ztxois ebLqazI VRZwh hxJGq cohAa MiPqo tPCdrt QokxL gRGNH tdKlynf yCNrr IENDB PADPNG tEXtSoftware Adobe Fireworks IDATX IENDB tEXtSoftware Adobe Fireworks WIDAT IENDB PADPNG tEXtSoftware Adobe Fireworks SvUlO IENDB PADPNG tEXtSoftware Adobe Fireworks IDATx htFtd yBBkY JUUUoB JTHHqTJ pBnLD cuuuU iiznAv ZEZfN LSYLqc ihqMjUUUU tgLxf AeHQS XXiqTMj ptpbk mAMCM DaQoNm SLsuM xCPpIjd NSVRR bwiYYYo mbfwee NceeeDt SYQLK OaDcP xhYYYYK RhWqai IENDB IENDB IDATx oQXcbF dXKJi MwmUD OjsaUJ CqgBs ZuawG NTwgAC IENDB tEXtSoftware paint IENDB tEXtSoftware paint IDATHK IENDB PAPNG tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATx WqWZv aaUkh qmNMEKHcFI svzBoEh aaIdc zdZQiiW FEAmb mijkNSs IENDB tEXtSoftware Adobe Fireworks IDAThA IENDB tEXtSoftware Adobe Fireworks gIDATx diion OZOEg qrCrkwxdE IVUlo QInUz LLdXd YCQiiiiD WEDpo GfthE pEaXcLV oayCiiaRD JQxJK iYKPY WvZtc mXPGjj qvnDG dCsvF VxaJUV llzFWlCm KLBPeeIx DaXkO IENDB PADPNG tEXtSoftware Adobe Fireworks EIDAT JjBXf IENDB tEXtSoftware Adobe Fireworks hIDAT IENDB PAPNG tEXtSoftware Adobe Fireworks IDATXMO ZwUell rKtIewP IENDB IDATh vHUrpZm Jxjgol bzNwc mIUzov IENDB tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATx xgFSL txemkS IENDB tEXtSoftware Adobe Fireworks IDATx zqMpE YjSvj ILbpB wYikK bJYRtz xJApUqT VIyza gPSSS IEExF CUUBv HyaOUG mvDXx kqEEEr mEmmm quXPP taRtaT QqXhQH YwabUUUl BfSSs WEElocB mOOut szgMi RYYnIv fKGqqe VWTDX RHJFT XUUud FADKB TcuOGQ blXRYYVj Qeoxe qZDIQQ SYTqc UjjjY nKwoSV nofaL vQWWw jybOt DcuJs gXXUV phIFP UfwbOE KVZuqfx eFDrIl LYcfb VtijjbY nmsqqyB EEEci Jwjkk IDATJG Esugd FHkSP qcxLR fUBBI IENDB PADPNG tEXtSoftware Adobe Fireworks IDATx jTiCiA pgtGs KxilD TZquty IENDB yzsNviNzX LxvTsSYA mmNCW iMadz ILcNJ jzjmPli CqgyG RFksspGo eaXKc agHLh lOOEf PexBYUx DDwssz VmDRv EMAGv fGreM NBFcW kZEBY ZLYkk dUyoT ihgfO aZlvM eKbtg JAIWbflz KNznF VZOEWc ofERh rannWzhqSPB GzjIr VwZipqI WESDI ROckB bHTmj ZvKACL DxKIk JqptWM VgbUp sDyZe Wyfnm JbGwj WADTj HwEdc MFIuZ oJisnwD SacjQ QNGuGj INjAL lrMTG JcndD TzGAbGjUnc UnLOIy RsINQYoN agBjT sRIGO xBSvx eVQEI LwDct rFqIGn GVgDC uZPFt xlciM xJsUjpH EOIUX rjeLyQ xLMUt FeUZiP kNbsu KoSZr qpVILM JCmGX kzvVz EUYIJ OyBkK USWIqgXaSsWG xlOPI GkuRbC ZlhQS SiWGS yyzyr qySxG cDDuo AjZGo qXHXAg AcpMT xOXfxf rGyUk oXsuub bRapFD dQRlc AGXNr ViRKkm nCQJHDWE kGBLF WOaSc YPWItb iNoSJ xgmOE liztN njsprL OYnUF xFbct wxJRn AhXHiO KqxFHf gUzRw lkcnq unbdO hdlCJi xGXNi cyIyr WwjqM ZSyQYx fazNe vxPKNK blfBM mrjOK ogsark WHvgrL ghSXI hivMd TUojVVeZ OHHWk PSRWDZZ MwQCkAxJ gDjDX oFHVii wLAFo RWcWj aEliy jUueF dzkwT uOmAj DUbtkpp ZTMbW ThMvw xMpWL hjKaH BxeMN kTFonL cYVMs LtqvZ QlDqqhj xGiGv kihPjf nxmkHHAH xJXxCl GZqPMA rqKKo JJjcj VRZyE XUYLh VaeNXG OEOUyhX vXghx NDmQLwVb jDhsXo zzLgl xJqPw DaPzY laToi fCxQSyZ iscHlP kaBHp bqOHbe MwYqk vRBDUO wnbfZHxChZe dCWtuY LcdkjOf VFBmNtk OHwKS LWIjeY wuwXj rBTYtg YfLxC uvhCP BtYscX Sxwvt VqgunsZHE rtuXn gQgEGmv ojJxfrd iatFluRR QbEVf zBIAn EfiLm DmRPV ShARn ZMUvnIU iPMHK IjsBI epUjn PoLVQh tjoaBa UatJV qwsqsf sdbrZp kJlzG xMhGC jzBEgr WGyqky SPJUOJ mmhSbRh diOHi yetmJPS wOjBaU ctqrA JkUSi gmcASyL wXcqa KMSVuY LUhvi yOqHup OlXtcLfg OjEHXk lJLQg nNwRfDba bCixOIh XyOoG kwJXI vrHTm iEdWS CIBop hXYGJu wRUjkYWp pZDzL dshmTJ ZbvdlAI CMtJNH fGEVU jhaYex ruxoxZ UWHcbq tbwVCb mvhrt sgmSjI hAUoQE RDyBvNK fNLXf nRFZKrW psdIB mSGRZ yqdLr fgpKp jgeFZg SsUMZ ZcjZc vKLfu JPVfm jHjRB ChwZw gnbsfT MZiCX faXkG zCALk eOzTof cytpKe lvFixDVk yMMTtGi mIPHd wSBWw HMAjh BkUVk TTxea jCMmD mPutoAJE FzqoBE SOxgOJr eOJHc QcRnb QuNRp CjFVz PNyaS XkJTI qommW XzQwn glOqpN YVUGinw RHJAn GYisX UbxJYRJ EFdjnP ytcUP NdKSF TtNHl MSAYU CUCiVB IcMvM jORml zdgtG mXYTJiq jIYnv QSzLKK OrWtQK CSHyK mruUb BVNmR ihcANM CDbci wgZOu jEplhTD BsCoNYl kmQvZko lNFyTy oCodiL PNczF OyjdbW admZOXss aAeoS GAzxe BWYpf QsHNq NCbRr hijUo KLjqNXo sWEbEOJh mHRJYRm jbbmp tPwkeT oCVqgnN KAxUJ dpTOw XggksMS SqXVx JxpfBLXgB OgsyjIw BNnKf VCUmaB BwRnw TtjsaExp nmEfr NzhgNA vkAMA KaXhN XiZxis DLORS dkWzCiY aakMI QDlEK noCcP eRBODE KfAvIQ rsOMAG odvsn ObWYy VOwqP aIXrub tnyPnV DPpMC iHkfN PYdNA diVCGsY Jgzhl gdHJD tPoKc THCSU trXAf wLnjNX HQxpijD IMqbw uKHdi VUpEQP tKAMr vMRHa IZtOF QqFRi NSDmF vZeiS cidGyn luWUv MZtrDz iheUK hTqrP ghXsYy MOrgI QEFGBrM XpcnSUaAtv cqlobH bMtCrE CYuBt XyRjH OkJIx wFfpuQ HYUgOT rDAyv XzkJs WrWYo AqAhJ OIIBZ NWYLJ ixzyT EVPXr ASJxNW EOeSWxw oEBWN odykZu wOoCg TSNBh ifeOn eVHHA kQoswulO SAloJ VZIMC xQvRwl hkcjF MvfXf JmMBn PnCAZp IEQLf PBCwyykW CpCMB DhbRN ZJLOn YUzbum PSqGq XLMMrkFn tArog rnuiP ieBMuJ gKEqp gfUfcb aufalR nLnne vyOEf TFqkLR wrtRV ARXAI xgvyY SNbawj ZgvKzm CRHRv CqqZf TAnVNh HeLBvxz egYbD lKNbK ogJaj boekC Qltyt pCoFOn xomzI YBVOs vfgDQ LLZrm nunPF gooYf ZRNSWsf Niplb rnBgV CnwaU VcZhaP GxdlJY jLhDJ utnqw pxgoO GTgruf LQUVS cUPvUF hJbEwqr VkcPwwL AUYNxlH fhxSLxf plfrWTk POftV pytvzM ygHcA hRZdkf QPFDb zgmrz mJacB BMsEw dqyoo jVteC QbMZIJ fPnmO CaCaMy ffYKl RPgfF whotj BODsD wjXjZBT ImTMf zUCRZ kdWuR wCVPk WuxQz tEJAjs yDzCrVG HSDQpvJ WIaRf ASqcR YxHJBE ORAfs oBkLX dgbfW RzTYQ iPgwH shcFQx gnCOi NrStnE sGljpnA yYWMjCb jxSbB gEQxb TAJAcJ XjetU vrqJv lcAhT kMmyT mTBEn QoPkC lGKmGLSY uuekrC wKbBh RamtLG Teyvk GOURW DToAEb ukKkKK BwFJJC xPksXg Twqla WDLgc qFHYY gItSLr PwYgmFBBsy UqXyG rQRkdp AqCZFWl rNTlQDzlo XdcoWo lICrar ZGIvhe rqPpc PJoKo udytw ieVaW DOGzSu hGlbb mfTSk ZkpCNn akdgjW zRzdg TWJFX oshRlJ Edgcgw oMgkb dLRLADp aPhbgzL itJqj JQcoa WAozG yUsvM ImMvV NVoehl iBIMT MegTV ynRTXV wkWFUk lwMNgS XMHOry JBrys blBIalMC YTFOqyv qSFyv OOCzm gNoDEcNX OuULU byRNFWJ rPlSFW tYNxR RmCBC sHpcd DFXhOJIR wFfvu zFahe eqEee SqBDx VQMkO gIjme irkUNO CUHEDt VYgiX LhZrOP mQPSy QfYpWPv zvNtd RQdQRe MKNAc ywYXQj DvvqS UqIkd ksHSo upMUzX JhOZrM CKqsR xllVao mTgknD dncvB GnfNn lQMkj axzlx Chrhs efKhc iXFHe culVEM wkuPIn LNTJf BeWMHV evPFh GrhgU PNDjZ ZLWFJS wljRco KMmJCSI QReJPb wKwolfy BVhXe SrOqU HrWGX voQyp iEjju skSOw fIxlI cpmrdj kResG OCjbC tjvikl odPfgV bXxim LGfKh JWCGV CoaTtO TcIGCyv bzbssc JYtnNcqs ypxKK hmfAKX jUdSk cRzoR LgczBl lVgLc ZPjXy nrnWs EXSSrak owWjas Otqzfw MwNGm DwmFY otdYY BRHzgFIP uoBix iXuInlgcbMb UBVSA LfvORl kRrbqz dJgor WVUkt awxcT TgCwU UgCOWMPAwN zzFpPP XdkGcNHAnC jXSLw wRlkTtmA KEYHq YFOkFY qtDGT azVor YoKZwev PZOdQQ JfmRW lCKfF SWocLY mskaG QIWDeec JifsS iwITC TsiqgH pQeIq zoNjh lylvL ozMOB hZiqO odYbj xiXMC Ciipr nyKHa chQrM BopZp GIgcj PaCHo EPbrcdOTp uFbLN hxjuA SrnmHJ mAxJWi GqOEK Wzqhc BAVAa eOZrR NnCKH HYGol wJMQn CNbMmP tXBQdf OMGvdg vnbTL odJuoH PwzKX DCosn MWbCL NjghY ltSkXG rbMdlpO rLUXi cuOcly LwsIo kOUoS ETqMTl LSPtsS LBXBH xbMGM mdGVtnNuKe SomLVWF wpgOdV czIMa GhYWUF qCWjdNTZD uXoio tdbzntad wlviL rTleh jhLls tzgEnW TSGoC GcbVN GAbrA ZkjhzW hBPUe RckbbPh wIFhDfla IsflL pacgV yVGAT ywlax KBWrc VmzKe TQwaO TSXAgz AcrVq lYnFIx OfZgU oQvhJ FhvpQ jIoCql fbDqw HkNDFs nHzggZI xXXbI qRtYFS tHueD xhZnJZ MVMpBPg EMCqi AFogv TMrquZ VPADPNG tEXtSoftware Adobe Fireworks MuaHo IENDB tEXtSoftware Adobe Fireworks IENDB tEXtSoftware Adobe Fireworks IDATX nVLaA IENDB tEXtSoftware Adobe Fireworks IDATXA IENDB tEXtSoftware Adobe Fireworks IDATXKUA KUHctS IENDB PAPNG tEXtSoftware Adobe Fireworks IDATXKTQ ZTFFv eIWHq NqRSt IENDB PAPNG tEXtSoftware Adobe Fireworks IDATh cGZyfakA FVJXV rsNze VPAop yKYdQ rSovX kFzHn WbMTgp cMvtF ZOczNkvbJ UJyPb IENDB tEXtSoftware Adobe Fireworks IDATx OOOozzEUqnQ VDxPU zDvhxpNG WjqtpW BssSO HTfEZ CdCAQp iCtAXe zlfbz ypAukzG aHYMZ acfRX mKSVLe JyvGn FiXRM dXmsbby XiBzs OonDL bJLqNC ivPYT ZxGXV slZuU dyADr IENDB PAPNG tEXtSoftware Adobe Fireworks IDATx wdWqWyofFh Wovnxlb APIXQD KUqtlI EWSSeM CUCeg YiESpm YPrvv aseey JZudJc FMbjCslht suQjs ehEhts hFXKR AKDWd eXwDl hZFeM LZjij IDATX VZAiBn OXdAH PUVoo oxklj HGHcnb PPPJI AVTSo vbRXX tDvSm bnJufgr TIUpE sndysz IENDB PADPNG tEXtSoftware Adobe Fireworks IDATxyeWU QDymA soAXI PcpIB wPZBid cpFPU lJLFT fUsso MPXkQ CXjQt iAUXdb swgMv tzPxjW Hklyzr arKZHk KNhAAUeX UahTbaj QvYnn WqeqV NLOuQ RQBZR BgsNSY yUBNRIDr DZJHd VPOhhu OHXfc PsYon EoxEE MtOsf UbsvOZe SjpmM CrgQWPOZ opuBLL yNInHD NDlrDX XaTlOB bXbSBE BFWuC Ezlxyra VognS nduwiBQ NcWPnh rCNgoNMHG UVsWNr QMhRT IENDB PADPNG OiCCPPhotoshop profile BKKoR AHXLXNH YLOCQ kXHQG KMMRM wCsDDD fYXXIlK Mggfv UMfeI YyJTi BiTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stEvt adobe sType ResourceEvent xmlns photoshop adobe photoshop xmlns elements xmlns adobe xmlns adobe CreatorTool Adobe Photoshop Windows CreatorTool CreateDate CreateDate MetadataDate MetadataDate ModifyDate ModifyDate xmpMM InstanceID xmpMM InstanceID xmpMM DocumentID adobe docid photoshop xmpMM DocumentID xmpMM OriginalDocumentID xmpMM OriginalDocumentID xmpMM History parseType Resource stEvt action created stEvt action stEvt instanceID stEvt instanceID stEvt stEvt stEvt softwareAgent Adobe Photoshop Windows stEvt softwareAgent parseType Resource stEvt action saved stEvt action stEvt instanceID stEvt instanceID stEvt stEvt stEvt softwareAgent Adobe Photoshop Windows stEvt softwareAgent stEvt changed stEvt changed xmpMM History photoshop TextLayers parseType Resource photoshop LayerName CCleaner photoshop LayerName photoshop LayerText CCleaner photoshop LayerText parseType Resource photoshop LayerName BUSINESS EDITION photoshop LayerName photoshop LayerText BUSINESS EDITION photoshop LayerText photoshop TextLayers photoshop ColorMode photoshop ColorMode photoshop ICCProfile photoshop ICCProfile format image format Orientation Orientation XResolution XResolution YResolution YResolution ResolutionUnit ResolutionUnit ColorSpace ColorSpace PixelXDimension PixelXDimension PixelYDimension PixelYDimension Description xmpmeta xpacket IDATx lGuwbQ mhzXdne vVXsx rBGtMh yTUUe lHeKl edrrr Fhnnf qmNEk nHTJP TUUOw GpoWLBP wSQQqM ignmVo uEOrK SSSsMig QRRBUU ImzwE YPpoDJ MjUTT HMIIOG IENDB IDATx kPEYkEc Nnwbe uonDk IENDB IDATx yndwvf sgfFwdf diunf CAHFJl xUMId ziQCN oMMMB IENDB PADPNG IIDATxo yIiUu VAFcR IENDB PAPNG IDATxMl WRogc txjIVM BuJRZ uPzZc bdDyDekrq dixZT IENDB tEXtSoftware Adobe Fireworks IDATxYHyE tWWNFUf oziBM YrXuX GsmAd trKAd IhRxAd XRsze HprAd YYOzB iyqzB mOaVvo clmjM FqnjG SjTunTSae HkjdM zwKcU EKlrk sZWsxkZ lnMzC Totzq opJYPKn laMgm lyFTYGM jBHCDwn gAMYR EEHTW YbhgT gJwsHqL aGCcACx hMOln hkIan PlcyNM DVBMH egMog OlRUwY bjIPY cgvNwbh jBfDfleW PUSLJo NHesr BuhnZ PgfisZ fsuLsHV kcxbRe hxmob gdYzRn vNgSP UgiKWw IENDB PAPNG tEXtCreation tEXtSoftware Adobe Fireworks IDATxw hQJmYnExu LuQNSp hamRd PLPJoms naYWf RVjYP imuXR NGNmZ IALlB zVWBa vEfmV JISUnM nKZRPJ edYjl jRZZU uETTfX lEcWdhc qchDt mviRe qDbDk FCmhEz ZAmmw KydeN NSkJIs pIhoD IsxcEG PVbuEGZ EvBqw hFeHPVquo iQLjE xnAcq Vecbc VOKJdV gXuTH xkoyw lwvxBm YHsCrIBv vWuFW hmXfWR yOhJt FXkdfxDCD sxLEqK duhHLV xqDMlY wXFYS lzcdv VULfGbR DPIOLNlN QFjhUd cTbYYh EYsRK cyQUC OwfQV lovpb xSGIB sidcM GkDSLIyb RAxKbV JJDlbvv XZZEh rTrBW bKhZZ WEghLN ieoWRF jMvKPTW sABqd IENDB PAPNG tEXtSoftware Adobe Fireworks IDATx wRVAw pkENZ tgzeo mfQWzUqyww tUAWB vcfen sUrJS HATqG lIDAT PgLDt qYudYJE ebHzfl cswPw IENDB PAPNG tEXtSoftware Adobe Fireworks IENDB PADPNG tEXtSoftware Adobe Fireworks rfBBhN IENDB tEXtSoftware Adobe Fireworks IDATHq IENDB PAPNG tEXtSoftware Adobe Fireworks IDATX IENDB tEXtSoftware Adobe Fireworks IDATX boJDAo IENDB tEXtSoftware Adobe Fireworks IDATh IAKrH ydYZeAbH IENDB PADPNG tEXtSoftware Adobe Fireworks uIDAThkUU HjgAxW YBoya wbcvi AwsxCf ioFEz IENDB tEXtSoftware Adobe Fireworks IDATx KjYTij aQATV IENDB tEXtSoftware Adobe Fireworks IDATx QUzkbP LtFLeM EMhEPu waHsZ bXlfI IENDB PAPNG tEXtSoftware Adobe Fireworks IDATh IENDB PAPNG tEXtSoftware Adobe Fireworks IDAThKO sdTao QoZqa HsIOf IENDB tEXtSoftware Adobe Fireworks IDATxMN IENDB PADPNG tEXtSoftware Adobe Fireworks IDATxn vgelW IENDB PAPNG tEXtSoftware Adobe Fireworks IDATh XjaiagX cvzGWB jHvEN IENDB PAPNG tEXtSoftware Adobe Fireworks iIDATh ZlmDEA VVvEPT aapRsH IENDB tEXtSoftware Adobe Fireworks hIDATx IENDB PAPNG tEXtSoftware Adobe Fireworks LIDATxMUe RjkTi VkaxJ mXPPf IENDB PAPNG tEXtSoftware Adobe Fireworks IDAThMoUU IENDB tEXtSoftware Adobe Fireworks IDAThk IENDB tEXtSoftware Adobe Fireworks KIDATx ADxTRs pFFth UNsKS qWwRaKF LZlty Htjgi IJAfaG IENDB PADPNG tEXtSoftware Adobe Fireworks IDATxk RDBFHVkEK JCrFQ ZcqHLlP uCiAJ JCrFiH IENDB PAPNG tEXtSoftware Adobe Fireworks IDATh vjaah XoREws YLRbV satCs IENDB PADPNG tEXtSoftware Adobe Fireworks IDAThMHUA EAvAh yOLODJO YQfFKvB IENDB PADPNG tEXtSoftware Adobe Fireworks IDATxMl cwqDAk EvVlTR IbSOB IENDB tEXtSoftware Adobe Fireworks IDATx hRahk HIwUsx JAbizOqF IENDB tEXtSoftware Adobe Fireworks nIDAT IENDB tEXtSoftware Adobe Fireworks IDATH orswgw IENDB PAPNG tEXtSoftware Adobe Fireworks CIDATHK SLebcY IENDB PADPNG tEXtSoftware Adobe Fireworks IDATX hgmSQ IENDB PAPNG tEXtSoftware Adobe Fireworks IDATh lRoiZ IENDB tEXtSoftware Adobe Fireworks iIDATX mHRkYp IENDB tEXtSoftware Adobe Fireworks IDATh IENDB PAPNG tEXtSoftware Adobe Fireworks IDATx IENDB PADPNG tEXtSoftware Adobe Fireworks IDATxMjB IENDB tEXtSoftware Adobe Fireworks IDATXA IENDB PADPNG tEXtSoftware Adobe Fireworks IDATh IENDB PADPNG tEXtSoftware Adobe Fireworks IDATx IENDB PADPNG tEXtSoftware Adobe Fireworks IDATxAj DpqlB IENDB PAPNG tEXtSoftware Adobe Fireworks mIDATXK IENDB tEXtSoftware Adobe Fireworks tIDATXA IENDB PAPNG tEXtSoftware Adobe Fireworks IDAThA NnEfwz IENDB PADPNG tEXtSoftware Adobe Fireworks IDATxA HHHHHH IENDB tEXtSoftware Adobe Fireworks IDATx IENDB PAPNG tEXtSoftware Adobe Fireworks iIDATXA IENDB tEXtSoftware Adobe Fireworks xIDATXA IENDB PAPNG tEXtSoftware Adobe Fireworks IDATh IENDB PAPNG tEXtSoftware Adobe Fireworks IDATx NHHHHHHHHHHHHHHHHH IENDB tEXtSoftware Adobe Fireworks IDATx IENDB PADPNG tEXtSoftware Adobe Fireworks IDATXA IENDB PADPNG tEXtSoftware Adobe Fireworks IDATX IENDB PADPNG tEXtSoftware Adobe Fireworks IDAThA EwcTJ nFufG IENDB PAPNG tEXtSoftware Adobe Fireworks IDATxA WHHhW IENDB tEXtSoftware Adobe Fireworks IDATxA IENDB PADPNG tEXtSoftware Adobe Fireworks IDATXA IENDB tEXtSoftware Adobe Fireworks IDATXQ IENDB tEXtSoftware Adobe Fireworks IDAThA LFrzV IENDB PAPNG tEXtSoftware Adobe Fireworks IDATxA NHHHHHHHHHHHHHHHHHo IENDB tEXtSoftware Adobe Fireworks IDATxA IENDB PADPNG tEXtSoftware Adobe Fireworks XIDATX IENDB PAPNG tEXtSoftware Adobe Fireworks cIDATX IENDB PADPNG tEXtSoftware Adobe Fireworks jIDATh IENDB tEXtSoftware Adobe Fireworks IDATx IENDB tEXtSoftware Adobe Fireworks IDATx IENDB PAPNG tEXtSoftware Adobe Fireworks VIDATX IENDB tEXtSoftware Adobe Fireworks bIDATX IENDB tEXtSoftware Adobe Fireworks lIDATh IENDB PAPNG tEXtSoftware Adobe Fireworks IDATx IENDB PADPNG tEXtSoftware Adobe Fireworks IDATx IENDB tEXtSoftware Adobe Fireworks yCvVW IENDB tEXtSoftware Adobe Fireworks DPInB IENDB tEXtSoftware Adobe Fireworks IDATH EzNbc ikpxE IENDB PADPNG tEXtSoftware Adobe Fireworks IDATXKQ fIQHyl XxZKFx dWJBh IENDB tEXtSoftware Adobe Fireworks IDATXmfc WTIYxHpLl LcGnL IENDB MIDATxuS gPHcn IENDB PAPNG tEXtSoftware Adobe Fireworks RriBJ uuSuC gUQKe IENDB PAPNG tEXtSoftware Adobe Fireworks IDATH IHcQSkH hkQJAx atjfg cpsmis aRBep IENDB PADPNG tEXtSoftware Adobe Fireworks IDATX JiKmw KiPmL Koprk QhLvfz IENDB tEXtSoftware Adobe Fireworks IDATXy odatO gBKhCcB xUrBi oPUQDUDGw BfxkYp pwpeQ TraJy wwKKjq cakSq ijMBC ZDetM fwtbgvX IENDB IDATH OqDjwYY KPGoA FBvuY IENDB PADPNG IDATX kvZbiI IENDB IDATX XylTE rXBAC PLOdF ctDrf XJZCyX IENDB IDATh YylTE eplGt ddEKPg UZlDO DLeRm UMGqSzRp DChqz IENDB PADPNG tEXtSoftware Adobe Fireworks IDATXMl WoyPh yjZSWDR IENDB PAPNG tEXtSoftware Adobe Fireworks oIDATh qSrQv KKlyL AAHxgf dyNjQ vYYgbY PoeTc LtdCP smJke IENDB PADPNG tEXtSoftware Adobe Fireworks EIDATh CPABEB vrvaAP SDVewtN oRBUEQ CaMWYm ZmfJw IPzKy tfOuU IENDB tEXtSoftware Adobe Fireworks IDATxMl LPsaU lRamCK moxPtr yrAJEHsO ksRhs IENDB tEXtSoftware Adobe Fireworks tIDATxk AGTms cdjiF gfRaiq mnhgz NlfcJn lbDta IENDB PAPNG tEXtSoftware Adobe Fireworks IDATXM TdVhr LMrRdhR tsKXC cQJSp IENDB PAPNG tEXtSoftware Adobe Fireworks IDATh TXFuHf YrUxFn wwsGq RUfadh IENDB PAPNG tEXtSoftware Adobe Fireworks IDATh aMCRq fRIBA UACmq SyGlocC IENDB PAPNG tEXtSoftware Adobe Fireworks fIDATx HmMJs eNqob szNNUPX eehzBe bvvYE jxSXN kXPsZQ SUZJr cJMnr cSCxq FTjjC FKEmX kISoy IENDB tEXtSoftware Adobe Fireworks IDATx gKlYu SlyuM MCBTsg BYNls Nojnl naGKq JYfEP nwKsJ sKNBa rYyke gDTaL pyRWJxmo PZnip noCCJ SGMHuy aIxTN UIvrK BGLLY kRuBzImbxLb nPtSb IENDB PAPNG tEXtSoftware Adobe Fireworks IDATX rsExt OprDK LUgedo tWwbDY fwauH VQhQs IENDB tEXtSoftware Adobe Fireworks IDATh TDODPUT GfjBicD JVbrsUD NVkDtl PQxrD XMLfR iMswC izqKJN vbeWRXh IENDB tEXtSoftware Adobe Fireworks IDATh HZRPZ znmWv AGvbkZk YKBJR CJccx VFHuj ZjxBI IENDB tEXtSoftware Adobe Fireworks IDATxy KzQsVv VsoNu OXWtc zzkLo LOcLJ sRDrE HWzXlh bNeSGI Jldyew IUCqy QrtTen Wyjgl yDOYd IENDB tEXtSoftware Adobe Fireworks IDATxy YIUYs PYRyWe LfnBgGt JOVJp qiGYIe LXlLo NiQFKF VlvXOnm CadvR FOrbWk IENDB tEXtSoftware Adobe Fireworks IDATX rakdF FyKuq IENDB PAPNG tEXtSoftware Adobe Fireworks IDATh kQJQMc JVupApX NJhkk JhDcH LrZnbp IENDB tEXtSoftware Adobe Fireworks vIDAThypU KHZcZ UVQTT gOimB wYHEL dsaNl sBhlh IENDB tEXtSoftware Adobe Fireworks IDATx BCPyU tKYdUS lIkRvPr ZZXwu zQDDe lNijj LFDDr fpPDDF nZfEIex IVHpn nEFFFDD rhmmeE sGqkqqt JGnWG IENDB PAPNG tEXtSoftware Adobe Fireworks IDATxy tVZsu SybfF aPpEXvo ssWRE FnkVb jjjLF gPOfD dgRli wbVWi BiUYJ LPBKr BiYcD IENDB PAPNG tEXtSoftware Adobe Fireworks IENDB PADPNG tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATxb IENDB tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID BACFC xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATxU IENDB PAPNG tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID BDCFC xmpMM DocumentID BECFC xmpMM DerivedFrom stRef instanceID BBCFC stRef documentID BCCFC Description xmpmeta xpacket IDATxW tOjHQ AqZXIf IENDB PADPNG tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATx IENDB PADPNG tEXtSoftware Adobe Fireworks VIDATHui lzOlS nfqOrb nmCKHG IENDB tEXtSoftware Adobe Fireworks IDATHk mJIFm IaxhU lYiHYf iffsQq qBxjW IENDB PADPNG tEXtSoftware Adobe Fireworks IDATh BpxPJqt ipWuT tqzPG bkzwAhQ jqhrFgrwuiU IENDB PADPNG tEXtSoftware Adobe Fireworks IDATXkl stzqIIciJyy MRjycAYuGGG mmmGi Pdlnn PgNJd IENDB PADPNG tEXtSoftware Adobe Fireworks IENDB PAPNG tEXtSoftware Adobe Fireworks IENDB tEXtSoftware Adobe Fireworks KPaCZ IENDB PAPNG tEXtSoftware Adobe Fireworks IENDB tEXtSoftware Adobe Fireworks InWIZPJ IENDB tEXtSoftware Adobe Fireworks IENDB PADPNG tEXtSoftware Adobe Fireworks nIDATXKa IENDB tEXtSoftware Adobe Fireworks IDATXKU hrrLI qZKzc IENDB PADPNG tEXtCreation tEXtSoftware Adobe Fireworks IDAThz Vsjbuj LyoIt FFhFc dYWonlz Ohffbf KdGemB uneon bQBxk OLOkk CKFsOH xlTDljfdv eYycGio IENDB tEXtCreation tEXtSoftware Adobe Fireworks IDATx XpnHt vbuzzl wnYnZ BJlece CWeBf HYkuvoz pqxDXu iChND fBiep nwnLN DEvKP FWolsP YRpGg BPtxIJI SWJyE sqnzM RyMRI YrsUBiE IENDB tEXtCreation tEXtSoftware Adobe Fireworks IDATx tLcpK ahpnN zKkYX HMnbeb iCeeeWq sxFtT noenAW ISZMCJ YlnyE PrToE kEEBjRc VoAKK hxisj YOTpU DPnwZk ffNLJ LklHL kOtlv KWfbW ToyGARqI LfEMI bcXcm QKYLr lSfulzpNr ADyDc qnKcKJSRK peVEH IDATR nzffT UsWkO tyTkr IENDB tEXtCreation tEXtSoftware Adobe Fireworks IDATxweGu gBBJH WKmzL oLoWY GIVtr ugzZe IfVJEQ RSTTE fohPT JRoHs xllVMn FZyol IFFFRO sKsSJ kiDOh DlQts cIyXa mNxqVK oojHx vunOxt LZgmkm swQrYB PJYkUe JawxW fwrDmh jCQeLg jZTIV tQIrU GxjXuBIO yipjG OgfcLQ lavmq sdZLR QirnRQb Sbxdsynq jpQOrM IENDB PAPNG tEXtCreation tEXtSoftware Adobe Fireworks IDATxw IQIDk ExUDHi ZhtiptjV OdFJo DHDiU cnjPhh eQJyT QirJJzT wtuHVZk fMfVSM vxDSU NvHup KFBQm yMwqD qXJrI fTjOz lApJYwC nsvfy isVhx eiZXHg JLZSm NyluA ntyfn kGUWXWOmk RPXcr LyyAA tLpjq JqxlC nWsUzQR Ibmwo NNzKK pZgzk bYdZeu eEeer dswNwq ymxtQs ObTXXP mmpge ETIkf TVeVF IRRDf DkcEkwL IzzKEJ gCIIQ PZYiCQ PzbADq EUvbvbF COeUU QRRutg rNDJHhOrzx xwDcys xCPrwf WFoww kqrrlh bGLUot LMluv IENDB tEXtCreation tEXtSoftware Adobe Fireworks IDATxy URlYDy DuVHU REPmH yaUCU iNRpI oRUIUT HxCLK xOlIp URekomr iVTVh SaOEt erEGQ MWdxJ Kwopw cmXsZDt UABoYuG EEYfTDP IOVnt nXsniq WbXRF spxWn gfFuC ZNAIR keJDZU IDATrS INvAu slKgVtMZW cLDPVub VijtYp qpJgEVi pyBOcv cyvent TDTFID tRphD Jjidr kIAffW WsBOk tofJzu FKJIJ MbAHG pMRweb SmGIE zdjDC JbHTmn oFNXTp kzjjcH aINHuiu CTeHDL diZKw FSQTk gzZeT iHWRB vrYkv IENDB PAPNG tEXtCreation tEXtSoftware Adobe Fireworks IDATxw qplBi noyKZ NckFz FneoWmX JHkOG foEWN AKWXxL DWMSn zQUpb oElXc iEPWlW aumua CKALrF EfMth YtpAyGJ mPQuU tQSIQ bVKAwguT vokgq MHKhm nZwmSgL ADROEJ NNVijfa BecVdDb KwYBZ xnMGVVU vBydmZqx wOjTHZ oOlLlSiM fpDCD UxQWZ LgyrR HJkYu CfiLE WFLqu JFoAz WhJQp NlJKt xdiOiC JQnti iEGgP apSOS eqbKr QZDAXR svKmF IDATtX wWOEIm Hqmuzm OWfucM qSfng HuixO oyFXk Ypuscjr kccrn Zvhriy fZzVmTk IENDB PADPNG tEXtCreation tEXtSoftware Adobe Fireworks IDATxw iEFkMdHi ieTIk hQcnwZ EZEZiMH EqudL VhVtu yFaVVrk lcIrs OxJId CORUZ RPWWe zcgmktY wOCGB twCfv RHEraJ gXVWmMdF MFZsq qmIUP uAfve OGSrL dlXlY JeRxNO hCAiW apOZSkztUy UoInS Xuudpg UTAHG IDATe suuMWs hkjxr vpiVD QocRVC yVoops rieqO zxLLLS Ghnxh zWleK EZAhj jOffff ZoONr KbEdXS JKSNN iJDKg pBmFVQ ofNPdWJsR WifrL CZgLBY sHOiW WRrDq vIKEc ovESk ezHeq kCVMW JErRo EZzdyp wqyub KJgLuDz IEVRa PKKUff PmtGV tCWJbNw uzpgK XRKZxvv UReUh xOIJQ axRZYb yBPqZ fEjHt yphtgUvL Qqmaer BJpCFp yVpio IYueu nxJvq UISUu JRlYry dSgSG UWSGgx eBzoK MjjQQ NnoOL gwkmV UxGTT TUeJP AnUxp vXTDH ojhCoM QCuJG IDATUGD VZkoq zSSYm fobhOYTuo IENDB PADPNG tEXtCreation tEXtSoftware Adobe Fireworks IDATxyeG WTUID TUQADELU ovSoCt soBIo wNtii urKSM olntbq TIsfIEb Mwxir WtDhA fgWxGF eHUZVk VZQog lSXbW RMzVt eDkNU EbUVlal Omyhju cqExi hnQQZa UcQUN TNWqZ wplUm hnQJX hTHTfr ZkcWl upYhV IUQgD JOpBTz RxgLM FBUea rQiOLX VgzDO fGUoS LOMLMGq aeIPjkD kXUUli vegjgfVu NkOMm fMYNJ sjiZi bfjYJ fyEVj FifSc jpFTcf gwWwoPD cuquH IDATN MYLLL OEpUtx FiWOLCM fsbjjjzJ Zmpdd avTIUBJ MdvWApp dXcpca lQknYTB mRLSLl JTqRN aaWveG AdNwZ OvTMa CYZaN emZmMR LRELF dqbLy KWTQLB kMMPv JlOLN DUYxN liLOYIrz ZCVPOGgPzh JfSEw LcXhH delgRgx NxirBf VtePer XghGO Viwtt sGWYM YsHcAYK RZsLGHZ BJiwE IMREd PJWzH VZePr irhzXJgAh RqUBU eaovZ fKQggj fTVGu OnFCr EJMKES gvOOOn kwmFUu TPDKkKIf daeNS NBTPT xPtvS svJRf ZwvGJE vKlHOiyJw QpsZy aHmacf IDATDC DcxkP NNVKld gwGTC RJokS QXYNo TUUYAMeT DDDZDd QGaiL MkXma OmJYm YYRhTQh pmeiqq horCI CCLzK WslDI Gbjxoi pBfzvQ TDDXGA uIDAT HhwivNHoo NDDugyv YfybS kRoes JLUJc BJFZt GDFkm axmupk iszGrX ZmnGzjnNzB DDdYy IENDB tEXtSoftware Adobe Fireworks IDATh fTqol AeQLA nFMuHbj vdlkgd vmjeM JrsNPZ kSUnu rURbS cGoLCMzV RRHbG KMRxHu IENDB tEXtSoftware Adobe Fireworks IDATh QSDQRK saTXS XQDmTalv wMgGqqG bIxOO uYNHA LyrHj xugqe YxuwO pVOQfRX bhzDA mUMcL hjFdA uaOWK Rylqkfu IENDB PADPNG tEXtSoftware Adobe Fireworks IDATx yeUuo MOtCt QaCXq BStWwTW UiJhxk sgWYBJ mgxGa useLz eSVjJR DBZqRD ppyRQ GzOrXcm scylfJ oQeePOB YtKKxVS vSylG wtywzV zSZck gwXom ACAxR Ddgbn uUDHbFox wOVTz uaBGwk Vryaq tXcuO InixT RHEPoA IENDB tEXtSoftware Adobe Fireworks IDATxw OEWWeX eKBBK ejrds WoHdqy hjUUwa nROEkO romphn FqUPh vtjNs ORjSN FHJXtp dTEii YPeoHei wqitrBM tXgaW OQEpOC oOJvN xhvGS HXiMu UqZPt WmfJR iLWpi AXvGktn yksOhw Rtkkhm SIPoBZ vEQClZup fRUrng fecMhL RcRqhS BcwJJyz xHBXCh VXIbQw aegUe UqhueK cCFXTMP ppFmt WfqCnI dMvgl tlrxY IENDB tEXtSoftware Adobe Fireworks IDATXA IENDB PAPNG tEXtSoftware Adobe Fireworks IDATX IENDB PAPNG tEXtSoftware Adobe Fireworks IDAThA gXDvukJ IENDB tEXtSoftware Adobe Fireworks IDATxj IENDB tEXtSoftware Adobe Fireworks IDATxAj IENDB PADPNG tEXtSoftware Adobe Fireworks pIDATX QXxLLEM IENDB PAPNG tEXtSoftware Adobe Fireworks yIDATXA IENDB tEXtSoftware Adobe Fireworks IDATh IENDB tEXtSoftware Adobe Fireworks IDATx IENDB tEXtSoftware Adobe Fireworks IDATx IENDB PAPNG tEXtSoftware Adobe Fireworks WIDATX IENDB PADPNG tEXtSoftware Adobe Fireworks cIDATX IENDB PADPNG tEXtSoftware Adobe Fireworks mIDATh IENDB tEXtSoftware Adobe Fireworks IDATx IENDB PAPNG tEXtSoftware Adobe Fireworks IDATx IENDB tEXtSoftware Adobe Fireworks IDATXK gOjRMw IENDB PAPNG tEXtSoftware Adobe Fireworks IDATXQ IENDB PADPNG tEXtSoftware Adobe Fireworks IDATxA IENDB tEXtSoftware Adobe Fireworks IDATxA IENDB PAPNG tEXtSoftware Paint BIDAT IENDB PAPNG tEXtSoftware Adobe Fireworks wIDAT IENDB PADPNG tEXtSoftware Adobe Fireworks IENDB PADPNG tEXtSoftware Adobe Fireworks gIDAT IENDB PADPNG tEXtSoftware Adobe Fireworks IENDB PADPNG tEXtSoftware Paint AIDAT IENDB PADPNG tEXtSoftware Adobe Fireworks tIDAT IENDB PAPNG tEXtSoftware Adobe Fireworks IENDB PAPNG tEXtSoftware Adobe Fireworks IENDB tEXtSoftware Paint IENDB tEXtSoftware Adobe Fireworks EIDAT IENDB tEXtSoftware Adobe Fireworks IENDB PAPNG tEXtSoftware Adobe Fireworks eIDAT IENDB tEXtSoftware Paint IENDB PAPNG tEXtSoftware Adobe Fireworks JIDAT IENDB tEXtSoftware Adobe Fireworks bIDAT IENDB tEXtSoftware Adobe Fireworks yIDAT IENDB tEXtSoftware Paint IENDB tEXtSoftware Adobe Fireworks IENDB PAPNG tEXtSoftware Adobe Fireworks iIDAT IENDB tEXtSoftware Adobe Fireworks XIDAT IENDB PAPNG tEXtSoftware Adobe Fireworks fIDAT IENDB tEXtSoftware Adobe Fireworks tIDAT IENDB PAPNG tEXtSoftware Paint IENDB PAPNG tEXtSoftware Adobe Fireworks BIDAT IENDB tEXtSoftware Adobe Fireworks prVWxnH rLIcEU XhOKSgg mFHEhgA WOytt HmkBF bmkTSx IQRBI USFVZ hcVAn IAaBXF OFAdX CSCSUH CtdHD PhXnB zXOgt YhijRHjV yhijBk gsgqP REiHO luzeS EDkQk TeiudCPX sElzl xGXGy golEr kvfgf OkwVsK UWtdV UpfHhnG BtvGm kbpDlN rLkVVkT tUbMA MSypiU bylRWv RgnXz pRLVbI CBsjU MHhZhKY JSUGzRQ xLpMp TmtWWv kdFpy JNkIKv CvYkb KoksS SJCxr mkBSx FRHnw xogJY qiumf mtcmC erUbS rCMYq zszWHVax Xjjgi hwduwU EqyRG pWwftEw tTYwz ymkBT JsWiV bXELp SmkBT COMlS MXBcX wZizFTx xHnorJ cGOpO NwaZx WSncRx MwXQp HKRlK kOTlq akgbbw gxcTGU xaLoQ TulebA hxHGRn PEjmv hYDkgC fccPop QtmvNC ujctCP uDWCB yvUpa samhG hSIXU AljwTt yXDuSW VagWPq nyWFKv iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe CreatorTool Adobe Fireworks Windows CreatorTool CreateDate CreateDate ModifyDate ModifyDate Description Description about xmlns elements format image format Description xmpmeta xpacket nIDAT IENDB tEXtSoftware Adobe Fireworks bIDAT IENDB tEXtSoftware Adobe Fireworks IENDB PADPNG tEXtSoftware Paint JIDAT IENDB PAPNG tEXtSoftware Adobe Fireworks DIDAT IENDB PAPNG tEXtSoftware Adobe Fireworks pIDAT IENDB PAPNG tEXtSoftware Adobe Fireworks prVWxnH lChgQ EUeENx HmkBF mkTSx WeofV fmVDG GMcif PTWEd ATjLuIsz sZCvb YcbKB OcFiNRk cJCfD kWJPsO syQkL GPnqcb rsGLj DIiKRNE RrIzC REqUu hJLfT lpelzl wnkKGz sSypv iXOCEim eDwBy KRiMI gthwg cizlFz FkpspT QKBDB yeZiYRdf nHwdz OFAbX iuJLdU pRLVbI RrIzC MqypIzBk xIzBs wTGEwG gCppz vEwJK qtSyww coRGl ncPZU UuOWy kxnYl LXMfL ZIvhu CRkUk Yhfak haeSLx jJbToW AItSf wiTZlQ snsuM jIfBQWr mkBSx FRHnw xogJY qiumf mtcmC erUbS rCMYq zszWHVax Xjjgi hwduwU EqyRG pWwftEw tTYwz ymkBT JsWiV bXELp SmkBT COMlS MXBcX wZizFTx xHnorJ cGOpO NwaZx WSncRx MwXQp HKRlK kOTlq akgbbw gxcTGU xaLoQ TulebA hxHGRn PEjmv hYDkgC fccPop QtmvNC ujctCP uDWCB yvUpa samhG hSIXU AljwTt yXDuSW VagWPq nyWFKv iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe CreatorTool Adobe Fireworks Windows CreatorTool CreateDate CreateDate ModifyDate ModifyDate Description Description about xmlns elements format image format Description xmpmeta xpacket IENDB PADPNG tEXtSoftware Adobe Fireworks IENDB PADPNG tEXtSoftware Adobe Fireworks IENDB PAPNG tEXtSoftware Adobe Fireworks IDATH wldGJ IENDB PADPNG tEXtSoftware Adobe Fireworks IDATXm ENAAA IENDB PAPNG tEXtSoftware Adobe Fireworks DIDATXm IENDB PAPNG tEXtSoftware Adobe Fireworks yIDAT IENDB tEXtSoftware Adobe Fireworks IDATH RXVtT IENDB PADPNG tEXtSoftware Adobe Fireworks IDATX IENDB tEXtSoftware Adobe Fireworks IDATX IENDB IDATXA IENDB PAPNG IDATX IENDB PADPNG IDATXA IENDB IDATXK IENDB tEXtCreation tEXtSoftware Adobe Fireworks IDATH IENDB PADPNG tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATxKO zseXX hsNoD IENDB tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket SIDATxO LeGSH IENDB PADPNG tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATxKLcU xZvAS PGbGpZ UXjPNG MtSBQW pCPlY IENDB tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATxS bEVKm Ggarf jPbJI IENDB PAPNG tEXtCreation tEXtSoftware Adobe Fireworks IDATX QiYfuQ FhYai IENDB PADPNG tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket cIDATxZ CuzZNS eUnxD AazLc uMjdq mypqn IENDB PADPNG tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATx qRkJURpF RUUeH RAMfUI WRbMd CDXie IENDB tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATx DEjaS QjyVxS HTKQd LErrm eLPAX IENDB tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATx RiXBE DiOWzI NzwgG JJHtH IENDB tEXtCreation tEXtSoftware Adobe Fireworks IDATX kbmmmteu rZDjM IENDB tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATxZkH ABFYDO XXAYT IENDB tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATx PRRTa kjjJhe sUarp LwvKNaJY rjqOh GgFuordP IENDB tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATx AIYmGAi YIGgmA IENDB tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATx aDTrF UJfTqnX QbWrU Nhufg IENDB tEXtCreation tEXtSoftware Adobe Fireworks IDATX cYRbO lQiurNb GgpEM fnAzk hcDXhx FKloM urulk IENDB PAPNG tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATx MLUHWB EMrTU pmVdSA ccxAfI IENDB PAPNG tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATxyTSW avZlOe XAKRPTGm EmLvc NYcEw aiAky ZkipjAy kmTFq bRAsYUZgg IENDB tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket DIDATx TUJUj pLqBS kBCHa kgJUA GUUUH OzfbT xPoWOdf IFcUA PImyFy IENDB PAPNG tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket hIDATx MkieNf qVpXt phRTv IENDB PAPNG tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket PIDATx JJQWa evNqlc qgZZZT GZPsPQ PbYir Wzrjj MhHNk IENDB PAPNG tEXtSoftware Adobe ImageReadyqe iTXtXML adobe xpacket begin MpCehiHzreSzNTczkc xmpmeta xmlns adobe xmptk Adobe xmlns syntax Description about xmlns adobe xmlns xmpMM adobe xmlns stRef adobe sType ResourceRef CreatorTool Adobe Photoshop Macintosh xmpMM InstanceID xmpMM DocumentID xmpMM DerivedFrom stRef instanceID stRef documentID Description xmpmeta xpacket IDATx KAuTv CUvKu HDJWpt MPswyRvtYl KgRWgr IENDB IDATH zEjbbM IENDB PADPNG IDATH qCSEII ZNjkDRm XeEqSz YMYOd TSGRO IENDB PAPNG IDATX XZazQQO uLzgFZa dwNmu IENDB hIDATX HHtAF RVLsy bHreO ooytcG GnowZ IENDB PAPNG IDATh cFfgE lPUUfDd fuIzpIx zzodd oXqSy zOPYu SAsGU isaEr VuEmm IENDB tEXtSoftware Adobe Fireworks IDATx ozsEMC KOnHwX RWLnV OGWTrY GwhmD cMVng ioRkAD DRVwlW GAjsk FPrRx dVVCJw clgyt kvqyxnp FrXMWw ZRTUf jckOff IENDB PADPNG tEXtSoftware Adobe Fireworks IDATxy LyIBBh vDoTM yZAiq RNOieP JDKcHL ddfKx XdMOl DZQTLJ NhgYzk zcAJYi EzKhOf MlKSH llppb tIwVx fifPc wlCWBL wmVEtsQ yPUFot dBRnd MFsCn LCBZM YAjec BTMtW SuNSs JAsgA BDadi Ompww TjiQd IENDB tEXtSoftware Adobe Fireworks IDATxw ekZVt Pcylv nXLRC jduAb spWjH FDuaDZ FFHwF UYKxx zGPTZ JaLIa PEiip cwgKJAazZ HWvxc aIIDn ChwNzx pTCXn Fyzdb ewbaUv vboSB BCCCE eAtrX QjNdx IDATi SVIPKtyx AdtJxh WGDEsW glxfeH LUtyY YLTdk unxlj RTFwaj IGxXo hYohjd zHwCEH hUFpIJ BXJTXZMi Jwthr aVuCdK GIDAT YMEqe udSYa xSvbM QOPmb EWZeO tYGFz IENDB PADPNG tEXtSoftware Adobe Fireworks IDATxy ameLK SFGKW sJVPF DiafP oBkLn GQAbv yjIjN TKbfFQ gjaAN roMCKvZU fuZbQ SELrs IDATZqk uBPMM lRQKI rSzBN iGZjwCi ZKYZd OExsN diIJTj PcXiz lDnlG YTpzB HwLGLmF hcjAD VQRiMp Siiyp LNpPMhW QyqeQ IPlRcz dEzlr psxry ofiLRsL MDHPv IDATg fkgpyJ NmqDf bjDdvv UrYUT oJqCwMO TnjfrQy RwzZvmwW KqurWU ZcllY dKsqe JgTcT tDQOA jekQa qAZZj zkWABh RGuXph zUYpY IDATi LPMKe LGRfY bfZhPR gTzhPt qEiVT xLYGp IENDB tEXtSoftware Adobe Fireworks nIDAT IENDB tEXtSoftware Adobe Fireworks IENDB PADPNG tEXtSoftware Adobe Fireworks IENDB tEXtSoftware Adobe Fireworks IENDB PAPNG tEXtSoftware Adobe Fireworks IDATH IENDB PAPNG tEXtSoftware Adobe Fireworks qIDAT IENDB tEXtSoftware Adobe Fireworks IENDB PAPNG tEXtSoftware Adobe Fireworks IENDB tEXtSoftware Adobe Fireworks ymKNB IENDB PADPNG tEXtSoftware Adobe Fireworks IDATH IENDB PAPNG tEXtSoftware Adobe Fireworks IDATx QpAZi gByFp MNBws PobWr ReXITv mlPkdce VQBzN WvoJk sLkEaVHKN SlcLND LDRkB nlIlL IyjEEEp arhgN rskRc VjCyI kDIHH HVTTLb NysJt MtmBHDH OfKRMN yTORV yTjiw VUUuo DPUUV fNaYf OmWpp mPtNvs WykPb RDtSUUU ZKReI jXbEm pRjEUU fKClf BRNYHcY RTKUUU TJqmoQ FDRgYjjjsu mRNxT oRPLt MJlRv ZjkdRG IENDB PAPNG tEXtSoftware Adobe Fireworks IDATx WVgvhr CzOky SrHpyH LImHp iamXFxE NwyiXv IgJOa khJyD rmqesT hCBiN nhXxq mfvTP XdBpZ FXLUU DtKiE xXKRt yfkjhhH FaJFVS tZUWVB BcTUhJXV uwnyC pyCkV Xlwnc BdkwZqp cyHrc BxDhP lDtkS HfHhC jqruux mTSHK ybtJWd RoLVR pMeCA kbioU UVETf DYEUG qljmV YOkbS VTFIT KLPzPY BZjHB aIfHfJ qeMiX uUBRj wGEHTgiv GCVoX DiHTQ IDATA pnfkRw AQZfGr jiftA SnwXa DqTPX WEhcj Dvtau YgdUnA bCzVn capppB RDLZV WPuvvC XBBVOqwO DWWWO hymVK FqGDH bECTi aifNU fnMkai qRZnhF dGYBVQ ZwrKA BtQBA jxCVv TFTRV IENDB tEXtSoftware Adobe Fireworks IDATx CJkyk qaYUeBX BDcjtxh GdBGp KFebv fAeoDF bXPmU RHbbQo RHbbj rUDAxzx PcDBC oioiM RXXXb Jrtttdf ggmmz uxjxR kkMckm BasSPG LUsNp JDDDw hiylhnnWDo TQrQI IDATf uUUSd IGIKh HcqtM OAyAYu AydYy zzzVomhk yAkNb oSTYlf qcPXq vctwLg ShGGGFyk QiuRnq tVOqJp CAWHe kIdwve pyPLHE mkiRa IDATr wwTgS uUUGss ucGooi fWUks AdJBT NQJAx ynrcRp yxSqU MDdnjDHn ofBDD AXVPD UIcgHg LndFl ZldaCt wOuQG QCseD BQmUp OOwJOy xzZph tmeTE dWWWKm hETGf kcohLx IAZGzD YfQoy GsnPx DvffwqjtGG JxbEJ bgweM ZZrcN QdrsD fyXmMq mcEVAo LDTzC RqfvS wMFfP rtflFp obuHp xQhKX oXQvZWW KrhFFF QWMsJ vuupb UgCfT DTkXk IsZJRZ GDuhR uQGcM fxiMko iojmJ wiqrT rrVhfIJ XxscD ColqPP HHTZll rqvlIf IENDB tEXtSoftware Adobe Fireworks IENDB tEXtSoftware Adobe Fireworks QboozQI IENDB tEXtSoftware Adobe Fireworks IDATHj IENDB PADPNG tEXtSoftware Adobe Fireworks IDATX UvflfgwgO HEEHE VBjBE zHECc IENDB PAPNG tEXtSoftware Adobe Fireworks IDATx RJbeP syXeD hARPQ qakLM wMMOD CdbUBb JPtha TEBtR EBobs IkrIXl ahrsJ jkLMapNS ENLEB IENDB PAPNG tEXtSoftware Adobe Fireworks IDATxyl uPeImY YObRpf gmjQix LiTaa awMwL vnOEq mJIWtff WITKm pLqWE mSMNT oWglFMu HtnOyOG IENDB PAPNG tEXtSoftware Adobe Fireworks IDATx ERDIg nqDwLFyM WTaqz FKCeU ZmqKe NgxJXp GVpEn ZTJIFJ iEajXP ewWpVom SrVBWm HbCOWG oplIH JjnKw QxcEG IENDB PADPNG tEXtSoftware Adobe Fireworks IDATxkl NqlBXQ WbzGM KHWyUQO Xvnlo Uebef WzZSCM PmVqUin QnNNUU MuEGVgM cVfzyK rEhmdL qxxWsY TWhuiE WbWrDx HwBAP IENDB tEXtSoftware Adobe Fireworks IDATx dQQzM QkyxG McrUa orUgK TIIyj Leukn DKLjt EvonK vepSoV MxySNf fvfLW qubqar zhkdf ZTTNF sdSYb pUWmn mVhjVB yRyfM geonKsig ZVKlig eFlMF anFjMu MmlUp NdjYv IENDB PADPNG tEXtSoftware Adobe Fireworks IDATxml sxSDn vXwxD VcRFszVyY OzMnR zFTod XHuZPD WvEFSy QsBmg lErtmZc IENDB PAPNG tEXtSoftware Adobe Fireworks IDATx AZVZGBJ MTVry wsNMal XlHzn EsFCy cUWZu McOgz SmpSO IENDB tEXtSoftware Adobe Fireworks sIDATxml yMaWe BGAoP jcIEB iSwAC kypWk olcQny jaoTd Znsqb QAKVQ UehNa IENDB PADPNG tEXtSoftware Adobe Fireworks IDATx AnQnS QXDwf BvMVUo VANRRXag TXceJ rgSDX TxioYqn RkyKt uooeT kJgmZX orgfe BZFmu VgWJP AnQnkQS IENDB tEXtSoftware Adobe Fireworks IDATxmh DDafQJ reyfCGG fqydY bHNZn DommuI JZzsVH TJuuH hbbbJN BsssIzzz AXVQP tvvfS BOOOE zhkkh MMMhjj kFUQnlF Tbbbl Vfnff IENDB tEXtSoftware Adobe Fireworks IDATxOl bYVDQ fhhhADB fzzzKv eYUwH vuuUL dFGGbttTZ NnWJKB oarXZZB JRfCe IENDB tEXtSoftware Adobe Fireworks IDATx ZKqlYC eBMNN kowPB BPuFJi vtOlz UGGGU JmRVbP maTHB yuBEy xRUOm IENDB tEXtSoftware Adobe Fireworks IDATx ODIMm sLNCDk OMMuf BDYfT NckkKv dGFCJq LbzzZv afLLLx qeEgG xwePw NcbbBv XXXPkTJxMMM mcqUD mmmJY cssDj nsBSv OQoJNDkYt ibaaAv TJfWYD nauuUv fVjCD IENDB PAPNG tEXtSoftware Adobe Fireworks nIDATx JjQPS SdREIl ZrhkAE Ftceq nGSGMvEK mqrZmZ nCdMP IENDB tEXtSoftware Adobe Fireworks IDATxyTTw JuCIcU aMjpNE DVIUKt zXjtJKBM SEziUNNNIGJT LMEod OYOmS JaiJdDDi XpqkX odlik AeSVcrLz BcWwA IENDB PAPNG tEXtSoftware Adobe Fireworks IDATxy AIFYCq fVHWn vUFXML ebaNJYpg XQbseT KDdsA Mbxju JyQkv LIhqxaJ rbcWOT wlOxE RuKzsX AIFuIsfDUsO xppiy Omxhi nYYbe otWxw aNSjn IENDB PAPNG tEXtSoftware Adobe Fireworks JIDATx MmQZSD znwfw bHcbV ZPRUk ihFfT LUTqO tloyQ IexIVNN NlWyC Mwrhj IENDB tEXtSoftware Adobe Fireworks IDATx oaHPZ sYPZO JkEDQ kEijZ NXQudO SpMDg UMwxy LOyiS GqXgNw eZueEu zRmuk eOUxsXx JjWbhu bJVvI EtVXy dFTir CLyug yGSwlz ihxpH SWdBu AiMCh LbaQYM cwhlKW IENDB PAPNG tEXtSoftware Adobe Fireworks IDATxmP xoImV ibrUU CIXoO IUTfDZ IENDB tEXtSoftware Adobe Fireworks IDATx GMvfxs uIIIU RzLAeu yndlo pupSx ChnWh mgtWt cwsIY IENDB tEXtSoftware Adobe Fireworks IDATx vpTcqk rWXXl EhhhF mYBtA qqrKF gHWoZc IFEUEI pjgoC HdsRQ PdSjj IENDB tEXtSoftware Adobe Fireworks IDATx QirUTt LmrURK WRYFk ZTbuWL nCaQd BAwWD OYBGT NrEffg MHwii MMjjh SgZXA lWUEUAAT NLnqi lltZN faPPqj yYzTPyw LofRBiM IENDB PAPNG tEXtSoftware Adobe Fireworks IDATxyXUu BhSZVe LhYNfIiJ Mbqwh KcGzjw LehoLCy fLIaF EuEJYEi gNgRJf YrmWV imCOqE Kbgjb IENDB PAPNG tEXtSoftware Adobe Fireworks IDATxytM JaPYAx nWroUx Vnthfp NHghq JzaDJ IENDB PAPNG tEXtSoftware Adobe Fireworks IDATxytTU JGRtC mSUxiJ sMTmX DyaPb RZETard rKvWz qySiPD NTxKjX aLkJCy IENDB PADPNG tEXtSoftware Adobe Fireworks IDATx JOoGC pJHBj JMQss QKnAB cRMLf IENDB PAPNG tEXtSoftware Adobe Fireworks IDATxytT RTsZu gOhhB viDLWt NWPoda ckeCEJ YFRtO GgwPyRB nzFRvP jCEKjxU pyIAe IENDB tEXtSoftware Adobe Fireworks IDATx AYebq wQTKi glrwSWm avqEWq QSIOK MWJGc pyzpVjk PeJXF WjrHyS IENDB PADPNG tEXtSoftware Adobe Fireworks IDATx Hojan apQZW fgIDm VmKCc nHcSRt cowfg ElhmN BzBnbHZ wPJsmBt ccnAJlT ADKYU ixCnJ IENDB tEXtSoftware Adobe Fireworks IDATx mVlXS FefED rogBwL IBMNDq mNGhaFi EWJTs ljxZFTi uwlUFTmn kuJpn XEOjg rlXKYw USnFV dacbG eiqNQ GaeEQf IENDB PADPNG tEXtSoftware Adobe Fireworks IDATxmlS qdHfP iixWF drdhR MRCeU VefdL gZrQn CiegNdy DFcDk IENDB PADPNG tEXtSoftware Adobe Fireworks IDATx UumPPmAB SbqJSn lGyTv UsuxHN vjfRA gyUvW nhZaD mRCpMx enJQG gdqgOs eDpRY ahqjIBXl IENDB PAPNG tEXtSoftware Adobe Fireworks IDATxyl iUiZJTJ QIHfS GSUOU WUyqw ckfuT VUNunl vjNlG kILAO KuoqTbW LYiEe eDLjX WAMqCq KSIjD iTPjZW dxcihQ IENDB PADPNG tEXtSoftware Adobe Fireworks CIDATxml hLBbv xyvuq TKPDyNh VrAutk QUVYy enVzXQe GGDyo vjemEcj YBuwk Rrbuq SWILd FGiRh DPpGM XJGHpVzQ IENDB PADPNG tEXtSoftware Adobe Fireworks IDATx PGYnXZQV lVezLE LAOux DLvVqIum NDYqn vIAdj udOjr XygTy LNsahB KhrArOr jqyMLji ajntq VvqeZ klRzU GykQz OkbUq iUqtbZ oqTUG DZQpk dXZQV IENDB IDATh ZkhTG BttyC cFrwb IENDB PADPNG IDATx vVTLo waINnH wiJvdpQ DeuAeu YfnqC qlpSS MvuSHB JUYhF ZBdGE IENDB PAPNG tIDATx CDEhUMw PeHKd ZAAMx thmYx UnXNw CCVWz qfTfrCL zuWlru NULcm LOKeX NKptmc cTQuQ dtgvuEY xvFLnMm hiile nLVid SkJiU NCTHy XZyVVU IENDB PAPNG IDATh UCDetA ytcWr IENDB IDATh cvwfv aTWRv tRfcaS gCIrY lTcnD IENDB FIDATx zEFqw DXKxk GyJTq DvJbK IENDB AIDATx fiJHmpB Kfrtv hCXBV RYmyWx nDiMg MEMbc qzgxFo vkKOt IENDB IDATx NZJcw SitZjT HaxLZ sudkv xVITR QIzPTt kOcTyMb LWduo IENDB PAPNG TIDATh BHZHV WQbAJH hmnlG KUfFTq PTVSmV KVMRO UqohY AafPlO vXgZl IENDB PAPNG IDATh keWlEE Auwtcz ryxIA IENDB IDATx QslbH ssdFaX rhTyP PRxFz zUgJxneORiU mivpSekQV CwUNT CgqPxX IENDB IDATx NaKZb WfMXQ gfJOZ qFdgF jzTGpdL tHBDe vGSpv IzKFQwGF MrXLWH BBPPf IENDB IDATh MdFGL YCggD RRdrmtU NRZCT MSVMnxT IliZA wvlab IENDB uIDATh ASwYG VXSoxa QZQHP UJHuS oTKlG qzVNckgV ioVgW dSvqv CiwDO VdfeitPgVIRh IENDB VIDATx ZRnMU KwZcey ZFSLxsj gQYyYaXcv tXaedt VYYwAd uSImZh OPOnm GqHAG maoBi vXstJ sRLVD DKQpUX dDYBf CHXlPb IgzwJ IENDB IDATx vbiFbIiog zNwMsv jvMhT LHwMXzR gjmOj aKVUWk dqitCc jwYgZ UxEtM PUXYC pDPiv dreMU BCisJ biFbIin SaQSy vtvham IENDB PADPNG dIDAT IENDB PAPNG IENDB IENDB PAPNG IDATH IENDB MIDATH IENDB IDATH IENDB yIDATX qDvyC JGPGi RNGOgF IENDB bIDATh LdffRt ZcPOeP Hqjgj OLfUc WmPdqM IENDB IDATH cLmIt IENDB PAPNG IDATH ZShmN IilQk IENDB IDATX IENDB IDATh CLtNDTK XmjDv poNZR IENDB PADPNG IDATh JUrrOUS YNxCC nVFyd fLQDm eiGmL MdlqA VCukPP dmTtx DNxQiH InctJhSPp sdruXc kGpEj IENDB AIDATx KJayl AEQVL CSfUH vraSJV mfZbjF PrVha dKTHw huBYN tbUGjTR UjECG IYSNz ajkRW wKQQk BLYFK yyGYR UNNrYJ IENDB IDATx UbTIL jyFcbA VfKUp RezRZ smyPaDx hCpUj aqinF SySLfJ VGsrH UzLnD PlNIg IENDB IENDB IENDB IENDB Bckff IENDB IDATH bfFeE IENDB PADPNG tEXtSoftware paint IENDB tEXtSoftware paint IENDB PAPNG tEXtSoftware paint HrJXRf IENDB lIDATX JUWCn smmeY Ersss GGGHvS ibvOs vvvhgg IENDB PAPNG IDATXXm VgnKo AYDZzj DXFxK IENDB PADPNG tEXtSoftware Adobe Fireworks IDAThy oifvvN IENDB tEXtSoftware Adobe Fireworks IDATx ZleiYS zvZwS ImNqf IENDB tEXtSoftware Adobe Fireworks IDATxy DMuqQ qauAH Icpkrp fvhfslofsC HTgVd DimXDs EgfkKD Exbty fpmqD kBYgT asMxeq IENDB thRvjS Hwwwwwwwwwwwwww version encoding standalone assembly xmlns schemas microsoft manifestVersion xmlns schemas microsoft assemblyIdentity Setup version description Setup description dependency dependentAssembly assemblyIdentity Microsoft Windows Common Controls version publicKeyToken language dependentAssembly dependency trustInfo xmlns schemas microsoft security requestedPrivileges level asInvoker uiAccess false requestedPrivileges security trustInfo application windowsSettings xmlns schemas microsoft WindowsSettings dpiAware dpiAware windowsSettings application assembly USERTRUST Network usertrust USERFirst Object Greater Manchester Salford COMODO Limited COMODO Stamping Signer usertrust USERFirst Object usertrust Greater Manchester Salford COMODO Limited COMODO Signing LONDON LONDON International House Holborn Viaduct DEPLOYABLE DEPLOYABLE https secure comodo comodoca comodoca comodoca deployableltduk gmail xknKb Greater Manchester Salford COMODO Limited COMODO Certification Authority Greater Manchester Salford COMODO Limited COMODO Signing comodoca comodoca COMODORSAAddTrustCA comodoca DvWjXk waMeME KBUpmYm Greater Manchester Salford COMODO Limited COMODO Signing zpvNgQn USERTRUST Network usertrust USERFirst Object tQaPcwA ZCEbk,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj oHtsy ecsXr MJdBY TaSgW wGJkSa GSZXb LZXdYo jGOYU bvkmF ZIMAZ JhTaJxw TsGjY ahRwk mvJqWQeA PQBOB cbTMg PRDoq DGmcm RXNaB NsqAeom BkVdlFE sGnSh oQfRd iZEGWt beuqS sWvhtf fjgkpI wAaKH kwLiC kpahqs lsTRM bkIgAs ddhOnaj xOwdjG BYORG aqmAL GZXsIEi EWDGT Rsbhl sGuUgjd PdDgeF NkmhsnkpRd bYUiA NoPDU oRAgu oVSwY UXHfqDh TqoLB RexKy fRLDE BGPek nNQbu EkHYF xZMRp yxNbZT Otxke smbvzR FJREK KMSYbf LUPZDyO zignR ZqRxm GoIhD KlPZfI iTKez GXMbzg xIipd LMeNlj OUWLF hwYxl NUKJJE pwXjK EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl fkaLM tjZsP OwQcK HwUDVQy wMfFJ kpruT BGMOU Izaen OMphf ZJeWRL HmoWRI EKzOmiB ZlkYEuc YmAzX FdXKP UplCt DvBKy ecSgT CLpRLm JPJRF mOnAL alkGCf bGYeT mkJtH HfdgoXL HhrlYhW WiBqF URhFTh MFQDyj tlIVC xNwNcd AIDyvmv RSVWN iDDuh GCPtX DxOJQW IKLXdm bSellg CiUdmob LnttCn PselC hnqJP LmEbb PPLON zntWY LBmMoY psMGEwj JdLJhv EUTqZM WbJxbR xPCwW CGvuYfLzE FYQvMk SQVTy ojMNaP Dvxue UhfYS GUQSVWf lQeDLG APttC ZABVpAe evUCch idNTI qFfNp lGcJw SVpYPWy xXQqPpD WwHXt xoTft RGpIB cyRIy lulLdkM vAyBhs nxerlwA oFEgA OMkVpY lRUSGl FOAfVZ UojroUe XfdDgL gJYQTTNm kwySLgq GUIMzt EotZx puimt iMTZg kfWcedJ MIIQK EvxBqP RmJvM LHliu zqBzI LHyov JZHrXR bYrnB juupTr OVBIEB QiaLi otItIh ftfwz PUosO wwNEV KJrlg xiGPN whmtn YHnwu rFfWr fNZdE wuSfmS xIDhQ eBotuU qqOOO fskWU lXEQBDJ AvgXs PKfkR rUvLIq kEwyJy IsJXX ocPDh bVbaLo woyjd ecsXr jBufr WbxeXWC rZcnNL MVsCh InNPw Sursy LKTWa TuOPEf HOntW golzyn fNJHe WodJz SqbFCMY SIQkv PhJtq JIDTn ypZKx eDdHRNQ bQMLI vLynCx NAHfV NahsU INErjxq kXjfynVior oOcEr utfKB sPWsf yWuRV CpPUe mmVTFD tBRwuZEj izBou sORLxH VbPgS ukafPY sNzcUbh rBznH warjw ltLUs hnDPH TSUVWL VWRPN VWRPq qAgxYc QvKHk qgZNG ydCymR aNCTaX kLMXr wSVWhI qthpmR NdMBY xlSEu FdDTQ XPmbxtqncK LyRkf ESTRdtB CcnpQ lqUZWlHmrK gYvIY EBjCO KrCcX tQYpt svDPO SUVWT DucPe EQCsiVWv LygTA YLTYZ yqUDf MctBoPXds OKmNK qnQet HlODp jDDUl ySZGWuP BMbOl CdpXM Kwfbm dQdvpWg cfdSg mezmZ BplLy geKcC GbZwm XicNe SWgNwi zwczh jyrln oTgYQ zgBkoB MDGpo AmSLJZ aDUeu FlISH glAhA lwtNU hdREW TMQXH ifkKlj TMzgX VUOYT MJIYsbaon tYYBVL iDYVRWv EUwQV KMSMP AnRWaN gqcGL sfWOcZ SBoufX wwWmI qfwjeL CTauI XyLevDPB SnfAv nZYssOUDN PKPHbg EEbJJ QufpJ GtDyZeG iRUwTH GExVF GesksW WlPcL WITOy maDKs gwuwx MeJVnvE lEEjPf jYjWDW PSLwmu xlBuj AvAbRSEU aWnnpS CSTvqn OJVTZO mxJEkH PyAGz uPQmREy JhNQP uxlpj GfEjJ kiTglf HVWKDe dKqNyB PLLCuARnC Ewkcfh odfxc AjVdt EQqoX QKGWe jkTMT MiCWQ xOCnP xTsvvWh PNXNq MPvcu VPjLh axQVJ VaTYReD PNRAO wYiUh mgzvN MiaNMJ XOHjg NcGAM NQzlb fnckJ UQQrmF xJQIfN fOdlY ogNPta amMKh uRfLn ZUxVW QdGHUN MHKvX SwbOo PFaYx OnRgT FmpoAhpi VmugrT ZXFmw DovXO NcgJr nFQQs zzukyII kPErTG hPlWC iCQuu PObxsaG yFmHUW AzVwiE DkdSL fvQftb CvOGz exVlOQ OxdYeHA KKDUe exVlOQ OxdYeHA tvhHI XfgJt uSUVhI RzTspBy tZbndiv cHhtB hnuJkv QglOS BMaYiIkaJ LJDaD vFoFh vvmnjl wmjdS tjmvohqp IzDKT yERweB iXjzb Whtxk sXPVjt tLsdB kaHNNVf lRbbK OfnpQs oXJms SUVWC lPkwrV XKuea RPptL TmOdJs vtJuY PoIka XTiXM hxGrU SUVWh pknQj hYJvhRP mVWEsB BQSUVW CmJCxR FgVKg kqBZqR dRhfJY gFNDs QpzdfE GXGTt RXXDb TMBDD FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS WOWew YsSFW mGqssw udSFM vYUETY lEgDC UajSOP oysjSR DXJcbO kBjFZv WVHvhh hROHP EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE ZFrWl xYYEe wGXYdZ xHKmpX ljekA PpCYUQME oSLUjh MEEEEE MEEEEMe URBfW XgmEh TSVWu EPMMtM eBGGk kCYCx ZasUE BdrGKUE MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE MEEEEE sLwzn FrXJmw OhZPi qAldS WfnWY CQobm hlJXN MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP TRJPZc nKUjh SVWeMEEMM RMEEM fRUCNa DwYMM AMLrw DPlij hXnLR EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM DwKYG lQRbjQ bXpRK RWmGZP FtCVR CpPHF MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ PojsM QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE PojsM MbMUDMEPM EtRMQMZEUE UREPMH EUUEEMMU vVjGM EEMME MMUUEEM SVWeQ EuWuS wdrRl aZDbKW hLkEy isyraO GAoxb SysxTW Lgund DOTYkX zTQQYM ajbNr KVrfQ gCeDO GmvfHX QKTIU hSART HVpeQteH oKMoZKm ABlbw hlWzl rpCcf tFqmh JVGqC njJNZ AEvhA yzfXS sMRJy sdkHrq NhseC lYQbU ngZXl Sgghij uVXOx VydyJJT UqXCh QVfYfj MtYmk ORzul eiQBREE GnzzB XYyQm QTCuOJ zbbFQ ZNtFSY wbauRu uQHLA sBCoN VTjDo EMozyx pRKXP SWFHq CituZD nZiQs zEhMW qmPIGt mmIVJoVM cHPsx kAoQU DqZYK zufdT uLdKHf RZkDC kPtkFP Yyedv BJEBz kFKOm XXaMBSI ysxlNn KXVPK miwIt hmPFd XkHaq XOous goLri tIiHlc rgBwT foxHGp wOWfUCU SMgFO YBIhce BACme aTJSW NZqSk MQEhx QQkaN MAapiG YatxlTBS BOYgCW YecAGX PQpbqmBL VwJXQ jILHazpaqD VhlNHAcn STHio ifiWF ynRGXXi ULirgva ssHmb cyeRwF FeyVoLBM Nmjrv GXEbF hKRvgi hImOx TvFbhi XaVJk iQRiqe RWDOqzN sPVEa SyITR zCUFk gLvSO CpPHF aOvrMv WTwSkg DpFlv UNCcl XwAKx KvtlA pTmqKY ZIbCof zOigq CiYgnM VykTbOIa eVqviM qaJjy TQVrS lPTVRd KyAkJQ rXcbc SUVWj BABABA cXxTt WBGRl QoNJH TRRbL zcZNW YOrFf PQYYt eEsrj leRbX uYSWu qzwPbx EntelE ineIEE GenuE hUgsBI PeuEEEEd IjbQU XzDLh QPEPh QPEPh HUjhJ UEgEc tIIpY tFnon QVlBNz PYYug PYYug YYEPV UQQEP zshln SysBa ROfBsG JkmcR JvpsF UUQVu VVQYn VWRXe knwunO UQSVu lHRdAD HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY QtYFNEM coUVh XpgFx RjSlr CuiYM csmuP aqtqkLjU BjghJ hUWwf tPtLw PQYYPV Ujhxj aGSVWT URPQQh USVWj PPPPPy MeEPj iSGOxcc JMekZ aUYHY yZHbI xhaha EQPjjM VPuus FmdVwUQQVu gmVGcW mdAdH XahkV USVWN KifBk xysmc gOhlKC YspPTRR pgDUM UQSVMWj TsVom HzKkI ZodUOK TsVom RfAVH tnInwdm ItOLt ZAohG bLzPlan jAZjX HFoPGl bdBwas UQQVWjgYjGN PQPPESPW jsXfF aWUSVv MSVWF FdluY VodmO UQQVW Vbion umnUu AtAeR wqXOBmG AGlORh Gzfdk Gqhfa IHaymR inRmx RLnTv YQbzl RPQQE VQuuH uEPEPWSY yagvl huTIL QCFyDx JxTCW YPVWSu kPVWSu uUfRjO lSjAi qXsLBUtgSxZb gULyT zNrrYpMf cmRemJb YDLozm gvckCVq pCXmaO IgCcQs UdcCF yahaTi eiWUE rvJXLcTi gonhw ZDKbE YPdLV qSZAr JjEoA zjQQi aDgYS LVAzgG ubcIr uPuSW EEwPr UEHEu GdNSzm Zhmzgo ranwT XfEFhP EPEPk AlVpu TsUCC PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu QTuXV RbYZz FTFMUCDh uBjAYjZ jAZjZ UQQVWO SVWtdAu piSSw eUQVu CNhGNm pPyFa cUGqh CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp wzWedbXKj GqLdf PocAh GQkoI umMMo ewYUj qQEYC YBGzM PnhJTJc xDiCfFmSr MEEEPu dNLip cHGcE xNXSk JXRNVP mZHMo ysCql HwKjtQ bWlrGq SOGYu PPPPPt PPPPP YOexU HLMMQP qnxxq adcyN YYtVWh EWWPb uCYYt uVWTb WWWWWS YtVWj PPPPPPPPU WBnmet VSYYt dguKW EAEfEEj EPQEPEj AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP NUQQfE fEEPj ZDNMF JLgWlK TJdZYIX NamUQH eWrGY EGWVj WYQuH tIEDsQ LrWwKb nSORo AAwSui ECBkfS CXuutp ZQGaa MSVWu MQWPVk MEEEPu SfuTj LrCXS PPPPPWSu QQQPu VWuSu PPVWPu YGqhK UWVSM hbKZGh FWVFJ KenqF DDZVI CgHrU jZjUD WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu tXosG hGXtj KYwTyM lyCqyJ qyyNL YtLLh Isxqmp LCdWLTj QPLYYMt cggeYjZ eUcBhw SfEelRhR nVIcu qSqfa MtSScR vANDb qBmws RehTi HpMqRT aAyLbQ wnqQylM uchUN IFYPybqHM chQDJv hpgXWy PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj MfGXQ PSHYQ FPHmY EekRX rJgkn YCrIxE gRgbk jWOLf GykCL fYWUM sFwum RWwjGsMV LuJng TdNAa eKAoPI WxxVL EXwHffCp WvvVL WHtAtVL DCVRB JZszd jlOCk WGIRU usOdc PADcrXlQ ygjid tkGdVa fHirEI qvpxlp oiGqp wEJdhu LinhC OELDdgO iMNNagC mGGXm oXbVq uMXbHoU IvlJNh QQQPu MEEEPu EEPVYY BRhKLtDgs sajhjiT ZifCe KLEVD wfdlR tanEfmb rYxTsoWC gWWVU EPeuEEEEd csmuu UEcsmE PEEhg tMLKKYFA VWlCv FDUSfE uRUQQSV fIAYx NAzWG DhnksA vaWVr pkQPZ OFmQl zBZKI uWtQDe IrFCNv XVJAV NuzDh ocqPMVse tqUnRZ yAZMh Xdfyh wJMNky GbDEEc XvWDvY IIrBT VjCkt SmrCv SBCRA xgMwLs VxxQa WTvnhu PsvCk fnnawid OoRNu FrjzN cuguZuCE kiJhp QxWyF tGQyrg YQUhH Vdwct TgARf HIWqX YWpEK YBgPKS oghxdIIC EsgAa BnxeOt RKuTU IiMCPUx cpiUBG phSeJ SMpesuvbg PIOFB Stwbx lKPmp gyrDL jxdcR ypQHV JFjnb oNnVr FblHd ZfPLT QPYpj GdCWYc irVwb LhFcr QTMOyZE hgdrXXUcv WRxgV QkOqZ FXTsgpM Ltwwc iRowP afENZS QAjcOWj llbFr VOaviD WswMV hjPpz VmULj XcrMxVwhT VUvOz MvMwBq jMNFjpP TsXCwU YshBaY DkdHcf KMDrm yUXPT yQNHKbWVj APIUx BDyhcdq twflTB EKwesD ePxLu CjipN diCtg sddlB ZhShW lkgGdB PUZsq abtqnTVWs sMXvcO GMnbT pSWKwp qLKyP GjxEPD JklHI THnEJ GAMSMB sBrmt UhCTIBclH NjqayY ysDVc DLgNrQ sJAVIVJ uLBnLoK JeZbLJu gdYBJ aQDEe OUOeoy IKaqyv wWmKq kIHSpFB PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI qhpTraQ uHEPu uEHPo DYPEYPhH RKSBmrb udKIcE XYzlhsE MuUMEIEPML UMEMd wCXML EEEMEME HnEMI MEEEE ntJETE EPEPM fRUCNa dCYcm hsnMh UQQMEM fRUCNa XhQRY bfvQD kbsxYq GLJPQ Notzl gLDVqd wHNyX sJALY BcmaN TKlry CcWSsiXH VKIQN Fueka sjQxZI JPipZc qQlZoQ apXdP TgkRXL xFbmr MVJHe zLLSp EslIO MVPsOT oiNkPG ElFTI bMsnoM HjVMD eXyelpv Rrbgb Cgnyr TmeLg SrxjNe EMMUREPMMM EEMUQ UQMEH MMEUE HAFcB nUQMM EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU nqYyBcI syJug MQMUU shZXe VDHuD zBsuh UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd mxBTndw ULMEH MUUEEMM UEEMMU hMzllFhM OGKcDl AYrOzRm GfzTG QhHcQ xeZVN NsKQd JEKjOY KemFPE txZbT kVNhQ hCYrJB zrnfu xrAhT gyLhz fsLJa TjDaIv zlTot oGLhZx UaWcne yceyw locale bKZISm iostream KGbKZq badbit failbit owbuZ qcZlnEt OyKLc AYBrO aXdnj xsZVNot ymUUg GwoMH MZXTk efDMU DCCVXcP IZMfV HrWfR ezjrjf maCeeK NHXKe xFrrLOh lsTtA iEmmo BmILMY ocsNn VkazZ array length unknown error address family supported wsmtOk already connected argument argument domain descriptor message kqconnection already progress fdevice resource directory empty large function supported unreachable hOYoillegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device process supported Boperation supported owner protocol error kaLstate recoverable files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx UgmAKcL FEKvjAQJ njuSsV mRbXa iljga YfamC kmRFX EHoqwQm cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx yThvw yXqMZ fAgYrQ xZAgtt cBjFUuaN DdmRbX xsMLBv floor ldexp hypot frexp pxrBv fsinh nemRX InHED cfMonday Tuesday WrFeb January fOfMarch April ZDecember abmRX VFVjza gmtYb EnumSystemLocalesEx LCIDToLocaleName mRbXa ulLgh LYmGk rZSIfKlM mXRbX rZSIfK xsfxr hzRMHu UaiKR mAFKc YiUUs nieyw mVbwe iBefi bAsDSqMy JbSSA kqyrt ajSWz GeLvq DMviuT NwEbdu NrycK LtmYE WUSiy NpQLo RFNUo Cieak bSkYY VMEmL AfZTu kQDJcD aAUDM LlToZOWJ NRxqhu VxpCN PVGbD ElYAv zGntH NLaNC ContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey sdefK HmRbX LTnCad ZfUUU oyKMUg rlVnV ZoDLXs qcrfQ kqEAcpu usage usage AOABc YlLeg FsVQQ JrXMLJ iDKohd CcsDf ZsUex nicehash vgGRzF ukiollW VzBoKk nUXJmb RBzUjpQJI xAscTLBv Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ KJPci PqKTcu SVBwN csrHj yXaaJ vhqnh BFUXFnGk ODavL JLXCM mNlVez zdMNe PWxHo cBxIKN joTVC gDaHo EiSws FMGMv VlyXFTv KdDsA TTawO XFZinR tkFtuMB OiiUg ABCDEF slMyY aThCeD IWUPH JwaCzm ppyXx CsTRba sGxlf tUEYs OisJs pklbBEa ddeuBi PKRAK LRbZI IWUPH ffrdJbh ynjFp ezWct vcmSy SaVVC mRbXr IswPH OdGYzu aXLLnj ziZqf dDotd FORbX Inwdm nmVue mRbXr kUqxTZ cKqCR FEYpQJy NmORbX Inwdm DBBKY XZKRmVRV udfNL YJAtSSj HEIzDNrEDfS bcWvm gNbbB sxOtV AyHJX JaEjvE rfRoW dDGsn Gyjkl naKdj zlTtV tPYRXA BJJim iIwKA Vkazy ffYkUIX oYsaq lqjQPd jtACrX IqwtBc DSLInIm DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven RiseRiseRise Geode Geode OPTERON PHENOM PHENOM MtfFUSION FUSION FUSION FUSION Pentium gPentium Pentium Pentium Mobile Mobile Celeron Pentium IRWIN GWESTMERE PENTIUM MOBILE fMOBILE WOLFDALE MEROM QUADCORE PINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED UZRXIHN XxxTs Inwdm Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF ECANCELED fECONNABORTED EDESTADDRREQ EEXIST EINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY fENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK fEREMOTEIO permission denied address family supported temporary failure permanent failure family supported resolved protocol unknown service available socket connection already progress wZoperation canceled AItsM connection refused connection reset destination address required mhost unreachable interrupted system invalid argument error socket already connected Cdmessage network unreachable buffer space available device enough memory machine network space device socket connected directory directory empty protocol error result large system process cross device permitted unknown error links async event signal unknown error malloc malloc malloc malloc malloc WhQueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore CreateEvent ZZgWwW CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress kernel GetModuleHandleA CreateSymbolicLinkW CancelSynchronousIo powrprof Isocket fclosesocket Missing after object member Missing object member escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected YIysN SfOmIUd dSyntax error value object array expected hmfull QCJyQRW dContent Length false ArRSm MQRjvq PZzezwVf gcuSU myJhwB GVrnLj euSCwZTT fTYbm CblIi BRFgG dONUc dPoyR mBZlU CMuOaKJWks YcTilL LvuQm fcLYev YHawr eCtluc MISof dBJJE WRZnS qoVRJH nZaUiT RWhLl kjOiky PEZfi QgfICBw IfpkS qptBp KxVzpL DSsrL mcoqUw zFZLf dkWIu fafyxijfhkdanfrzz Inwdm IWUPH aThCeD xZNWt vcmSn TKezmSF LsoTj yqlzZ zlsTtC UWceN jhCYB ZlTinUw uJbui WkYYF aVckxO ocsNn VkazZ hYJBG LaIuA Inwdm IWUPH aThCeD xZNWt vcmSn TKezmSF LsoTj yqlzZ zlsTtC UWceN jhCYB ZlTinUw uJbui WkYYF aVckxO ocsNn VkazZ hYJBG LaIuA Inwdm IWUPH aThCeD xZNWt vcmSn TKezmSF LsoTj yqlzZ zlsTtC UWceN jhCYB ZlTinUw uJbui WkYYF aVckxO ocsNn VkazZ hYJBG LaIuA Inwdm IWUPH aThCeD xZNWt vcmSn TKezmSF LsoTj yqlzZ zlsTtC UWceN jhCYB ZlTinUw uJbui WkYYF aVckxO ocsNn VkazZ hYJBG LaIuA Inwdm IWUPH aThCeD xZNWt vcmSn TKezmSF LsoTj yqlzZ zlsTtC UWceN jhCYB ZlTinUw uJbui WkYYF aVckxO ocsNn VkazZ hYJBG LaIuA Inwdm IWUPH aThCeD xZNWt vcmSn TKezmSF LsoTj yqlzZ zlsTtC UWceN jhCYB ZlTinUw uJbui WkYYF aVckxO ocsNn VkazZ qtWWRtB MLmGm XAKcMl xZNWt XgRrN UPaqO qYljp cFaic RdpxvVq dWDzc BUHRv mRbXL YQJAGT cOQJR DStxgc ZkayU NpIhNVP MylkFglD LJcai TxaxS KcKun CaJZZ aThCeD rHiJMI kqBoHAi Dotdn NWNKx TKezmSF LsoTj zrufl QqdBcAo WAjRSzsr WTIVpeZxey MMydUhcd,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj SJjLZQK lSLlh WyToV dOMmbP ECPocR AoqUz BJlMW XvRpN GBNvWR qcbgS WTlsk yCOju CFiSz gxXWB HAUqALT EOVrn slknhPi vPLyz yffcw MqpLd moFmlT iJCFCz DTIhttmL gHOGR jzqUw bhGPaxX WIUOm sHUQz RABymQWl evYIHI XYSlibm tnvmN CQnNuUj qqnkc lcWpHJR ETvpB CNVqK QBcBE TviltSP luEOdr DlUAkuxM xauAj GEFkw rqovS YmKsVj rNTeH DPmQT mLlqk kocop QBSZUA VOYNp ztGhhAfs euGcwL SUcST EyZkn LrUdK ixYMZ NGloE KfjaBP DxbvF DFViMsx ihZBV DwwZg FhTfL zWKBF irPMQkN yCXCUc NLGkj NIXAAi sKzhhYv mIFRFh kOnKr dayOqpm CjJeu ojJzF pPlQe rQFWLF xTAqaT bGQTX LgglFe gkWMv ZQiHJb vYhMh VigOb QqPfBc vmSjDb kdXCe EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl mldGd LVmehI ilTEW YpTnW RUzXD gBxMIo SNDVJ kYeMe cBSutlPXz sLkcy DXZVV CKovJDGU hNNjN RWLmERH zpeHI VzaXf lIcSznU eamYqtHnH npPnr wCpQD ulQka abYAD hNNjN SVlqG aTryFMjV hNNjN QMdgfDr OzHOTQm Vpewt qoAyV lZpktgA OHXeE oUQxqC lXezaHWW ZvNRJ zqSSN zERpWZ THZuWc JIhyrbJ jGHgU fMoji hUTTz ANISuao REIYR RbTbIx JhcNd PxRoh HyGbg TJynUL SVHdhP WinMs eAUQSVWf GzZfj ONjsmI owCHor LBIcE jvlzSD DiIdJ RzWdT KeRntK lpIYj SVpYPWy xXQqPpD WwHXt GtOCMf iNHEE lMOqx xBHEe hxilcr LuNqGu vgqeVek aDexN eyUOG chXmpk rOFDQ ySrqD EAlTqerTH Oxkmz vldWwCUW kTjTqDp jmKWB SkCxFvM sLCRh nqTBUgK rUXbg MMcEQ CURfy rzqpg AivCb RiBNh uWYbdrr IkuhSM lfxwyv NnAytS qybAib kbxRQ PRYZQP UpbOWeN oGzmAU PcATI LWXqH wddfrx wQKvP dmMgr mHuSJ kpvTP GeHgs yjgYu KKZKd mVmMz fyTjd sOsuEW qhKZe nYvnTjn OyoET bfmck ZChjv WyKryj AsuOg XQFyqotccvE OTCFR XuAmR wZtZX ypYrz iPYeo iESSUVW LPsLPSy sLkcj lhqdgD qqbgq hNNjN StsnW aTrVG gFbmc iKjOI zYGnW UxmTOMU jASrD AAjXHqH Nljui ZKtRM aNnRs RJdvM XZRlKya FinMaXt UWMbj TSUVWL VWRPN VWRPq esWxdc cVnIykZ dpiwG mKhNe kYJZj fZMEN dFusO SVWhI NBqqzgq ckXaY NvANq IFSVWh wLSnnh XZVhG motlKD OWUrpD bzXwZ ppDghcYv SUVWT isGHc YdMMM WZFSXdh jkiAkh viOTRp sJIvC jNMBmZqg hcVMX iCNvZ OBoQb YXKEE ahtop PsRmG xnURm MwoaV Nmvbq FaBabz OSxpb ymmsz HNssm zLnHbt QxQHi TNWaKL AQYiQJlh bKtbf qRcsU NcOTT XtNmF eYtMPJ HwuFZH zkDAuY IwpLQm cnSIkjnY IcJuR VJyAh cjRsO ImKcc IJrie XzZzT mNKtPH yUxPN LBIcE cSqEog FgsYL EyzoM MJshaf aZbqg SRoRiN BuSQkwHp KgQkd nVStD QSwKCud bTBDT dhpQf cPyUuY EVioJD eSXWl aHJBoq uJiNQ GWfWzj aqKbvPR lQbxd fiUObfd QlbAV fChlQ GkhvftU FSjihS EOzIW KjPfu kmRvt yiWlV ESNoF bmAqt EygIMv zmQcd FpoDbsm gJEyOM LaIHx woYDdt TiZem VfRdB DfYtFk gzhsEH aQJurK CODtI FFTXHw jVkcl YnLey jwTfN ejgct oQyrQ CMuMD KQKGS pMaqH EmaVZa oRsNs gbnPT Rhscy gImoF idhoh RneOi wHtcdr wpgNz vtFAMK ldTYwU sbcJkSUVW wJGaT MpNyfl oWBlp VPjLh fYuMi vWivd QdLKxu XvDCKx RITbK SzYah PEruhd nmCiE gjXprWD IlZHS YnkVQ imzqH SqLyy XUrXEo gzRGRG UMNKA nwBwaw YgYbz WekYsu iTVAVUxVW cqZDc HUdxs TIxys QgKfP MEBCy FgTYLue RUzSiR gJTUm hVWFE KFJCG mnBhh OPDiQ jLYRdJ QHLQi zYdxwc QxrKzX AIHUh ZLNeYm BVKXbz HtYhNY TbAprb iLCUy iNfOBD ghRpJ iNfOBD hNNjN wPTVO qumcPvR tvhHI CeQeB uSUVhI TnGsK UChCe kFcro XKBMk Ndjeh kqYzUwo HtsQGKmVV xIPNjSu NYERFvR KJEfxH ixnAfk zubjtvVf dcaoe DMRkDOY sXPVjt tLsdB SUVWC cDqON ZZzCtKx hnAZvldLw eyMRBJb HqqWbgs NNFbOR dwNBNXl smbWV fFgkA YiDGDS SUVWh MsHEc gZFNJD EelInW QSUVW TCvTb OYKEIWTTN qMtru GXGTt VIggg HPLpM jIgsGr pnyoQK TeXANiCH fkMCSN jmZmN fbWVdQ FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS avMjV WBPDMW XMOBvx aukQh BgzWs LDPrUw NNuwfz MjEooN izcKv qhbCSvL aSvIq wNeWl NeHZb NAkrj cJdnC pudeY wfvrz EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE SVHdh xYYEe sEeXgSVq ZQqov AEMSo ssnxn fQXAQ MEEEEE MEEEEMe iIHhjw luUjh TSVWu EPMMtM qXQQtm cDFOb WDDYufs WpHVt MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe HjGct EPMEEEE MTVMMHVE ubPXg MEEEEE hNNjN yHWQa rqkCIkN caVIN GdXbE BYLPy MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP HroRGK pGKUpy SVWeMEEMM RMEEM hNNjN mplME itLGg eyNbz FWKTuDSQ RaYTp JIIpz bwUISs DduCXV gmYUq jzqxr EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE eAUjh EMMUU UREPM CcEAh BZqodvN zlMyj MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ hNNjN QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU mkpkh MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE romkeHvD UDMEPM EtRMQMZEUE UREPMH EUUEEMMU gmKRq EEMME MMUUEEM SVWeQ EuWuS cGZwf nQNYu qkCakN kjvhA vnACszm greqBJrt BGXsA EWXEw CNNrF ipnpoh tJYyax tMDcGV aZiUz WkMAv aZEKqk EQtnT BQmFnd fZqOWbTV pWVOSj SIExE zZjUJ fuExIc QTdyk YZyQR qCCzeJ RTJtCN BIEJUeI lDYmLl qCxRM xXMBWW vzBtnw KEfFc eDzrW WDzMGSz JoksCN WJmYF kxXNJ RjLQG iFkmIH OecGY hPoXf lfWQkb SyrwfRJr IwezH vzfFgo pSTQw UKxKqS kcWUR yCCKto zzlvW xDeVO KVAzg bWogy fcnhb mAirr wikQZ riuAU ZgmBb foyrz UbwMcE ssrElmh BKOtnp eVIdb vfdvp Dpeftv DOwuub TXPsC OdMjn LGGqZn SjYLw yzfnW zjcrt ZMDMAS lWWJh DKgPl ylYEkZ vbvcO NOmHvn YAGCKQa gMjXz xCnDC SgFpKz LtEHX qiFDR JlBia LErDa RajJE Lrwxh iwinvkt rKMXPQzp wZwnruw sHRXB kzUGKYmPxy PWJji HHXusN CDVzkU iBcawS rMBiZI ssTjN YgRNbV xEZRJJ SSufWEu Lrwxh HzigO nzRET fkvVKC WagaE Fcdmim YyWMC QXVZH sslWZ MrUFN Tgnmg SIzJnF spvGd nmkji VGkAnEw phuGH suDop EIcWT JlsRfo FmoOLi hjJIYNJ aXeHy SUVWj BABABA qkPpv aAVbfOi rmfTZ tUwedJ laAUb aOpKx vNqHP NPdOM eOYLi Rtjqy kKELN AsuSLhHA PQYYt CHKiwylVcDqI uYSWu EntelE ineIEE GenuE LLQEU kVRUOha aCtmNL PeuEEEEd XUQVu QPEPh QPEPh nNRHG wsuFR WLivQ ZlJPm GKVWj PYYug PYYug YYEPV XUQQEP GnyOt TbHDIH sMofa FiPQn VbtID gMNfh VVQYn fmMjV PHsFXI vnUQSVu zGJfY HuYUV EPuuu mxLQc fZBVm SVWUu tfVUk tLxXj USVWUj UQPXY UVgBa CuiYM csmuP vUIZZ OCkeU tUwSbn vRySuA gKhhCP tPtLw PQYYPV Ujhxj URPQQh USVWj Busqkx hJMxE dRvMn PPPPPy MeEPj memtuWYcX tDToO vOfNQ QNhCCD vUYEFa coURJ fjcih sLFRN KNceb UGtjPrSv EQPjjM VPuus ISyUQQVu vpsBU MXhta Rjqtg iUSVWN jVNJD yibmmk jLmGDM UQSVMWj yuASuH ItOLt HoxLBlB MFKBJ xcKJX jAZjX YhrXe UQQVWjgYjGN PQPPESPW jsXfF ZUSVv RIfjJ dUQQVW CmJRo yiqCw BXwnJU VVkqoy TqWNaF zgvfX wfhrd RPQQE VQuuH wQIdE FVviy wEnau vOqIH uEPEPWSY znPMV VgHzkT YPVWSu kPVWSu nnWMXGT HLDHBM RrduzD jBOTF bQOwv YQzNlr BcpGf Invrg uQpjZ adEgOK hmfaMJ SQWkCf BJQZf QqRuG GLhaE PNMqz naclp aVQnD lftwaE JeonY uPuSW EEwPr UEHEu xDqCY jJLJI nuvAU bMMxe DnUQVV VzuDLTp JFUQQS XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu vVRyw VtwQE WJmbn tWTJn zLfVp uBjAYjZ jAZjZ UQQVWO osqkv SVWtdAu FxJymY sKgpXMk UGqGwCzK MKELD roGGg gNWGPk RyLUT BzIVC TzXPj ybShx EETwq ZldtLm CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp ZenFYGKr ZNlbt BuOLM TPaUcsm AcxgR mOSyj IKVHN aINsqD uqnMW mwZQB bxVuanUe ydfCY YStDTy SaqVe MEEEPu uEPoBuc SOGYu PPPPPt PPPPP HLMMQP WIbyK NctWZ YYtVWh EWWPb uCYYt uVWTb WWWWWS YtVWj PPPPPPPPU FMQqAa VJxSH mMyGbT VSYYt CmCcqa awpxVy VmkmA EAEfEEj EPQEPEj NBRmf AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP mlopKwP wvdNT Wsppmw nOUFku VTajkD UQQfE fEEPj pRbyW rfOYA Ctqcy aJfKZ nihmp reLAEmVt reCAERmVJ mUGDM gXmFf EGWVj MdShj MSVWu MQWPVk HsGLJ wYKHYV yGbaM BjmoF qsBFhs MEEEPu PPPPPWSu QQQPu VWuSu PPVWPu UWVSM zuhNd vnQYNn KzhWIS dqPHiuL DLfft FBAxH KeZhD qYsKc WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wVrKBbgp wHuhjj YuwHu uSPhO oUQvH LYMNwn OiLuy SibrxM TqMsa YFmsJ QPLYYMt SOHhSqY PBGmq EXHoE xtvurq lQitA RWDHQ bYvRa toiUV KmzoD CvLOq bJmFg iPJSV ffUEE RZWSL KPagO FxJymY QMajKvpz PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj DdAho CQvWhT MfFfve SQkkKW tEBoa GycGS UtlYv wNrQJN ISGHOL wpBxZ DmFKZC blvyZ adyjsRu SkkQZ WxxVL bdtqx WvvVL WHtAtVL bEdWK uQtZpo JGzXy iNGaM BELeg TvKBG OGTli FVpsGJxIn MpmmQy YtOlbx DmsDO lVldn maWtp ILteB QBCtC PubSQF fFIki xGcVy taAxg qyJMa rZmKS XoNOVS BEUVu QQQPu MEEEPu EEPVYY aajtq aTrUE sLhBo FpqfBt ncqUOu wcHWZ oZKfL fyGbg fcitLo BeyCoz EPeuEEEEd csmuu UEcsmE PEEhg FMQqAa VJxSH VWlCv UQQSV DaqDLE yvurm UTPgBS UfhWHdr DrkisOVM phMwRr EicYgy uhKcT RicEjPC hSHCp haTIR lbKkB joERH dhyen IjUMfW qFwVW OQJsOXF HtfMs TbrVTg wMHLv owsOgNzT kgkZX GHsLp uUvFS oKkYt QBsMq QiHhb ArpYBy DpxsE qxXWN pynlR kaUOV lILCCOam fykpbkm Slcqs MXSDx uVZJJ qMfzh dLGzq kYrnL ChvcKtrh lWhGI jLbkq wcjQznUg CkNUD WGjMF SOJbM qcpEWcEmk hTsTIp lTbyZ vhCxW JWADwKOD JvIwPP LSIIO HMrOOn HxIzc ThjLV xOhTFiR ZhPCHrsm UQPsjZma KHjxpG KrPnl TuMJS iBztjq AfpgyU mPoCTlG jaRdM mQuvI kHFtD XKeBB oYXFD TfjWcyiQA tlogz iExnWY XegEH FdDBX kkjXY cOVnI eAjxEPD hvUln XHkkVR neWulq zTNhz jMXMP DMSML hVDtWM SVBzd bbeli XrOyWM bGkNU yzYipWMI qgruadf rMKMG SKpAc vpClqA PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI gqeHcK IZpoO uHEPu uEHPo DYPEYPhH eXqHv cKJDP ZXZVM sahwi oIJQjH MuUMEIEPML UMEMd HpoTSp cKlOC AahKQe fXtgz HvoBN EEEMEME HnEMI MEEEE ntJETE EPEPM EZVZJ UQQMEM eZUSm oYBxg dhyfo OGdCJ vSdIj IPAJS uhNLu BJloZG vTlhJu pFOSz yGbLD YcaDF tknMG hJXTg YfeMr NnBDNa TYRPC QGHHjw WFHuB EqBPuUW qaEgO lyvSJ hDxlcU IFQtG KqCSk pgAxL KxBHB sCOIi NNMYE pYuTU UaXNM MWsSzfW tMUdHC cBhTu qhWoy fxuqMn ORQrNk rHbtu megBV tBwGe EMMUREPMMM EEMUQ WQajt iUQMEH MMEUE hYGQm qumcPvR EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU zWKBF MQMUU xPbKB sUQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd iULMEH MUUEEMM UEEMMU panzNQ SiZEE iALFpMOPC WbaPbu GosRM puUWz rNMHG vwHva FNKPr qBMog lTeXo eKFfF vZkbEVGH TStmafU RBRSox ifRqhe URaCJ locale lOivp iostream tMdios badbit failbit lOivp bDjZVb QzpjY FdDMKNg FMOOj rMwGt qmRMM BgUWe XCRzpw OuQqXI IGEur yVRuP SPHmG ZKNBD array length ounknown error address family supported already connected argument argument domain descriptor message connection already progress tddevice resource directory empty large qJfunction supported unreachable qJillegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device abZdno process supported operation supported owner qJprotocol error state recoverable Rtext files system files YIDwrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx DZOBt tVhIN sNFCv djjDr HCZUy cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx dXZVK UzrZZ pbRwj ddktr lKUIcEoc vYaDn vYWZL QBsgF qHUdh sEasin sEsin floor Rldexp hypot sEfrexp eeYTy HQshz Monday Tuesday umROct January March April December jfJHH LCIDToLocaleName cMNAN EMyGbs XTVKp WfqbDL yNpxO SBLdh DhKfzn NIucku KvhYA djaOdO ctoeHA MgecF TMbpl GeuJgS gZlBg LtmYE AJrNfeCk EXUyU dlzRC iyHxv PKIGM JjMGqF pphUu gfbkc DnlVrQ teZYT TewFJRvM SFlgQD PBtgll zjZen gWfMfQ mxPTJ cXeQr vnkfJ pDWbLE oEHkDOR vbiwn fApDVbk TRwvL HkTGkQe ofcxw npOlX oZxEu zGntH ContextStackSize ContextPriority SchedulingProtocol sEiPY ZfUUU yaKuz zhFeeS usage usage mRqHR YiieG lPKfB nicehash qTfRt Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ siSEi HJBcxS vQCPw PtcoK JLXCM mNlVez Zllavzr gYGTxf DidyU nhANIMd OZyle aTOUNf jnFmuZ MWFIT SbNoe OphSI gctqd QOBGt iXGYV ThKkM RFBdz rIZQk udeBZ gqXBdlX ABCDEF SVySQ aKSvN dafWk EnzNT KNPua qzQiN oKJXRk AZkcH diDkN JOgoA LxOyJ DMfyVqP Rtjqs QDoAI SqmaM fQpwHpa APqlb syFtj BwgzY pWZeJ OigeSJB VjhIk lUHRig kdgAr QYLiN FmoFhP rDUAzc uIKdQtCG moFvP EnzNh zjMkO gGaJvj WcDqO sEiPY cDqOy wnyGbg sEiPY sEiPY sEiPY ABtLfD sEiPY jMkVQ rQMgGGt gXiiG xRMxJ FrYMjO IpWZeJ NtruO qlyizz gzXWI FYxFdBlL TwtXbDWc DpMjC uSVqE jpSFT jIrawAE QQnyy VzsHj cDqOWg sEiPY qJSpl givjG SqHdh sEiPY sEiPY sEiPY sEiPY sEiPY sEiPY sEiPY BtDLf sEiPY sEiPY DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven DRiseRiseRise Geode Geode sEOPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION RPentium Pentium Pentium Pentium zfALvb Mobile Mobile Celeron Pentium AIRWIN qJWESTMERE PENTIUM RjCORE MOBILE MOBILE WOLFDALE MEROM wWEAphv qJDUAL RMORE QUADCORE OPINEVIEW CEDARVIEW RCopyright Plauger licensed Dinkumware RIGHTS RESERVED QvqvWBz EnzNT xnJvQy GAvyE osEiP Unknown system error Unknown system error YEEACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE REALREADY EBADF EECANCELED ECONNABORTED EDESTADDRREQ EEXIST Rbkic EINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM EENOPROTOOPT WEENOSYS ENOTCONN ENOTEMPTY ENOTSUP EPERM EPIPE ZUtpqH WoeJgESHUTDOWN ESPIPE UNKNOWN kENXIO EMLINK EREMOTEIO permission denied xTEXZVaddress family supported temporary failure Dpermanent failure family supported yGbresolved protocol unknown service available socket connection already progress Ooperation canceled Dconnection refused connection reset destination address required thost unreachable interrupted system invalid argument error socket already connected imessage network unreachable buffer space available device enough memory machine network space device socket connected directory directory empty protocol error result large system process Ocross device permitted unknown error links qJasync XPEfs event signal unknown error malloc malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore jCreateEvent CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress Rkernel GetModuleHandleA CancelSynchronousIo powrprof socket closesocket oMissing after object member OMissing object member escape sequence string Column additional characters expected parse unicode surrogate MtbBad unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected Content Length sEfalse KoDEH wcqlr GaMZG glydnl acEqX imTOt LZhvf HQVgr hwNFIX bZOJo WbmOWSm crIADSw EOJaz ucAdpn trcAd Sxmcdq qisVSx vERXpt QsMks aVSIC UbnWj DTFWP YUULC fcqiHR WjwMjM YZisB Rdqadb mmFku OraHie rcekN PJvQD uusDMaq LbfuRd lHmAK fafyxijfhkdanfrzz SqHdh EnzNT jMkPK PZvDM JESWE FMOYLiN xrnNcH ypfuUzF rQMgGt ivwHpa wWMYY IpWZeJ xVmxP kRwEG QqXIf qlyiz NsyZj qifRph dkVfbwH UHCSR uSVqK SPHmG krPFw PTGRL OktJJ RkDncM SqHdh EnzNT jMkPK PZvDM JESWE FMOYLiN xrnNcH ypfuUzF rQMgGt ivwHpa wWMYY IpWZeJ xVmxP kRwEG QqXIf qlyiz NsyZj qifRph dkVfbwH UHCSR uSVqK SPHmG krPFw PTGRL OktJJ RkDncM SqHdh EnzNT jMkPK PZvDM JESWE FMOYLiN xrnNcH ypfuUzF rQMgGt ivwHpa wWMYY IpWZeJ xVmxP kRwEG QqXIf qlyiz NsyZj qifRph dkVfbwH UHCSR uSVqK SPHmG krPFw PTGRL OktJJ RkDncM SqHdh EnzNT jMkPK PZvDM JESWE FMOYLiN xrnNcH ypfuUzF rQMgGt ivwHpa wWMYY IpWZeJ xVmxP kRwEG QqXIf qlyiz NsyZj qifRph dkVfbwH UHCSR uSVqK SPHmG krPFw PTGRL OktJJ RkDncM SqHdh EnzNT jMkPK PZvDM JESWE FMOYLiN xrnNcH ypfuUzF rQMgGt ivwHpa wWMYY IpWZeJ xVmxP kRwEG QqXIf qlyiz NsyZj qifRph dkVfbwH UHCSR uSVqK SPHmG krPFw PTGRL OktJJ RkDncM SqHdh EnzNT jMkPK PZvDM JESWE FMOYLiN xrnNcH ypfuUzF rQMgGt ivwHpa wWMYY IpWZeJ xVmxP kRwEG QqXIf qlyiz NsyZj qifRph dkVfbwH UHCSR uSVqK SPHmG krPFw osHEkk EnzNT TfnfU jMkPK PZvDM ddwfJyoXk YDHVp BXCnMYhA xMpHw wyGbe heCXc MRxXo wrJRE wmmepBND gzAZR ROfAQ TjMkK FMOYLiN ypfuUz ivwHpa wWMYY IpWZeJ ekIUM ijfasx xpWTii qifRY QtoLs koFwS,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj HwRtT qpDfJ uPxFt bNsQQ FqyuF KwDOey pJnQi wjLgz WqlPGQ aMSsJY IopAW Wkxte bAfGu BiQtE GsIwh AQMww YGJvJ GaMwi KyDHL gTXnT mNPYST CTlDPQg Jexhr FnrvDB EDYoXe OyJke TiuBQ PzgMc YFCwp YhTIyr xZBnJe zfLlI UeClrYIQ ChuTd zOQyRn btyMU IxNEd vuNCy VdTfHk kzqEO KFIfg FVulO SomoavT GLvYCoT kqAFm wAXYSPw twqaZ pIVMV mNbXvZowL QDKvD hpvrx WpIKN GZDcK UiEECne qijWm ETJlAB Ikbbl xePVA fRFsQ AtMWW QRkie BQAmI QfhNe tirsws Dpbdv yxXue dzKFA wdoFm fgKaAq qRYGA lEkWHx nuqiG wivFu tVnLr mhgZNK YtVFQT EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl tMEhkFj MEhka WmpSn Oygyv geDhzljqQp hMZsTZL PwsBm HzOQq NdcOC VvJlR iKcuj PXTZJ xyKYU mSGAIw ujKGUPo dwWzY AqUYJ xKRDe RAaBPM dMNvC azbBq zvtaTB RVbjhjP Skrioh vdIkZv YCgab drCuZL TwdlQk Mehkitx srXpypx cmljrF xSSQJ utEBd EJbGe LgxPd wLIJD cQREe iUFOE qWAVB yGvTR WFBtL lghdAha rlMJeYN GbGHd sybhW diBEd yzjjn DUQSVWf Ogjne SCjTC ZHpcL pjCzm oUjGu oQcqj kdwvO VZqQY bZIsrf xBbYlvM SVpYPWy xXQqPpD WwHXt Ogjnue uEftTB wOhDyZ TSKtyG ZARkmia YocVM wXFEh YcLXt LjBiG wJUQOQE vmKmS YkuyU atTGsO rgjiCEY tAimP LbLDV tMPNm cEsAF TfHKV JHXusqC yqMiF xiuuq rmDcN RImMq ipXyj ujlGvW CrPUX JxuKBW PGjjOe tRGMB FuHppB KZnDe SSMGR YAXiO GSdxdU Swpmhlx PblAfd KwnnH fqOtw BBEZn zqEdE jJSSn GqzBN yOlCS CInOu ycRigbX aokkaS qYBqdM OYffv wQpuc FCZgX CHsNQ GFAGT iCHoJ djZuzcp pBVlSTjV sWBMM aVNNs GkWsq kSGnZ JRFhb JxUXH HZCbj wtHim HSNnc QctimL amHxh ImIhF VCcAh aSWKSD dwWzY qLHeqdyp FsNBmZ hArKJW OgKOH uXSBSo irWlK KaQMZy NqwEy ggDAHT eIdBzGw mDUiU bahxAZs RNyiSz XEMxI TukfR BdkzK lelKQ VLUMtd BZxBXp dGvJf XqclU fDKAZ ZqFWQK TSUVWL VWRPN VWRPq uEftUD rlbSLyS Pembu xXzoc IFTIT KSVWhI HwRtT sxHVkFI FxfuA JeDQg rMONG nSVWh HwRtT hAvUfqx nftxx awgGy iBLMwQ dUsfhr yvCuEp WhPmZ OtdMX vcUCqN JOGUb ZRFpb SUVWT jnWiY QTgCW LLSgg fesNuE oYkCV lhEsI arwAa unnVgo yiYNc uKwEW ywflM VNZChi bteOQM xmCOt OeVqf NSgEXfq bXCHxJ pPdVv CTtDGDbY DNKfz YQWOq UqPJog UxiBq FLzMSW ShtYI WEhWQ ahdqD hxhEB tLHzd fxvysx tpUCkr Jxoqx HKtWF YPCEI fekXo gEBZcnj sfWxPracU OWAPC YlJnh ttxkMq wuRVOS QQAmb Tzefq mJWdvW mFfAl FmqpBeyg OrKVeR FEBqI lqJRO czuPE hVVgNA CkZbt LAljxX AgAFf cxRbm fqHUWIX ICWDf XVWHT xEbsu RTnmS wboDE pfTia pMRGM MHkhF uxVgnY DDsEGq PekKE Vhdou CwsZliX iGKNg qbnDK ggfoU sGnPV wGysj MySGv ZsFzo WyYMM Rzebm uUmWu inwtTt aFcGrl UtaWxSqw VLmRQ kQeSUVW kIXjmo mzkzzl hAicG AiILo VPjLh OgxHH matgOdE PXiub jHXnny tHomM slSdktt cxnCmfn qaPkE XchLz fDoDG XIAloJ EtYCJoV ZIOVr iVIJxY vtexKtJW TtVqH stXXj ZwomM jlagq Jvcdr lGkOT JsszX UzsrW OgxHuo BPTrJA ztAIl znbtI xpPMYlm PIfRk HadYN oVNyl sErinA cXjjs hrZAt eaOBuc vguXsw eaOBuc jJdUN pHIgkK dCrTKzndX lMxMj tvhHI xJDcpm uSUVhI NqpEy gAvfonG tViud xmMAy Mpkqh lmEjWx AXZFi xvpHo NtKsW XPUfvK RkGlgk oTFvJ NUmYU hTDgJ vIUWG JhDynO sXPVjt tLsdB rhicj YwKWT xnObG yRAfNy VJeTu RVYqm pOcEWNb SUVWC SJJwMiOL MCqRaL TxBjjty EiJnZ sQXZLsk zMfQU PyORAFG zNksd SUVWh JEhkUVW QSUVW PaKuS fiaph NxEmw GXGTt mNPQDA Fwqsdp FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS LCYQH fPkgKp aeODC KMlEB xfAGA JabhD RRrvA AyxNJLB OIUXNv FAkcjv QpDoZw geNLNA pmWbRd UItQg yQIFl fUhtPbRk eMPjl SChaE qLoEE AQjaKJ fZece iAJpR cYRYvu bXVVK EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE iiUjh xYYEe nXHlm GPpgNC iMNcdO UaDJu HwRtT MEEEEE MEEEEMe TSVWu EPMMtM hgnUV HwRtT iUjhZ TkLMe xqPjL MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe CWuvUjh EPMEEEE MTVMMHVE HwRtT MEhkUE MEEEEE MEhkUA ppLIf BSdqD mUzFa oDuybpIwd NxoLI FpXOXGSC OjDMXn beLvZJ sUMhlE tkqlPkO MEEEEE MEEEEE EEEEE HwRtT EMMUU UEEMMU SVWeMM MMUUEE MQUREP SEwyk SVYqp SVWeMEEMM RMEEM HwRtT pUVtZ zurTB goFhVY nUWTd bQyuFm FghCp cOPav ZrDmL rguCQcwu IIaXTq EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM HwRtT KYNKqhPkq HwRtT CiJNgD diCPcs MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ HCZdW bgPas QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE wUDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS xaekU IVTOBp cfcXN JhKMv sYrLs gKBZbkH PkFFmMjz SvOnsa Achcty hQFZFx ByKXU LfFeD gKXFiPk frHcD IKjNVH uarYu RlELz gyvYk zWuKI QVaej rDuoZO WJZVM KcKca PPGKUfnx QfpQG cOwJIx meyUK qFBHoZ CZCGc VYpmr TsXNO ywEmN XvazL UuunW kHtge kcVzcH qgZjDE InMjeA AQGOl qnCSIx IjfBh KiBrL tccPdQ zREBr OEwkm uMsLO CGjZs tfyHpqX doaAJN iLHkr SPbwNvr Usvyb LpHCM VNAsKJ PyITvu vaIVI pdqay pcGhy UEWyI dXtYe XBeXs XpWAu mrxRCiG XJvCgh YUSFpGn sYZKf heLlS WMEab vtbXJ gdxUn QJyxcK eSDwgv GxIcy SYZox gbJjao jiYgy iuVweG CdFJh IhSEcI OenKf ezSgh kzjJuMn RXpNQ BnlVL obAoZz mEvQvG xPlFS jIrsVr qnkbM jBkMSCFLE ORnJgg mdnWG NdEQFOtm OOBuN UcTTkWucQ kBxuP YDbnf mmQOm WOwqCf qoNmh jJUmB sADbce tGucy xsBdaXs ePkwZ dQIwwKx UbJck ZmWgRq CRdkZY WSOCp Scmzf YUTHUF ycuzYx AxKBc CMWHb bgFaM SNZoQ joEwC lbGLT AzqdD tdaQu NSWio mTeyRRIQ PgkAo xOmkG rsChVf nlVIE sFmcd jqbzEjP ThxLwtx snQHr swngEP vrUQNW EYWxkNOQi npVvkx pneeT OGDza vwHxw SUVWj BABABA nSYNqO ZozTv GCCrro MQmPNVrl bPtyr PozPe HTpbwxfI gKWsXim zBNKJ Teqgw qixBsb rLKassf yUGZZ WyawTzD PQYYt HqnnW VQrUE uYSWu EntelE ineIEE GenuE PeuEEEEd DtdSV NOjVy QPEPh QPEPh pCsnRbQ sOEUjhJ gDSlzU ZynRX ufVjS PYYug PYYug YYEPV UQQEP jfsYI hiTBT aauRJ HPbVZ RSxME uAmfU KzyFIG vYrxUQVu VVQYn RCndbgYpc HYUQSVu HMozbq DFBze HuYUV EPuuu vXXGYSrmo SVWUu tfVUk tLxXj USVWUj UQPXY SqYOZj hbubNo CuiYM csmuP lSEwA HYQFu Qnpbw tPtLw PQYYPV lcQqWD qtPEj AipcQ avwHl Ujhxj CwDSVWT URPQQh USVWj NHSyDyVx xHWlH PPPPPy MeEPj vQrpWf aYcNtZ hAcms fuhqk sNjex EQPjjM VPuus UQQVu IZaEF AFNpm xkRWP sVFsvL PUSVWN SfjMju eHtUQSVMWj DGAeyF ZhVcG ZkOjWl QkLPFm gfiBx ItOLt iKAVO eIRkoledIU uaGysI McJdw tsGvF SEWOe aQLhO jAZjX uQHhO wZUQQVWjgYjGN PQPPESPW jsXfF ajUSVv NZAzB wUQQVW SfjMj AmCICB xBhiz GpSYqA ClCmG RPQQE VQuuH XDdIaq dkduO uEPEPWSY PYMUac YPVWSu kPVWSu CEMUR WrroA xcnunG VQZCMs LzqlzOwLItcy WVjKT ZCacLUB gwpEnl WVcPj IKmPS qbFof wHfaSjBgX dagTI wXFJc yiaWNo bHRud ASFdd QUQQE uPuSW EEwPr UEHEu sOhYB ySsxg iqyLGNqz CvETG PhZUk XfEFhP EPEPk AlVpu SfjMjW hmXNsu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu LHUtH CUtfwz uNOgIZ uBjAYjZ emaHnM jAZjZ UQQVWO SVWtdAu fFtJX FUQVu vhwtx TxtiJ XcwebhH lYueGq dumCnGUn RQppV PxWVxO xXyHg CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp pUcsm qFqgT YKxYb GWZjx XVmta RRcAC nrmbO Cnacc apBgf upikkaqHR NxBkT DUISU MEEEPu JwjRlD LTXOT HAVEB eXBOv xpiXPpB SOGYu PPPPPt PPPPP yHehZ HLMMQP YYtVWh EWWPb uCYYt uVWTb WWWWWS PUVUW YtVWj PPPPPPPPU FdZMf kzWzH VSYYt OMXwd cCnHiC KDIxB EAEfEEj EPQEPEj NvQMR AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW nQfsTs FLPXR PPPPP PjUHPh PPPPP SCNluq GUQQfE fEEPj HhiJh SeMuS PWZIxq sEZeq EGWVj bAxMiW MIoLZkCO MSVWu MQWPVk WKxMd MEEEPu DUtzlrhsR PPPPPWSu QQQPu VWuSu PPVWPu KUWVSM YCaIO hzkCt caLKO wGYUU KICftJ QPKdi NFUrJH aHvuW xkDSyA WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu QBRLdF kBYct DcutZ yGBBx xwtELa hmbclzYDPx mWXYj mMbxrbv RWwZUQQ Kekjm KNusR kcHOrK UNtHr jtVoY FcjIuA QPLYYMt cGrGuKY tAUWu cIfyrO BrqihI QfgvVd eRRiON PowauOdu BpVsQo bTivj SYtaDD sLwiTZIU RYWdL zMXpHBbhr IwUsdh riKsX WJDvZ PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj PttQL kOMDU IaosF MyoLz DUYQm LLBjm nGrfG JwFsAk ZbPDPQA UwaIM mSzhO aAEtb DKSYY WxxVL UfadnzZ WvvVL WHtAtVL fdtWy jxmnd KJyBe QUHxg UfGas eUctMo oRGeSBm CWqmm lJUGCDQii RvUVu QQQPu MEEEPu EEPVYY szGYSO udLSP hPtju kRSZz NSdXV JzmMxt lTwVsWB qsyqU oUqEA oOCmz EPeuEEEEd csmuu UEcsmE PEEhg mNlnE VWlCv oBUSfE UQQSV KaXQx vWPjx rVmor ONwem UrYUk jmvskx hcblg ZpYOPp KwvzEx ZNMJn wwKtQ PAAqF DlwpQG RCJbT tmsbY HKith NpJyC lYRyQ nMqjWi ETMrV eFvEL FBEnWe ewHrTh XHlIC gzcyZpM sTfBB ScTzG NWiEQyDJkc eTdzu JfUYAk rPevL yZJZv xNDIBg fXjiZ peAlfjM EKELRyR GROWo LFRGeyp FzLOc hfDPMU gtdfQf txlff NCCQt HvjGF kCYED AqAiz tiegL WQJGmG pTJfyc rIgvfQe vckFZ rXsBr kirUiof iyGvf PgbFu Flxha eAThc xbigd djPGl ulLYB DFQJfPR bolKS NixmmN XXtgW keIYK oORxQO BTDBy kSoWGeI xrhyCs QWorQ NBocY GybELliYb oCssYFE lbHRCk xiWsqia JOuOn nFMBv gfSrh QgNku xdqNIWK kDMhQdI rrkNq ZZAnw fhyKW zeBNW UlUNG supkYUXy RbtEM mgZSi XYfNSAs rEQIm dcLNZgR XsyKV gVYyq goxRx qGxUW YOGZtW eiPae yjrWt fFIVMEhkq JOkUO QJqkG EehJAp IIlNc wVaWo DjxEPD EqSzK omNhig zxhLF fFxVMMXMPW MEhkxA zaMHy YPVcH ECmVfnO lflmA SzPlaS dZplia koqTIl XCFor gsclt xpXhk XcGLY xeDnBTFB xwhRnfS wXHQG QpQqky WDiuA PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI UCYaa wwnzY uHEPu uEHPo DYPEYPhH HwRtT aeQHj tnDua JXRCUjh MuUMEIEPML UMEMd HwRtT OzlPLI JzPGK SFRmCkwp XDCnJ qOvgfRh PRAllb JosUjh EEEMEME HnEMI MEEEE ntJETE EPEPM HwRtT UQQMEM HwRtT mumFb yhNDdGT HwRtT vSLQf MSjJI PDgIoI PTNdO onjPL fxeOy mLxfFY JvIsC DBCiW SQndLoZE ZDKHU zZAuT naqOM ZdftF nrmlYG xrhQOdPX Agbgd Oslgb VqQhE EdJxKS VCHLRC wEVsE QdgDpM iJWGM EPAMr AuUVFd OOgjENa TPnqI EMMUREPMMM EEMUQ EUQMEH MMEUE dwWzY dkZCvR EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU vuRMG OBucU VpSuAU YFwAX MQMUU nyqcxUG rELov BXcMPF UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd FIvwmw GjnNYnz YCgUQME HwRtT EULMEH MUUEEMM UEEMMU nGqObT yygAA eNkgT cboSI ybquC JuhnP CvwbH FEEqm YvqbXZ IqeHbn cxpbkr GMLgPJ cdche VyjbU ZzJre MAKlD vnmVN locale aoFDf iostream badbit failbit xYjWCby xdrRw MQVwb pUtGtw vKcbo cazPp WabYx CEHwb vVbaZ IPXeHa YAcNpksr WMAkP zJrei nmVjN VKdOv jUCwU dqXSG wyzOq gqaxfw yvYkw eyYMh array length unknown error address family supported already connected argument argument domain SIylfdbad descriptor message connection already progress device resource directory empty safile large vfunction supported unreachable villegal sequence inappropriate control operation jBrqt invalid error directory HwqcO network reset network unreachable buffer space child process message available message space device process BnOOnot supported UWmtboperation supported owner vprotocol error HMtistate recoverable wtext files system files wrong protocol FlsAlloc FlsFree NfYlnf SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx jHktc qObTzV mnSau HwnOv QBvUi vqNvl vHwxvBSo YcWHzKO plZgMd cdecl stdcall clrcall BIrestrict XjVvj operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor UDHwWzh Class Array Complete Object Locator xpxxxx MUWFI CHHwH MWJXw ncGqOb cVNVH Xasin aXsin zceil floor Hwldexp hypot Xfrexp qObJsTzV qVrLDvw sTPqytvwS VvrJn jGTkKf LNZSM ZWMonday Tuesday AjFeb RVXMay January March April December NSqLM rawvv LCIDToLocaleName envkKSA BWiKd ncGpw HUIadS UmCyN xcJXXO TuLybT rVXjnmOT dfAKSYK TlKGKbz IuLcbeQ LtmYE lqNOsox zwslObkmS uYmmpJSOmS BzRMqrJ JOsybu rkenRGM wfxAeovO vVLZj XHfPu akTLgQD ZhrEQd SvOHp aGYKv cjZBxB xMzcjH WGpFmG PaePW fiAqS EkkqO ciZQy zGntH eQpeVW xCZWnT wgbAG ContextStackSize ContextPriority SchedulingProtocol hzDBo yOKKxf NyanT iKsqrt ZfUUU IdSNz XBakS GhMZi usage usage YcFvN YSzOX nicehash hPyym OqLObH TjNPzk ahVYq RGWJJm WQzxoO CAXlaq Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ GvTSJ kjQvz IpYVp ucluI iqOzh IKxmKM JLXCM mNlVez HbIgi ptqOu ybREa cGDtG ZYLxws RZoBy fsqxBK RvjZF cgZCU mhwgp NgVpx eTJKbA ABCDEF tTxBZX PiEub SwWzO tlfbA tpYiT ccnBKyZw jqqVW AvCgz HhnqX xFmvS gLvlI lPmxm cAiEO jamUx yFxCHJ WgWirf rswPI BHOuf OkrzE MekVH fahnx AMZPWs rTnao mBiVFl wWzOD kcGow wobBxBq KuGAzx TjmNP wLtQPWrl tyZiY lPixm OFFORL SwWzO vxBPG tFBrO HCuyQN mTYLbT mokRgDn rguCJ uJjkc ucbtB ybqCH YRWyhkec UmwDRP lIXjbNcUN gGsDRk pbXmA dnmFX YrKcX wNGoe yvYkw EaCeQ czszz VOXwWz TjmNP wWzNF wWzNF wWzNF DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven lvHwc RiseRiseRise QQHwSiS Geode Geode XOPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION DHwPentium pPentium Pentium Pentium Mobile Mobile Celeron XPentium IRWIN vWESTMERE PENTIUM gHCORE MOBILE MOBILE WOLFDALE MEROM vDUAL HwMORE QUADCORE PINEVIEW CEDARVIEW HwCopyright Plauger licensed Dinkumware RIGHTS RESERVED WCtHN SwWzO Unknown system error Unknown system error XEACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS HwEAI CANCELED FAMILY NONAME HwEAI PROTOCOL SERVICE qVHwEALREADY EBADF cJXECANCELED ECONNABORTED SEDESTADDRREQ EEXIST EINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM XENOPROTOOPT IXENOSYS ENOTCONN WUXENOTEMPTY ENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK EREMOTEIO permission denied Raddress family supported temporary failure permanent failure family supported owWzresolved protocol unknown service available socket Sconnection already progress WjVvg operation canceled connection refused connection reset destination address required Shost unreachable interrupted system invalid argument error socket already connected DPmessage Ecnetwork unreachable buffer space available device enough memory machine network space device rcxBQ Ssocket connected directory directory empty protocol error result large system OHGeq dOQsp process cross device permitted unknown error links vasync event signal unknown error malloc malloc malloc malloc malloc nQueueUserWorkItem malloc CreateEvent ReleaseSemaphore CreateEvent CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress riqAFl wkernel GetModuleHandleA CreateSymbolicLinkW CancelSynchronousIo powrprof BjTSsocket closesocket Missing after object member Missing object member escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected oYwSee iKSyntax error value object array expected Content Length xXfalse JHFDB EfKOh VQAOF EfKOl VHWjz kwHtRl QJAsR Mtryg oyhknJ ubOxyG wibUQ nYNAq Pktipb uekLo JDIst ikySlm KXgYBEY jYABZ vqSaS ZRTWLYN hDbaBF adEDl TjCmNP gXHvx AJapKo LnpUvw fafyxijfhkdanfrzz SwWzO TjmNP QPWrl bSoyS PiEub lPmxm tDOJu KSYmm OmkxBz rguCJ JOiGUbu ybqCHY cNpOkr aBYFu Dcfhe ZCVWiyjbV oJsKkmt ixQOX GlDoe nshpbXmA SunZjIx zZhdoSFj xgaBbs yvYkw tUGml nNoaf SwWzO TjmNP QPWrl bSoyS PiEub lPmxm tDOJu KSYmm OmkxBz rguCJ JOiGUbu ybqCHY cNpOkr aBYFu Dcfhe ZCVWiyjbV oJsKkmt ixQOX GlDoe nshpbXmA SunZjIx zZhdoSFj xgaBbs yvYkw tUGml nNoaf SwWzO TjmNP QPWrl bSoyS PiEub lPmxm tDOJu KSYmm OmkxBz rguCJ JOiGUbu ybqCHY cNpOkr aBYFu Dcfhe ZCVWiyjbV oJsKkmt ixQOX GlDoe nshpbXmA SunZjIx zZhdoSFj xgaBbs yvYkw tUGml nNoaf SwWzO TjmNP QPWrl bSoyS PiEub lPmxm tDOJu KSYmm OmkxBz rguCJ JOiGUbu ybqCHY cNpOkr aBYFu Dcfhe ZCVWiyjbV oJsKkmt ixQOX GlDoe nshpbXmA SunZjIx zZhdoSFj xgaBbs yvYkw tUGml nNoaf SwWzO TjmNP QPWrl bSoyS PiEub lPmxm tDOJu KSYmm OmkxBz rguCJ JOiGUbu ybqCHY cNpOkr aBYFu Dcfhe ZCVWiyjbV oJsKkmt ixQOX GlDoe nshpbXmA SunZjIx zZhdoSFj xgaBbs yvYkw tUGml nNoaf SwWzO TjmNP QPWrl bSoyS PiEub lPmxm tDOJu KSYmm OmkxBz rguCJ JOiGUbu ybqCHY cNpOkr aBYFu Dcfhe ZCVWiyjbV oJsKkmt ixQOX GlDoe nshpbXmA SunZjIx zZhdoSFj xgaBbs yvYkw tUGml ChDkB OxftO hpPwZ gzxDp QewuJ hLbos UjFQe dDcDN BHSSX cFHWwZ McICkGj xXSwD qAUxp GAzpS ydDIly yRLwa tDOJv WTznOM OgoxL QPWrl bSoyS PiEub TbOBD pZXCb jNVCWZ rgaCJ ybqCHY cNpOkr aBYFu Dcfhe ZCVWiyjbV vWgJK Urnshs bXmVNG xGDdsfS KcRhv wjzqbBY DvyCu BbsgX NDSNf fKThe uUWbS,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj FBxHB TOyvp pTubB HwXvDn nZgBX rtYMW kqSQg ABHgj seyWj jDGZrUQ gGvUE XQISrt pBOBU evakZXv cihGySJ UwMTmsfeeKq IAbQV HoGTOhgy jWAWwP VoYBc jFGKtuHn uEvPU WzIfyv DPBDK TMhyI Bvlbmn PNvFWm vixdujC wZfiDw IbLRQ odfeU wvyQuW yfswqr xkeWdjHI ockCCv LTOigS MMznD mUOsv uLFXU RRqBW gvkva wZcMG hlUyD sssYW qizDRT FBmrX DOZzaK NiFue uWMVZ iEhed LLCVJvirk NWXJk wGLTis QTxdFTt jlmyt oruXYez FpZuyM YtlDgPYO UuJOWNOP OPybr vyYxX ReGjl oipnq hZXFv sxHxEl jJiKnk LvwKk BpQxZ MfSHxxu dHqJw EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl NDVphI odTKV olBAj jCoCnd usYXacs sIGGc jikmGd vvXNTMt SeOlvX ZgJHqRz CtPrF brJsQ rDLeGtq kUjCH AfNFF DTGFH WvWFC uGkAs hiaBb AdVut SoqdlLS CUUNk ukLpD giWVa zjvWc AFlGJ ocUdJGfgL IpFRR NHBIa MIHpX umwGgEk JDQyV bvgzaJH fbbrQ utdho YhymO vuUQSVWf FYvrN bQGOF qXKHI SoPmF lPlKK qbgAS AlzHfsFIh pCcCJ kucpX gXjHN SVpYPWy xXQqPpD WwHXt igUwDJ yIGpY MOlPQ DRFhc wzqHL MdMxD OLlYsq iGlykEN HgNSGj doZCH ECXnOsr nCytmF yFZaU IPRYP EsrCp jbeSA ixUnfBR avNGzBE iuDxXT SEoPGN ftwjD KbTSk hoxoZw JOuIK zrNot zrmIkc CHUhZ xBWpYZfp pQWnQtU KTFPOsD XQZtq VysMb DPeZS fhplN gYcyC VkvyocV TSrfy INLUk hlpII iJMsB tIIaAQ RoQin maddYgq EklUFm zWTKg LgqZAZ aEnBPd nRXIWf BMvno rUAAaYH qwotP rniOSp HPbntx CfTeNDm nMJMqki DsUZJ VRkncl psgcS xngfQ cLCXXa pLVTQ dWorQ BPrRma AUdVJ sKbIl rAutA vJFsq OQatl MdFyK iRaJJW TKFgUyk ueyuJ CECxIk dOhMU CSzve UTMqi rfHsW bGMNa rNwCO Zfmmv uoPXo lIVUNhM JnjNQ EKmML WRHjk nWDby aIWiR WYfwly BEpAl csmpq KyKUK GjaCN IbUOjf TSUVWL VWRPN VWRPq rTPSKT grqnk nkDLXIY fcJPU BpKYE uSVWhI KyDbA pSVWh dhLNw GwScd bpucDC PgOVZH TKKrO SUGxuV qRrac cSySy mtysw fYHTd fhNEj aQsegVS abwsDeu SUVWT IKHgo zmvZu EyUpP sLJIN Menni EAtfQ WPgBFY ywxWr aqPNK GbAZPuA uUHgv LIRrg WEaAHj cQEkQ xqalL IVhJkh SObRS vKFqV JaDCaX HrnIn ZZHkG AdBRt sdCtn hGDGD JmAfd qBYmx pWlGQ VyACr ttHdN MWrNV dTKLX rJcIp ToMkT baAlR HLeZM BsMqW uJtxfEt coXltKsu Qewevqab ZyriUm vCMIN uUhgRX ewVtg LENJCN FKfPY WYMUDJ Hiwom ilJal eWUGj IJZDj MXaYT sIWCUe OIKRhi RjBwp FOkvkiiY BGwCH zHyoqE OErdId sJWtQmZ rTBAR hwzFG SWtkJ lFWMsw Lwgin bPAyk PCacPxJ kbsYN ghgmLPoAI DENfy lPNBWAt gXtJo RtHxK JxgtI wAEDs WrDTBWn BzWBo JQQeM qtpbQi NkjFa rMKsu pBlwTL AbPvU FtyJa gwyYN ZlYoD qviiT BfCUi pJOsa IjwSsWy iSZzJbGRpQ VPjLh wQkYz eteQyW tjCnDy ShmwtT fOSrSZ EPgSj aoFPy aLIjNwsh OmsyOd nsGPT AfPJw ZJzED thklP ODbdi hoCfl WIrST tVzmrkyL TLHlmXlo QvJtd UvKtY NCYzaL FzUxVW thJHo YgyfV tdnmK pDdaT QxnvN pDmkb HZqGJee gPxnh LHjZR Zowln oTMqai kFkKuD kzbVp NZWfs VDFGOU IRODGw meKsz FBnOU FeUON FloOV RJqwhEi HGaAV ciVKYk jGTHdg JbNek etFWO fWxlDJh HsVhKy xcvsli etFWO mPJxU TtdhVED nQevDJ tvhHI uSUVhI LbzQt BfgGMF jVGuUV Ccmqdd yfdkd duZyf aGgRWI ikhxS amDfZ ujDRQp loNnK BmozQ JwmVUZ CpHyk zkRcky Dpghs LBaWE prhhe sXPVjt tLsdB jcEzxoN yvtQR SUVWC COVsI TMuLf Qpduf QxlehIq NkLxJU xHhCO tMTIuq kGzjgB foNlP MpTPm SUVWh JttFC CgirQSUVW IgNrs EIIdi xfZrF coUyr FnIsA RoEcG pKGFp jatAe GXGTt smpyBFa FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS wugBn NHnus UPSwoo rfiDty wwVbp VuVPH qnHvh UksYsTz lBmAl wOqfA VjZsdK ZVPDL xaSPp QFlXq xSJmRv jVXaq mlens TbGhZB EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE kCEEjjbExHc xYYEe MEEEEE MEEEEMe TSVWu EPMMtM wLCqW MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE MEEEEE HjHONZSqn VuWtdyS rnbxK zOqfQ bBrjg nOHdAT VwPCZn aXTpy MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP pkOWk SVWeMEEMM RMEEM OHeiv BTDOf LiMhm iHhHI VPUpLm xnAaD KnjSTDYgDI WWVFU nZqti DDpFhq IijWj YMLgIt ZEFzuO EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE vuUjh EMMUU UREPM vbJCg pYEaC MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ OHeiv SYuYV QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE VUDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS fWxlT Cmyuy nqIuFBnI xkmDXn IbGgg PACIw NEVjJ HNztcs ILHSn OWDKVZNX QCEmn ZXGEbf MTTFchk ofuQxwL AtiVis nIjoY wiEwh IudEb oiJZp eqCXB doEQu kvHGhrA rsQZPx OfTxCjjz UsTFdy pclfi psQmH iHxFy ygxEvV nIhQAv XuOpkIP DxSdj TGXoQ LFDGcf kxuaKiQ XYcyyz swFZD nvaKo wVUSQ slGnBK YSbIV fAfDepR PbDfC bPPXl dEevljr HnNcoT MiwjUxx WOZpD thhLEwlt ecYmxd BLXoe pvZKj DcpePt JxXRqCwg eWRXw VfnvK YekUO IFNyp NquQwjBI hPnkO iBBPo GjxyshEIr cRffe wQsat PuQzwj UrWtF FHiLJ GhWlZTW iKTeD BYIkP SSuUV TGYgI DXtls kZRxl JfCHP eyPgi Wbori JhyKfiF qFuopYS pVhVb JqqFY wfWna EOrpt gWDEpWK oesse RZzJeRt AlfwtQj yXTqua jNMVpNv bytFknG YjjjT ZXvoRm jhGmS yKCHW MDdWdO FCeqh wYYvL xlukb XmsrM XbJcH cvgsC ebTth jMZrC eQFaAJ mgLeYV qWQlq XqAgg rsbgK nAEjGd vVZod fhjOCQW EWKdW YAqvb haWDw LPxJM GfQtr NCGWIG pBrHI dghSQ LDjgq KNRkPM UkAzK GlnSd sDGnVH CCeYL MeWBYH yinIe SKeUS tttzB cOzyw YjhEPCKl lgBvP FfOUl STniS QPaBs lGeVI ZZWZUc GhdVF CUEDw RXVvg ogkSp ztgVG LamEx SUVWj BABABA TWkjfv bfcCbO qibvC RFNohBlYW yqDLLa eModd EpqjA PQYYt uYSWu smoLU EntelE ineIEE GenuE kLuGV PeuEEEEd odNxa waFqd OCcKSa QPEPh QPEPh mxnVz aJoDa PYYug PYYug YYEPV UQQEP cAlUM bwTOUu FTEUp vYXNq KpoTFu EuxxN VVQYn XynxP TIGBR zrTaBb IlzNh WStmYr UQSVu sxwMV bMYxTOUV HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY cXWFkK HgJkqw hfPHgJ PjiAY CuiYM csmuP SGWzjgyi tPDgV ScuhnZ vrwynM tPtLw PQYYPV uOnbb hsFSC Ujhxj URPQQh USVWj PPPPPy MeEPj PAhXoiV LqZNf ALyTS zcOyFoj cXvGa AsCyL gjHbg EQPjjM VPuus PoUQj UQQVu gCJQLO WqqxI DLgtd FIWCr zZmTnX MZFqpT hOUAVql vWtUreP zSKtb USVWN IUyGM LHPaE UQSVMWj QobtA wEZAG Ypfju ItOLt GOuvJ riNmk jAZjX eHmBZ UQQVWjgYjGN PQPPESPW jsXfF kEiuc qUSVv XbacL tKRwOO RcFkn UQQVW oIUmI qcqbZZ bfLmv qEiKM iPRyE KImKt PQHeE uHiBb RPQQE VQuuH SLbvQ uEPEPWSY YPVWSu kPVWSu EnoyO HZwCZH muQDXr TUrOJ NMAxGi XuIGh oBkZa NBqGh OCZjIE LTzDdR UUYgT yeqha NVJTA JsymD zhRtu ybZJg SeYVOnK dsMzS OUZcP QZpOj YsyLxgj HkUsX iSNiu uPuSW EEwPr UEHEu wyAao klGwz nXjUi GczBaq rTNcx MSMTyR koBmy JMkHCO YUQQS XfEFhP EPEPk AlVpu UGOUVu wUfam PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu qrUQI apaPdz uBjAYjZ jAZjZ UQQVWO SVWtdAu hNITy wijVZR yPajfj vHrJP EpshJ LfzYG QJIluk CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp KqDeG ZlIku icvPw ahXFahvV KvPWf AToAB kiFvO AmLUGkK MEEEPu sFqwC BhXoiV rISsP bESTz JqoFZ kHMxx iqFOUW DKGgo SOGYu PPPPPt PPPPP HLMMQP YYtVWh EWWPb uCYYt uVWTb WWWWWS YtVWj PPPPPPPPU VSYYt KNDhE Gwmsqf oqCdgNzF koBUE eWMZINyKs ZmXHe gIbGH EAEfEEj EPQEPEj AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS SLFdn JRilU PPPPPV vSVjU SSSSS VVVVV WWWWW TizkT PPPPP PjUHPh PPPPP lEoxs HLHzb MNYXxB SXnvfx UQQfE fEEPj XZypw oStmM JPCiAy EGWVj NqNFJZd MkKMSy PzPyx XBjLX MSVWu MQWPVk vWvPakS vGInkl XdbLt MEEEPu PPPPPWSu QQQPu VWuSu PPVWPu UWVSM VHsWm diZOv wYbst WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu GsyFo DDkDB qxyPL NeJOq uBvDZ VXODK VInTJ KyMSd QPLYYMt NnDuxN AsUWu kvsAiPI rkcKZ PbDJxT DtvjuE NWeDW pZdKs eIZlzUxcG tFQDy zXwPE PTPaJ ofctkHtm bQwanW pZPVe iPxxF rlUVu IALVC PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj fILXb tKgJE RJfbjj VxvXUk AFyfw KayyN GtXsV fwgkk gcJhz nrguHDoSi wetfHRP zQUOJ BQxfe WxxVL GcGWc telRD WvvVL WHtAtVL vDAKu xFXzF ktpfE bJzUt XMoiGgZA pEtrsH fbnlL amTKH ZbaqG kdhORWm vnmCj JBWzkSV esEkzQ wvdMJu QQQPu PdNais DWtToU MEEEPu EEPVYY DnkML qmnMs IfRSzy lNxeX qwfkc Tbrsc XJPEK eiZPW YvzWL cHqAq DaMef FCuMgX ekFmF EPeuEEEEd csmuu UEcsmE PEEhg SnXBMJ Uddbc VWlCv XUSfE hsjAmZ UQQSV HoAMZ Jfkfx RBXDyPf Zrrit tLGwq OTpJxWP NXyRM mfKrmvHs BVuZyl bDKMLTGe kBIFK GfIBA AgAdIRJr vJtqRz BvGjf kuTTj mjXyf dYkGzFlfR ywvul ATbpl bqkAv UXLNU xlkbos otuxtuUK btmCBlv oAPCHQ perwu NYsSB CaCjejZ ScAnh uuAWKX CspdR dVKZo HrUQc SSsLO BWcdg ZSPCS ALGxYgO dDtZH otXcQ OthYa VdYfL CMIQkC htPlzJ kAyLD WIsyg WWtHq skIMi hnkjL uqPIGDF qkZPA qMeOy nDFRRM LsLQRRD aXhqI cPntV dXcQni xunjuQ VRYBoy sDHKM wTOAp cmQAo NXFSsutOQ srOJJ TYRQl lLGBD xGYEaA CmEpG iYqaYD qoYbCcP wPtqp vCUlaW YZgefp kegiHEjX QYjevAxGw Bmyqg gqrFs bdjYP sNvFW tnInI ivGsAE sVfKs DLTJNtn uRSzoV RgSuX oyUbU DhJNiHx jnEUbl GEAzX xGuKmHB xGRgOC yxJIeG ZEqbq ouVfy PkljpM bliHL QoTuz IWvZn VZgCV naoMQz veMXvV iDGrT fWxlk iPAiT HflXb ebwzA gROPS dcKaB tDvKcK zCMNem cECURzq ujxEPD ifvXb XIGrAD MxLDmA xFEIj gQmQM BcifX XSKDtz SnMTV yqStMXMPVED QEvRq xyIpE chGBQ NXUzMV RWsnn mTeoF MjTgI hJbuo YZwgN bzGpb tfRCz CeFDN LxUHltc wodiLPx lMRVD PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH dPRjv MqUQMj EXUjh gIvYQZ cUsuT iVDNiT MuUMEIEPML UMEMd CpVvu wMDtVB LxsFn YsTAg VWPIOQ SlYUjh EEEMEME HnEMI MEEEE ntJETE EPEPM ggcdH UQQMEM JjxAq BSemvdSV wdVSR eMJzj wMzVtGQ ClVPixr soGpv TSFan RHaVT KGRkE cluFG iKwtN cVkmkAn lLLJZd BXQqL QqWkuK tFtLclse hcyKWe NjOmJ dxOpJ tiNcQt ZwCsx eisGv IniBGTI YainfvqE cJsnTf BnQsjDt ldOGz zkCiR nQIxs oRiKK SwVclO DGxCz yUTmP ShGeS RQCEJ EMMUREPMMM EEMUQ HUQMEH MMEUE EIPln lUQMM EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU fWxlU SxFhx ijcQc sLkMA TcfbVl MQMUU UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd HULMEH MUUEEMM UEEMMU OZsjMvsPf JHoIN UvSaYH ZNkOK TYybo YPmri pfuHl BIdAC GSWna gnsCQbWvL FYzWRvQl JtRxZa locale iostream badbit failbit ZgaTO AEpvML AZPTs YvysOA vtPNkeA oLpugl oDavb Ddasy ppYxVj nvNTk Fuzgd HgIRia CCfMWhq array length qrunknown error address family supported already connected argument argument domain descriptor message connection already progress device resource directory empty fPfile large sfunction supported unreachable sillegal sequence inappropriate control operation finvalid error directory network reset network unreachable buffer space child process message available message space device process nFFFT supported KBnNt tBtBlo operation supported Towner sprotocol error state recoverable Vtext files system files wrong protocol FlsAlloc FlsFree HDjRB SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx WJfdl OVEfeg VSOsq MLsPj OisfMjsPk saqML safMj InOss InOsq jMysP jMWsP InOss qMsPd MAsPi VhOqsO asPAU ygYduC jlZTp MYquU MePfK cdecl stdcall bVkLhiZ clrcall Oxrestrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator fTDRM dynamic atexit destructor cPmtj Class Array Complete Object Locator xpxxxx MEXxl vOKxu hJjIO ddFks lRisTXsVjr rLpRL XuZAY BlEiu rceil floor Vldexp hypot frexp xcfLeO JHoWbc ksinh iKtDEeQ JArIEgU fFhYEM ckMonday Tuesday January YkMarch April December oqrRW DofHK EnumSystemLocalesEx okNAN jsmsP KhOsJ hDOsZ hDOsO BceOss xaEij xTfHsP exERj rPKWv TNfbp GsLbtl gXQLi ssJbT DwMix htzfLo noWIdH hLPCbnH qwIHqdW JpuCg ufcHRf LtmYE Abndj uUIMwQLsh pUojYS kbaDJ UBsfYAW cDvJZ VhfnS HMYJV ACDXz mKkbf hVHmy WnWEq ZmLBh wPDytv AySwTU sZywjn MrMDI PczKyNa MkDvlt zGntH BkEYCI qjBaHdt CvWOY DppBE ContextStackSize ContextPriority SchedulingProtocol ptlTmk ZfUUU xutFr usage usage npJQU kRKKF iSOnz bFTRqy ExisPR nicehash tVeBm Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ TTodkE VPzYsZJ xyYoQ GUSnu MVxVtJ JLXCM mNlVez YFcUpMq mSHlT XkIgP wCUZn OHodnOk QBbHYn DpaQt YFJqKjX JziFY tNtbDz rxTTzc AYzrM ZiIiXZ WVHne ABCDEF FSeNDon FySyK bzNOl UAqKO jqkLL DuXeJe ecImbbK ddkVA dTzbD qcuRi Hyzqf rUGWffx IxSaVPNLV NJqnQPa Aamuiv wBUdv iCdms gqVhfYt eJFKVc GVMbK FCJPKPWRo WIKTeb wrvBxi uGCHvEV ObxqRM BKAanr WlQtkl OoiXn TRLPn cqIKh vJpsOyK QvXjQ IIyCGiVd EiuNkn bxHsP bxHsPhJ geHeErV OOzyAI TABpp ADHkJ VADyEJ dQLIE VhfYtS YfxWi FCJPKP KDMeb tjCDJ TeWot yWzHT IzYKuK jAxXC FCrQH ctgmcc nyCzqs mNqjkW TJqzcwEd CCfWh lBtihm RZxsn CFZFB DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven RiseRiseRise Geode Geode OPTERON PHENOM PHENOM bkFUSION FUSION FUSION FUSION VPentium Pentium Pentium Pentium Mobile Mobile Celeron Pentium VbsPS IRWIN sWESTMERE PENTIUM MOBILE kMOBILE WOLFDALE MEROM sDUAL VMORE QUADCORE PINEVIEW CEDARVIEW VCopyright Plauger licensed Dinkumware RIGHTS RESERVED sEhEGx wGzrU hmexP Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN nVEAI AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE VEALREADY EBADF ECANCELED kECONNABORTED oxEDESTADDRREQ EEXIST EINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY kENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE sPUNKNOWN HrENXIO EMLINK kEREMOTEIO Ofpermission denied address family supported temporary failure permanent failure family supported resolved protocol unknown service available socket xconnection already progress operation canceled connection refused connection reset destination address required ghisd unreachable interrupted system invalid argument error socket already connected message network unreachable buffer space available device mxnot enough memory machine network space device xsocket connected directory directory empty TeGFOB protocol error result large system process cross device permitted unknown error links sasync event sPtty signal unknown error malloc malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore BjIsK CreateEvent CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress Vkernel GetModuleHandleA CreateSymbolicLinkW CancelSynchronousIo powrprof qsocket kclosesocket qrMissing after object member Missing object member escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected lVSee Syntax error value object array expected VContent Length false IRTXf LfXMaL mtfisp euiQr Gvfbere QSViJ aNCex phtOqoF PExVWA dhHyN lmpGh uaTiB ftVbGbc hZBfW XdQjna NLruu cOKrU PKcER FafJg UmCRY XaLpzOp wNmeMe fafyxijfhkdanfrzz FlSRz AZPks VhfYt kpuCxhy FCJPKP IzYKuK oLpUu dasyS FiWvQ bWbJtR GrNUh iToIn EMsCpY sLeWfb nvNTk HgIRia CCfMWhq FlSRz AZPks VhfYt kpuCxhy FCJPKP IzYKuK oLpUu dasyS FiWvQ bWbJtR GrNUh iToIn EMsCpY sLeWfb nvNTk HgIRia CCfMWhq FlSRz AZPks VhfYt kpuCxhy FCJPKP IzYKuK oLpUu dasyS FiWvQ bWbJtR GrNUh iToIn EMsCpY sLeWfb nvNTk HgIRia CCfMWhq FlSRz AZPks VhfYt kpuCxhy FCJPKP IzYKuK oLpUu dasyS FiWvQ bWbJtR GrNUh iToIn EMsCpY sLeWfb nvNTk HgIRia CCfMWhq FlSRz AZPks VhfYt kpuCxhy FCJPKP IzYKuK oLpUu dasyS FiWvQ bWbJtR GrNUh iToIn EMsCpY sLeWfb nvNTk HgIRia CCfMWhq FlSRz AZPks VhfYt kpuCxhy FCJPKP IzYKuK oLpUu dasyS FiWvQ bWbJtR GrNUh iToIn EMsCpY sLeWfb nvNTk HgIRia CCfMWhq HfBCL YgKbD efHyw NXLsA JEYCp eUzsaU GAuiv bvoJoC MIoSN mwyGn GxWTOk eNDDc ElqkC faAXWq GKGRE vnEcQ ivpazN nSVOX AZPks VhfYt kpuCxhy FCJPKP IzYKuK WbJtR nEoxvI KfOkhs cqTLs nCULp fNhurP,1\nprogram cannot rdata pdata RANDOMX RDATA reloc SWHhH WAVAWH HHHHL UWAVHl HEHEHUHQ fDuHEHB MDuLu WATAUAVAWH WATAUAVAWH ATAVAWH ATAVAWH ATAVAWH WATAUAVAWH WATAUAVAWH WATAUAVAWH WATAUAVAWH yPHyXH yPHyXH HHuHt SVWATAUAVAWH IGHIEHIO MXMXMXMXMXMXA UVWHHpHHHA uHuHEHE HEHEHE uuIHH UVWATAUAVAWHhH EHUfH LeDuf ADuHI ubAvAH LuwIN HEuHUv uLHHHH UVWATAUAVAWH uBAIEH USWATAWH uNHuHtMH LeHtAEL LfIcH SUVWH xHHHl UVWATAUAVAWHl LcIHMIA LuLmHEH txHMLqH HHMHH VWAWH WATAUAVAWH HtHCX UWAVHl HMgLE HEwHI LHEgL LEHUHAQ HMdHMZT HEwHH HHEgM LEHUHAQ HRhLG WHPHHL HPXHHW SVWAVAWHPH IHKhsD uHKpH LCpHIHChH IHKxC HIHCxH HHtPH SVAUAVH UWATAVAWH ADIcH uHcII SUVWATAVH WATAUAVAWH UVWATAUAVAWHH HEIMLELj HMDII fEHEI MLEHUHM UVWATAUAVAWHl HEHBH hHtRH HEHBH hHtVH UVWATAUAVAWHH HELHUHMLj LEHUI LEHUI LEHUH uHHUI MLHUHbH LEHUI LEHUIA LEHUH uJHUIL MLHUH fuHEI LEHUITH EfuHEI LEHUIA EfuHEI LEHUH EfuHEI LEHUHB fEHEL UVWATAUAVAWHl tJHMD uYHHtDHH LcDHI UVWATAUAVAWHH HEvHH LEHEHUI EfEHEH HEuHH HEFuHH HEjtHH HUHEHI HUHErH HMHME UVWATAUAVAWHHPH HEIHA HEqHH EfDeHUHEI HEpHH EfDeHUHEI HEoHH EfDeHUHEI EfDeHUHEI fDeHHEI EfDeHUHEHI EfDeHEI HUHEgmH EfDeHEI HMHME HUfDeI HHElH EfDeHUHEHI EfDeHM HUHEkH EfDeHEI HMHME HEjHH EfDeHUHEI fEHEL HqhHK HIHHPu HIIII HIIII HHJHT HASHH HABHH HAIHH HAOHH HAUHH HAEHH HAeHH HAKHH HAFHH HAUHH HAHHH HACHH HAUHH HAhHH HAhHH HALHH HFAHH HAKHH HAoHH HALHH HAaHH HANHH HAWHH HAJHH HHtPH VWAVHPHl HHtbH HHthHt HiHHiPHiXHi HihHipHixH upHUUUUUUU LAxHHL HHKpCHK LAXHHQ HtMHuMH SVWATAUAVAWH HtqIv uMHHH UVWATAUAVAWHHpH HEHLHU HUHIL EfDuHEI EfDuHEI MLEHUHf EfDuHEI EfDuHEI EfDuHEI MLEHUHReH LUVAWHH LEMcHU HUHEH HUHEH fEHUHEH fEHUHEH HHHHi cHSHHx SHCXHShH HqHHqPHqXHq HqhHqpHqxH HAHHAPHAXHA HAhHApHAxA tHIHHX MHIIA HMHHi WXHWPHHM WAVAWH IHLAx HCHHGHHs HChHGhHCpHGpHCxHGx HCPHGPHCXHGXHHsPHsX HshHt SVLLH ATAUAVAWH AEIHI ILIMnML rpAds AiigD EAAHI Mcfff WAVAWHP IIIHy HIILHy WAVAWH McALcHC HcLcH AFLcHW VWAVHPIHM upHUUUUUUU UVWATAUAVAWHl ILLLEH PpHEHEHE HHMHH HtBHEH ELHUI UAVAWHl MHuHE HEHEH UATAUAVAWHl HtEHt EfDmIh fDeEHKQHt HEMLEHULew HEywHBHH XiHOHHP UVWATAUAVAWHl HELEIHHC HELEHII HELEHII uPHcG HOHHh UVWATAUAVAWH UATAUAVAWHhH ELmHE DmLmK fDMHD fDMHD vCHUI IfHMI HMuUI fDMHD fDMHD IOHMI HMuUI MLEHT LMLEIP LLEHT LLEHT fDmEI UATAUAVAWHl MHLHME HMHuL HuHEHD HEHED LEHUHL HMHEL HEHHEHMH uAfEt EfDEL EfDELuM uLmLeH HMmHHLLI UVWATAUAVAWH LSVWHpH McMCMsISM USWAVAWHH HEMILHr HUfDmHEH IHETA EfDmHUHEH LEEHu HUfDmHEH WHPHH IpHIpPIpXI WAVAWH tUHGHt HWDGH HHetU tYHGHt tYHGHt tXHGHt uLLHHr UAVAWHHP EHUfI fuHff uLEHEHA ILEAA ILEAA UVWATAUAVAWHH uHUfI ILEDXA HHUEuCAI HsHHsPHsXs HshHspHsx LAHHHL HHHHHCx HyxHL rHKxHt HChHGhHCpHGpHCxHGx dHSPHOP HVHHL UVWATAUAVAWHl LHHMIL LqHLqP HqXDq DqdLqhLqpLqxL HUINA HUImA IHKHIH LsPLsH uHKPH HCHLCPIHH CdHKhFB HEHChHEHCpHKx HEHCxHEH WATAUAVAWH uHOPHt HGHLGPIHH VWATAVAWH PMAHqH LfPLfXLf LfhLfpLfxL UVWATAUAVAWHHpH HEHLHU fDeHEI EfDeHEI MHUHI EfDeHEI EfDeHEI MLEHUH EfDeHEI EfDeHEI MLEHUHbA EfDeHEI EfDeHEI MLEHUHIN EfDeHEI EfDeHEI MLEHUHEF MDHUH EfDeHEI EfDeHEI MLEHUH MHUHC MMFXHUH EfDeHEI EfDeHEI MLEHUHNHHMH UVWATAUAVAWH HMHUHH HEHEH HMLmPLmX HMHUHH HEHEH HHMHH LmPHEX HHMHH uHMLl HHMHH HHMHH yLmLm uHHMLl HHMHH HHMHH HLmHE HMHMHUHH HEHEH uLmLm uLHMLm HHMHH HHMHH VWAVH HIHLI VWATAVAWH WAVAWH PHBPIHHIHPI XHBXA hHBhI pHBpI xIHhIHpHBxI VWATAVAWH IUUUUUUU xMHHt WAVAWH MMHHHt HUUUUUUU ptwLD HtYHV HuHHF LILHV HHAHPX HPXHS HQMHML HHIHPX HSLLH HLPXt HGHOP IPXHW HWHcM HQMHML HQMHML HAHHP LHQMMHL HMFHHV HeMLd SVWATAUAVAWH SVWATAUAVAWH VAVAWH IMLHHt IHHMu VWAVHPH UVWATAUAVAWH SVAUAVAWH GIHcH wRtFA AoHHX UVWATAUAVAWHhH HELHL DGHHUH LGHHWHHOHM IHLBpHL HJhHGhHt HKxHGxHt HtLHM UVWATAUAVAWHHPH HEHHHMH HEHHH MLEHUI MLEHUIV MHUIiH HPXHHMT fuHMH MLHUIV EfuHEH fEHEI fEHEI fEHEI fEHEI fEHEI fEHEH EHWxHMH IHLuTHt UVWATAUAVAWH HBXHEE LmLmAM HUHMAU WLmHE HMVHMVHUH HBXHEE HUHMDHM HUHMHM HUHMHM ukMHT LmHuLt WATAUAVAWHPH IsHIA uZHHK HHtJH UVWATAUAVAWHPILHH HHVHS HHHHO UVWAVAWHpH HBXHy IPXHI UATAUAVAWHH HPXLp MDHUHMyDt MLEHUHM fDmHMI fDmHEI LEHUIOH MLEHUHM EfDmHMI HMLEHU EfDmHMI LEHUH EfDmHMI MLEHUH UVWAVAWH HOLzI UATAUAVAWHl HUHMHUHM LEHUIN HHMHH HHMHH HUHMHUHM LEHUIN HHMHH HHMHH HUHMHUHM LEHUIN HHMHH HHMHH fEHEH LEHUIN fEHEH LEHUIN uMLeE LEHUIN HUHMpHUHM bLEHUIN HHMHH HHMHH WATAUAVAWH UVWHl HHHMIHMHHE HtQHP DEHUP HHMHH HHHHL HKXHt XHKHHt UWAVHl HHEgHK LuHMHt LuHMHt LuHMHt LuHMHt LHuHD UVWATAUAVAWH pILHL uLHHL HHEyZHBHH UAVAWH uHHMP HUpHN HHMPHH HUpHN HHMPHH uLHHMPa HUpHN HHMPHH HUpHN HUpHP HHMpHH HhHcH hHhHcH HhHcH hHhHcH dHxHcH xHxHcH tHhHcP hHhHcP IMLHH VWATAVAWH IWhHUv HIHtt IJhIB IBXHc IJhIB IrhDD IBXHc MtSHAPHc UVWAUAWH PHKtHLt LIHLYZ HKhHK LHKtI CpHCX HtZHA HCXHc HCPHc IHHMM ILHIM HALHcP HAHcP HAHcP HAHcH IAHcH IAHcH HAHcP HAHcP HAHcP HAHcP HAHcP HAHcH HAPLc HAXHc HAPHc HWHHWPHGLHGXE HLvPH SVWATAUAVAWHpLHE MIPHI WHpHH HHtqHHL WATAUAVAWHpMLHE thHQX AMHHH MIPHI DHcAH VWATAVAWH LgHHGP uqHUUUUUUU IVhLB HHEHQh uJHJp uHUHHHM HKhAX snHUUUUUUU SVWHPH VWAVH SUVWH xHHHl UVWATAUAVAWH ILLHL LCPHHH VWATAVAWH PIARH HtVHp PHcLD UVWATAUAVAWHl HEMMLL LMUAF LMHUH HMHEI EHUHEH DLEHUHcA MLEII HHMHH UVWATAUAVAWHl HEMMLL LMUAF LMHUH HMHEI LHHMI EHUHEH DLEHUHcA MLEII HHMHH fHcLD FHcLD USVWATAUAVAWHl HEILMMHHUHMD LEHARH LHtYH UVWATAUAVAWHl MLMLEHUD uoHuwH LeHEHx CuMMtdH EHtVH CuMMt EHtVH HHMHH HHMHH UVWATAUAVAWHl HEMLMLEHUD HMqLMt LeHEHx CuMMt CuMMtcH HHMHH HHMHH SVAUAVH wMHHh SVAVAWH USVWAVHl UWAVHl HHEgHK LuDuLuDuLufDu LuHMHt LuHMHt HHhAX VWAVH HKLHphO HCpGX dINhH UATAUAVAWHhH DeLeH HxHMI vEIOQHt UVWATAUAVAWHl IEMEIHH HHMHH EfDef ELeHE HEHEHW fMLeH HMVEH HMdVEH UVWATAUAVAWHl IPQAE uHMHp HELEIHH UVWATAUAVAWHH HEMILHH HUfDmHEH IHEqMA EfDmHUHEH IHELA fDmHEH HHEKH UATAUAVAWHhH DeLeK fDEHD fDEHD vCLuIH LLEHT fDeELMI VWATAVAWHPMIDH AInHHL UAVAWHl HEHEH UVWHH HHUHUHA uHuHEHE LHUHM HMFHE EHEHEHE uLLHHr HAHHI IHHICIC HPhHHK HHHHi HSLLH UVWATAUAVAWHHPH HEIMHH fDeLEHEHUI EfDeLEHEHUI HPHLDt HUfEH CLgHA HUfDmHEH EfDmH HIVIH HPHLH UATAUAVAWHhH fDMHD fDMHD ADeIUx fDMHD fDMHD HUHMjH LLEHT HFHMI UVWAVAWHl HEHEL HUIdgH HEHEH HHEwHE HVHHM HPHHPhf UVWATAUAVAWHl EfuHKhHwA EfDMHEI EfDMHEI ADmHL EfDMHEI EfDMHEI EfDMHEI fEHEH fuHEH LEHUH EfuHEH fEHEH xHULd fEHEH fEHEH xHULd fEHEH fEHEH xHUHt fEHEH xHUHM xHUHM fEHEI HUHPhH VWATAVAWHPH MCISH tVHcB LBHLL IkHIA UVWATAUAVAWHl EHuHE HEHEHS EfMLuL MIHKu HtHtH uKHJp LWAVAWHPH HHHHi UVAWH HHHHi MtHtHtH UVWHp SUVWAVHp IHHHT ATAVAWH IgfffffffIHHH MtMHL WAVAWH WAVAWHpIHLt HgfffffffH HHtiHt WHPHHH UATAUAVAWHl HIyHM HUHMEEHEHEHMHUHEHE ELeIM ADeoA LEoHU LEoHU WATAUAVAWH MHLHQ UVWATAUAVAWHH HEILLHME EfDuHEI DMHUI ufDUHEI EfDEA EfDUHEI ufDUHEI HEMMLEHUI UATAUAVAWHl HULHMHB LEIHL uHuHt LmLuLe HNHtGH LnLnL fHNHtIH HFHFH HtaHH UVWATAUAVAWHl IHELHULHM EfMLs IiHMH uMLEHUI EfDmA MLLEHUI UVWATAUAVAWHH LEHHML LeHuH MtSHMI HgfffffffHH HgfffffffIH LMHIA ADeHA LEHHUZ LEHUI LEHHU UVWATAUAVAWHl IHELHULHM EfMLs uMLEHUIs EfDmA MLLEHUIn WAVAWHPIHLH AVHPMHHH AVHPIHHH WAVAWHPIHLH HCHHG VWATAVAWH VWAVH HFHHNP HFHHNP HCxHH VWAVH UVWAVAWH HPPHt VWAVH UVWAVAWH HHKPH HHKHHt PINHH HGHHCHGPCPGTCTGXCXG VAVAWH HHLHi HHHHi HHHHi HHHHi HHHHi UWATAVAWHHPLE HEHHH MLEHUI HEDeH MHUIWH HEDeMA HUIWH HPPLMHUItXH HPXLMHUIGXH HPHLMHUI LMHUIWH HPhLMHUIWH LMHUIWH MLEHUIOH MLEHUI IsHIA VWATAVAWH IkHIA HteHl WATAUAVAWHpHLH IgfffffffHl uPACA HKpAW HKpHO OXIgfffffffIHLI OXIHH IWXHtLH IPXIgfffffffHtHL VWAVHpHE EtiHC LWHHLG ATAVAWH CIHLI HAXHA HHHHi UVWATAUAVAWHl HHULHL EfDEHEH EfDEHEH MHUHMnDHUIM fEHMH ADmHL fEHEH MHUHMAH fEHEI fEHEI fEHMH MLHUHM fUHMI vHHuHH HuHuHI fuHEI EfuHEI EHcHE fEHMI fEHEI HuDuH HPXHH HRHDLHT HRXHX VWAVH UWATAVAWHl ELEwHUP HULMI HUItHH EEHEHEHEHEHEHEHEHE ELuLEHUIO LEHUIO ELEwHUP UVWATAUAVAWHHpH HEMLHHU fDeHEH MHUIV IfELE EfDeHEH EfDeHEH MDFXHUI fDeHEH EfDeHEH MLEHUI EfDeHEH EfDeHEH MLEHUIiHN MIIIHMH UVWATAUAVAWHPMMLH HgfffffffHH Hfffffff LUVAWHH fDmHEMsI EfDmLEHEHUI IHExA EfDmLEHEHUI EfDmLEHEHUI EfDmH HELEI HUIHE EfDmHUHEI EfDmHUHEI IHEGA EfDmHUHEH tCfAu fELEHEHUH UWATAVAWHH AVXIN uDfff INHLE IAVXIN IsHIA HgfffffffIHH uLLHHH MHHtPLS HgfffffffL Hfffffff SVWATAUAVAWH IgfffffffIHLI Ifffffff pHHHD uLMHI UVWATAUAVAWHHPH HEHLHME LEHUH LEHUHu LEHUH MtdIW rHHEDmIW rIHMH UVWATAUAVAWHH HELELHHU DHDRI EHMfDMHx fMDeED vCLuIH fDuMH LEHUIH DHDRI LDHUIt LHUIG uLLHHH VWATAVAWH uLMIIOHH WATAUAVAWH LHSxA MLAWLH HcsDA HcsDA HcsDA HcsDA DHVBH HcsDA DHVMH HcsDA HcsDA HcsDA DHVXH HcsDA DHVcH HcsDA DHVnH DHSyH MLAWLH MLAWLH HckDA MLCXAWLH MLAWLH WATAUAVAWH LoXLOPINpHL IsHIA HHuTHD LHSxA UVWATAUAVAWH LNPLF LNPLF LNPLF LNPLF DHSBH LNPLF DHSMH LNPLF LNPLF LNPLF xHPHD DHSXH LNPLF DHScH LNPLF DHSnH LNPLF LNPLF LNPLF LNPLF LNPLF LNPLF LNPLF LNPLF LNPLF WATAUAVAWH MNPMF IsHIA HHuMHD UVWATAUAVAWH LNPLFhULH LNPLFhL LNPLFhL LNPLFhL DHSBH LNPLFhL DHSMH LNPLFhL LNPLFhL LNPLFhHT xHPHD DHSXH LNPLFhL DHScH LNPLFhL DHSnH LNPLFhL LNPLFhULH LNPLFhL LNPLFhULH LNPLFhL LNPLFhL LNPLFhULH LNPLFhULH LNPLFhL WATAUAVAWH IuhMMPIL IsHIA HHuMHD UVWATAUAVAWH LNPLFpULH LNPLFpL LNPLFpL LNPLFpL DHSBH LNPLFpL DHSMH LNPLFpL LNPLFpL LNPLFpHT xHPHD DHSXH LNPLFpL DHScH LNPLFpL DHSnH LNPLFpL LNPLFpULH LNPLFpL LNPLFpULH LNPLFpL LNPLFpL LNPLFpULH LNPLFpULH LNPLFpL WATAUAVAWH ImpMMPIL IsHIA HHuMHD UVWATAUAVAWH LNPLFxULH LNPLFxL LNPLFxL LNPLFxL DHSBH LNPLFxL DHSMH LNPLFxL LNPLFxL LNPLFxHT xHPHD DHSXH LNPLFxL DHScH LNPLFxL DHSnH LNPLFxL LNPLFxULH LNPLFxL LNPLFxULH LNPLFxL LNPLFxL LNPLFxULH LNPLFxULH LNPLFxL WATAUAVAWH ImxMMPIL IsHIA HHuMHD HHtHP HKPHt HKxHt WATAUAVAWH WATAUAVAWH WATAUAVAWH WATAUAVAWH ATAVAWH SUVWAVH DLwHML CDGPB SVWATAUAVAWH MXMXMXA UVWAVAWH FALSHEL LHHHL LHAICIC ICICD ICICICMKA IfIIIH WAVAWH HHuHE UVWATAUAVAWHl HUHHME ADeLq ANFLM AEuLe HEDEHM IMNHHMu EVBHM HAFND HHMHH ZHuLuHUIem HHHHi WATAUAVAWH WATAUAVAWH HHHHP HKxHO HPXHN LsLsL wTHXy HPXHL AUAVAWH CIHLI HHHHi UVWATAUAVAWHl LEHULHMHUM EfDEHEH EfDEHEH vCLuIH MHUHM hHUIM fEHMH fEHEH fEHEH DeHMHI fEHMH EHULH HLEHU fEHMH fELEHC DuDmH fEHEH vGHUH fUEHMH HLMLEHU fEHMH vLHUH LEHUb DmDuHML fEHEH IHZPHKP HNNNHt HIkhH UWATAVAWH IsHIA HPHcH PHPHcH HPHcP PHPHcP HxHcH xHxHcH HxHcP xHxHcP UAVAWHl HLLHM HHuHu HUHLMI HMHUHH HEHEH HHMHH HHMHH HHMHH HHMHH HUIHHu HHMHH USVWATAVAWHl HEPMLLHL IHMPH UVWATAUAVAWH HEHcH HEHcH HHEHcH HEHcH PLHHL HXHcH XHXHcH HXHcP XHXHcP HGpHN HOtHD HApAIHHI MHHtpIM tiIHH HEHHA HWPLc HMHUH HEHEH CULEL CELML CELUL HHMHH HCPHc HtrtmH HCPHc HAXLc HKhHu HStLD WAVAWHpILHE SVWATAUAVAWHpHLLHT HSHHSPHCLHCXH HKhLD HStLL HSHHSP HCLHK HtMLL XHCPHCXH HCtHshH HKLHKXL LCHLCPHHt HCLHCXLC HSHHSPM HCtHL UVAWH wAHHm UWAVHl HHEgHK LuDuLuDuLufDu LuHMHt LuHMHt LuHMw tHcAH UVWATAUAVAWHH LEHUPH HKHtGH LsLsL uHMHUH ELuIt LEHUPH HKHtGH LsLsL uHMHUH DuPHUPI DuPIM LEPHU HUPIc ELuIt LEHUPH LsLsL uHMHUH VWATAVAWH fHKHt HsHsH VWATAVAWH fHKHt HsHsH VWATAVAWH fHKHt HsHsH UVWATAUAVAWHl LEHUoH LEHUoH LEHUoH HEHEHEHE ELuLEHU HKHtGH LsLsL HUwIu HEHEHEHE LeLEHU HKHtGH LcLcL HEHEHEHE LeLEHU HKHtGH LcLcL HKHtGH LcLcL uHMHUH HKHtGH LcLcL uHMHUH VWAVH HNNNHH HHGHG WATAUAVAWH IsHIA UVWATAUAVAWHH HEMHLHU EfDeHEH EfDeHEH MLEHUH EfDeHEH EfDeHEH MHUHR MHLHHMH UVWATAUAVAWHHpMLL HNNNLm HEPHG MLEPHHM HEPHG MLEPHHMk LuHHEI LUSAWHH fuHEMsI IHElA EfuLEHEHUI IHEZlA HELEI HUIHEkA fEHUHEH tYfAu fEHUHEH UATAUAVAWHl MUPMB uLEHMI INNNIHH HkhIH tcHUIM HHUIM LeLuH HkhHH VWAVHPHL uHtUHH WATAUAVAWH MMIIL IsHIA WATAUAVAWH HNNNILI HhMMIIL IsHIA VWAVH MLHHH WAVAWH MMHHH IIHLL WAVAWH MMHHH HNNNHt IIHLL wLHkhH SVWATAUAVAWH INNNIILI xHHHD LMHHIH SVWATAUAVAWH LMIHHH WATAUAVAWH LMHHIH HhHKH IHHuPH IHHuGH IueLC UVWATAUAVAWHH HELHHMf fDuHEH LEHUIRA EfDuHEH LEHUIdRA fEHEH LEHUIQA fDeHEH LEHUIGQA EfDeHEH LEHUIPA EfDeHEI LEHUI EfDeHEI LEHUI EfDeHEI LEHUINA EfDeHEI LEHUI UVWATAUAVAWHH HEHHUHHMHU EfMDEH IcLHt DEHuN fMDuE DDEHuHI uHuAH fEHEI EfMHF DELuA LuDDEHF EHMfEHx fEHEI MHUHthH VWAVH MLHHH WATAUAVAWH LMHHIH WATAUAVAWH LMHHIH SVWAVAWH ILHAM HGXHO PXHOPH HIPHt HIPHt WATAUAVAWHP AFxIN XIHLI LwXIN HHHHi HApHx VWAVH hHFPH uHnHK WATAUAVAWH HPpHh HHwPH HGhIF IsHIA SVWHpH IHHqhHt IHsPL ChIHL UVWHPHHH UWATAVAWHl MHHMH HEHEH HHMHH HHMHH HEHEH HHMHH HHMHH HXLeLe HEHEH HHMHH HHMHH HEHEH HHMHH HHMHH HLeLe HEHEH HHMHH HHMHH LHuLeHE HHMHH HHMHH HxHUH HHMHH HHMHH HHMHH HHMHH IsHIA LYPDI IIIIH UVWATAUAVAWHl MLuLe HEgHD HEgHD uHUwHH HHMfH IHHHB HExHD USVWATAVAWHH HHEHH HEHLMH HtDIff HHEHH HEHLMH ueLMXP UHHMH HHMxH HHMVH THHMH IHDHt SUVWATAVAWH sPIJHt VWAWH UVWATAUAVAWH LHUHUE HHHHA HEhLc HuCMt xHMEHEL pHMHt LmHEHD HuCHt HMAHEL LmHMHt VWATAVAWH SVWATAUAVAWH MtLHN wALIa SVWATAUAVAWHpD UVWATAUAVAWH ExLHL EIMxUH PDSDT DDKDT VUUUA HcENJ AIcfA UVWATAUAVAWHl HULEE LmHEHEg ELmLm HEHEE ULULL utDmn uiDmc tPDmJ sDHMd DDEHEHEo LHEgLuHL DMLUHT DDEHL HEHuLn IMDMt WAVAWH LHHgHH MIHml UVWAVAWHl LHEHK HtBHQ HHMHH HHMHH HHMHH HKHIN HCHHH HCHHH HCHLp LsHOx HKHHH HCHHH HCHHH HCHHx HKHHJ HCHHH HCHHH HCHHP HCHLsHM UVWATAUAVAWHl EHEHEE LmoMLEIH Luwfff HMLEI MLEIHi MtLHMI HHZHHK ueQHK UAVAWHl ELeHuLuHU uHuHHL HMHtAHUH ELeHMHtAHUH hHtDHT HKHHJ HCHHH HCHHH HCHHl WATAVH MMHLMu MHIMv HChHO HChJD SVATAVAWH IILLM SVATAVAWH IILLM UHHPHHHQ HLEHE LEHUHy EHMHUfI LEHUHy MHUHf UHHPLHA HtKLEM HMHtJHMI HMHUII MHMLMLEHUM LIHMIH SUAVH txDIpLB HShHK StHKhS KtHKh HDKth HMHHO HEHHH HEHHH HEHHx HJHHC VWAUAVAWH WATAUAVAWH HGhJL IsHIA WATAUAVAWH xMILH AVILMtJs WAVAWH WAVAWH wrHHL HtbHF VWATAVAWH UATAUAVAWHl HLHHM HUHHE IwuEHv HEHHMHC HUHHE HEHHMHEH BHHtAH HuHEgMHHY HUHHEHuH HtDHUH WATAUAVAWHpAE EuGHC EuLHS IsHIA HDbHDH ILxLE HpAHxLpLD ulHIH WAVAWH VWATAVAWH MtLHO VWATAVAWH LLIIH VWAVH tftaH DKpIL tkHCHLH UVWATAUAVAWHl HHMvE HHMEg BHMtBH HEHHMHF BHHtAH HHEHEH HEgMHHk oHUHl DHJHMHtAHUH UVWATAUAVAWHl MLHUHI HHEHp LLHUP CUHMH HHMHH VWAWH HHuHHt SUVWATAUAVAWH pMMHHHL Hffffff HkHHKP UVWATAUAVAWH Hffffff HHCHO IHHuGH WATAUAVAWHPMLLH HNNNHIH IMIhIL IsHIA UWATAVAWHHpH HEMHL HEHCHE ECPsTDcXHC nunDeLd IsHIA USVWATAVAWHH HEILHIx fDeHMI LLHUIHN EfDeHMI LLHUI EfDeHMI LLHUIUHM LDFPHUIfLH LLFHHUI UVWHPIHHH SHPIHD WAVAWH WAVAWH WAVAWH UVWATAUAVAWHHPHEH mDmHEu TDmHA LHuLH IHMIH HHMMtIM LEHHHMY ELmMt UATAUAVAWHHPHM UVWATAUAVAWHl ILELHHMHUMh HUHMcA HMALHUHMPHHE fEHMH ADeHM LEHUHM fEHMH HUIMUH DeAHUDeHH ADeDeHM fEHMH HUIETH DeAHUDeHH ADeHM fEHMH HUIASH DeAHUDeHH ADeHM fEHMH HUIFRH UVWATAUAVAWHH MHNNNHH IHMDE EMLuILuPEt ILHuL MLeLePDE XHEPH HMHhHM HUPHT LLEXHHM uLEHMI HNNNHH HkhIH WATAUAVAWH MMHLH PHLHD uLMIIHH SVWATAUAVAWH INNNIILI xHHHD MohLl IHLMHHIH HHMHH HMHUHH HHMHH UVWAVAWHpH IHAIP HHrHD HIRDHL WHpHHMC IKIKL HSLHL WHpLHJ ICICD LwHHL SWHhHLH kHHHx UVWHHpH HEIHHMH HHMHH HHMHH HHMHH HHMHH HHMHH HHMHH UVWATAUAVAWHpMH IHAHK HHHrHFLHT VWAVH HHHpHDLHD HYPDI IAHHHIL UVWATAUAVAWHHPH LHEHH LHEHH LHEHH LHEHH ITLMH LHEHH LHEHH LHEHH HugIv HHMGH ZHHMH HHMvH HHMTH HyPAi HHHHL USVWATAVAWHHpH HyLMP HHEHH HEHLMH HHEHH LuiLv UVWHpHP SUVWAVAWHxLE hHtrH USVWATAVAWHHPH HILMP HHEHH HHEHH HEHLMH DHgHPA UVWATAUAVAWHHpHH HEPHD MHHMH MHHMvH SHHxH kLHHMH WAVAWHpH LSHHK UVWAVAWHl HMHUHH HEHEH HHMHH HHMHH HMHUHH HEHEH HHMHH HHMHH HMHUHH HEHEH HHMHH HHMHH HEHEH HHMHH HHMHH HHMHH HHqPY HHIIIL VWATAVAWH HHHCH QHHvH WHPHB HCxLL USVWATAVAWHHPH HHEHH HHEHH HEHLMH HHEHH HEHLMH HHMjH UVWATAUAVAWH AVpHM LAVtHL HHMHH ELeLeDe EHUHL WATAUAVAWHpLHyHLO HHHHi IMxHL UATAUAVAWH HMHUHH HEHEH HUHLMI CEHMf HMHUHH HEHEH LMpfH HUhHH HHMPnGL HHMHH HHMHH HHMHH HHMHH HMHUHH HEHEH HUHLMI CEHMa HMHUHH HUHHH HHMHH HHMHH HHMHH HHMHH CEPHL HHMPHH WATAUAVAWH LxHLhPL WAVAWH HOHHWPHl IPXIN HyHHD IPXHtHT ATAVAWH CIHLI HKPHt HAHHAPO HHHHi ATAUH IvPHtTH UVWATAUAVAWHl HULHL EfDEHEH EfDEHEH MHUHMzgHUIM fEHMH vMLuIH LuLuIH fEHEH fEHEH HMDHI fEHEH ADmHU HHMHH PpHMeA fEHEH ADmHU HHMHH fEHMH ADmHM ELLEHUHM LLEHUHM fEHEH fEHMH fUHEHD HLMHULHE fEHMH vRHUH ELHUIM fEHEH LuDeH VWAVH uDfff HrHHL HrHHL UWATAVAWHl LEwHM LEwHHM LEwHHM Igfffffff LULMLE LEMtPHMI LULMLEL UIHHH HEHEHEHEHE LEMtPHMI HEHEHEHEHEHE ELeLEHU DLEMtPHMI LMMtLHMI UVWATAUAVAWHHpH HEMHLHU HUHJIN EfDeHEH EfDeHEH MLEHUH INpHu FhHUHI EfDeHEH EfDeHEH MLEHUHXIN MHHHMH VWATAVAWHPMMH HgfffffffHH tfAAH AtIcH LUSAVHH fuHEM HELEI HUIHE fEHEH EfEHEH fuHEH EfuHUHEH LCxHIHCpHT UAVAWHH EFdAV RHHMv INPLE HUHMV HUHMV uLLHHH WATAUAVAWH MMHLH uLMIItHH LUSVWHHXH MkLEMsHUM HUHEI HUHEI LEHEHUI HELEI HUHHE WAVAWH SVWATAUAVAWH IgfffffffIHLI Ifffffff HHGIgfffffff HIgfffffff MtLHN HIHHt HIHHt WATAUAVAWH HHHHi IsHIA VWAVHP MHHBpHA HBxHA VWAVH UVWATAUAVAWHl ILHUHMh fDuHMH MLHUIHO EfDuHMH MLHUIaHM DuMDHUIavAWHO HMHUI MLHUI MDHUIuAW MDHUIkuHW MDEHUHM MDEHUHMtH MDEHUHMtH MDEHUHMt LuHEA fDuHEH EfDuHEH xgHHL XXHHP UATAUAVAWHHpMEDH HMHMHtYHUH EEHMAHMHtYHUH VWAVH MLHHH WAVAWH MMHHH wEHHx HUUUUUUU SVWATAUAVAWH IUUUUUUU UVWAVAWH HHtILD MHHHBpHA HBxHA UVWATAUAVAWH HwPHwXHw HwhHwpHwxH SUVWAVH AFdIFh InpInxI HnpHnxA HOpyHO UVWATAUAVAWHl HLHME EfEHIhH vOHuHI DEIWx HuDeDELI fuHEI EfuHMI MMLHUH EfuHMI MLHUHTLHUI EfuHMI MLHUH EfuHMI MLHUH EfuHMI MLHUH HUHFIcOL EfuHEI EfuHEI EfuHEI MLEHUH MgPIGXL HuDuD LHUIHHEE MLhLu EfuHEH MLEHUHxH MEGDHUH MEGHHUHH EfuHEH uDmHE EfuHEH IHHuPH IHHuPH UVWATAUAVAWHHPH HEHLHr EfDmHEI DELEHUHdQH EfDmHEI LLEHUH HUHMxH HUHMRH EfDmHEI LEHUHhP EfDmHEI EfDmHEI LEHUH EfDmHEI LEHUHN EfDmHEI LEHUHiNH EfDmHEI LEHUH fEHEL HUHaHMH USVWATAUAVAWHHxH HEMAHH LcDHH HLEHEHUHG EfDeHUHEHI EfDeHEI EfDeHEI HUfEHx fEHEH HULEHMHMD HLEHEHUHG EfDeHUHEHI EfDeHEI IHEHH fDeLEHEHUI IHEHA HUHUHE HULEHMIE EfDeHUHEHI EfDeHEI IHEFH fDeLEHEHUI IHEFA EfEHEH HUHME EfDeHUHEHI HLEHEHUHG EfDeHUHEHI EfDeHEI IHECH HULEHMIE HEACH EfDeHUHEHI EfDeHEI IHEmBH lHHLD HUHuHE HHpLD GHHLHt HcHHu zHHLD HcHHu HnHHL UATAUAVAWHH HUHEHI HUHEHI LEHEHUI EfEHEH HUHME IyHMH LUWAVHHpH HEILAt IsMcMkM EfDeHUHEII fDeHEH EfDeHUHEI fEHEH HUHMLIE EfDeHUHEII fDeHEH EfDeHUHEI EfEHEH HUHME HIHIIHu HHHHHH HAHHAPHAXA HAhHApHAx WAVAWH UVWATAUAVAWHH HEILHUHMh MLEHUIceH uMLEHUI MLEHUIdHHMn fMHMH MLHUIeHG HUIqH MHUIH fEHEH fEHEH UVWATAUAVAWHhH HEADL vIHuHH HuADu HuADuLH fEADuHL UVWATAUAVAWH LhHLhPLhXLh LhhLhpLhxL LhHLhPLhXLh LhhLhpLhxH LhHLhPLhXLh LhhLhpLhxL LhHLhPLhXLh LhhLhpHXxH UVWAVAWH SVWHP VWATAVAWH HPXHH HRXHH HDLHM HPXLH PhMHH HMkHE IkHIA WHPHHH HUUUUUUU WATAUAVAWH PIHHD HOHHK HGhHC SUVWATAUAVAWH psCHE XEHHpHE MHCpHD psCHE XDHHHE MtqAL WAVAWHPHE HOxHD UVWAVAWH MDHHL UVWATAUAVAWH SVWATAUAVAWH HHLHi UVWATAUAVAWH HSpLB HtHHOpHt HOxHO IPPHH HHHHi IHRPI ruXHuHtKHO HGHHWH UVAUAVHHHMHI PHINhL PHINhL IIFhD UVWATAUAVAWHH HEMHE DHMHX HHuHF HHMHuL HuHuI DEDuHu pIHHt HHLPh DHNHL DHNHL UVWATAUAVAWHl DMLHHMMh HUHHH uMLEHUI HEuMLEHUHM EfDEHEH EfDEHEH vFLeII LMHUHMq DMHUHMH EfDMHEH EfDMHEH EfDMHEI EfDMHEI EfDMHEI EfDMHEI UVWATAUAVAWHHpH HEDMLHUHMh HUHMyH HUHMyH MHUHMyHO MDHUHMsH EHMfEHx HEDEM HHLHi SVWATAUAVAWH WAVAWH HIQHHH MJMZL LBLJL MBIIL LBLHL LJLBLI HkLkL LQLJL LHHBLL HBLII LJHAHBMHL LJHAL sHBLIH IXIHMLHLH IBLHH HAHYHIIP HAHYHIHP UVWATAUAVAWHP HKhHB HKpHSxE HAPHHH HCxHH HAHHIP HKpHCh PIIHH HHKLH HAHHHP eLCPE HKxHSLH HAxLLL HQMHML HAHYHP WAVAWH LLAxI IPPHIW UVWATAUAVAWHH HELELHB HEHAxHP DHMHX HHuHF HHMHuL HuHuHH DEDuHu SVWATAUAVAWHPMHLL IUUUUUUU HCHHD LMHIAIHPA UWATAVAWH HMHEHD HPhHH HRHLH UWATAVAWHH HHEHE LeHcA HUeeHM IsHIA VWAVH UVWAVAWH LHHMPMH UAVAWH HEHcH HEHcH HEHcH HEHcH HEHcH HEHcH HEHcH HEHcH HMHcQ UVWATAWH WAVAWHpMLH HBPHt UVWAVAWH HSDCH HHetJ SVWHp FLHHL UVWHHpHHHA uHuHEHE uuXHO HEHEHE uSHff WAVAWH uuVHHK luEHtHK uuHHK HfHHK uXHHH UVWAUAWH hMLHHUE SUVWAUAWHxH IEtIA FDHHS gfffDA HAPHAhH UVWATAUAVAWH FhANxM INhUMHL NINPI UVWATAUAVAWHH pEMLHH HPXHu MHVPHt AELuH DmXHMHUH mEMIH HMHtIHEH HtLHEH UVWATAUAVAWHH uDLUPIMX uHHGpH LUPDEHEHEHH MIIHI IHtSLeHML LeHHE tFHuXH HMDmHV MtDmfMtE HMtHMHEH HEDmHMXH LEHMHtVHt VWAVH HNpLDAH iFhHH AHfALM uIHtCf UHAuthenti cAMDuS DGXHHMGH HGenuineIH nteluG IHhHH IHFHH IHQHH UATAUAVAWHl UWAVH rJIcHK AHLcH ATAVAWY LUSIkHH HMcHz sHHEH UWAVHl HUHMA HUHMrA HUHMLA UVWATAUAVAWH HUUUUUUUUIHK IsMML MIIHM IMHII WATAWH HILIMt SUVWATAUAVAWH LHiXM HAPHD HAXHD HEAHG VWATAUAVH WAVAWH VWATAUAVAWz WATAUAVAWH HuvHH AAHHu SUVWAVH SUVWATAUAVAWHh SUVWATAUAVAWH SUVWATAUAVAW SUVWATAUAVAW HAMLD PHHfI SUVWATAUAVAW PLHfff SUVWATAUAVAW HIHfH SUVWATAUAVAW SUVWATAUAVAWh SUVWATAUAVAWx SUAVAW PILLH ATAVAW LIHfI ATAVAW SATAUAVh ATAVAW ATAUAV PIHfH ATAUAV HSUVWATAUAVAWH nHKXH HSUVWATAUAVAWH SUVWATAUAVAW nHMXH nHEPH nHKXH nHCPH SUVWATAUAVAWX nHMXH nHEPH HCPfH HHKXH SUVWATAUAVAW nHJXH nHBPH nHOXH nHGPH nHMXHH MHHEPH SUVWATAUAVAW nHJXH nHOXH nHGPH nHMXHH MHHEPH SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHFPH nINXI nIFPI SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHFPH nINXI nIFPI SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHMXH nIOXI SUVWATAUAVAW nHJXH nHBPH nHOXH nHGPH nHNXH nHFPH nHMXH nHEPH nIOXI nIGPI HSUVWATAUAVAWH nHKXH SUVWHH USVWATAUAVAWH tAEhD xIEhH EChEHChH nIMXI nIEPI nHKXLH nHCPH MEMLL USVWATAUAVAWH EAFhEIFhH EChEHChH nINXI nIFPI HKXfL KHHCPH HUDmEfD EHUHD USVWATAUAVAWH MLELL nHJXH nHBPH BhEHBhHH nHNXH nHFPH EFhEHFhH nINXI nIFPI USVWATAUAVAWH MLELL nHJXH nHBPH HBhHH nHFPH lEdfD EINXI nIFPI nHEfH USVWATAUAVAWH MLELL nHJXH nHBPH HBhHH nHOXH nHGPH uINXI nIFPI nIGPI oHMfA HEHMH EXMLt nHufD nHEfH nHEfH HuLuI USVWATAUAVAWH nHJXH nHBPH HBhHH ePHOXH nHGPH uINXI nIFPI MIOXI nIGPI nIHIH oEpfA USVWATAUAVAWH MLELL nHJXH MHBPH HBhIH nHOXH IHGhH nHFPH uPIOXI nIGPI upIMXI nIEPI XHEHA nHEfH oupHuf USVWATAUAVAWH nHJXH nHBPH HBhIH nHGPH HGhIH nHFPH MIOXI nIGPI nIEPI HEhHA nHEfH LMPLT nHEXfH SUAVAW PILLH HHAPh ATAVAW LIHfI ATAVAW SATAUAVh ALHNN ATAVAW ATAUAV PIHfH ATAUAV HSUVWATAUAVAWH nHKXH HSUVWATAUAVAWH SUVWATAUAVAW nHMXH nHEPH nHKXH nHCPH SUVWATAUAVAWX nHMXH nHEPH HCPfH HHKXH SUVWATAUAVAW nHJXH nHBPH nHOXH nHGPH nHMXHH MHHEPH SUVWATAUAVAW nHJXH nHOXH nHGPH nHMXHH MHHEPH SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHFPH nINXI nIFPI SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHFPH nINXI nIFPI SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHMXH nIOXI SUVWATAUAVAW nHJXH nHBPH nHOXH nHGPH nHNXH nHFPH nHMXH nHEPH nIOXI nIGPI SUVWAVH SUVWATAUAVAWHh SUVWATAUAVAWH SUVWATAUAVAW SUVWATAUAVAW HAMLD PHHfI SUVWATAUAVAW PLHfff SUVWATAUAVAW HIHfH SUVWATAUAVAW SUVWATAUAVAWh SUVWATAUAVAWx SUAVAW PILLH ATAVAW LIHfD ATAVAW SATAUAVX ATAVAW ATAUAV PIHfH lIHfD ATAUAV HSUVWATAUAVAWH nHKXH HSUVWATAUAVAWH SUVWATAUAVAW nHMXH nHEPH nHKXH nHCPH SUVWATAUAVAWX nHMXH nHEPH HCPfH HHKXH SUVWATAUAVAW nHJXH nHBPH nHOXH nHGPH nHMXHH MHHEPH SUVWATAUAVAW nHJXH nHOXH nHGPH nHMXHH MHHEPH SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHFPH nINXI nIFPI SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHFPH nINXI nIFPI SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHFPH nHMXH nIOXI pIGPI SUVWATAUAVAW nHJXH nHBPH nHOXH nHGPH nHNXH nHFPH nHMXH nHEPH nIOXI nIGPI HSUVWATAUAVAWH nHKXH HSUVWATAUAVAWH SUVWATAUAVAW nHMXH nHEPH nHKXH nHCPH SUVWATAUAVAWX nHMXH nHEPH HCPfH HHKXH SUVWATAUAVAW nHJXH nHBPH nHOXH nHGPH nHMXHH MHHEPH SUVWATAUAVAW nHJXH nHOXH nHGPH nHMXHH MHHEPH SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHFPH nINXI nIFPI SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHFPH nINXI nIFPI SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHMXH nIOXI SUVWATAUAVAW nHJXH nHBPH nHOXH nHGPH nHNXH nHFPH nHMXH nHEPH nIOXI nIGPI HSUVWATAUAVAWH nHKXH HSUVWATAUAVAWH SUVWATAUAVAW nHMXH nHEPH nHKXH nHCPH SUVWATAUAVAWX nHMXH nHEPH HCPfH HHKXH SUVWATAUAVAW nHJXH nHBPH nHOXH nHGPH nHMXHH MHHEPH SUVWATAUAVAW nHJXH nHOXH nHGPH nHMXHH MHHEPH SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHFPH nINXI nIFPI SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHFPH nINXI nIFPI SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHMXH nIOXI SUVWATAUAVAW nHJXH nHBPH nHOXH nHGPH nHNXH nHFPH nHMXH nHEPH nIOXI nIGPI SUVWAVAWH ILMLHM SUVWAVAWH ILMLH SUVWAVAWHH SUVWAVAWHH SUVWAVAWH ILMLH SUVWAVAWH ILMLH SUVWAVAWH ILMLH HJMHH SUVWAVH SUVWATAUAVAWHh SUVWATAUAVAWH SUVWATAUAVAW SUVWATAUAVAW HAMLD PHHfI SUVWATAUAVAW PLHfff SUVWATAUAVAW HIHfH SUVWATAUAVAW SUVWATAUAVAWh SUVWATAUAVAWx SUAVAW PILLH HHApu ATAVAW LIHfI ATAVAW ALHNe SATAUAVh ATAVAW ATAUAV ALHnG PIHfH ATAUAV SUVWAVH SUVWATAUAVAWHX SUVWATAUAVAWH SUVWATAUAVAW SUVWATAUAVAW HAMLD PHHfI SUVWATAUAVAW PLHfff SUVWATAUAVAW hLHfI SUVWATAUAVAW SUVWATAUAVAWh SUVWATAUAVAWx SUAVAW SUAVAW UATAUAWH UATAUAWH UATAUAWH LMMLD nHMfL HEIHfH UATAUAWH LMMLD nHMfL HEIHfH UATAWH LMIHEMHL ILEHHL IHHMf wHuLuD UATAWH LMIHEMHL HHefH fHuLuD SUVWAVH SUVWATAUAVAWHX SUVWATAUAVAWX SUVWATAUAVAW SUVWATAUAVAW HAMLD PHHfI AMcfD oIHHl SUVWATAUAVAW PLHfff SUVWATAUAVAW hLHfI XIHfH SUVWATAUAVAW ALHne SUVWATAUAVAWh oIcfD PHIcfH SUVWATAUAVAWx HSUVWATAUAVAWH nHKXH HSUVWATAUAVAWH SUVWATAUAVAW nHMXH nHEPH nHKXH nHCPH SUVWATAUAVAWX nHMXH nHEPH HCPfH HHKXH SUVWATAUAVAW nHJXH nHBPH nHOXH nHGPH nHMXHH MHHEPH SUVWATAUAVAW nHJXH nHOXH nHGPH nHMXHH MHHEPH SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHFPH nINXI nIFPI SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHFPH nINXI nIFPI SUVWATAUAVAW nHJXH nHOXH nHGPH nHNXH nHMXH nIOXI SUVWATAUAVAW nHJXH nHBPH nHOXH nHGPH nHNXH nHFPH nHMXH nHEPH nIOXI nIGPI SUVWAVAWH ILMLH UATAUHl LeDeLeDeE DmDmLeLeDeE HtoAH AtQfA UATAUHl LeDeLeDeE DmDmLeLeDeE HtoAH AtQfA UVWATAUAVAWH EIMxUH PDSDT DDKDT VUUUA HcENJ AIcfA CIHHX oKPfD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD rHEfD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD omHUfD oEHUfD oGHEf oOHEf RHEfD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD HELMHD PnHEfD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEf pHEHD PHEHD oEHEHD LMHELD oEHEHD LMHEf pHEHD PHEHD CIHHX UAVAWHH oeHUfD omHMa ouHUfD ouHUf oNLMHD oNPHD tHEfD LMHEHD pHEHD PHEHD qtHEfD LMHEHD pHEHD PHEHD tHEfD HELMHD PsHEfD LMHEHD pHEHD PHEHD sHEfD LMHEHD pHEHD PHEHD AsHEf LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD rHEfD HELMHD rHEfD LMHEHD pHEHD PHEHD oOLMHD oOPHD pHEfD LMHEHD pHEHD PHEHD pHEfD LMHEHD pHEHD PHEHD pHEfD HELMHD PoHEfD LMHEHD pHEHD PHEHD oHEfD LMHEHD pHEHD PHEHD RoHEf LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD nHEfD HELMHD PpnHEfD LMHEHD pHEHD PHEHD oMHEfD LMHEHD pHEHD PHEHD mHEfD LMHEHD pHEHD PHEHD lHEfD LMHEHD pHEHD PHEHD vlHEfD LMHEHD pHEHD PHEHD lHEfD LMHEHD pHEHD PHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD GkHEf LMHEHD pHEHD PHEHD jHEfD LMHEHD pHEHD PHEHD jHEfD LMHEHD pHEHD PHEHD CIHHX oKPfD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD omHUfD oEHUfD oGHEf oOHEf bXHEfD LMHEHD pHEHD PHEHD XHEfD LMHEHD pHEHD PHEHD WHEfD HELMHD WHEfD LMHEHD pHEHD PHEHD WHEfD LMHEHD pHEHD PHEHD VHEfD LMHEHD pHEHD PHEHD LMHEf pHEHD PHEHD oEHEHD LMHELD oEHEHD LMHEf pHEHD PHEHD CIHHX oKPfD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD UAVAWHH oeHUfD ouHUfD ouHUf oNLMHD oNPHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD HELMHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD HELMHD LMHEHD pHEHD PHEHD oOLMHD oOPHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD HELMHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD HELMHD LMHEHD pHEHD PHEHD oMHEfD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD CIHHX oKPfD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD omHUfD oEHUfD oGHEf oOHEf LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD HELMHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEHD pHEHD PHEHD LMHEf pHEHD PHEHD oEHEHD LMHELD oEHEHD LMHEf pHEHD PHEHD wBHcH WATAUAVAWH xLCPLc HspHkHHS PHKhH EAgfffAHI gfffAI HRPHD HCxHL HAHHHD HHLAPH HApIHD ILIXHHH HAxHLl IsHIA HMcHL LcIcH WAVAWH VWAVH UVWAVAWHl wHEwHD DMwEt HDMwHEwHD EELEH HHEwH uYHUUUUUUU USVWATAUAVAWHhH nHHfD MHUEgH MEgHUH MHUEgH MEgHUH MHUEgH HEwfA LUIkH McMkL USVWATAUAVAWHhH HEwfA HLUVWIxHp uHEuCY uGHELP CLAEA LUSATAUIkHH pHUHHL MHMHH pHUHHL MHMHH pHUHHL MHMHH pHUHHL MHMHH pHUHHL MHMHH pHUHHL MHMHH pHUHHL MHMHH pHUHHL MHMHH pHUHHL MHMHH pHUHHL MHMHH DCHHL UATAUAVAWH HEHEJ XIHEL HEIHEH HEHEH FQHuL HULUAH HAXHAPHL UATAUAVAWHl LyXHD HELHA HEHHA HELHA ACLDA HLDAC UVWAVH IIHLMu UAVAWH HEHUHHL LHMHH EpLEp EpLEp UVWATAUAVAWH MHUHH ADEDD HBHAHBHAHBHAI HBHAHBHAHBHAI ILAMtC UVWATAUAVAWHl LHMMH IILMH MILUL HHdHToA HDHlHTRA LULEHULM LMHULELUL LuHMHE LHHHH VWAVH ATAVAWH MIHDE UAUAVAWH HEpMLMHM HEHUHHL fHEHL LHMHH LUAUAVAWHx HLLLL WAVAWA ADAtBE DADAt LAHHH HAHtC UVWATAUAVAWH LAHLk LMEDl HMLmAQ HEDMDHUpH EILmALuH teHuqHt MAIMn EILmADmAH LEHHM MAILT EEHUpH UTUTT HLUILUALt IcMcH AATAWH IcMcH WATAUAVAWH WATAUAVAWH BIcDA HAHHI UWAWHl WHpIHH XHtLHD VWAVH VWATAVAWH CIHLI HHHHi WHtTx HHHHi HtPHt WAVAWH CEHHi HHHHV VWAVH LUVAWHH IHEjCA HELEI HUIHEBA HUHEH LEHEHUH IHEaAA UVWATAUAVAWHH HEHHUHHU HEuMLEHUHbyH HUHLC MDHUH MHUHLs LeDEuHA fEHEH HMuMD pHfHH WATAUAVAWH UVWATAUAVAWHl EEHHY LMgMA LEHMLMgLE IHLDeI HMgHI MMHHMb LEHMLMgLU rHMHtmHHUH MtOEP HMHMHM MtHEH HMHMHMHE uLLHHH IIHHHtLLQ SVWATAUAVAWHPHLH PHHHL HsxHt HHyxH UVWATAUAVAWHpEMHH LwxLt LcHHKPI UATAUAVAWHl HqxEgWL CEHSHMHSHM LHEHE SVWATAUAVAWH NtUUu HtlHG VWAVH zIcAB HAHtR VWAVH VWAWH IcLHH HQPEu USVWATAUAVAWHl IvPMfXI HEgHO HEwHD HEoHD HEgHD LMLHIN HEgHMHL HEgIN MHEIN HHHHi HHHHi WHtTx UVWATAUAVAWH ATAVAWHpA CIHHH WMtTx VWATAVAWH CIHHH WMtTx HHLHi WATAUAVAWH HtKHn IOPIO SVWATAUAVAWHPHLH AVHPMHHH HUUUUUUU SVWATAUAVAWHPHLH LMIIIHPA UAVAWHl HICIICMCICMCICD pHgHH pHgHH VWATAVAWH LIIQt SVWAVAWH HUHhH SWATAVH WAVAWH LIHVm VWATAVAWH LIHel WAVAWH XYtTlV YtTlV XYtTlVYY YtTlV YYYtTlV YtTlV XYYYtT YAlVY XTtVlXX XYYYT XdXtXlXX AXxTeFA PIHHX UHEHD uSHED TUHMD EHEHD EHEHD EHEHD pHEHD EHEHD pHEHD EHEHD pHEHD EHEHD pHEHD HMHED EHEHD EHEHD EHEHD EHEHD EOHED TmHMD ExHED EHEHD pHMHD EHEHD pHMHD EHEHD pHMHD EHEHD EHEHD EHEHD EHEHD EHEHD EHEHD EHEHD DAXHHy KXHBPHCPHZPH KXHGPHCPH DCXAA DCXAA HChHG HChHGxHK HChHAhHKhHt ADCXA DCXAA HChHGhH bHChH HChHGpH CXHGPHCPH DCXHt lDCXA ADCXA DCXHBPHCPHZPKX pAHHg WAVAWH HshHL WAVAW HHtBD fAfDL HkhHFHHt hHChHFHHXhH USAUHl HcDKX HIKXCx KXIEPHCPI HSpKX HHmKXCx KXHGPHCPH DIXLLQ BXLBpLZh hHAhI HHHhIHHJX HIhIHHJX SUVWAVH DWfDT UVWATAUAVAWHPH HuZAX UVWATAUAVAWH LAHEfHMH DMLDd EAAfDLE IIEHA DIXMHA DKXLSpHShA HtmHH CXLSpHSh HApHy hHFHHt hHChHFHHXhH HtKHtF rGBHt DBHcIcD SUVWH HuHuJA HHtZHF VWATAUAWH EHHAH WAVAWH ILxILx LDxDLxL fAafA uTfAz uLfAz fAafA SUWAWH HuHty SVWATAUAVAWH HHIHHT wnHcL SVWATAUAVAWHpMLHDP IAHpA HHHHH wnHcL fFIHL fFIHL fFIHL fFIHL fFIHL fFIHL uHHVH wfHcA WATAUAVAW IsHIA WAVAWH WATAUAVAWH NbIBz HkPHk AkdLD CdIHH AkdLD CtIHIH AkdLD jLKlK VWATAUAWHPIMIHL ftVEI HcfALF HcDfAlF HcfALF HcfELF HcIfEF HHcvH LUSVI McMkMsL THVXL HcHhH HUIet HtXHtZD HcHhH LfLHu HcHhH HcHhH HcHhH HcHhH HcHhm HcHhJ HcHHh HcHhz HcHhf HcHhR HcHhT HcHhB HcHhuX HpHhL MtJAH ATAVAWH MLLHu HHuQMt HtxLC SUAVAWHx LctNIH VATAUHPE DFXHAPHFPHqPHPA HcMtUHH uHHfD HHNhH LahIEHHt hHAhIEHHHhIMH HIhIMH FXIEPHFPIuPLt UVATAUAVH tkLCHALl HcHLL MEHHH uBIHM AEPEA ETfEA HJxHt ubIHpLHHxHt HAxHBpHt HHpHQx HHxHQx ubIHxLHHpHt HApHBxHt HApHBxHt HJxLApMt HAxHt xHApHt HAxHBpHt HJpHApHt LAxMt HAxHt HJxHApHBxHt HHpHQp HHxHQp uxLAxMt pHAxHt HApHt HJpHAxHBpHt pHuHH CXHCxHt pHtGf LCpMu HKxHuCH HApHt pHuLAxH HCxHt LKxLKp HAVAWHXHX AFXBLl INHHt MfHIFLd MFPIAVXHXA LUVATHp HUxHD HAHHt WAVAWH MHxMt OxGXL GXIGPHGPI VWAVH EHHuR HFHHt hHChHFHHXhH HFHHt hHChHFHHXh LCxHD tyHkpGx xHkpGxGX VWAVHP xHCHGxHkhHFHHt hHChHFHHXhH HkhHFHHt hHChHFHHXhH HGxvOX xHKxuXHSpL SVHxAXH USWAVAWHl EuKHEH IGpHT tKDCXA WAVAWH LchHFHH hHChHFHHXh HUSAVHH LSXAx HcLEHSp LEHSpE LEHSpCX HIKxCXH CXIFPHCPI LOpMt CXHFPHCPH PKxCX CXHFPHCPH HIIHpHHu HAxAx HGpCX HHKxCX CXHFPHCPH LHXAX IICIC DktgH HtQHl KXELt KXHBPHCPHZPH DAAuACF AXIIHH LChLCpEK sIMEt DAAuI HChHt HKpHu HIXpCX HAXHH HOHHIX HOHHIXG HOHFXH WATAUAVAWH HOWHOH WAVAWH IEHLufE HKHSH xHAHxH VWAVAWHHHy HtHHD HYPHH HCPHFPSXC HAxHt KxCXH CXHFPHCPH HIXCX VHPHAHHHu LxhLaHMM IFhII GXHFPHGPH HKpHt HCpGX GXHFPHGPH HSpUH AxGOX HSpQHSpLHd AXHFPHAPHNP KXHFPHCPH LchHFHHt hHChHFHHXhH CXHFPHCPH HHtPH DIcAIxM vDHyH UVWAVAW HHqhHCHHt hHAhHCHHHh HIhHKH SUVWATAVAWHpy wIHyP HHCpH HHBhH HCxHt fHSxHHBhHCxRpL HtHLyhHCHHt hHAhHCHHHh HIhHKH HHBhH HQHyHJ HuRBX BXHAPHBPHQP VWAVHPH IkISHMsHOpMK xHCHGxHkhHFHHt hHChHFHHXhH HkhHFHHt hHChHFHHXhH UVWHl DJXIA HDJXHEP tbtIA HKpHE HHKXCx KXHFPHCPH HHIpHy SUVWHxH hBXHH HGxHt CXHFPHCPH HWxKXCx KXHFPHCPH HohHFHHt hHGhHFHHxhH CXHGPHCPH HCpHuY HkhHFHHt hHChHFHHXhH CPHKp HkhHFHHt hHChHFHHXh ATAVAWH EOPLHK KXHFp KXHFxH HFpGX UVWATAUAVAWH HGXHL xHOxu HFHHt hHGhHFHHxhH WATAUAVAWH LzxMHBpHD hHGhH IsHIA SWATAUAWH IMLLA WHPHHD pHApI IBXHRx CXHAPHCPHYPH PLEpMt HvFXH FXIFPHFPIvPNXFx NXIFPHFPIvPH HFxHt CXHGPHCPH IBhHB CPIJp HGHHt hHChHGHHXh HHBhHD LUhHD HLHIH CXHGPHCPH HChHD HHChHD XHChHD UVWATAUAVAWH AAEfD PEIfA MtYLD VWATAVAWH UVWATAUAVAWHPH HHuoH nIOLD UVATAUAVH wKIHL ATAVAWH IMLLMt ILHHA spLHA HBHAHBHAHBHAH LUSATAUIkH pHUHHL pHUHHL pHUHHL pHUHHL pHUHHL pHUHHL pHUHHL pHUHHL DCHHL HJHHHJHHHJHHH uDOHD HGHBHGHBHGHBI UVWATAUAVAWH AItHH HHEAH HHEPI HHEpI HHEAH HHMHI HHMhI AHHEH HHEAH ALEHD LUhHEHI HEhAH LEhHP JHUXI HHEXI HHExAH HLMxL LUWAVIxHp HIsMcMkM uJEuEs DKTDCLSPD WATAUAVAWH MHBHLHz PHBPH HBXHD hHBhHD HBpHD xHBxHD IsHIA UVWHpH HnPIHHH USVWHl UVWATAUAVAWH MHEEt UWAVH urEums UVWATAUAVAWH MHEEt UWAVH urEums UVWATAUAVAWH MHEEt UWAVH urEums UVWATAUAVAWH UVWATAUAVAWp upEuks UVWATAUAVAWH EtQMI HoAbmHb bHCDbsHCb bsHCbsHCDI bsHCbHCDb bHbHbHbHbHbHbHbqHb bHbHbHbHbqHbHbHbqHb bHbHb bHbHb HbUHbHbHr HbqHb HbqHbH buHbHr buHbHr bHbHbHbHbHbHbHbHb bHbHbHbqHbHbHbHbqHb bMHbHr bHCDbHCb bHCbHCDb bHCbHCDbH AbHCbHCDb bHCbHCDb bHCbHCDb bHCbHCDbH bHCbHbHbHbqHb HbqHbHCDbH bHbHbHbHbHbHbHbHb bHbHbHbHbqHbHbHbqHb beHbHr bMHbHr HbqHbH HbqHbH buHbHr buHbHr bHbHbHbHbHbHbHbqHb bHbHbHbqHbHbHbqHb bHbHb HbHbHbHbeHb HbHbHr bUHbHr bHCDbHCb bHCDbHCb bHCDbHCb bHCDbHCb UVWATAUAVAW upEuks SUVWH xHHjHl HYxHH SUVWATAVAWH MIHLH uMtbLHL HCXHEX LuHHA SUVWATAUAVAWH HtaMH xMGxH DHCXI HuMGxI IGXHD WAVAWH WATAUAVAWH MMLLt VWAVH HHttHl XHHuL IHLHH HHuHH VWAWH tbMLHH HqxLyxI LvXHI IHtSfff VWAVH WAVAWH HopGEuBD HGpHWxDHt fHGpAAH HRXHuH HsPHC HsPHC HsPHk SUWATAVAWH IFDIFLAFTAFpIF LzHDzPLz LzXIF DBhHRpI DEtSM LsXeHCXL LcXLL MJXMZXMMuLKXI UWAVH jDDtA LCxMtlI hXufIhHHG HHtMH HZxHHHt HVAWH HXHhHxL ELpLD HCxHOpHGxH HGpHCp HPXLH HPHxHH HPXLH HPHxHH HPXLH HPHxHH HGHHtjH GPCPGPHWHu HHBpH HZXHWHOPBh HSXHZ HtmHD XIPXHuH HttHD XIPXHuH HttHD XIPXHuH HEtjA DJPLBHEt LBXAHF HEHMN HFDHFLFTFpD XHHuH XHHuH XHHuH XHHuHvXHHl fHXXH thHBxHZxHt HwHHt HvXHuH XHuHt XHuHt HHHvXHuH XHuHt HrxHt HvXHuH HvXHuH HHHvXHuH XHuHt IVpLH tHLfH HHxHJI HHHCH HCXHHGXHCxHGxH pHCpH HtAHG HCDHCLCTHClCXChC CdcHK SWAWH LBHAM ISXMSXHuH HHWHHt xHtWfH ATAVAWH XHHuH XHHuH XHHuH XHHuH XHHuH XHHuHFXHI HPHHHXHt HHQHHIXHuHHXHCXH HPHHHXHt HHQHHIXHuHHXHCXH HQXLH APLQHHIXHuL HCxHt HPHHHXHt HHQHHIXHuHHXHCXH LAXLI HuIfff QPLYHHIXHuM LAXLI QPLYHHIXHuM LSHLI HQXLH APLQHHIXHuL HPHHHXHt HHQHHIXHuHHXHCXH LAXLI BPLZHHRXHuM IHHMu UVATAUAWH MHUAO HMUDH HMUEG HMUIG HMUIG MHUHL MHUHL MHUHL HMLEH HMLEH HMLEH HMLEH LUVATAUIxHh uHuTI uHuYI HHHTn HtLHtGL HHtyA uVAYE DHHHf HAHHt HMmHM SUVWH HuxHt HvXHuH HvXHuH HvXHuH bDLHH UVWATAUAVAWHl HUHEHHEH HMLEHUP uHELE HELEHUHMP uDInF HEHMP HEHMH USVWATAUAVAWHl HEHEw MHEMuLuHuuHMMAHIG LEHUIP LEHUHuIP uHELEHUHHMHP HELEHUHMP LHIHEHMP LCHHk LCHHxA pXuEIV HLGHL HLGHL MtZMuU HLGHL HLGHL HLGHL HLGHL HtQMtLI HLGHL usHuD IEpAE IEpHt MuhMupA LEHUHuIP LCHHI xHttH XHtkH XHuIG UAVAWHH ILDIH LMHEHLEHD LMHEHHD LEHEHD LMHLEH HEHHD LMLEH LCHLH UVWAVAWH UVWATAUAVAWH UVWATAUAVAWH HHHHH HHIHH wLLIHt SUVWH SUVWAUAVAWH IHLLD AHUHDzh Amfff UVWATAUAVAWH SUVWH UVWATAUAVAWHl TEMIG HLHEHD pHUIP LEHUH LEHUHMHG HcHUHD TEtFE PttHx yEtmE LEHUHP HELHD HMDMHUHMD LCHKHL UVWATAUAVAWH OtKMN USWAVAWHl HELEHUHMP uHEMHD HEHIHD HEHMP HELEHUHMP HEHMP HELEHUHMP LGHHFINx HEHMP HOhHt LMtgHtbHWhEt GXLuL IAEuAI UVWATAUAVAWH IHAEELH IHtHB WAVAWH dHGXH dHGhH dHGxH HWHHOP HtWDHHZ AEHHA LHHHt DDHHDy DDHHg VWATAVAWH VWATAVAWH EubEu AVAWD VWATAVAWH SUVAVAWH MHHHt HHMvz UUUUUUUU HCHHC UVAUH HuHMu WAVAWH pHIHD HVAUHXHX LpLxfff HuEuFX EtXMH HHuHF AAHAu UVWATAUH tEEHHE SVWATAUAVAWH WAVAWH EtdAZ VWATAUAVH SUWAUAWH EtBIE WATAUAVAWH LHMtj HHtbMt SUVWATAUAWH rAulH LtoMt UWAUAVAWH pIELHA HHtDMt HufHv HHtgH WATAUAWHxB IkHIsLD HMsHL SATAUH LEAAEteH SUWATAUAVAWHPHL HUHcH HIHHH HcLEHI WATAUAVAWH HtBfff UVWATAUAVAWHl LmHuDu HUgug HtmHUgHEHH LEDeAI ADHZA HEEwH ugLEgH LEgHEH tHMEgH HHELHH uHELEE DAIVL HEEwH IHHAt HHNurHR ATAVAWHp xIxMH HLIAfA MIHHEDL DLHHH DLHHH AMHHEH DLHHK WAVAWH MLHAu wMHHHH DLHHH DLHHH ALHAu MHHHHD VAVHHH IHHMu UVWAVAWH LMcHLl tTEAITHH UVWATAUAVAWHl HLEHHT HFPHF HFPHF LNPLF HLTLM DHHuEu EGDII IHIHH ADADVL HECJHR PtVLf LHHHL VWAWH EHmHH HHNMG VAVAWH UVWATAUAVAWH VWATAVAWH SUWAUAVH ADAEVL WAVAWH HHtzHGPHtVAW HtQML SUVWATAUAVAWHxH IHLAMt LHHWg WAVAWH pHIDd WAVAWH HHtLLc WAVAWH DLHIHC DLHIH HHtLLc UVAVHl HIHUIcH HEHMH EHUHHE MHUHL HcHMH HEHHM UWAVHl LuHMHH IcHMH HMHDuLuHU LHUHL AHcHM HEHHM HoLGHH DKHHt VAWHHH LHHLpZ WAVAWH HYPHK HYPHK HYPHHHl SUATAUHxH LHtBHJ WAVAWH pMILHH VWATAVAWH HHucH IkHIA UVWAVAWH TtFMG DGenuu Authu cAMDurentiujD Centu aulsuPaurHt anghu Hygou uineu EtBMO UVWHPH EMLMMt HHyHL SUVATH IIEHlV HXUHt UVWATAUAVAWHH LmxHL upDuptJME DMDDA LMLEHUHM LEHUHM GmCEX DupupD ptJME LMhAA upDupD ptMME uxIDH SUVATAUAVAWHPHq HKAFHPA UWATAUAVH xEtFHR LHtOU LHtLU WATAUAVAWH pALLM IsHIA WATAUAVAWH IsHIA EEAAA WATAUAVAWH EtPMO EtLMO IsHIA SUVWAUAVAWH HaEIG IGHIl sqfDC dtZtN HHHHL HHHHL HHHHL HUVWHH HEIHHMHe ELEHUHHUH WHPHcH VWAVH FHtJHF IHILH LOHgL CLCHH DHOHHHt HQHHt HHuHg HHuHg HcHHu VWAVH HcHHu LDDfA uHcAH HHHHX HHHHX ATAVAWH HMLHu UVWAVAWH sDIHI ATAVAWH IMLHHt LIHIA UAVAWHPHl IcIDLE EHEPLAHD HEPHD LmHHe USVWATAUAVH WAVAWH LcIIH ISISISH EKDIS ISISISH EKDIS LLMtVL SVWAVH WAVAWHPMILH WAVAWH xPsPM DAntelAGenuD AineI HMHIHILC HuTHQ HuIHH HSHPH UHHPHe HMHHK ATAVAWHPHq AvPHt PLDHG HHuHO HHuHO SHPaC QHHHH HHHHM WATAVH HHHuH HHttHQ HtgHs UAVAWH HUHhH HUHhH HEHEHE YHEHEH HVWAVHpH AHLEu UVWATAUAVAWHhH AEHLH LAHME LHUgH sEHMI LFHUgH uHMEuIHMA uBHEA tvHEH HuHHM HHtWHtRHY HHtNHH ILHHIE HHCxHH HRHOXdH HOhHt rLMtM UVWATAUAVAWH LIFxAH HUVWATAUAVAWH SHPHd HChHt WATAUAVAWH UVWATAUAVAWH UVWATAUAVAWH ADEtP WATAUAVAWH WATAUAVAWH HGxAL vZADH DDAHfH UVWATAUAVAWH VWAVH SUVWATAUAVAWHxIA IIHLLP DEPHV WATAUAVAWH IDLIF VWAUAVAWH HHHHD WATAUAVAWH MLLHD UVWATAUAVAWH wXAxA WATAUAVAWH UVWATAUAVAWH UVWATAUAVAWH EHHEt EtvDAD ATAVAWH SUVWAVH pHKhD VWATAUAVAWE WATAUAVAWHP LAxDXI IKDAC HExAH AIIpAH wICHL WATAUAVAWH vHHWxEAHL AVAWLHAu HVWAVH HWATAUAVAWH EEHHzML uFLnhN EHvHNp AHLEt UVWATAUAVAWH vDAEH rAREE rEtVIAy WATAUAVAWH XHuHO HHHHlHH HQHAh DItAx IcHHH HxLcCP HcKhHCX HxHKXHC CTuCTHl VWAWHpH nHuHO gnHuH MnHuHwXHtD nHHuHO HuHwXHtT HlHHuHO kHOpkHOhkHOXkHOPkHO VWAUAVAWH LHIDn uxHcOP nLcGP IHcGl efHHD HHHWH HICHICCL HVcHC HZHHuH IHPHI IHPHI HHxxH AJTDAE BhIcBhMLx IcJPHcHH jHueA UATAUAVAWHH LEEEHG LEEII ATAVAWH HcKpHHcH HHWfH IAHHA EApMKL AzDHcL AyDLcN tMHHD DBPBS AyDIA USVWATAUAVAWHl DaDUH RFDNF PHEHt HcNDIHI HcNDIHI LcFDI LcFDI ADewSDEED HNHEDEA LEwHUoHH fHHEHt HHEHt MDEHUH MtKuuI ELEHUIN LHuHugLeHF HHEHMGHD KpDHHD tDHHD HHbHH UVWATAUAVAWH DFpLL WHPHI HBHHHwsHd ITEAHD ShHcChMDx sxuIH HKHHS ITEAHD ShHcChMDx sxuIH HKHHS HPlHHt ILkHHt LLIHH VWAVHPAILH ATAVAWH VhHcFhMDx HcNPHHcH EfDMA EfDME HHHdg HqHAP qTHqXHq HqhypHqx HHuHO VWAUAVAWH LHIDn uxHcOP IHcGl HWAVAWH uvHWXH HtIHcHK HufHK WATAUAVAWHPH ZICHL YXtlC HEQHgH ITEAHD ShHcChMDx EHKHu LKHHK VWAVH EAADK tFHDI EfDUA EfDUE tlMcH VWAWH HHtCH HvHMHt HHHuP HHHHt CXzMt WAVAWH IHdDAH HVWAVH HuBHHN HUVWATAVH iaYQIH PHuXH PHuXH LuhHe DLIHPHHH HCpHH HKpHL WAVAWHPHL tsHtnH HMCIC HWATAUAVAWHpH AJLEJDAH IARHE DADDILA HAHHHA ALHukHy HuHDCDHS WAVAWH MADHH LJLJLJDJ sSuOH ATAVAWH HvXHvP XHFXID HFPID HHXHqPID HpXIt HRXHRP XHBXH HHXHQPI HVWATAVAWH ALHHY IVhIV XIFhKD HHXHQPKD HPXKT ATAVAWH DLHHdHHHH HVWAVHPH LMhLM XHEhID HHXLIPID LHXML WAVAWH AADAI HcFTL UVWATAUAVAWH PDHHL AADHI ugHKHH VWAVH XHtKI LLBXHBPI PHBXLBPI aUHUVWAVAWH pEHLHY HHuIN GDAHHHt CHfkPHkH rHcHH WAVAWH EHHAHH HGHHGhHGp HHIHAs HAxDIIDHH HfiHH VWAVHP HNxHB HAxHH tlLcA ITEAHD ShHcChMDx EHKHju LKHHK HAxHH HHeHFxH HuHVxH IHHHt JHKxH EfDUA EfDUE WAVAWH IAHLI HuHwXHtS HHuHO HHPHO VWAUAVAWH LHIDn uxHcOP IHcGl WAVAWH ELHQHoPHH tvLcK HcHHH HOHHH UAVAWHhH HLGHHE LOHLEA HUIDE DELEMHOHHE HHHAHH HHHHHH UVWATAVHH UHUHH HOHAH HHKHH HAHUWAVHH HHUHL HHHHAu HKHHH UAVAWHHPe HUHAhH kHNHA HUHAhH SUVWATAUAVAWH HaLHG LIcHcO VWATAVAWH HHoLD HLcHH VWAVH PHKHs HKHHT hfHKH WATAUAVAWH YHKHk IHCHH IsHIA UWAVHH usHCT HtHOH UHHPH HUHApH HUHApH HuHwXHtS HHuHO ITEAHD ShHcChMDx LKHHK VWAVH HCHHK VWAVHPICI IIHLH HuHwXHtD HWHHuHO WAVAWH HtFHsH HHtFHsH oIHdHuH HuHwXHtw HHuHO MtAIx LHuHK VWAUAVAWH LHIDn uxHcOP HfLcGP IHcGl VWAUAVAWH LHIDn uxHcOP HLcGP IHcGl UWAVHHpIHH LELELEDMUDMA UHHEHE SHPHD WAVAWH WAVAWH VWAVH HOhHv UAVAWHH EHeHK HUHHH HEHEH EHHHM HueEt YHEHM ITEAHD ShHcChMDx LKHHK HHuHO HHuHg HWPHOX HHuJH UVWATAUAVAWH HFAHB HHIDH LHDEtqu rtPHT HApHHHSHP nHApEteHu uHCpHu LLLIL WHPHD HHhHH UVWATAUAVAWH MMHHI LcHcK WAVAWH LHBXE iGPHO SVWATAVAWHhHD HVTHH WHPHHH fFPHD HFHHt WHPHH HQpLH hHOpHH HOpHT HHEtAIH HtzHHL HLHhHHu HLHhHTHu IHHEt ATAVAWH pLHDd ELIHu WAVAWH pLHDxE LIHkuHt ATAVAWH HtCDL DLAHA UVWATAUAVAWH tmcHtc HDHBLd UVWATAUAVAWHpAMHH tmRHtc WATAUAVAWH LIHDu WATAUAVAWH WATAUAVAWH ATAVAWH tUHHt LHHHuI uYMHzLHu tMHHtE WATAWH HtFLHt MHzLHuD tALHt tIHHt uILHHHuH UAVAWHH HIHUEID HHtwHEtE LHtAE EHUHE UAVAWHH HIHUEI LHtEE IJhAA ILHESDE AAtxIC HHtsH HHdHH IHHeH LHHiHH DRAEK VWATAVAWH LIIMLZ ttIcF UVWATAUAVAWH IHIEDf DADZK UAVAWHH uHUuHw HEHEOHEHcE HEHEWHE HXXHH HPXHt csmuSy LHtLH HtDHH ucILII HIIRI WATAUAVAWH HMIIL AGHDD WVIHII IAfHQQfQQ HQQHQQHQQQ HQQfQH WHPHH VWATAUAVAWLT uIHHX AVHcA SUVWATAUAVAWLt PAAEAENc DDEtHtDID PuCHHD WATAUAVAWHPMMLcH HCxHH IHtRLcY HtADA EYAEtkIB AUAVAWH tiHtdt HHtGA AUAVAWH tiHtdt HHtGA UVWATAUAVAWH HMIISL UVWATAUAVAWH HMIIKL USVWATAUAVAWHl hHHUE LHEID LMDeLL HMHHEc tqHUh hLHUH PHEHD LMLHI HELHD USVWATAUAVAWH xIILeID HMLLt PHEHD ubHMpH UVWATAUAVAWHhH DEoHUDl LMGHEH LLEWIHUOD HHEDl nLMGAD USVWATAUAVAWHl HEHMHE HHcEH pLLEID uHHcG HuHHcE HHHcG HHLcE AVHPHIIMH csmuo WAVAWH HIIML csmur tEHcR SVWATAUAVAWHpHE HGHHD HSVWATAUAWH HGHHD pHGhHD HHpHL SVWATAUAVAWH HtYDHI HSVWATAUAVAWH EIHLHL HxLHD HHDLHH LHHkHl WATAUAVAWH XLHcM HIHILHEILI UVWATAUAVAWH MEHHpL WATAUAVAWH HEHMHL UWAVH VWAVH LMHELEHE HEHUHE UHHPHu HELEHE HEHUHE HEHESHP USWHH USVWATAVAWH IIHLMu HLeHD HELeDefDeDeDeL HcHtIA oMteHt USVWATAVAWH IIHLMu HLeHD HELeDefDeDeDeL HcHtIA oMteHt USVWATAVAWH IIHLMu HLeHD HELeDeDefDeDeDeL HcHtKA qMtgHt fcfAt LQXAI DAPHAHH LHXADHu AMBHIAJ IBHIBHH IEBPIBH LHXALHu MBHAB EBPIBHH LHXALHu AMBHIAJ IBHIBHH IEBPIBH UWAVH xfDuDuDuL VWAVH VWAVH DCAHA AAHAT HKAHC IALAT HAHAI ABfFu fhtxfjtfflt WAVAWH WAVAWH WATAUAVAWH fStof fitnfntafot futTf MDAHqHC IsHIA MtGMH HQHAT DHCHHC HDuCA HKHyHKH CAsHH AVHPI ABfAfA fyBgt fyBGu DHCHHC CBfGfAu HKHHHKH fCBHH HHKPl DHSHH HyXHA DHKHH WAVAWH HcpAp HKXHu HKHHKH WAVAWH HcpAp HKXHu HCHHKHf HKHIcCT HKHIc HHcHGT EtGLh ADAPLh HtnAP DCPHA HSHLI HqHLK DCPHA HSHLI BLjvI WAVAWH ATAVAWH IIcHLI JMtHE HUHELMHE HUHELEHE HEHUHE HEHEgH tuHItiH tbHItV tSHItGH HItRtNH AUAVAWH VWATAVAWH WAVAWH HILLO HHtXHtSHH LHHQt IHHHu UHHpAA UHHpAA tIcHL lHXsH IIeHHt WATAUAVAWH IMLLHt uUHEt HIHLH LMHELEHE LMHELMHE HEHUHE HMHtcAuZADtTAu HMHELMHEHMHELEHE HEHUHE UVWATAUAVAWH MHLMt MHIdI IMHLMt LMHIHH AHHHu wEDHH HHxMHcC HcHHX AHHHu UHHpHHu HtPHBHuGC GHxHA ATAVAWH QHtIHL rHHHGH HcHxk ATAVAWH WATAUAVAWH snHHH tIHID HcAHEHu HSDLD HHtHL UVWATAUAVAWH SUVWATAUAVAWH LcHIH ATAVAWH LcMAHLc AHcAD AUAVAWH ELHcu UVWATAUAVAWH LcLEAu tptlA tEtAA IHIAHD HtsLT UVWATAUAVAWHl HcIHHM LUHELMAHUA AELmHcH LUAHu LMHUDHL uDHMAB sGHEU BLmMMA VWAVP LcHIAH VWAVP LcHIAH VWATAVAWp LcHIEH WATAUAVAWH skHHH UVWATAUAVAWHH EHLcE EHMLA USVWATAVAWHl ILHUE IHMlxHEDP LMLHUIN HHHEHD HUHMA OLELD HMHEHD IIHHHtQMtQHt ATAVAWH IHLHu ATAUAVHP MMLHu MtMtH uIIfH SHPHHu UVWATAUAVAWH MHLHu hMAuI tjDAEt UVWATAUAVAWH EADHH AHHAMH ADIANHL WATAUAVAWHl HAHAH uDAHEHl UVWATAUAVAWH EtyDDAAT pEtbEt DDLAAAT DDLAAAT EtPAs DDDAAAT EtnDEt DDLAAAT EMtBHT DDLAAAT AAstXAE EtPAs DDLAAAT uEtRAss DDLAAA DDDAAA AAstVAD EtGAstAAD DDDAAA uEtRAss tEtDDLAAA DDLAAA AAstWAD EtGAstAAD tEtDDLAAA SUVWATAVAWH HcIcL IHDLI rIEUI IIHMu UVWATAUAVAWH stNHC EuIHt tPHHS DAEtzA ATAVAWH HILLO ISICHHIxIC ISICHHIxIC ATAVAWH IHHzI VWATAVAWH HQxHH HQxHHAHG HKxDHD HSxHK YLKxHT UWAVHl IHLHu HtIHX HUwHL MLuHue uOHtE UHHPEuJ HELMHE HELEHE WHPII UWATAVAWHHp HIHtdLL UVWAVAWHH HEHIIID HMHHC UHHpH HZHUHM uVHtJ QIWHHtLH ftNfA VWAVH USHHxHUH LEHEHU UHHpHHHu SHPHu DLHHL DLHHL WAVAWH AkHtzE kHttY DHcHT VWAVH UATAUAVAWHhH EIDMwHDEoHAHMy MLMLuAHUE HuELu MLMHt EHUDt HMLMDE DAISH uIcHL AHHHu HGxHt HGxHd VWATAVAWH ExHtEtH tIILd UWAUAVAWHH IsHIA HEMHD WATAUAVAWH HcfEE IEpAxAEx NpAFxA IsHIA fffff HIIHL fffff fffffff fffffff nTfff Xfffffff fffffff gffffff fffffff HIIHL fffff fffffff fffffff fffffff ffffff Xjffff Hhfff Hhffff ffffff Hhfffff ffffff Hhfff Hhfff HhfVD Hhfff AHHHu ATAVAWH MILHI UVWAVAWHH HHEHH HUHIHHu HHEHHLM WAVAWH DHHHA HHtlLA HHtOHd WAVAWH WAVAWH tMIHHHt WHPHX MHLHX HHtCU WAVAWH USVWATAUAVAWH sLLIM uyLEH teMEu SUVWH LMLEHU HEHEHEHE HEHEHEHE HEUHEH WATAUAVAWH HChLc UVWATAUAVAWH HtALw UVWATAUAVAWH LLMpHD UVWATAUAVAWHl LeAEAu uiHUH uYHUH HHuPHR uYpUH ffffff ffffff ffffff HtMtMu HMIIu fFTYEPPefD UHHPHMHEHELM HEHEHEHE JBHEHU LMLEHUHM HEHMHEH HMHIpQHMHIXDHMHI HMHIh HMHIH HMHIP HMHIx LMLEHUHM WATAUAVAWH WMILK WuBXIDH HtJIH WHPAIL WHPIIL WHPAIL ZHtRL tmHcH jYHIK HcHiS IcHcHim WATAUAVAWH IsHIA VWAVH DAIcA UVWAUAVHH uYHHU USVWHHH UVWHH IHHHu WATAUAVAWHp IIfYG fAyfExGI HgfffffffHH IcEEHH gfffA xHHHMAdS uIHHVHD uHcLG AVHPH ICIICMCH MIHHHu HtMtL HEHcIHMWMG ELEfEHM HHIHHIGLHu UATAUAVAWH DuxEu DtREp IHEhHD HtrHd HEhHD WHpHIHAHL UVWHhH eHEHD HMHEDDHD UVWATAUAVAWH HHHHX HPHHM HHTDC HXHcL UVWATAUAVAWH HHIHHD WATAUAVAWP HAFHxaD IsHIA EILII VWATAUAVH WATAUAVAWH MILLH HHtuHtgL HtHtH UVWATAUAVAWH HHtPL LIHHt utHtoH HtSHu HbMtH HHHtif WAVAWH HtIHL USVWATAUAVAWHHxH HELcepLcmhADMHcF HMDuDuDu QAADAA ALcEA HFHim DEDmDeu ATAVAWH WHPHIHHA WHPHIHHA UWATAVAWHHPE MHAHt zucLE HEuLE THOHL IsHIA ATAVAWH MIHLAHuLMuLHt IHYHu fDdGMt HtMtMu HMIIu EPPuD UAVAWHpHl PHuXH LMHAHM HaHHt HtNDL DEpAAH PHuXH LehHe SUVWATAVAWH CLcLD DIILc LctQI HHtELI UATAUAVAWH DEHMHM HxHUHhH EHHHu UVWATAUAVAWHH HtVHUPfEP LLeIIH uLMPA IIWHHtvJ MHUHHUXM HEXHMHUJ uHEHH WATAUAVAWH HtBHA UVWATAUAVAWH aHMLE HtoHt UVWHH HELMHE HELEC HUEHME UVWATAUAVAWH AHAHL HLDDt HHctKH UVWATAUAVAWH HHxWI pHtfH vHHtGMIV HnuwHIM HtQLL nHVHd IHHHt HHymHHt uHufA kHKHH kHKhH kHKpH kHKxH UATAUAVAWHH AQmAQ LIFHHD HMIFPA HMIFQA HMIFRAT IFSAU HMIFTAV HMIFUAW HMIFVAR HMIFWAS LIFhHD LIFpHD LIFxHD LHMAQ IeIgIgIg HHXINXH HtfSH eHKXH WATAUAVAWH HHHHXH LHFXHD HHcIcAIIU UATAUAVAWHH HUIHu HGMEO DDoHD MHMAGDHM HMtEHM MtHtMt DRPLfE HHtyH HHtFHtAH HuIHX fAafA fAafA VWAUH DOALD ILIBS AHHfA OuIHX ATAVAWH ATAVAWH HrrHt HQHQHH fAafA fAafA VWAVH ENxLD HHHtSf tHtDL WAVAWH USVWATAVAWHH HEILLIH HEEIHME HtyfD wHMlH HtQfD tKHHHH SHtdMH DNDFV PHhHSHP HUSVWAVHhH HEoDHL oUgHD HUSVWAVHhH HHEoDHL HUgHD IcDHu WAVAWH HcHHH USVWATAUAVAWH HEtMAs tjEteE EEAADH EDDDuAE EDUMt HEtMAs EDDDuADu HMwHP HMLst EEAAT uEtZP EEAADHi HMqDLD USVWATAUAVAWH HIHAHL UVWAVAWH WHPIcIHE USVWAVHH IcHEy LuLuLu HuHUHM HMHUHMHMH LuDuAz JQHXIXH UAVAWHhH ADHUI WAVAWH AILLAD HtbMt HXffffff YYYYYX XXXot HXfffffff SVWATAUAVAWH HulHL HWAVAWH MHMuhHH csmupy HtPLA MtBLIHHcB MOCtT RCCtL rLHHH uvHUHH HMHIHIA LMHHZ HMHIHILC HtPMt HLEXHUP HUxPL HLExHU LEhHU HUpfALExHU HMHpxH HMPsH HMPPsH HLEpHUxvs HLEPHUX HUprL HLExHUp HLExHUp HLEHHU HUpSLExHU HLEPHUXV HMPiH HLEHHU HLEPHUX pHKPHt HHMHH HMPPGH HHMHH HLEhHU HLEHHUP HLEPHUHf HLEXHU HLEXHUh HMHpH LExHU HLEPHUXv HLEhHU HLEHHU HXYHp HLEhHUxHM HMXIH HMhyH HLEXHUP HLEXHUPf HMPiH HHMPHLE HHMXH UDHMHU NHEHHt LMxLEpHUhHM LMpLE HUXHMP HepHHH HMheH HMXWH HMPKH SUHHHHMPHMHH HHpHEHH HXhHMHD SUHHHHMPHMH HHpHEHH HXhHMHD csmuUHE HHMXLE HHMHH HcMHHH HHMpH HHEHH SUVWATAVAWH HunHM LMHLHS HEPHUHH HMPHt HMHaH HWLOC ERRORS hwloc received invalid information operating system Error occurred topology following entry hwloc documentation should hwloc reports operating system warnings Otherwise please report error message hwloc mailing along relevant topology information platform hwloc ignore invalid topology information continue HWLOC DEBUG CHECK nodeset cpuset cpuset intersects without inclusion identical nodesets merge levels removed parent level depth removed child level depth level hwloc failed realloc level arrays phase discovery phase discovery component GLOBAL phase discovery component HWLOC THISSYSTEM ALLOWED RESOURCES ANNOTATE HWLOC DEBUG CHILDREN Topology became empty aborting Topology contain aborting Topology contain aborting HWLOC VERSION ProcessName synthetic HWLOC USERDATA DECODED HWLOC COMPONENTS HWLOC FSROOT linux HWLOC CPUID HWLOC SYNTHETIC HWLOC XMLFILE HWLOC ALLOW TWEAK index index unexpected index topology invalid cpuset complete cpuset allowed cpuset nodeset complete nodeset allowed nodeset subtype cache ignoring cache attribute cache object cache linesize ignoring cache linesize attribute cache object cache associativity ignoring cache associativity attribute cache object cache ignoring invalid cache attribute ignoring cache attribute cache object local memory ignoring local memory attribute NUMAnode object depth ignoring depth attribute object without depth ignoring attribute group object subkind ignoring subkind attribute group object merge ignoring merge attribute group object busid ignoring invalid busid format string ignoring busid attribute object ignoring invalid format string ignoring attribute object speed ignoring speed attribute object bridge ignoring invalid bridge format string ignoring bridge attribute bridge object bridge ignoring invalid bridge format string ignoring bridge attribute bridge object osdev ignoring invalid osdev format string ignoring osdev attribute osdev object level online cpuset board vendor DMIBoardVendor board DMIBoardName memory ignoring memory attribute NUMAnode object ignoring attribute NUMAnode object ignoring attribute NUMAnode object ignoring unknown object attribute value CoProcType count nbobjs relative depth latency failed allocate distance matrix objects latency ignoring invalid distance matrix object length encoding normal hwloc encountered order topology Object cpuset complete inserted after object error occured hwloc inside process while unknown version input generated hwloc inside process input generated unspecified ancient hwloc release Please check input topology valid HWLOC DEBUG CHECK environment detect further issues Cache System obsolete System object allowed Module MemCache object supported ignored unrecognized object string object attribute found before object invalid NUMAnode object child distances userdata invalid special object child normal object cannot child normal parent Memory object cannot child normal memory parent object cannot child normal parent normal object cannot child special parent object cannot child parent MCDRAM invalid object missing cpusets invalid object missing nodesets invalid object either cpuset nodeset missing invalid cache attribute depth invalid normal object without cpuset invalid special object cpuset invalid object cpuset while parent invalid object nodeset while parent invalid object without nodeset invalid special object child while looking objects distances hetero distances unrecognized indexing ignoring unknown attribute missing attributes failed allocate arrays objects indexes values unrecognized child child length attribute child needs content length indexes unrecognized heterogeneous missing colon after heterogeneous values indexes values ignoring objects ignoring without indexing ignoring without indexing HWLOC SCALE DistancesScale cannot import version ignoring unknown after object expected distances invalid object without cpuset invalid object without nodeset invalid object empty nodeset component discovery failed xmlbuffer HWLOC VERBOSE HWLOC LIBXML HWLOC LIBXML IMPORT HWLOC LIBXML EXPORT depth index index oldvalue newvalue ignoring unknown attribute missing mandatory generic attributes missing mandatory value attributes missing mandatory attribute Socket Group export failed allocated logical array Machine NUMANode Package Cache Cache Cache Cache Cache iCache iCache iCache Bridge PCIDev OSDev Unknown osdev block network openfabrics coproc processor machine numanode memcache memory cache package bridge hostbridge pcibridge pcidev group PCIBridge HostBridge Block Network OpenFabrics Processor CoProc register discovery component reserved Cannot register discovery component containing reserved characters Cannot register discovery component invalid phases Dropping previously registered discovery component priority lower Ignoring discovery component priority lower previously registered plugin statically build Registered discovery component phases priority HWLOC COMPONENTS VERBOSE Ignoring static component invalid flags Ignoring static component failed initialize global annotate tweak linuxpci linuxio Replacing deprecated component linux phases blacklisting Blacklisting component phases HWLOC ANNOTATE GLOBAL COMPONENTS Excluding discovery component phases conflicts excludes Failed instantiate discovery component Replacing deprecated component linux envvar forcing Cannot discovery component Excluding blacklisted discovery component phases Final enabled discovery components Trying discovery component phases instead Cannot enable discovery component phases unknown flags Cannot enable discovery component phases twice Enabling discovery component phases among HWLOC THISSYSTEM Disabling discovery component HWLOC LOCALITY Ignoring HWLOC LOCALITY large bytes CPUModel HWLOC GROUPING HWLOC GROUPING ACCURACY HWLOC GROUPING VERBOSE Trying group objects using distance matrix hwloc given invalid distances Please distances given through programming contradict other topology information Found transitive graph objects minimal distance accuracy Distance matrix asymmetric aborting Distance strictly minimal aborting Trying group objects according physical distances accuracy Windows Backend windows QueryWorkingSetEx VirtualAllocExNuma VirtualFreeEx psapi QueryWorkingSetEx Failed allocate synthetic index array Failed synthetic index Missing comma after synthetic index Failed synthetic index interleaving without number before Invalid interleaving Failed synthetic index interleaving without number between Invalid interleaving number Failed synthetic index interleaving object disallowed synthetic index interleaving Failed level synthetic index interleaving Invalid duplicate interleaving synthetic index Invalid index interleaving total width instead Invalid index interleaving generates range index Invalid index interleaving generates duplicate index values Missing attribute closing bracket synthetic string doesn number objects memory indexes Unknown attribute Missing parameter separator Overwriting duplicate indexes attribute occurence HWLOC SYNTHETIC VERBOSE Synthetic string unknown attached object Synthetic string disallowed attached object Synthetic string doesn closing after attached object Synthetic string unknown object Synthetic string disallowed object Synthetic string doesn after object Synthetic string doesn number objects Synthetic string disallow number objects synthetic levels Synthetic string cannot level Synthetic string missing ending number Synthetic string cannot several levels Synthetic string cannot several package levels Synthetic string cannot several levels Synthetic string cannot several levels Synthetic string cannot nodes level attached Synthetic string cannot several levels Synthetic string cannot unspecified specified types levels Inserting level single object depth Synthetic DOCTYPE topology version topology topology Failed parse input minimalistic parser generated hwloc enabling support libxml stdin topologydiff refname hwloc hwloc version encoding DOCTYPE topology SYSTEM version encoding DOCTYPE topologydiff SYSTEM hwloc Failed allocate cpuiddump ignoring cpuiddump Could dumped cpuid ignoring cpuiddump Failed allocate cpuiddump entries ignoring cpuiddump Couldn dumped cpuid returning CPUVendor CPUFamilyNumber CPUModelNumber CPUStepping Compute could HWLOC TOPOEXT NUMANODES Architecture Ignoring dumped cpuid directory function regex error error collate expression contained invalid collating element regex error error ctype expression contained invalid character class regex error error escape expression contained invalid escaped character trailing escape regex error error backref expression contained invalid reference regex error error brack expression contained mismatched regex error error paren expression contained mismatched regex error error brace expression contained mismatched regex error error badbrace expression contained invalid range expression regex error error range expression contained invalid character range encodings regex error error space There insufficient memory convert expression finite state machine regex error error badrepeat preceded valid regular expression regex error error complexity complexity attempted match against regular expression exceeded level regex error error stack There insufficient memory determine whether regular expression could match specified character sequence regex error error parse regex error error syntax regex error device resource resource deadlock would occur resource unavailable again address already connected argument domain address message connection aborted connection reset cross device executable format error exists filename function supported unreachable identifier removed inappropriate control operation interrupted error directory message network network reset network unreachable buffer space child process available message available message protocol option space device stream resources socket stream connected supported operation progress operation supported operation would block owner system result range state recoverable stream timeout timed files system files symbolic levels value large wrong protocol FlsAlloc FlsFree FlsGetValue FlsSetValue InitOnceExecuteOnce CreateEventExW CreateSemaphoreW CreateSemaphoreExW SetThreadpoolTimer SetThreadpoolWait CloseThreadpoolWait CreateSymbolicLinkW GetCurrentPackageId GetTickCount InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx already taken pEvents pScheduler eventObject SchedulerKind MaxConcurrency MinConcurrency ContextStackSize ContextPriority SchedulingProtocol WinRTInitialization MaxPolicyElementKey pContext pExecutionResource ExecuteUmsThread GetCurrentUmsThread GetNextUmsListItem UmsThreadYield RoInitialize RoUninitialize EViqN RegisterTraceGuidsW TraceEvent GetTraceEnableLevel GetTraceEnableFlags pThreadProxy switchState Access violation dynamic exception based cdecl pascal stdcall thiscall fastcall vectorcall clrcall swift swift restrict unaligned restrict delete operator vftable vbtable vcall typeof local static guard string vbase destructor vector deleting destructor default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator vector vbase constructor iterator virtual displacement vector constructor iterator vector destructor iterator vector vbase constructor iterator constructor closure returning local vftable local vftable constructor closure delete callsig placement delete closure placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic initializer dynamic atexit destructor vector constructor iterator vector vbase constructor iterator managed vector constructor iterator local static thread guard operator operator await operator Descriptor Class Descriptor Class Array Class Hierarchy Descriptor Complete Object Locator anonymous namespace xpxxxx xwpwpp gmsmr yrvxyN yICyJ EtTWt INITY inity INITY inity CorExitProcess Visual enough memory complete strerror UUUUUU UUUUUU UUUUUUU PPPPPPP UUUUUU UUUUUU UUUUUU UUUUUU TUUUU UUUUUU UUUUUU UUUUUU UUUUUU AreFileApisANSI EnumSystemLocalesEx GetDateFormatEx GetTimeFormatEx IsValidLocaleName LCIDToLocaleName LocaleNameToLCID Sunday Monday Tuesday Wednesday Thursday Friday Saturday January February March April August September October November December floor ldexp hypot frexp nextafter LEUNICODE error Operation permitted directory process Interrupted function Input output error device address format error descriptor child processes Resource temporarily unavailable enough space Permission denied address Resource device exists Improper device directory directory Invalid argument files system files Inappropriate control operation large space device Invalid system links Broken Domain error Result large Resource deadlock avoided Filename locks available Function implemented Directory empty Illegal sequence fJBGo qBJeD UUUUUU UUUUUU UUUUUU TUUUU Unknown exception array length error document empty document followed other values Invalid value Missing object member Missing colon after object member Missing comma after object member Missing comma after array element Incorrect digit after escape string surrogate string invalid Invalid escape character string Missing closing quotation string Invalid encoding string Number stored double fraction number exponent number Terminate parsing Handler error Unspecific syntax error Unknown error offset unable vector DyCxD FMraB rHaxHy QJvaJ Lafir MrbnMG ScbuS BXVch EydVfYd sTNNe ekhHDb ghJzg iDhTi ngRJqn XqkYqz RyXsW ztUutGtc Ngvazjv jsonrpc method params invalid string position string ambiguous option option doesn argument unknown option option requires argument unknown option option requires argument stratum stratum daemon https daemon Lorem ipsum dolor consectetur adipiscing eiusmod tempor incididunt labore dolore magna aliqua minim veniam nostrud exercitation ullamco laboris aliquip commodo consequat irure dolor reprehenderit voluptate velit cillum dolore fugiat nulla pariatur Excepteur occaecat cupidatat proident culpa officia deserunt mollit laborum mDNhC uKIypb PrecW jHTQWl tjlFM WyRhCE rtSru fNTIQUM TsvupC PAuKs LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ jsilrF WZuPv kgyAc ruGoH onOaU JLXCM mNlVez kkooT bMvvE jjFgr dNNIllVV eezzG BqffHH BBhhAA kkooTP bMvvE qqsSb jjFgKr LLXXJk cwucB NNIllVV eezzG oxxoJ IUUxP kkooT LXXJk NIllVV eezzG kkooT bMvvE IllVV eezzG qffHH error ABCDEF abcdef config config config changed reloading configuration reloading failed XMRig ABOUT slibuv autosave background syslog watch colors agent version print worker configuration saved POSIXLY CORRECT worker enabled access token restricted daemon daemon interval select config affinity priority donate level donate proxy keepalive nicehash color pages retries retry pause threads userpass usage threads memory yield randomx randomx randomx randomx pages pages randomx wrmsr opencl opencl devices opencl platform opencl loader opencl cache loader devices bfactor bsleep health print pools unsupported option argument enabled fingerprint access token restricted Usage xmrig OPTIONS Network mining server mining algorithm https xmrig algorithms specify instead algorithm USERNAME username mining server PASSWORD password mining server userpass username password mining server keepalive keepalived packet prevent timeout needs support nicehash enable nicehash support identifier statistics needs support daemon daemon instead mining daemon interval daemon interval milliseconds default select select block templates retries number times retry before switch backup server default retry pause pause between retries default agent custom agent string donate level donate level default minutes minutes donate proxy control donate xmrig proxy feature backend disable mining backend threads number threads algorithm variation select affinity process affinity cores priority process priority normal highest threads maximum threads count percentage autoconfig memory number pages persistent memory disable yield prefer maximum hashrate rather system response stability pages disable pages support optimizations possible values intel ryzen bulldozer randomx threads count initialize RandomX dataset randomx disable support RandomX randomx RandomX light randomx pages hugepages dataset Linux randomx wrmsr write value Intel register nothing Linux worker custom worker custom instance default access token access token restricted enable remote access access token OpenCL backend opencl enable OpenCL mining backend opencl devices comma separated OpenCL devices opencl platform OpenCL platform index opencl loader OpenCL Loader OpenCL libOpenCL opencl cache disable OpenCL cache print platforms print available OpenCL platforms backend enable mining backend loader plugin xmrig libxmrig devices comma separated devices bfactor bfactor autoconfig bsleep bsleep autoconfig disable NVIDIA Management Library support Logging output print print hashrate report every seconds health print print health report every seconds color disable colored output config format configuration background miner background version output version information display configuration export topology export hwloc topology XMRig built features libuv hwloc topology failed export hwloc topology hwloc topology successfully exported version export topology print platforms invalid failed buffer overflow nonce result submit error Unauthenticated banned Address currently banned Invalid extra nonce wallet target height failed parse field required RandomX duplicate received reconnect unknown algorithm option unsupported algorithm detected reconnect incompatible disabled algorithm detected reconnect getaddrinfo error login agent rigid decode failed decode failed error extensions connect message error unsupported method error login error jsonrpc method keepalived params error connect error connect error invalid state already connected invalid bitset position ABCDEF select mPOOL DELETE CONNECT OPTIONS TRACE MKCOL PROPFIND PROPPATCH SEARCH UNLOCK REBIND UNBIND REPORT MKACTIVITY CHECKOUT MERGE SEARCH NOTIFY SUBSCRIBE UNSUBSCRIBE PATCH PURGE MKCALENDAR UNLINK SOURCE connection proxy connection content length transfer encoding upgrade chunked alive close unknown Continue Switching Protocols Processing Created Accepted Authoritative Information Content Reset Content Partial Content Multi Status Already Reported Multiple Choices Moved Permanently Found Other Modified Proxy Temporary Redirect Permanent Redirect Request Unauthorized Payment Required Forbidden Found Method Allowed Acceptable Proxy Authentication Required Request Timeout Conflict Length Required Precondition Failed Payload Large Unsupported Media Range Satisfiable Expectation Failed Misdirected Request Unprocessable Entity Locked Failed Dependency Upgrade Required Precondition Required Requests Request Header Fields Large Unavailable Legal Reasons Internal Server Error Implemented Gateway Service Unavailable Gateway Timeout Version Supported Variant Negotiates Insufficient Storage Detected Extended Network Authentication Required total resident memory memory average hardware concurrency worker uptime resources hwloc features miner authorization content favicon image Content application Parse error Invalid Request Method found Invalid params Internal error summary summary status Access Control Allow Origin DELETE Access Control Allow Methods Authorization Content Access Control Allow Headers generic iostream iostream stream error locale badbit failbit eofbit error Connection Agent Content Length error connect error false llums blocktemplate getheight getinfo submitblock decode failed block blockhashing difficulty error wallet address reserve getblocktemplate required field found block template invalid vector subscript mthread failed brand packages cores backend nodes assembly mdisabled failed start threads READY threads pages memory default profile thread scratchpad AFFINITY margon implementation stopped mdisabled suitable configuration found profile priority hugepages argon intensity hashrate affinity heavy argon threads pages yield memory Groestl Blake Skein OPENCL READY threads mdisabled selected OpenCL platform found failed OpenCL runtime devices OPENCL OPENCL AFFINITY mdisabled OpenCL context unavailable platform mcompiling mcompilation completed BUILD xmrig cache devices cache loader INTEL Advanced Micro Devices NVIDIA existing device index Intel index unroll strided index bfactor worksize dataset thread failed error DMASK DITERATIONS DSTRIDED INDEX DWORKSIZE CHUNK EXPONENT DALGO DMEMORY DALGO FAMILY DALGO UNROLL rotate XMRIG INCLUDE RANDOM vector KERNEL alnum alpha blank cntrl digit graph lower print punct space upper xdigit RandomX dataset available Baffin Ellesmere polaris board global DEVICE FOUND SUCCESS COMPILER AVAILABLE DEVICE AVAILABLE RESOURCES OBJECT ALLOCATION FAILURE PROFILING AVAILABLE MEMORY IMAGE FORMAT MISMATCH OVERLAP BUILD PROGRAM FAILURE IMAGE FORMAT SUPPORTED MISALIGNED BUFFER OFFSET FAILURE COMPILE PROGRAM FAILURE STATUS ERROR EVENTS PROGRAM FAILURE LINKER AVAILABLE KERNEL AVAILABLE DEVICE PARTITION FAILED INVALID DEVICE INVALID VALUE INVALID DEVICE INVALID PLATFORM INVALID QUEUE PROPERTIES INVALID CONTEXT INVALID INVALID COMMAND QUEUE INVALID IMAGE FORMAT DESCRIPTOR INVALID OBJECT INVALID SAMPLER INVALID IMAGE INVALID BUILD OPTIONS INVALID BINARY INVALID PROGRAM EXECUTABLE INVALID PROGRAM INVALID KERNEL DEFINITION INVALID KERNEL INVALID INDEX INVALID KERNEL INVALID INVALID VALUE INVALID DIMENSION INVALID KERNEL INVALID INVALID GROUP INVALID EVENT INVALID GLOBAL OFFSET INVALID OPERATION INVALID EVENT INVALID BUFFER INVALID OBJECT INVALID GLOBAL INVALID LEVEL INVALID IMAGE DESCRIPTOR INVALID PROPERTY INVALID LINKER OPTIONS INVALID COMPILER OPTIONS INVALID INVALID DEVICE PARTITION COUNT UNKNOWN ERROR INVALID DEVICE QUEUE error calling mclSetKernelArg kernel argument error calling kernel error calling clCreateBuffer clBuildProgram clCreateKernel clCreateContext clCreateSubBuffer clEnqueueReadBuffer clFinish clGetDeviceIDs clGetContextInfo clGetKernelInfo clGetDeviceInfo clGetPlatformIDs clGetMemObjectInfo clGetPlatformInfo clGetProgramInfo clReleaseDevice clReleaseContext clReleaseMemObject clReleaseKernel clRetainMemObject clReleaseProgram clSetKernelArg clRetainProgram symbol found OpenCL error calling mclCreateKernel kernel Error calling param error calling offset error calling buffer OpenCL platform found Error calling clGetPlatformIDs number platforms Number platforms Index Profile Version Vendor Extensions vendor cache xmrig shares blake initial hashAes DWORKERS fillAes scratchpad VERSION blake registers fillAes entropy blake registers randomx randomx execute correctly rounded divide failed plugin failed press health report AFFINITY runtime plugin driver driver versions bfactor bsleep bsleep blocks clock temperature memory clock clock power health speed cnHash alloc deviceInfo deviceCount deviceInt deviceInit deviceUint deviceName deviceUlong pluginVersion lastError rxHash release setJob rxPrepare xmrig nvmlDeviceGetCount nvmlShutdown nvmlInit PROGRAMFILES NVIDIA Corporation NVSMI valid configuration found SIGHUP received exiting received exiting SIGINT received exiting SIGTERM received exiting randomx wrmsr donate level paused mspeed mresumed algorithms highest pause resume mpaused press resume backends COMPUTE ERROR donate started donate finished active pools mining mfingerprint height mrejected maccepted failures error shares total current shares results hashes total donate xmrig mnone mbulldozer mpermission granted mintel mryzen PAGES munavailable mdisabled munavailable PAGES MEMORY ASSEMBLY sauto DONATE COMMANDS hashrate pause resume mCOMMANDS mashrate mause mesume RtlGetVersion Windows libuv pages support successfully enabled reboot required Inclusive hwlocVersion hwloc configuration algorithm failed hwloc hwloc GenuineIntel basic cryptonight cryptonight cryptonight monerov cryptonight cryptonight cryptonight cryptonight cryptonight cryptonight monerov cryptonight cryptonight cryptonight cryptonight cryptonight alloy cryptonight cryptonight cryptonight cryptonight double cryptonight cryptonight double cryptonight cryptonight cryptonight cryptonight light light cryptonight cryptonight cryptonight heavy cryptonight cryptonight aeonv cryptonight heavy cryptonight heavy heavy cryptonight heavy cryptonight heavy heavy heavy cryptonight haven cryptonight cryptonight bittube cryptonight cryptonight ultralite ultralite cryptonight turtle randomx cryptonight turtle turtle RandomX randomx randomx RandomXL RandomWOW randomx argon chukwa chukwa randomx RandomARQ argon invalid arqma monero warning memory allocation RandomWOW RandomXL RandomARQ RandomX setcc testjz ISMULH IMULH Cache Dataset Failed allocate executable memory mallocated pages mfailed allocate RandomX dataset switching mdataset ready light enough memory RandomX dataset mfast RandomX disabled config minit dataset threads mskipped mdataset ready failed allocate dataset mallocated pages mfailed allocate RandomX datasets switching memory mallocated pages mallocated pages Ryzen write registers Administrator privileges required mfailed service control manager error mfailed WinRing driver error mfailed remove WinRing driver error mfailed install WinRing driver error mfailed driver error mfailed connect WinRing driver error mcannot mfailed start WinRing driver error mregister values successfully bulldozer intel ryzen conout Unknown system error Unknown system error permission denied argument address family supported resource temporarily unavailable address already address available invalid value hints request canceled temporary failure flags value memory address permanent failure family supported resolved protocol unknown service available socket unknown service argument buffer overflow descriptor resource locked socket supported connection already progress software caused connection abort connection refused operation canceled invalid Unicode character already exists address system argument connection reset destination address required interrupted system invalid argument large unreachable illegal operation directory symbolic links encountered error socket already connected network files message buffer space available device network unreachable table overflow machine network protocol available directory enough memory socket connected directory space device function implemented operation supported socket operation permitted directory empty socket operation socket protocol supported protocol wrong socket broken protocol error cannot after transport endpoint shutdown invalid result large system cross device permitted process connection timed device address links unknown error inappropriate ioctl device inappropriate format remote error illegal sequence malloc unknown CreateEvent THREADPOOL QueueUserWorkItem UnregisterWaitEx GetModuleHandleA ntdll GetProcAddress powrprof kernel SystemFunction advapi SetWinEventHook Unknown error getsockopt WSAStartup socket closesocket Argon Argon Argon version number CLEARED Password Memory Iterations Parallelism lanes length bytes hashing digest Associated Secret Block After KMMMMPUj wjbkPyP MMMMMMMM idata rdata rdata rdata rdata zzzdbg xdata xdata idata idata idata idata pdata RANDOMX STATIC MAINLOOP TEMPLATE RDATA ifdef clang storage class specifiers pragma OPENCL EXTENSION clang storage class specifiers enable endif define define define define define define define define define define define DOUBLE define define define define HEAVY define HEAVY define HEAVY define define define define define ARQMA define CHUKWA define define FAMILY UNKNOWN define FAMILY define FAMILY define FAMILY HEAVY define FAMILY define FAMILY RANDOM define FAMILY ARGON ifndef define ifdef media pragma OPENCL EXTENSION media enable define xmrig inline xmrig const const offset const width offset width return offset width width return offset endif static const constant FEFEE FAFAEFU xECADAD xEAAFAF CFDFDE FCCCC EBEBCDU CEDEDC FFCFCE ACFCF AEFEFC FBFBEDU xDFBCBC DADAAFU AFFFFE CCDCD FECECC FDCDCA EEEEC DEDEA DBDBADU xEFACAC EAEACFU CDDDDA xDCBDBD ADFDFA xDABFBF define xmrig HEAVY inline Round bittube const local const local rotate rotate rotate rotate return endif Round const local const local const local const local const return Round Tables const local const local const rotate rotate rotate rotate return static const constant uchar static const constant uchar define SubWord AESExpandKey keybuf SubWord keybuf keybuf keybuf keybuf rotate uchar endif ifndef SKEIN define SKEIN ifdef media pragma OPENCL EXTENSION media enable define xmrig bitalign bitalign inline xmrig bitalign const const const result result result return result endif define SKEIN PARITY static const constant ulong SKEIN EEDBA static const constant ulong SKEIN EEDBA define SKEIN INJECT while ulong SKEIN const const return ulong xmrig bitalign return ulong xmrig bitalign SkeinMix ulong ulong const const const const SKEIN SKEIN SKEIN SKEIN ulong SkeinEvenRound ulong const ulong const ulong const SKEIN INJECT ulong SkeinMix shuffle ulong shuffle ulong SkeinMix shuffle ulong shuffle ulong SkeinMix shuffle ulong shuffle ulong SkeinMix return shuffle ulong ulong SkeinOddRound ulong const ulong const ulong const SKEIN INJECT ulong SkeinMix shuffle ulong shuffle ulong SkeinMix shuffle ulong shuffle ulong SkeinMix shuffle ulong shuffle ulong SkeinMix return shuffle ulong ulong Skein Block ulong ulong ulong const ulong pragma unroll SkeinEvenRound ulong shuffle ulong SkeinOddRound shuffle ulong SKEIN INJECT return endif define define LITTLE ENDIAN define define typedef typedef ulong LITTLE ENDIAN define define aligned aligned define define define aligned aligned define define define aligned aligned define define define aligned aligned define endif define while define while static const constant ulong xDCCDE EADEB FAAUL FFCUL EFEBD ACBDDUL xFFBF xFFAF DDAUL FACCED xDAEB CBCBAF FAFEEB EAADA CDEDBB EEAUL define Ceven define Ceven define define define while define while define while define define define define define define FFFFFFFF define while define define Ceven while SMALL FOOTPRINT define unsigned while define while endif constant static const sigma constant static const constant static const Padding constant static const define const sigma const sigma rotate rotate rotate rotate define define rotate ulong define define define define define define define define define define define define static const constant ulong eeeUL dcbddc eceUL ffdbe dabfdaf eabUL fcdfe fcfba dcefa fddUL bddaf dfeba eecadecd dfbcdffe effdUL befacef fbdUL xacfa xcaaf feaafea aecbUL ccbbf xccaa beaeUL deebUL bbbfd xaaff static const constant ulong EEEEE xBDDC DEDEB ECECEA EBCUL FFDBE xBFDAF DEDUL DFAEUL EABAB CAFUL CBBUL FCDFE FCFBAUL DCDCB DCEFA FDDDD BDDAF DBDUL CCFFUL DFEBA xADECD EECUL xBCDFFE EFFDFD BEBEE AFDUL xACEF BEFUL BABAE BFBUL BCBCE FBDBD DCEBUL DADAB ACACFA xAFEA CACAAF FEAUL AECBCB CCBBFUL DBABUL CCCCAA FFEUL BEAEAEF DEEBEB BBBFD AADUL AAAAFF define while define ROUND SMALL ulong while define ROUND SMALL while define ROUND SMALL ulong while define SMALL ROUND SMALL while define SMALL ROUND SMALL ROUND SMALL while define SMALL ROUND SMALL while inline reciprocal const float float const float convert float const float native recip const float scaled float const float return convert scaled inline ulong const reciprocal const ulong ulong const ulong const overshoot const undershoot return overshoot undershoot overshoot undershoot inline const ulong float float float native rsqrt native float const const delta ulong const float delta convert float delta result convert delta const result const result const ulong ulong ulong result result result return result endif ifndef HEAVY define HEAVY FAMILY FAMILY HEAVY inline heavy float native recip convert float float float ulong convert ulong convert float float convert float float convert convert convert float const return endif endif ifndef XMRIG KECCAK define XMRIG KECCAK static const constant ulong keccakf static const constant keccakf static const constant keccakf keccakf ulong round ulong pragma unroll round round round pragma unroll rotate pragma unroll keccakf keccakf rotate ulong keccakf pragma unroll ulong pragma unroll bitselect pragma unroll keccakf round keccakf local ulong round ulong pragma unroll round round round rotate rotate rotate rotate rotate pragma unroll keccakf keccakf rotate ulong keccakf pragma unroll ulong bitselect bitselect bitselect bitselect bitselect keccakf round endif defined VERSION STRIDED INDEX undef STRIDED INDEX define STRIDED INDEX endif define CHUNK CHUNK EXPONENT STRIDED INDEX define STRIDED INDEX FAMILY FAMILY HEAVY define WORKSIZE define Threads endif STRIDED INDEX define CHUNK CHUNK WORKSIZE CHUNK endif inline ulong getIdx return global global offset define propagate local local local local attribute group kernel global ulong input global Scratchpad global ulong states Threads ExpandedKey local const getIdx local local const rotate rotate rotate barrier LOCAL FENCE local ulong State states STRIDED INDEX Scratchpad MEMORY STRIDED INDEX FAMILY FAMILY HEAVY Scratchpad WORKSIZE MEMORY WORKSIZE WORKSIZE Scratchpad endif STRIDED INDEX Scratchpad WORKSIZE MEMORY WORKSIZE CHUNK WORKSIZE endif local local ulong State State local local ulong State vload input State input State input State input State input State input State input State input State input local State FFFFFFU local State global local State local State global State State keccakf State pragma unroll states State barrier GLOBAL FENCE vload local global states pragma unroll ulong ExpandedKey states AESExpandKey ExpandedKey fence LOCAL FENCE FAMILY FAMILY HEAVY local pragma unroll pragma unroll ExpandedKey barrier LOCAL FENCE local local barrier LOCAL FENCE propagate endif const local local pragma unroll MEMORY pragma unroll ExpandedKey Scratchpad local fence GLOBAL FENCE attribute group WORKSIZE kernel global ulong input global Scratchpad global ulong states Threads ulong local const ulong getIdx local WORKSIZE const rotate barrier LOCAL FENCE states STRIDED INDEX Scratchpad MEMORY STRIDED INDEX FAMILY FAMILY HEAVY Scratchpad group MEMORY WORKSIZE local Scratchpad endif STRIDED INDEX Scratchpad group MEMORY WORKSIZE CHUNK local endif states states states states states states states states fence LOCAL FENCE pragma unroll UNROLL ITERATIONS ulong Scratchpad Round Tables Scratchpad Scratchpad ulong ulong Scratchpad FAMILY FAMILY HEAVY const global Scratchpad heavy global Scratchpad HEAVY endif endif fence GLOBAL FENCE define VARIANT table index table index define VARIANT tweak define VARIANT tweak input tweak tweak tweak tweak global tweak states attribute group WORKSIZE kernel global ulong input global Scratchpad global ulong states Threads ulong local const ulong getIdx local WORKSIZE const rotate barrier LOCAL FENCE tweak states STRIDED INDEX Scratchpad MEMORY STRIDED INDEX FAMILY FAMILY HEAVY Scratchpad group MEMORY WORKSIZE local Scratchpad endif STRIDED INDEX Scratchpad group MEMORY WORKSIZE CHUNK local endif states states states states states states states states VARIANT fence LOCAL FENCE HEAVY define define endif pragma unroll UNROLL ITERATIONS ulong Scratchpad HEAVY Round bittube Round Tables endif VARIANT Scratchpad Scratchpad ulong ulong tweak tweak HEAVY tweak endif VARIANT Scratchpad VARIANT HEAVY endif HEAVY const global Scratchpad heavy global Scratchpad endif fence GLOBAL FENCE undef attribute group WORKSIZE kernel global ulong input global Scratchpad global ulong states Threads ulong local const ulong getIdx local WORKSIZE const rotate rotate rotate barrier LOCAL FENCE states defined VERSION Scratchpad ITERATIONS STRIDED INDEX Scratchpad MEMORY STRIDED INDEX Scratchpad STRIDED INDEX Scratchpad group MEMORY WORKSIZE CHUNK local endif endif states states states states states states states states states states states states ulong ulong ulong ulong fence LOCAL FENCE ifdef VERSION local scratchpad WORKSIZE local scratchpad scratchpad local define SCRATCHPAD CHUNK local local uchar scratchpad STRIDED INDEX define SCRATCHPAD CHUNK global global uchar Scratchpad STRIDED INDEX define SCRATCHPAD CHUNK global global uchar Scratchpad Threads STRIDED INDEX define SCRATCHPAD CHUNK global global uchar Scratchpad CHUNK CHUNK WORKSIZE CHUNK endif endif division result states result states pragma unroll UNROLL ITERATIONS ifdef VERSION scratchpad global global uchar Scratchpad endif SCRATCHPAD CHUNK Round const ulong chunk ulong SCRATCHPAD CHUNK const ulong chunk ulong SCRATCHPAD CHUNK const ulong chunk ulong SCRATCHPAD CHUNK const ulong chunk ulong SCRATCHPAD CHUNK const ulong chunk ulong SCRATCHPAD CHUNK const ulong chunk ulong SCRATCHPAD CHUNK endif SCRATCHPAD CHUNK chunk SCRATCHPAD CHUNK chunk SCRATCHPAD CHUNK chunk ulong SCRATCHPAD CHUNK ifdef VERSION global global uchar Scratchpad scratchpad ulong ulong scratchpad global global uchar Scratchpad ulong endif SCRATCHPAD CHUNK division result division result result division result ulong result result ulong ulong division result ulong ulong ulong ulong ulong const ulong chunk ulong SCRATCHPAD CHUNK const ulong chunk ulong SCRATCHPAD CHUNK chunk const ulong chunk ulong SCRATCHPAD CHUNK SCRATCHPAD CHUNK chunk SCRATCHPAD CHUNK chunk SCRATCHPAD CHUNK chunk ulong SCRATCHPAD CHUNK chunk SCRATCHPAD CHUNK chunk SCRATCHPAD CHUNK chunk ulong endif SCRATCHPAD CHUNK ifdef VERSION global global uchar Scratchpad scratchpad endif ulong undef SCRATCHPAD CHUNK fence GLOBAL FENCE endif attribute group kernel global Scratchpad global ulong states global Branch global Branch global Branch global Branch Threads local ExpandedKey const ulong getIdx local local const rotate rotate rotate barrier LOCAL FENCE states STRIDED INDEX Scratchpad MEMORY STRIDED INDEX FAMILY FAMILY HEAVY Scratchpad WORKSIZE MEMORY WORKSIZE WORKSIZE Scratchpad endif STRIDED INDEX Scratchpad WORKSIZE MEMORY WORKSIZE CHUNK WORKSIZE endif defined Tahiti defined Pitcairn ulong ExpandedKey states vload local global states vload local global states ExpandedKey vload global states endif AESExpandKey ExpandedKey barrier LOCAL FENCE FAMILY FAMILY HEAVY local local local store local local local local local local store local local local local local store endif FAMILY FAMILY HEAVY pragma unroll local MEMORY MEMORY Scratchpad barrier LOCAL FENCE pragma unroll Round ExpandedKey store Scratchpad barrier LOCAL FENCE pragma unroll Round ExpandedKey store barrier LOCAL FENCE const local local pragma unroll MEMORY Scratchpad local pragma unroll Round ExpandedKey endif FAMILY FAMILY HEAVY pragma unroll pragma unroll Round ExpandedKey barrier LOCAL FENCE store barrier LOCAL FENCE endif vstore ulong local states barrier GLOBAL FENCE local ulong State local local ulong State State local State states keccakf State states State StateSwitch State global destinationBranch StateSwitch Branch Branch global destinationBranch StateSwitch Branch Branch global destinationBranch StateSwitch destinationBranch destinationBranch destinationBranch atomic destinationBranch Threads fence GLOBAL FENCE define VSWAP define VSWAP kernel Skein global ulong states global BranchBuf global output ulong Target Threads const global global offset BranchBuf Threads states BranchBuf ulong vload SKEIN ulong ulong pragma unroll vload states ulong states const ulong SKEIN PARITY Skein Block ulong const ulong SKEIN PARITY Skein Block Target ulong outIdx atomic output outIdx output outIdx BranchBuf global offset fence GLOBAL FENCE define ulong uchar define JHXOR input input input input input input input input input input input input input input input input kernel global ulong states global BranchBuf global output ulong Target Threads const global global offset BranchBuf Threads states BranchBuf BBECD ulong input const shifted input states shifted JHXOR ulong input states JHXOR ulong input JHXOR Target ulong outIdx atomic output outIdx output outIdx BranchBuf global offset define uchar kernel Blake global ulong states global BranchBuf global output ulong Target Threads const global global offset BranchBuf Threads states BranchBuf unsigned unsigned bitlen vload vload global states bitlen vload bitlen bitlen global states global states bitlen vload bitlen bitlen ulong Target ulong outIdx atomic output outIdx output outIdx BranchBuf global offset undef kernel Groestl global ulong states global BranchBuf global output ulong Target Threads const global global offset BranchBuf Threads states BranchBuf ulong State ulong ulong vload states State SMALL SMALL State ulong vload states State SMALL SMALL State ulong vload states State SMALL SMALL State states State SMALL SMALL ulong State SMALL State State State Target ulong outIdx atomic output outIdx output outIdx BranchBuf global offset define define define define define define define define define define define DOUBLE define define define define HEAVY define HEAVY define HEAVY define define define define define ARQMA define CHUKWA define define FAMILY UNKNOWN define FAMILY define FAMILY define FAMILY HEAVY define FAMILY define FAMILY RANDOM define FAMILY ARGON define RANDOMX DATASET define RANDOMX DATASET EXTRA define RANDOMX SCRATCHPAD define RANDOMX SCRATCHPAD define RANDOMX SCRATCHPAD define RANDOMX define RANDOMX OFFSET define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX IMULH define RANDOMX IMULH define RANDOMX ISMULH define RANDOMX ISMULH define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX ISWAP define RANDOMX FSWAP define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX FSCAL define RANDOMX define RANDOMX define RANDOMX FSQRT define RANDOMX CBRANCH define RANDOMX CFROUND define RANDOMX ISTORE define RANDOMX define RANDOMX DATASET define RANDOMX PROGRAM define define ENTROPY RANDOMX PROGRAM define REGISTERS define RANDOMX PROGRAM REGISTERS define INDEX COUNT define STATE REGISTERS RANDOMX PROGRAM define ROUNDING RANDOMX CFROUND define define define define RANDOMX DATASET define RANDOMX DATASET EXTRA define RANDOMX SCRATCHPAD define RANDOMX SCRATCHPAD define RANDOMX SCRATCHPAD define RANDOMX define RANDOMX OFFSET define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX IMULH define RANDOMX IMULH define RANDOMX ISMULH define RANDOMX ISMULH define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX ISWAP define RANDOMX FSWAP define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX FSCAL define RANDOMX define RANDOMX define RANDOMX FSQRT define RANDOMX CBRANCH define RANDOMX CFROUND define RANDOMX ISTORE define RANDOMX define RANDOMX DATASET define RANDOMX PROGRAM define define ENTROPY RANDOMX PROGRAM define REGISTERS define RANDOMX PROGRAM REGISTERS define INDEX COUNT define STATE REGISTERS RANDOMX PROGRAM define ROUNDING RANDOMX CFROUND define define define define RANDOMX DATASET define RANDOMX DATASET EXTRA define RANDOMX SCRATCHPAD define RANDOMX SCRATCHPAD define RANDOMX SCRATCHPAD define RANDOMX define RANDOMX OFFSET define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX IMULH define RANDOMX IMULH define RANDOMX ISMULH define RANDOMX ISMULH define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX ISWAP define RANDOMX FSWAP define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX FSCAL define RANDOMX define RANDOMX define RANDOMX FSQRT define RANDOMX CBRANCH define RANDOMX CFROUND define RANDOMX ISTORE define RANDOMX define RANDOMX DATASET define RANDOMX PROGRAM define define ENTROPY RANDOMX PROGRAM define REGISTERS define RANDOMX PROGRAM REGISTERS define INDEX COUNT define STATE REGISTERS RANDOMX PROGRAM define ROUNDING RANDOMX CFROUND define define define ARQMA define RANDOMX DATASET define RANDOMX DATASET EXTRA define RANDOMX SCRATCHPAD define RANDOMX SCRATCHPAD define RANDOMX SCRATCHPAD define RANDOMX define RANDOMX OFFSET define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX IMULH define RANDOMX IMULH define RANDOMX ISMULH define RANDOMX ISMULH define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX ISWAP define RANDOMX FSWAP define RANDOMX define RANDOMX define RANDOMX define RANDOMX define RANDOMX FSCAL define RANDOMX define RANDOMX define RANDOMX FSQRT define RANDOMX CBRANCH define RANDOMX CFROUND define RANDOMX ISTORE define RANDOMX define RANDOMX DATASET define RANDOMX PROGRAM define define ENTROPY RANDOMX PROGRAM define REGISTERS define RANDOMX PROGRAM REGISTERS define INDEX COUNT define STATE REGISTERS RANDOMX PROGRAM define ROUNDING RANDOMX CFROUND define define define endif constant static const TABLE fefee fafaefU xecadad xeaafaf cfdfde fcccc ebebcdU cededc ffcfce acfcf aefefc fbfbedU xdfbcbc dadaafU affffe ccdcd fececc fdcdca eeeec dedea dbdbadU xefacac eaeacfU cdddda xdcbdbd adfdfa xdabfbf xfefee xabab xcaca xfafaef xadad xafaf xfdfde xcccc xebebcd xededc xfcfce xcbcb xbebe xcfcf xefefc xaaaa xfbfbed xbcbc xdadaaf xffffe xcdcd xececc xdcdca xeeeec xdedea xdbdbad xacac acfaU xeaeacf caafU xaeae xbaba xdddda xbdbd ccaaU xcece aaffU xdfdfa xbfbf xbbbb xfaef ecadU eaafU xebcd xfbed dfbcU xdaaf xdbad efacU xeacf dcbdU dabfU fefeU ababU cacaU fafaU ecadadU eaafafU cfdfdU fccccU ebebU cededU ffcfcU cbcbU bebeU acfcfU aefefU aaaaU fbfbU dfbcbcU dadaU affffU ccdcdU fececU fdcdcU eeeeU dedeU dbdbU efacacU xacfa eaeaU xcaaf aeaeU babaU cddddU dcbdbdU xccaa ceceU xaaff adfdfU dabfbfU bbbbU faacU xaaef xdbeec xfbff xbbdd fcedb xcadc ffaaU daaccU xeacdf baafd afcaU faacabU dbfebU eddaeU efdfbU eebbU cbdcU xfcedb xbfad xcfbc xdaec daacc ceeeU xaafd xfaacab dbfeb aaefU eddae dbeeU efdfbffU eebbddU cbdcc cadcU xffaa xaacc eacdU xafca xacab xbfeb xddae dbeec xfdfbff xeebbdd xcbdcc fcedU bfadU cfbcU daecU xceee eacdf baafdU constant static const constant static const STATE start return start define fillAes fillAes scratchpad define outputSize RANDOMX SCRATCHPAD define outputSize outputSize define unroll factor define rounds attribute group kernel fillAes global state global batch version local const global index global global index batch return const global index const global index local local TABLE barrier LOCAL FENCE rounds const const version const aaddu ffdcu dfcde aeffu endif global global state sizeof sizeof const const global global outputSize sizeof const local const const local const const local const const local const pragma unroll unroll factor outputSize sizeof rounds endif global undef rounds undef unroll factor undef outputSize undef outputSize undef fillAes define fillAes fillAes entropy define outputSize ENTROPY define outputSize outputSize define unroll factor define rounds attribute group kernel fillAes global state global batch version local const global index global global index batch return const global index const global index local local TABLE barrier LOCAL FENCE rounds const const version const aaddu ffdcu dfcde aeffu endif global global state sizeof sizeof const const global global outputSize sizeof const local const const local const const local const const local const pragma unroll unroll factor outputSize sizeof rounds endif global undef rounds undef unroll factor undef outputSize undef outputSize undef fillAes define inputSize RANDOMX SCRATCHPAD attribute group kernel hashAes global const input global hashOffsetBytes hashStrideBytes batch local const global index global global index batch return const global index const global index local local TABLE barrier LOCAL FENCE STATE STATE STATE STATE const const global const global input inputSize sizeof local const const local const const local const const local const const pragma unroll inputSize sizeof global hashStrideBytes sizeof hashOffsetBytes sizeof constant static const uchar blake sigma Blake ulong ulong ulong shift return rotate shift define blake sigma blake sigma while define ROUND while define BLAKE ROUNDS ROUND ROUND ROUND ROUND ROUND ROUND ROUND ROUND ROUND ROUND ROUND ROUND blake process single block ulong const ulong blockTemplateSize ulong blockTemplateSize BLAKE ROUNDS attribute group kernel blake initial global global const blockTemplate blockTemplateSize start nonce const global index global global const ulong global const ulong blockTemplate ulong blockTemplateSize blockTemplateSize blockTemplateSize blockTemplateSize blockTemplateSize blockTemplateSize blockTemplateSize blockTemplateSize blockTemplateSize blockTemplateSize blockTemplateSize blockTemplateSize blockTemplateSize blockTemplateSize blockTemplateSize blockTemplateSize blockTemplateSize sizeof ulong blockTemplateSize sizeof ulong ulong blockTemplateSize sizeof ulong const ulong nonce start nonce global index ulong nonce ulong nonce ulong blake process single block blockTemplateSize global ulong global ulong global index define define define blake process double block blake process double block define blake registers blake registers blake process double block ulong ulong global const ulong ulong BLAKE ROUNDS ulong sizeof ulong sizeof ulong ulong sizeof ulong BLAKE ROUNDS attribute group kernel blake registers global global const inStrideBytes const global index global global const ulong global const ulong global index inStrideBytes sizeof ulong global ulong global ulong global index sizeof ulong ulong ulong blake process double block undef blake registers undef blake process double block undef define define blake process double block blake process double block define blake registers blake registers blake process double block ulong ulong global const ulong ulong BLAKE ROUNDS ulong sizeof ulong sizeof ulong ulong sizeof ulong BLAKE ROUNDS attribute group kernel blake registers global global const inStrideBytes const global index global global const ulong global const ulong global index inStrideBytes sizeof ulong global ulong global ulong global index sizeof ulong ulong ulong blake process double block undef blake registers undef blake process double block undef pragma OPENCL EXTENSION enable define CacheLineSize define ScratchpadL RANDOMX SCRATCHPAD CacheLineSize define CacheLineAlignMask RANDOMX DATASET CacheLineSize define mantissaSize define exponentSize define mantissaMask mantissaSize define exponentMask exponentSize define exponentBias define constExponentBits define dynamicExponentBits define staticExponentBits define dynamicMantissaMask mantissaSize dynamicExponentBits define RegistersCount define RegisterCountFlt RegistersCount define ConditionMask RANDOMX define ConditionOffset RANDOMX OFFSET define StoreL Condition define DatasetExtraItems RANDOMX DATASET EXTRA RANDOMX DATASET define define OFFSET define OFFSET define OFFSET define OFFSET define SHIFT OFFSET define OFFSET define OFFSET define NEGATIVE OFFSET define OPCODE OFFSET define INSTS OFFSET define INSTS OFFSET define OPCODE OFFSET typedef uchar typedef ushort typedef typedef ulong typedef typedef double entropy exponent entropy mantissa entropy mantissaMask exponent exponentBias exponent exponentMask exponent mantissaSize return double exponent mantissa getStaticExponent entropy exponent constExponentBits exponent entropy staticExponentBits dynamicExponentBits exponent mantissaSize return exponent getFloatMask entropy const return entropy getStaticExponent entropy buffer local const value local sizeof const local sizeof local local while sizeof local value value divisor divisor divisor return const quotient divisor remainder divisor const divisor shift shift shift const remainder divisor remainder quotient quotient remainder remainder divisor return quotient define position value position value while position return position define update value value value value value value while attribute group kernel global const entropy global states global rounding iteration RANDOMX PROGRAM typedef typedef endif local execution RANDOMX PROGRAM WORKERS sizeof sizeof buffer execution sizeof execution sizeof barrier LOCAL FENCE const global index global const global index const global index local execution local execution local RANDOMX PROGRAM WORKERS sizeof sizeof global global states STATE sizeof const global entropy const global entropy ENTROPY sizeof global double global double entropy iteration rounding global program global entropy sizeof RANDOMX PROGRAM registerLastChanged registerWasChanged registerLastChanged endif RANDOMX PROGRAM global program const program opcode const const opcode RANDOMX RANDOMX RANDOMX RANDOMX RANDOMX RANDOMX RANDOMX IMULH RANDOMX IMULH RANDOMX ISMULH RANDOMX ISMULH RANDOMX PROGRAM registerLastChanged registerWasChanged registerLastChanged endif continue opcode RANDOMX RANDOMX RANDOMX RANDOMX RANDOMX RANDOMX RANDOMX IMULH RANDOMX IMULH RANDOMX ISMULH RANDOMX ISMULH opcode RANDOMX RANDOMX PROGRAM registerLastChanged registerWasChanged registerLastChanged endif continue opcode RANDOMX opcode RANDOMX RANDOMX RANDOMX RANDOMX RANDOMX RANDOMX PROGRAM registerLastChanged registerWasChanged registerLastChanged endif continue opcode RANDOMX RANDOMX RANDOMX RANDOMX RANDOMX opcode RANDOMX ISWAP RANDOMX PROGRAM registerLastChanged registerWasChanged registerLastChanged registerWasChanged registerLastChanged registerLastChanged endif continue opcode RANDOMX ISWAP opcode RANDOMX FSWAP RANDOMX RANDOMX RANDOMX RANDOMX RANDOMX FSCAL RANDOMX RANDOMX RANDOMX FSQRT global program continue opcode RANDOMX FSWAP RANDOMX RANDOMX RANDOMX RANDOMX RANDOMX FSCAL RANDOMX RANDOMX RANDOMX FSQRT opcode RANDOMX CBRANCH const RANDOMX PROGRAM const change registerLastChanged const lastChanged registerWasChanged change global program lastChanged lastChanged const lastChanged registerLastChanged global program endif global program lastChanged RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged registerLastChanged registerWasChanged registerLastChanged registerLastChanged registerLastChanged registerLastChanged registerLastChanged registerLastChanged registerLastChanged registerLastChanged endif registerLatency registerReadCycle registerLatencyFP registerReadCycleFP ScratchpadLatency first available first allowed cfround memory slots instructions first instruction first instruction false update branch target false first available branch target false RANDOMX PROGRAM const program opcode const const branch target branch target first available first available branch target const latency registerLatency const latency registerLatency const latency latency latency latency latency const latency ScratchpadL RANDOMX SCRATCHPAD ScratchpadLatency latency latency update latency latency latency memory false memory store false false branch false false false cfround false opcode RANDOMX latency latency break opcode RANDOMX opcode RANDOMX latency latency memory break opcode RANDOMX opcode RANDOMX latency latency break opcode RANDOMX opcode RANDOMX latency latency memory break opcode RANDOMX opcode RANDOMX latency latency break opcode RANDOMX opcode RANDOMX latency latency memory break opcode RANDOMX opcode RANDOMX IMULH latency latency break opcode RANDOMX IMULH opcode RANDOMX IMULH latency latency memory break opcode RANDOMX IMULH opcode RANDOMX ISMULH latency latency break opcode RANDOMX ISMULH opcode RANDOMX ISMULH latency latency memory break opcode RANDOMX ISMULH opcode RANDOMX false latency latency break opcode RANDOMX opcode RANDOMX false latency latency break opcode RANDOMX opcode RANDOMX latency latency break opcode RANDOMX opcode RANDOMX latency latency memory break opcode RANDOMX opcode RANDOMX RANDOMX latency latency break opcode RANDOMX RANDOMX opcode RANDOMX ISWAP latency latency break opcode RANDOMX ISWAP opcode RANDOMX FSWAP latency registerLatencyFP false break opcode RANDOMX FSWAP opcode RANDOMX RegisterCountFlt latency registerLatencyFP false break opcode RANDOMX opcode RANDOMX RegisterCountFlt latency registerLatencyFP update latency latency update latency ScratchpadLatency memory break opcode RANDOMX opcode RANDOMX RegisterCountFlt latency registerLatencyFP false break opcode RANDOMX opcode RANDOMX RegisterCountFlt latency registerLatencyFP update latency latency update latency ScratchpadLatency memory break opcode RANDOMX opcode RANDOMX FSCAL RegisterCountFlt latency registerLatencyFP false break opcode RANDOMX FSCAL opcode RANDOMX RegisterCountFlt RegisterCountFlt latency registerLatencyFP false break opcode RANDOMX opcode RANDOMX RegisterCountFlt RegisterCountFlt latency registerLatencyFP update latency latency update latency ScratchpadLatency memory break opcode RANDOMX opcode RANDOMX FSQRT RegisterCountFlt RegisterCountFlt latency registerLatencyFP false break opcode RANDOMX FSQRT opcode RANDOMX CBRANCH false branch latency latency first available break opcode RANDOMX CBRANCH opcode RANDOMX CFROUND latency latency cfround break opcode RANDOMX CFROUND opcode RANDOMX ISTORE latency latency update latency memory WORKERS WORKERS memory memory store break opcode RANDOMX ISTORE while false branch target update branch target continue update branch target global program update branch target false branch target first allowed first available update first allowed latency WORKERS cfround update first allowed first allowed cfround update first allowed registerReadCycleFP registerReadCycle WORKERS update first allowed registerReadCycle WORKERS update first allowed first allowed execution execution WORKERS blocked false WORKERS WORKERS execution first instruction const program execution branch target blocked continue blocked WORKERS WORKERS execution first instruction const program execution execution execution execution execution first instruction first instruction first instruction first instruction break break first allowed execution break first instruction first instruction cfround first allowed cfround WORKERS WORKERS instructions execution slots execution slots const latency WORKERS value registerReadCycle update value WORKERS registerReadCycle value memory update memory cfround const latency latency registerLatencyFP registerLatencyFP registerLatencyFP registerLatencyFP registerLatencyFP latency value registerReadCycleFP update value WORKERS registerReadCycleFP value memory store registerLatency latency registerLatency latency value registerReadCycle update value WORKERS registerReadCycle value branch const latency latency registerLatency registerLatency registerLatency registerLatency memory store value registerReadCycle update value WORKERS registerReadCycle value ScratchpadLatency WORKERS StoreL Condition WORKERS execution first available first available first instruction first available branch target program first available branch target false first available first available while first available RANDOMX PROGRAM WORKERS execution first available branch target update first available update while execution first instruction first instruction first instruction first allowed cfround first allowed cfround entropy CacheLineAlignMask entropy CacheLineAlignMask addressRegisters entropy addressRegisters addressRegisters addressRegisters addressRegisters addressRegisters sizeof datasetOffset entropy DatasetExtraItems CacheLineSize ulong eMask global ulong entropy eMask getFloatMask eMask eMask getFloatMask eMask global global global addressRegisters global datasetOffset global ulong eMask global global REGISTERS sizeof index index fscal global compiled program global REGISTERS sizeof branch target execution first instruction first instruction first instruction continue workers insts while workers workers WORKERS execution workers workers first instruction workers first instruction first instruction workers program execution workers insts workers workers workers INSTS OFFSET insts INSTS OFFSET const program execution opcode const const const const const branch target branch target branch target branch target opcode RANDOMX const shift OFFSET OFFSET shift SHIFT OFFSET OPCODE OFFSET index OFFSET index INDEX COUNT index compiled program workers continue opcode RANDOMX opcode RANDOMX const location OFFSET OFFSET OFFSET OPCODE OFFSET index OFFSET index INDEX COUNT index FFFFFU location location compiled program workers continue opcode RANDOMX opcode RANDOMX OFFSET OFFSET OPCODE OFFSET NEGATIVE OFFSET index OFFSET OFFSET index INDEX COUNT index compiled program workers continue opcode RANDOMX opcode RANDOMX const location OFFSET OFFSET OFFSET OPCODE OFFSET NEGATIVE OFFSET index OFFSET index INDEX COUNT index FFFFFU location location compiled program workers continue opcode RANDOMX opcode RANDOMX OFFSET OFFSET OPCODE OFFSET index OFFSET OFFSET index INDEX COUNT index compiled program workers continue opcode RANDOMX opcode RANDOMX const location OFFSET OFFSET OFFSET OPCODE OFFSET index OFFSET index INDEX COUNT index FFFFFU location location compiled program workers continue opcode RANDOMX opcode RANDOMX IMULH OFFSET OFFSET OPCODE OFFSET compiled program workers continue opcode RANDOMX IMULH opcode RANDOMX IMULH const location OFFSET OFFSET OFFSET OPCODE OFFSET index OFFSET index INDEX COUNT index FFFFFU location location compiled program workers continue opcode RANDOMX IMULH opcode RANDOMX ISMULH OFFSET OFFSET OPCODE OFFSET compiled program workers continue opcode RANDOMX ISMULH opcode RANDOMX ISMULH const location OFFSET OFFSET OFFSET OPCODE OFFSET index OFFSET index INDEX COUNT index FFFFFU location location compiled program workers continue opcode RANDOMX ISMULH opcode RANDOMX const value compiled program workers continue OFFSET OFFSET OPCODE OFFSET index OFFSET OFFSET index INDEX COUNT index const index const index compiled program workers continue opcode RANDOMX opcode RANDOMX OFFSET OPCODE OFFSET compiled program workers continue opcode RANDOMX opcode RANDOMX OFFSET OFFSET OPCODE OFFSET index OFFSET OFFSET index INDEX COUNT index compiled program workers continue opcode RANDOMX opcode RANDOMX const location OFFSET OFFSET OFFSET OPCODE OFFSET index OFFSET index INDEX COUNT index FFFFFU location location compiled program workers continue opcode RANDOMX opcode RANDOMX RANDOMX OFFSET OFFSET OPCODE OFFSET index OFFSET OFFSET index INDEX COUNT index opcode RANDOMX NEGATIVE OFFSET compiled program workers continue opcode RANDOMX RANDOMX opcode RANDOMX ISWAP OFFSET OFFSET OPCODE OFFSET compiled program workers continue opcode RANDOMX ISWAP opcode RANDOMX FSWAP OFFSET OPCODE OFFSET compiled program workers continue opcode RANDOMX FSWAP opcode RANDOMX RegisterCountFlt OFFSET RegisterCountFlt OFFSET OPCODE OFFSET compiled program workers continue opcode RANDOMX opcode RANDOMX const location RegisterCountFlt OFFSET OFFSET OFFSET OPCODE OFFSET index OFFSET index INDEX COUNT index FFFFFU location location compiled program workers continue opcode RANDOMX opcode RANDOMX RegisterCountFlt OFFSET RegisterCountFlt OFFSET OPCODE OFFSET NEGATIVE OFFSET compiled program workers continue opcode RANDOMX opcode RANDOMX const location RegisterCountFlt OFFSET OFFSET OFFSET OPCODE OFFSET NEGATIVE OFFSET index OFFSET index INDEX COUNT index FFFFFU location location compiled program workers continue opcode RANDOMX opcode RANDOMX FSCAL RegisterCountFlt OFFSET OFFSET OPCODE OFFSET index fscal index fscal OFFSET index fscal index index OFFSET index INDEX COUNT index index index compiled program workers continue opcode RANDOMX FSCAL opcode RANDOMX RegisterCountFlt RegisterCountFlt OFFSET RegisterCountFlt OFFSET SHIFT OFFSET OPCODE OFFSET compiled program workers continue opcode RANDOMX opcode RANDOMX const location RegisterCountFlt RegisterCountFlt OFFSET OFFSET OFFSET OPCODE OFFSET index OFFSET index INDEX COUNT index FFFFFU location location compiled program workers continue opcode RANDOMX opcode RANDOMX FSQRT RegisterCountFlt RegisterCountFlt OFFSET OPCODE OFFSET compiled program workers continue opcode RANDOMX FSQRT opcode RANDOMX CBRANCH OFFSET OPCODE OFFSET index OFFSET const cshift ConditionOffset cshift cshift cshift index INDEX COUNT index index cshift branch target index branch target compiled program workers continue opcode RANDOMX CBRANCH opcode RANDOMX CFROUND OFFSET OPCODE OFFSET OFFSET compiled program workers continue opcode RANDOMX CFROUND opcode RANDOMX ISTORE const location StoreL Condition OFFSET OFFSET OFFSET OPCODE OFFSET index OFFSET index INDEX COUNT index FFFFFU location location compiled program workers continue opcode RANDOMX ISTORE compiled program workers global compiled program global REGISTERS sizeof buffer local global const local sizeof const local sizeof global const global const group sizeof local local while sizeof local global double groups value andMask orMask double convert double value ulong andMask orMask return double double double double double rounding rounding return return return const minus return rounding double minus const mantissa const mantissa mantissa const mantissa mantissa const exponent const exponent exponent const exponent exponent const exponent exponent const exponent exponent exponent exponent exponent const return double const mantissa ulong mantissa mantissa const mantissa ulong mantissa mantissa const mantissa ulong mantissa mantissa const const const result result mantissa mantissa result mantissa mantissa correction result exponent result exponent exponent correction result exponent result const rounding return double result exponent result exponent result exponent shift correction result result shift result result shift result shift shift exponent exponent result shift shift mantissa shift mantissa shift shift mantissa shift shift mantissa shift exponent result exponent result mantissa shift correction exponent result exponent shift result result shift result result shift shift result shift shift shift shift shift result shift result shift result result result result result shift result shift result result shift exponent result exponent result result result result result correction result result result const borrow result result borrow const change result result result result change change result result result result result result result result return exponent result result result result const index result index exponent result index result result index result index correction const shift correction const round result result shift result shift result mantissa rounding result result round result mantissa result exponent result result exponent result correction mantissa result result return double result double double double double const double const double double result const const ulong result result double ulong result return result double double double rsqrt double double const double double result result return result inner const program length local const compiled program const global scratchpad const offset const group offset local local const batch const workers const xexponentMask const workers const INDEX COUNT pragma unroll program length INDEX COUNT compiled program const workers INSTS OFFSET WORKERS const insts INSTS OFFSET WORKERS const insts workers insts workers const offset insts const offset insts compiled program offset opcode OPCODE OFFSET const location OFFSET const shift const offset offset const offset group offset offset OFFSET offset offset offset shift offset OFFSET offset offset location offset local local local offset local local local offset const offset OFFSET local const offset location const shift const xFFFFFFFFU shift const opcode shift global global scratchpad execution OFFSET opcode NEGATIVE OFFSET opcode const shift SHIFT OFFSET opcode shift const OFFSET opcode opcode opcode location ulong convert double NEGATIVE OFFSET const SHIFT OFFSET const double double const double double ulong opcode ConditionMask INDEX COUNT insts opcode shift RANDOMX const shift shift const NEGATIVE OFFSET shift shift shift shift shift shift endif opcode ulong double opcode opcode opcode local local offset opcode opcode ulong convert double dynamicMantissaMask xexponentMask ulong double double opcode ROUNDING INDEX COUNT offset offset execution execution barrier LOCAL FENCE INDEX COUNT INDEX COUNT insts return WORKERS attribute group attribute group endif kernel execute global states global rounding global scratchpads global const dataset batch iterations first local states local STATE sizeof buffer states local sizeof states local sizeof states barrier LOCAL FENCE WIDTH WORKERS local states local local WIDTH STATE sizeof local double local double local double local double const global index global const global index WIDTH const global index WIDTH local local const addressRegisters local local const readReg local local addressRegisters local const readReg local local addressRegisters local const readReg local local addressRegisters local const readReg local local addressRegisters const datasetOffset local global const dataset global const dataset datasetOffset const offset global index const group offset global index local eMask const program length local global rounding spAddr first spAddr first global scratchpad global scratchpads RANDOMX SCRATCHPAD const group local double group local double local double const andMask group dynamicMantissaMask const orMask group eMask const orMask group eMask const xexponentMask eMask eMask local local REGISTERS sizeof local const compiled program local const REGISTERS sizeof const workers WORKERS local WIDTH WIDTH const workers local WIDTH WIDTH pragma unroll iterations local global WORKERS const spMix readReg readReg spAddr const spMix spAddr const spMix spAddr ScratchpadL spAddr ScratchpadL global scratchpad spAddr global scratchpad spAddr global global groups andMask orMask groups andMask orMask WORKERS WIDTH WORKERS inner program length compiled program scratchpad offset group offset batch workers xexponentMask workers WORKERS readReg readReg CacheLineAlignMask const global const dataset ulong ulong spAddr spAddr WORKERS return global global states STATE sizeof global rounding ulong ulong ulong global global attribute group kernel shares global const hashes target start nonce global shares const global index global hashes global index target const atomic shares shares start nonce global index define INITIAL define INTERMEDIATE PROGRAM RANDOMX PROGRAM define COMPILED PROGRAM define REGISTERS define mantissaSize define exponentSize define mantissaMask mantissaSize define exponentMask exponentSize define exponentBias define dynamicExponentBits define staticExponentBits define constExponentBits define dynamicMantissaMask mantissaSize dynamicExponentBits define ScratchpadL define ScratchpadL define ScratchpadL define ScratchpadL RANDOMX SCRATCHPAD define RANDOMX define RANDOMX OFFSET global scratchpad address global batch return global scratchpad fixed address global batch return global scratchpad global index VERSION index index endif return global scratchpad global index vmcnt vmcnt vmcnt vmcnt index index return global scratchpad address global batch VERSION endif return global scratchpad global index VERSION index index endif return global scratchpad global index vmcnt vmcnt vmcnt vmcnt index return global instruction global global branch target const prefetch index vmcnt batch opcode const const const opcode RANDOMX const shift shift shift return opcode RANDOMX opcode RANDOMX prefetch index scratchpad address ScratchpadL ScratchpadL batch scratchpad fixed address ScratchpadL batch scratchpad prefetch index prefetch index prefetch index scratchpad prefetch index prefetch index prefetch index vmcnt return opcode RANDOMX opcode RANDOMX return opcode RANDOMX opcode RANDOMX prefetch index scratchpad address ScratchpadL ScratchpadL batch scratchpad fixed address ScratchpadL batch scratchpad prefetch index prefetch index prefetch index scratchpad prefetch index prefetch index prefetch index vmcnt return opcode RANDOMX opcode RANDOMX VERSION endif VERSION endif return opcode RANDOMX opcode RANDOMX prefetch index scratchpad address ScratchpadL ScratchpadL batch scratchpad fixed address ScratchpadL batch scratchpad prefetch index prefetch index prefetch index scratchpad prefetch index prefetch index prefetch index vmcnt VERSION endif return opcode RANDOMX opcode RANDOMX IMULH xbebc return opcode RANDOMX IMULH opcode RANDOMX IMULH prefetch index scratchpad address ScratchpadL ScratchpadL batch scratchpad fixed address ScratchpadL batch scratchpad prefetch index prefetch index prefetch index scratchpad prefetch index prefetch index prefetch index vmcnt xbebc return opcode RANDOMX IMULH opcode RANDOMX ISMULH xbebc return opcode RANDOMX ISMULH opcode RANDOMX ISMULH prefetch index scratchpad address ScratchpadL ScratchpadL batch scratchpad fixed address ScratchpadL batch scratchpad prefetch index prefetch index prefetch index scratchpad prefetch index prefetch index prefetch index vmcnt xbebc return opcode RANDOMX ISMULH opcode RANDOMX const value value value VERSION endif value return opcode RANDOMX opcode RANDOMX return opcode RANDOMX opcode RANDOMX xbebe return opcode RANDOMX opcode RANDOMX prefetch index scratchpad address ScratchpadL ScratchpadL batch scratchpad fixed address ScratchpadL batch scratchpad prefetch index prefetch index prefetch index scratchpad prefetch index prefetch index prefetch index vmcnt return opcode RANDOMX opcode RANDOMX RANDOMX opcode RANDOMX const shift opcode RANDOMX shift shift return opcode RANDOMX RANDOMX opcode RANDOMX ISWAP return opcode RANDOMX ISWAP opcode RANDOMX FSWAP return opcode RANDOMX FSWAP opcode RANDOMX return opcode RANDOMX opcode RANDOMX prefetch index scratchpad address ScratchpadL ScratchpadL batch scratchpad prefetch index prefetch index prefetch index scratchpad prefetch index prefetch index prefetch index vmcnt return opcode RANDOMX opcode RANDOMX return opcode RANDOMX opcode RANDOMX prefetch index scratchpad address ScratchpadL ScratchpadL batch scratchpad prefetch index prefetch index prefetch index scratchpad prefetch index prefetch index prefetch index vmcnt return opcode RANDOMX opcode RANDOMX FSCAL return opcode RANDOMX FSCAL opcode RANDOMX return opcode RANDOMX opcode RANDOMX prefetch index scratchpad address ScratchpadL ScratchpadL batch scratchpad prefetch index prefetch index prefetch index scratchpad prefetch index prefetch index prefetch index vmcnt xbebc return opcode RANDOMX opcode RANDOMX FSQRT xbebc return opcode RANDOMX FSQRT opcode RANDOMX CBRANCH const shift RANDOMX OFFSET shift shift const conditionMaskReg conditionMaskReg const delta branch target delta xFFFF return opcode RANDOMX CBRANCH opcode RANDOMX CFROUND const shift shift shift return opcode RANDOMX CFROUND opcode RANDOMX ISTORE const ScratchpadL ScratchpadL ScratchpadL scratchpad address batch const VERSION endif return opcode RANDOMX ISTORE return prefetch global const prefetch count const const const const const srcAvailableAt const const const lastBranchTarget const lastBranch ScratchpadL RANDOMX SCRATCHPAD srcAvailableAt const lastBranchTarget lastBranch lastBranch lastBranchTarget lastBranch lastBranchTarget lastBranchTarget prefetch count return prefetch count global generate global global global batch prefetch count pragma unroll RANDOMX PROGRAM registerLastChanged ulong registerLastChanged registerWasChanged endif lastBranchTarget lastBranch RANDOMX PROGRAM ulong endif prefetch count pragma unroll RANDOMX PROGRAM opcode const const const lastBranchTarget RANDOMX PROGRAM pragma unroll registerLastChanged registerLastChanged registerWasChanged endif lastBranch RANDOMX PROGRAM const srcAvailableAt registerLastChanged const dstAvailableAt registerLastChanged const srcAvailableAt registerWasChanged registerLastChanged const dstAvailableAt registerWasChanged registerLastChanged endif opcode RANDOMX RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif continue opcode RANDOMX opcode RANDOMX RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif prefetch count prefetch prefetch count srcAvailableAt lastBranchTarget lastBranch continue opcode RANDOMX opcode RANDOMX RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif continue opcode RANDOMX opcode RANDOMX RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif prefetch count prefetch prefetch count srcAvailableAt lastBranchTarget lastBranch continue opcode RANDOMX opcode RANDOMX RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif continue opcode RANDOMX opcode RANDOMX RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif prefetch count prefetch prefetch count srcAvailableAt lastBranchTarget lastBranch continue opcode RANDOMX opcode RANDOMX IMULH RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif continue opcode RANDOMX IMULH opcode RANDOMX IMULH RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif prefetch count prefetch prefetch count srcAvailableAt lastBranchTarget lastBranch continue opcode RANDOMX IMULH opcode RANDOMX ISMULH RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif continue opcode RANDOMX ISMULH opcode RANDOMX ISMULH RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif prefetch count prefetch prefetch count srcAvailableAt lastBranchTarget lastBranch continue opcode RANDOMX ISMULH opcode RANDOMX RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif continue opcode RANDOMX opcode RANDOMX RANDOMX RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif continue opcode RANDOMX RANDOMX opcode RANDOMX RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif prefetch count prefetch prefetch count srcAvailableAt lastBranchTarget lastBranch continue opcode RANDOMX opcode RANDOMX RANDOMX RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif continue opcode RANDOMX RANDOMX opcode RANDOMX ISWAP RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif continue opcode RANDOMX ISWAP opcode RANDOMX FSWAP RANDOMX continue opcode RANDOMX FSWAP RANDOMX opcode RANDOMX prefetch count prefetch prefetch count srcAvailableAt lastBranchTarget lastBranch continue opcode RANDOMX opcode RANDOMX continue opcode RANDOMX opcode RANDOMX prefetch count prefetch prefetch count srcAvailableAt lastBranchTarget lastBranch continue opcode RANDOMX opcode RANDOMX FSCAL RANDOMX continue opcode RANDOMX FSCAL RANDOMX opcode RANDOMX prefetch count prefetch prefetch count srcAvailableAt lastBranchTarget lastBranch continue opcode RANDOMX opcode RANDOMX FSQRT continue opcode RANDOMX FSQRT opcode RANDOMX CBRANCH volatile dstAvailableAt dstAvailableAt dstAvailableAt RANDOMX PROGRAM pragma unroll registerLastChanged registerLastChanged registerLastChanged registerLastChanged registerLastChanged registerWasChanged endif RANDOMX PROGRAM registerLastChanged registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif RANDOMX PROGRAM const const availableAt registerLastChanged availableAt registerLastChanged const const availableAt registerWasChanged registerLastChanged availableAt registerLastChanged registerLastChanged xFFul ulong registerWasChanged endif continue opcode RANDOMX CBRANCH opcode RANDOMX CFROUND continue opcode RANDOMX CFROUND opcode RANDOMX ISTORE continue opcode RANDOMX ISTORE pragma unroll prefetch count continue while prefetch count RANDOMX PROGRAM global prefecth vgprs stack global prefetch count prefetch vgprs pragma unroll prefetch vgprs prefecth vgprs stack REGISTERS global prefetched vgprs prefecth vgprs stack prefetch vgprs pragma unroll RANDOMX PROGRAM prefetched vgprs prefetch counter waitcnt value prefetch vgprs available prefetch vgprs global branch target const limit COMPILED PROGRAM sizeof global start pragma unroll RANDOMX PROGRAM const branch target false prefetch index vmcnt prefetch prefetch vgprs available counter const prefecth vgprs stack prefetch vgprs available prefetched vgprs prefetch counter prefetch prefetch index vmcnt counter waitcnt value prefetch const prefetched vgprs prefetched vgprs const prefetched vgprs xFFFF const counter prefetched vgprs prefecth vgprs stack prefetch vgprs available counter waitcnt value const vmcnt counter counter prefetch index vmcnt vmcnt waitcnt value vmcnt vmcnt waitcnt value waitcnt value vmcnt instruction branch target prefetch index vmcnt batch start limit return while return attribute group kernel randomx global ulong entropy global ulong registers global intermediate programs global programs batch global rounding iteration const global index global const global return global global entropy global index ENTROPY sizeof ulong sizeof ulong global intermediate programs global index INTERMEDIATE PROGRAM sizeof global programs global index COMPILED PROGRAM sizeof generate batch iteration rounding global index global ulong registers global index entropy global index ENTROPY sizeof ulong global double global double entropy entropy entropy entropy entropy entropy entropy entropy global entropy CacheLineAlignMask global entropy addressRegisters entropy global addressRegisters addressRegisters global addressRegisters addressRegisters global addressRegisters addressRegisters global addressRegisters global entropy DatasetExtraItems CacheLineSize getFloatMask entropy getFloatMask entropy ifndef define ifdef media pragma OPENCL EXTENSION media enable define xmrig inline xmrig const const offset const width offset width return offset width width return offset endif static const constant FEFEE FAFAEFU xECADAD xEAAFAF CFDFDE FCCCC EBEBCDU CEDEDC FFCFCE ACFCF AEFEFC FBFBEDU xDFBCBC DADAAFU AFFFFE CCDCD FECECC FDCDCA EEEEC DEDEA DBDBADU xEFACAC EAEACFU CDDDDA xDCBDBD ADFDFA xDABFBF define xmrig HEAVY inline Round bittube const local const local rotate rotate rotate rotate return endif Round const local const local const local const local const return Round Tables const local const local const rotate rotate rotate rotate return static const constant uchar static const constant uchar define SubWord AESExpandKey keybuf SubWord keybuf keybuf keybuf keybuf rotate uchar endif ifndef XMRIG KECCAK define XMRIG KECCAK static const constant ulong keccakf static const constant keccakf static const constant keccakf keccakf ulong round ulong pragma unroll round round round pragma unroll rotate pragma unroll keccakf keccakf rotate ulong keccakf pragma unroll ulong pragma unroll bitselect pragma unroll keccakf round keccakf local ulong round ulong pragma unroll round round round rotate rotate rotate rotate rotate pragma unroll keccakf keccakf rotate ulong keccakf pragma unroll ulong bitselect bitselect bitselect bitselect bitselect keccakf round endif inline getIdx return global global offset define inline float float float return inline float float float return inline float float float return inline float float float return inline float float return float inline float float return float inline float float float float float float trunc return inline return inline float float return float inline alignr const const right const return right right right right inline global scratchpad global return global global inline float break float xFEFFFFFF return inline round float float float float float float float float float break float break float float FFFFF inline round compute float float float float float float float float float float float round round round round round round round round FFFFF inline single comupte float float float float float float local float float float float float round compute FFFFF float float return convert inline single comupte const float float local float local float convert float float convert float float convert float float convert float single comupte alignr static const constant static const constant float struct SharedMemChunk float attribute group WORKSIZE kernel global global numThreads const getIdx chunk local global global global MEMORY local struct SharedMemChunk WORKSIZE local struct SharedMemChunk chunk local idxHash global idxHash float float const const const block pragma unroll UNROLL ITERATIONS fence LOCAL FENCE global scratchpad local fence LOCAL FENCE single comupte fence LOCAL FENCE outXor local block block outXor local global scratchpad outXor local outXor float local float block local float block float local float block local float block local float fence LOCAL FENCE local local local local local float block local float block local float block local float block float local local float fence LOCAL FENCE static const constant inline generate local ulong global ulong ulong keccakf attribute group kernel global ulong input global Scratchpad global ulong states Threads const getIdx local ulong State local ulong State State local states Scratchpad global global Scratchpad MEMORY local ifdef VERSION State input local ulong State vload input endif State input State input State input local State FFFFFFU local State global local State local State global State State keccakf State pragma unroll states State attribute group kernel global Scratchpad global ulong states const getIdx local ulong State states Scratchpad global global Scratchpad MEMORY local local State states barrier LOCAL FENCE local MEMORY local generate State global ulong global uchar Scratchpad attribute group kernel global Scratchpad global ulong states global output ulong Target Threads local ExpandedKey const getIdx local local const rotate rotate rotate barrier LOCAL FENCE local local states Scratchpad MEMORY defined Tahiti defined Pitcairn ulong ExpandedKey states vload local global states vload local global states ExpandedKey vload global states endif AESExpandKey ExpandedKey barrier LOCAL FENCE local store local local local local local local store local local local local local store pragma unroll local MEMORY MEMORY Scratchpad barrier LOCAL FENCE pragma unroll Round ExpandedKey store Scratchpad barrier LOCAL FENCE pragma unroll Round ExpandedKey store barrier LOCAL FENCE pragma unroll pragma unroll Round ExpandedKey barrier LOCAL FENCE store barrier LOCAL FENCE local ulong State vstore ulong local states barrier GLOBAL FENCE local local ulong State State local State states keccakf State State Target ulong outIdx atomic output outIdx output outIdx global fence GLOBAL FENCE ifdef VERSION define SCRATCHPAD CHUNK local local uchar scratchpad STRIDED INDEX define SCRATCHPAD CHUNK global global uchar Scratchpad STRIDED INDEX define SCRATCHPAD CHUNK global global uchar Scratchpad Threads STRIDED INDEX define SCRATCHPAD CHUNK global global uchar Scratchpad CHUNK CHUNK WORKSIZE CHUNK endif endif define define CHUNK CHUNK EXPONENT ifndef define ifdef media pragma OPENCL EXTENSION media enable define xmrig inline xmrig const const offset const width offset width return offset width width return offset endif static const constant FEFEE FAFAEFU xECADAD xEAAFAF CFDFDE FCCCC EBEBCDU CEDEDC FFCFCE ACFCF AEFEFC FBFBEDU xDFBCBC DADAAFU AFFFFE CCDCD FECECC FDCDCA EEEEC DEDEA DBDBADU xEFACAC EAEACFU CDDDDA xDCBDBD ADFDFA xDABFBF define xmrig HEAVY inline Round bittube const local const local rotate rotate rotate rotate return endif Round const local const local const local const local const return Round Tables const local const local const rotate rotate rotate rotate return static const constant uchar static const constant uchar define SubWord AESExpandKey keybuf SubWord keybuf keybuf keybuf keybuf rotate uchar endif attribute group WORKSIZE kernel KERNEL global ulong input global Scratchpad global ulong states Threads ulong local const ulong global global offset local WORKSIZE const rotate rotate rotate barrier LOCAL FENCE states defined VERSION Scratchpad ITERATIONS STRIDED INDEX Scratchpad MEMORY STRIDED INDEX Scratchpad STRIDED INDEX Scratchpad group MEMORY WORKSIZE CHUNK local endif endif states states states states states states states states states states states states ulong ulong ulong ulong fence LOCAL FENCE ifdef VERSION local scratchpad WORKSIZE local scratchpad scratchpad local endif states states states states pragma unroll UNROLL ITERATIONS ifdef VERSION scratchpad global global uchar Scratchpad endif SCRATCHPAD CHUNK Round const ulong chunk ulong SCRATCHPAD CHUNK const ulong chunk ulong SCRATCHPAD CHUNK const ulong chunk ulong SCRATCHPAD CHUNK chunk chunk chunk SCRATCHPAD CHUNK chunk SCRATCHPAD CHUNK chunk SCRATCHPAD CHUNK chunk ulong SCRATCHPAD CHUNK ifdef VERSION global global uchar Scratchpad scratchpad ulong ulong scratchpad global global uchar Scratchpad ulong endif SCRATCHPAD CHUNK const const const const const XMRIG INCLUDE RANDOM const const ulong ulong ulong ulong ulong const ulong chunk ulong SCRATCHPAD CHUNK const ulong chunk ulong SCRATCHPAD CHUNK const ulong chunk ulong SCRATCHPAD CHUNK chunk chunk chunk SCRATCHPAD CHUNK chunk SCRATCHPAD CHUNK chunk SCRATCHPAD CHUNK chunk ulong ulong ulong SCRATCHPAD CHUNK ifdef VERSION global global uchar Scratchpad scratchpad endif ulong fence GLOBAL FENCE shstrtab strtab symtab comment rodata OpenCL OpenCL randomx kernel metadata version string BUILD NUMBER OpenCL dummy kernel generic global offset global offset global offset printf buffer vqueue pointer aqlwrap pointer dataset uchar scratchpad uchar registers ulong rounding modes programs batch parameters shstrtab strtab hsatext symtab OpenCL randomx kernel section hsatext AMDGPU Runtime Finalizer convention shstrtab strtab symtab comment rodata OpenCL OpenCL randomx kernel metadata version string BUILD NUMBER OpenCL dummy kernel global offset global offset global offset printf buffer vqueue pointer aqlwrap pointer dataset uchar scratchpad uchar registers ulong rounding modes programs batch parameters shstrtab strtab hsatext symtab OpenCL randomx kernel section hsatext AMDGPU Runtime Finalizer convention AVout range AVbad function AVregex error AVstl critical section interface details Concurrency AVstl critical section vista details Concurrency AVstl critical section details Concurrency AVstl critical section concrt details Concurrency Locimp locale AVstl condition variable interface details Concurrency AVstl condition variable vista details Concurrency AVstl condition variable details Concurrency AVstl condition variable concrt details Concurrency AVtype AVimproper Concurrency AVWaitBlock details Concurrency AVSingleWaitBlock details Concurrency AVMultiWaitBlock details Concurrency AVWaitAllBlock details Concurrency AVWaitAnyBlock details Concurrency details Concurrency MallocaArrayHolder PEAVContext Concurrency details Concurrency AVscheduler resource allocation error Concurrency AVscheduler worker creation error Concurrency AVunsupported Concurrency AVimproper scheduler attach Concurrency AVimproper scheduler reference Concurrency AVcontext unblock unbalanced Concurrency AVcontext unblock Concurrency AVmissing Concurrency AVinvalid scheduler policy Concurrency AVinvalid scheduler policy value Concurrency AVinvalid scheduler policy thread specification Concurrency AVnested scheduler missing detach Concurrency AVinvalid oversubscribe operation Concurrency AVinvalid operation Concurrency Concurrency AUITopologyNode Concurrency AUTopologyObject GlobalCore details Concurrency AUTopologyObject GlobalNode details Concurrency AVResourceManager details Concurrency AUIResourceManager Concurrency AVScheduleGroupBase details Concurrency AVScheduleGroup Concurrency details Concurrency AVFairScheduleGroup details Concurrency Chore details Concurrency AVScheduler Concurrency AVRealizedChore details Concurrency details Concurrency details Concurrency details Concurrency AVSchedulerBase details Concurrency AVContext Concurrency AVContextBase details Concurrency Interruption exception details Concurrency RefCounter details Concurrency details Concurrency TaskProc details Concurrency MallocaArrayHolder PEAVevent Concurrency details Concurrency AVExecutionResource details Concurrency Concurrency AVSchedulerProxy details Concurrency AUISchedulerProxy Concurrency AVFreeThreadProxy details Concurrency AVThreadProxy details Concurrency AUIThreadProxy Concurrency details Concurrency details Concurrency ThreadProxyFactory VFreeThreadProxy details Concurrency details Concurrency AVVirtualProcessor details Concurrency details Concurrency AUIExecutionContext Concurrency details Concurrency details Concurrency AVThreadScheduler details Concurrency AUIScheduler Concurrency details Concurrency Concurrency details Concurrency details Concurrency object AVbad typeid AVbad exception count ExceptionPtr normal ExceptionPtr static alloc ExceptionPtr static exception AVbad alloc AVJsonChain xmrig AVIJsonReader xmrig AVexception AVbad array length AVILogBackend xmrig AVConsoleLog xmrig AVFileLog xmrig AVWatcher xmrig AVITimerListener xmrig AVIConfigTransform xmrig AVBaseTransform xmrig AVIApiListener xmrig AVConfigTransform xmrig AVBase xmrig AVIWatcherListener xmrig AVJsonReader xmrig AVIClient xmrig AVBaseClient xmrig AVIDnsListener xmrig AVClient xmrig AVILineListener xmrig AVIStrategy xmrig AVFailoverStrategy xmrig AVIClientListener xmrig xmrig AVApi xmrig AVIBaseListener xmrig AVHttpd xmrig AVIHttpListener xmrig AVIApiRequest xmrig AVApiRequest xmrig AVHttpApiRequest xmrig basic stringstream traits allocator AVfailure AVruntime error AVHttpClient xmrig basic stringbuf traits allocator AVios AVerror category ctype AVsystem error basic iostream traits Facet Generic error category delete basic streambuf traits Iostream error category AVbad AUctype basic istream traits AVHttpContext xmrig basic traits AVfacet locale basic ostream traits System error AVHttpData xmrig numpunct ostreambuf iterator traits AVHttpServer xmrig xmrig AVDaemonClient xmrig XAEBV GenericValue rapidjson MemoryPoolAllocator VCrtAllocator rapidjson rapidjson lambda alloc lambda XAEBV GenericValue rapidjson MemoryPoolAllocator VCrtAllocator rapidjson rapidjson AVSelfSelectClient xmrig AVWorker xmrig AVIWorker xmrig AVIBackend xmrig AVCpuBackend xmrig CpuWorker xmrig CpuWorker xmrig CpuWorker xmrig CpuWorker xmrig CpuWorker xmrig AVOclKernel xmrig Kernel xmrig AVCnBranchKernel xmrig AVOclBackend xmrig basic filebuf traits codecvt Mbstatet basic ifstream traits AVcodecvt basic ofstream traits basic ostringstream traits allocator AVOclWorker xmrig AVIOclRunner xmrig AVOclBaseRunner xmrig AVlength error AVlogic error Kernel xmrig Kernel xmrig AVOclCnRunner xmrig collate group assert class regex traits capture endif AVOclRxBaseRunner xmrig AVHashAesKernel xmrig AVBlake bInitialHashKernel xmrig AVFindSharesKernel xmrig AVBlake xmrig AVFillAesKernel xmrig AVRxJitKernel xmrig AVRxRunKernel xmrig AVOclRxJitRunner xmrig AVInitVmKernel xmrig AVOclRxVmRunner xmrig AVExecuteVmKernel xmrig AVOclRyoRunner xmrig RyoKernel xmrig RyoKernel xmrig RyoKernel xmrig AVCudaBackend xmrig AVCudaWorker xmrig AVICudaRunner xmrig AVCudaBaseRunner xmrig AVCudaCnRunner xmrig AVCudaRxRunner xmrig AVIConsoleListener xmrig AVISignalListener xmrig AVApp xmrig AVConfig xmrig AVBaseConfig xmrig AVIConfig xmrig AVController xmrig AVIRxListener xmrig AVMiner xmrig AVNetwork xmrig AVIStrategyListener xmrig xmrig AVDonateStrategy xmrig AVBasicCpuInfo xmrig AVHwlocCpuInfo xmrig AVICpuInfo xmrig AVIMemoryPool xmrig AVMemoryPool xmrig AVNUMAMemoryPool xmrig InterpretedLightVm randomx VmBase randomx AVBytecodeMachine randomx CompiledLightVm randomx CompiledVm randomx VmBase randomx InterpretedVm randomx InterpretedLightVm randomx InterpretedVm randomx AVrandomx CompiledVm randomx CompiledLightVm randomx AVinvalid argument AVIRxStorage xmrig AVRxBasicStorage xmrig AVRxNUMAStorage xmrig fffffff fffffff SUWVATAUAVAWHP HIxfD fffffff fffffff fffffff SUWVATAUAVAWH fffffff fffffff fffffff ffffff fffffff fffffff UVWATAUAVAWHP nHIXI fffffff fffffff fffffff fffff AHHfH WATAUAVAWH nHIXI IHIyhA fffffff WATAUAVAWH nHIXI IHIyhA fffffff fffff HSUVWATAUAVAWH nIAPI fffffff fffffff fffffff fffffff fffffff UVWATAUAVAWHP nHIXI fffffff fffffff fffffff fffff AHHfH HSUVWATAUAVAWH nIAPI fffffff fffffff ARASATAUAVAWWH nHBPH rdzhjl AZfffffff fffffff UVWATAUAVAWH nIHXI nHJXH fffffff pIHHL fffffff fffffff SUVWATAUAVAWH YdqhQl JHIBPfH nIJhE PtJIO saODx xPnKQ TCdgE kusCC oHkYT mZZXK LunxW wyqkk IENDB qqqLvww vwwqqqL VWWVWWVWWVWWVWW puvvVWWVWWVWW gaVWWVWWkkk VWWVWWVWWVWWVWWVWW aaVWWVWWVWWVWWVWW VWWVWWVWWVWW SSSSSVWWVWW aaaSSSSSSSSSC aaVWW VWWVWW version encoding standalone assembly xmlns schemas microsoft manifestVersion trustInfo xmlns schemas microsoft security requestedPrivileges level asInvoker uiAccess false requestedPrivileges security trustInfo assembly hpxhpx hpxHPX HPXpx hpHpx,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj cOtTG oahXM BwOFS AXyUP Elaps iPbStk tfbnnzQ gLBIF CuBxz PSFcsF OLLMb Inxqr DAghI umGLq JcRuK iSoUa wXQocV iQUZpgf ENOAL DJEVD dLLDk xgues DhIcQ eSrpy RsVDU xPEFo vTBcH tEicN ScgRT AUENP TtnUcC hyprI fWEfiNqj SSPYnY BCnDnQa jnAtL trLVJ arEJjp ugXPaMy btoljh xpHgMDN rQOPw AXOwXdK SNxgb JPVWq GnJqAT KTtNG nXNLFH XrGaHYeA RvuRO HWBie QshrR FmJJK TVttau KSUoWEyAD rUPhp XnyFQsY kJifX wkuwL qoCYu lcnHd cHcgWhZhk BbkQYk plbiqTt SGPlX KBCHUjP PJNFV pGUywG XuPMq EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl zIxzA rujXD YTlGA CEgzdd kjDlk XrSUu QuTSUz lNDMH gJVMM TEivaVB znmAoXbB tvcic dWaJG miPSu DeMCF hRabs jqQLan XdlNt CDIysY lLMSJ BQSMc TbXCwX vYPAjH sfollK SzALS ZBPja fvigBSt wRvZDLnX YFOhI rmdtp yNepH KsHkBi qAIJm YPUGN OJScb ielsx LlUUJDvc IeTtTo UQSVWf yUwPA GBnnw DZbhj vvERi iAQqy OSvSYRY TIQRa GyrzfI LrLUHN fHgkp SVpYPWy xXQqPpD WwHXt fdLJl adLfub GEbji bpexW eCaBA aPHIV boyyLk SplXF edDMFevB SSsXy ZFvzXc mvBiDQ eAbLmM fflfs lpRwo NOAykSVN eWpEG PIPZOTQH YcbjSy AKOMA TTSOV NvhzpfoX YCMfH ujlpZ ORUra WxyMl Wesgm EwrgC AMXRE PEZozV oJXwvn aIMHV ZeLMk zkZgv lqokn FiwQS ceqEA BoWMxiGL MBkTg lwwww iBYDAx FhBIYD DKQxtCZ UaXif TxKWn uQvBZ hMMLyOp iWkRDk yOWRKwWjTJF IKcCB iBvyMCq kUDFpUV xGPJCTsA IMnwo tqiHyw TBoTH ucpCEmw JgYzAC bqoOG jWqUSY orVdhVY BJXKHe wmYcT UyEMh bNebq CHBCO YJLBV IYluP RXPJv MOnWI YZKvWow ZAMOZ TUHyF qfqzy Lwsrw kfpSUVW dWaJG vjHJG CgZKY bGMKd kuOpBb WoKNWNx thpmfV mpJkI eGLdyf noMAJ kWzmLt IyTqhCMxD hULaHJmX fXvJN aUPsvU TSUVWL VWRPN VWRPq dEaUD KUaXI qdWRn FoNxc osWIq YmFOPJ Xpdge FajvOe kIIWh kSVWhI NcyKV Angss BsWOiB vWksI XEKsJ sSVWh NcKKV TPmcV klqCBg YciPt EmqmL ZCbTV kMuPKkW venbxE fcaLP XqmBZ DxkAK GJALM hNPyV CFKzvZP nNGSgZ pMEbt VzIyp SUVWT IdahX NVirh UKJro eDdBnI bmLBo zQPkHe gldxh aFcEPE wzRys CBhCD uJXXl NQapp qqOpfmB ZooCc QrTwb qbOPo wxfGU RHitf nnuzq avlCrL eVohJz MdHcg opwuytH aSCnn dSWzG nAzRs NbDRU bccigd QUpNbJmk lgzOxMO JFfUIu ZYvAR abMUR GGTZJ PokQXO StSyYN swrAK GfXWz eWUlFdd AJWnUL KGHWe AcjBI epTuN iADfU pTjHVxe VrjaE pySbNsd cycVm ennoEo mSjznb fVlvf rGHth jfauL NqOQR QFBcF AkADKG VLTNh Qkzvm UTcFjN vpJej wICES JqiYT WckLpW xtrtC atOhH AtJGL uPSaM LNuQU ZHJUK xIQBL uFQcj bemaGh JWkDQ VqAaI oOxbi AXXVR gkVLT TKvBv NmIno vuopT LuPZH AnwyR gqZXd TQwwr kdxEtA xvhaZ GOkkz IDtNq fsBQrV zGRMz VCPrE rLxfb eQUPrT NxJTqhd VPjLh vbHrq htFvq kHhny XcUcg qxylu xEMeVnTS vkWpmm ddrRl ViGosa XdCpJ jdISUh fhWpaB geiVJq QFtlYyK sPqgz ibmORc pXYtSG IWUxVW XNrdt AUpiqH rRgPD IGTHQkAS FsZxZZq BDJFg nEYRs AznVuQp proWkwaN UpiVZOd dWdXC guCQVk JyBJOuY BqxtXiC hmiFT roZtTb mVvaxTSlum edhvt WOnEUV kFIXl tvhHI SbScr cijlx bCwTsb RWFRDy uSUVhI EDjSC wAEuT PBCci FmkSGd NIDpJ xmKpSL IazUpQMf uZZlw sRWMZ yyhrt NBDdeT xOpAcpYaj jeSLze sXPVjt tLsdB SViZou WHDQj XLbLt LSPEjg ZXPlf NRHWg MKMUPD SUVWC ICSQV erYFq dLvVwO ectcd AtBLr maPtJ SUVWh KxdptW QSUVW OjnAN aNYVN hRyPbP FsTsA MOnul xESki GXGTt XFWIONmGFROEakbK ymvpo uAqXnS HcgUcle DcJkz YiLvv MYPEl FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS RkyZLD rOuqN QdkwK kIFxm TVLDh HaeKgt gevHLv pYIKp SHIHL fdbKP YnHKU NhTjP uvFdq FUcgY YpXma gAoOCd tYDwf knpZJM qEAJd XFvHh dHgFeqb ldBIs BxYYP SumFP uyjHq Fpsya CrWgMO mvbsUf BJrjax EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE IjXzD xYYEe iTjXS ZpAMgN XcBxl ODDMIxi NcFTKV MEEEEE MEEEEMe HvIuM TSVWu EPMMtM NchKV yqsMz fQzqu BZgyO MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH LmUjh SVWeMe TFUjh EPMEEEE MTVMMHVE vNGGC MEEEEE bbXDp aroYyMf BHesTwC EYSLT ceNhJ SLloN bCmts rvGMgp AKVPS ixNfJ wrQSFL obsNH MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP IlQKHJ cMnEl HbNFCnUjh SVWeMEEMM RMEEM ZdtYvQUZ fbHetA ZSVkklBp HXAhrR KRAeiS BaNlU EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM qzYaY NcaKV eWKjMN XURCD gDdphz MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE GUDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS vPQbkvd eWUOo jPVNv MYUWA VcyKv lGWbtI ZaNKMgI CeUfZ TxPAJ nPZDUy pCfhuLi AGcQN VTnyQcMOl jswHx dJWyp lRLyd IIstn KvUDE pUPRK YuSGMre sigCt MqtRd KrpIq YCeuMJ eBgKN jGleP SFvvyEbs zSzjsK mMyUtdKz yDYhy IXjCN geHBQAY VxAGY AmaAG vgwugp YjHRv dwolY rZLob bYyFj utSTy VCuGg wUraNE MyuSO VzqEt aHCpb RTEKtG xmnTqy FcPmoxy VoYSl hzVlqxi rroKko KYoxv BtaFuqm jxhUs JqMSw TebPy JaTVQ DNxvw jsAdh ogszb kHsByb YRtrtk rhsVq JboPF CIkkXa LZrFUI xEuZF akpGy ThkFuWX EAlfh FMBqV fvBGlu dLDoq sDYgScgC ECapH hdhVJF CJicZ EuLbdx VmIwRE jpWZC OKJxDTQ tnAuo UzmQz qUYVZq ohUzl XWsbO gLlIc BYupCFa tSvWA EboIG Xocnb APLor XMvaUm lGmaO OpIQAKtg fZhYl oYIQZ fvicW Lrqam IXMMC aRvrigC yRkKj yypIR zMpQE OROzZ gmqrC llTsl vBWLup tSvWA mpgCqoOY dgbIpsA vDZNrN IJhPJ wjwrWE WOvFmfcCw EdEFMZ eekRn aZLkq SAbdp oJFEN Gdgoh NZljE UghwH SUVWj BABABA lRDVX kPyaE ZruxyC bWoKUV zQrhdg QvyWo UJdPn PQYYt ikTfW uYSWu cDYCn NXvUGL ewnQU EntelE ineIEE GenuE VHGMr PeuEEEEd mGFGS ImGFxS KUQVu xGCJdj QPEPh QPEPh ItnGZR nIsUGf DaMFtO nWQpA pCtfG xExcU PYYug PYYug YYEPV UQQEP ZLcqN FzZVSOs gNYQQ wAfLE NUQVu hsDvVF VVQYn kSHxY fXUQSVu GqMuC cLKkmjd fiJbU HuYUV EPuuu KujGJMV SVWUu tfVUk tLxXj USVWUj UQPXY vwIqK iCFVc VVNodq CuiYM csmuP wbFRw LdNGY tPtLw PQYYPV XRaeEdu fOoBOa Ujhxj URPQQh USVWj PPPPPy MeEPj KawnW YWBGZR AlEVem VNpGaP xbAFmAhvj xezdY bOlYd EQPjjM VPuus UQQVu lNhaSbp madlKp lDrLgR rUEHrpR NEliC GDCJx QIYTWabd KQjUrZ wOnnrdX PjXUk YiSVB USVWN vSZKP UQSVMWj euyYE HLKCEC ZFQibz euyYEM HLKCECKCB HeQbngO GIJwzVW BmkXv ItOLt JSvnQh OpqtNAf jAZjX UQQVWjgYjGN PQPPESPW jsXfF PlpUM PUQQVW NCAGK RwOmKceU MSlYJd xnXOXi OjEXZz PscUSV wSKLV pCzpX RPQQE VQuuH WvgVr uEPEPWSY YPVWSu kPVWSu nvYhP BQwCD VgFdL ZmEzE QKtLs UROPko LKyMI qsZkfD UhTFR IvPeS Sjdlw OWmOg jBUKW jAlFm XogXdg LebqVx WVZEZo GFSEdB OITPR pDVVxW dkecRZ XJSYB WuurB uPuSW EEwPr UEHEu nOgCXT ZUmgW Ergyh DHbdt XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu NCAGK ENlDt FxFav TueSicH jqzsh IaQTQs RifwY uBjAYjZ jAZjZ UQQVWO SVWtdAu dpLGQ BlfsY zXFqZzbQ uoRDXO UepCHJ lNgzS Xhekyp CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp oxXKM zUcsm mczuy HlYsLK pCCsU DAKNT oyirO zEbKP MEEEPu WaJeH ahOXij BeuEMVLK AbuAb SGTDECHoj jyqjRx eBZsE yXrxq XNjacE SOGYu PPPPPt PPPPP HLMMQP YRRDk QFwZkC YYtVWh EWWPb uCYYt uVWTb WWWWWS QQnVH YtVWj PPPPPPPPU lcfBvZW VSYYt cZzylp mlycz XqIIw EAEfEEj EPQEPEj AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS uhTpXU PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP WoXYG TRnNbt cMDuB XuJIC YdTaK UuSZaXOUQQfE fEEPj dJmkDA qQLaUQH EGWVj qapIG prPox XoRYH EHngp eikPx iUHRAU MSVWu MQWPVk brmJt MEEEPu VVplP PPPPPWSu QQQPu VWuSu PPVWPu kUWVSM lMicrF vkRfP xheNn phGwz iNGFL nNwcKU WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu VeEGb bLQkM kbepc mSNXX PdQbn cEJHENlT BLWbZ sZvfx QPLYYMt kiCsu aPvffxLn LnQKrP zxPocC LUqej uvRgg HMuBz eyjCa KgyGF yFwxJ vacCT oWcMv wIlTKt Mohwn sxVHrmM WXZwf BvfmMY PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj MGUJW Jfepd xKaFoqy kaxQvOhf uKGRt iWJNZ tBbiq JJIoux cqktcG PollOjf WxxVL Kdxfv WvvVL WHtAtVL CbHUQM qucJO EceYq ERoGW JWzOnW LIMmFF RKAoP lIYUp LJzXOtA UakIC cpppz JTvvX obGWd YHLUwX jsCSDl musXSk iKoVw qkqEi ehUVu QQQPu MpCls MEEEPu EEPVYY TGENU fDWDVj DLoTz onASAj rOyancm RrEVn EPeuEEEEd csmuu UEcsmE PEEhg lcfBvZW gMXJEyTr OXyxU VWlCv NccOMqCkG UQQSV LoyOMQ oobAWP cSHbgt cSGVhmbG zMrTRDH eAChy nRZOc dsapR kTEwWw saOmI aogXR rKrAR LbHRm tpoLg sqzGO aFzVrqw bGwcT FDgUVCWe QLzHM qYaDIu vMYMp PiYjol PAKgH rYDZNY OymwLPJwy ADClNTX wWwDg dCXOO ftfKi Ipkllb GIZiY yZKhP kOOmK KMzlx VnjvV hEMGU RrRpc HexIut HbxYPH tbjGpQ cQtnC epwQI ueIaM iNQaq PcZzD qRwGM ySkxW LYbIJ ExdhtGg YvZxn jyqZS qmIaN VHMCs xDkWf hxzwP ZSghDR juxCWl SJQiGWz HBuasa qeQXb lWxTbZ HmcQvS VTczK uhGmq lqkVNZ AGHmk mfpGjI YkrAL TxnVV arEmtf LKbeCo BenbhE zjJFH ZerJv gieIu bQWxd gEVHxhQ Yfroz PYiYOe oGtzH MgSGCoh KnToj hJBPP JLasF PFrpbJ LgrtI KwRSvZwW FGxed zzAzO Zfkem FHFSM fWgtrJs RObEuZij hKwwp hjJxv XtKEtt esQET itvTH bnZMq BamMdxs iWftyes jxEPD KvsTxt wKJjm rSgUOp VohCD GJjOb TlHBjM mhMXMPV MSMJN LdwMp QuurT dXqXyt zSZyl YOwTvT nTLYzz OflFKm kbpSrs xGwYD kLMBRe KbPKDz WxtCYio AvdJC aWabB BMRVz tzRKkbos PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI TGMVll vsFoK uHEPu uEHPo DYPEYPhH NcOKV JZKEYt rUQMj NcMPDZO bPDOt pAqEmYmh qcrQav ncjHG gpUWDRo MuUMEIEPML UMEMd nluqK pjXBSp DfZACHYv WCqaj NHYcI EEEMEME HnEMI MEEEE ntJETE EPEPM oTRqXG zzKpf ZoXEctSFBMg UQQMEM bprWJL IfSQi XYjQO QGiwL ICKNnjE LPLvh nIhJRt buAYDu LZGGc sRZSgFLIOb tyfoVZ mzDVZ yDYNUD vcxRRqRZ HMvld vaNZko KRNXy gSThY dZRbu MuWxa mTofnT WGmSY MpIPr FfGuZmY iZpxKWZ SJIjG iBPLD xaElP ZkPVJ Stdwj YrOJCY Guhte Slfti jkZYUa nCdCEoK GXoBS fbtUD rwWjoRL EMMUREPMMM EEMUQ rUQMEH MMEUE dWaJG rncNFUQMM EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU ZqxQBe qQLaX aWgOb TWoWSI JRpMW BgkcL nXISi MQMUU bbxAU UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd NChcq OUQME rULMEH MUUEEMM UEEMMU GIwGDk mqxCW ehqXP GafDwO ZNOep YNvpUys eZWUj iyOHRr uKlOV YjpaG TMZUR gbSVm XlQAIj czKnx locale TkHSKR yWkzwo Liostream byfios badbit failbit FTkHSK ftoMq oKNtV QrhIg WVMGf NUOxE mvdWR oBPwaRk fZNOs IEWus HViDC Yqjih mlWdL CVuoGsVaQz UgkWI ZGeLg CYRuzR alaSnW MLJwU array length unknown error address family supported already connected argument argument domain descriptor message Bconnection already progress device resource directory empty large JMfunction supported unreachable JMillegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device process Wntob supported JMEdLe zoperation supported Wowner JMprotocol error state recoverable wtext files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer ixTou InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx UQtJG ufxwLn FiuJT ZPXdWnAqw wbQbr Smode IKykSd zQDrJ gGtXb cdecl stdcall clrcall restrict HpIwUJM operator vftable typeof local static guard string vzYXa default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx UbERO CEOmIY EqhCr floor wldexp hypot frexp JMnbE hOYsinh jJBGR xKkvd eWgjr JyVIQ fQbgF yWLRo pRHdVU nVpCw MqVay Monday Tuesday January March April EDecember UNjJGR pFrTA YUHjJ KCkdN qRCqN GUyyV KCkda EnumSystemLocalesEx LCIDToLocaleName mUjJEGER OAYQa TnWNu Hrpnz ZyyBJ BtSSfIj HcbVmgzE SplQsP sueKPgrRJ snCcU LtmYE lzraQg rOfxyd hoZprF mPLaJJu UlcHv CdDzZF ZOtRz mjpjiz JEaFS MoByl eYaPZf wzfsNY Gaukb swmZU NAOIy zGntH MaQUN HnHHC ContextStackSize ContextPriority SchedulingProtocol UpFzA ZfUUU gPTNui vvrkoJccpu usage usage ZzrAUI wFNnrM wuVDwh nicehash exunq wTHfR adEFF ViHYm WRKki Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ hfLsD MouQH aagAA JLXCM mNlVez AeJvLkY ilDKg OyBqFK RWqGu wzhFe xNkLBf xSjSY lXTbc VdNzn nhNvKN STTSodo ABCDEF WoKNt aJGZR YfAJPQ lROUL bRSrQ VYvxkog ggIfnfv iehAI QjGgNL eLwSN eXWTzw MQUwo lwdkC Tptry bQZNO WGzZkI dYKeK OcJJG ZOWHR rgLLCMw PBPTj btsVjKu InJAInG vyLKm LvNys FfEJr LyKNFB XdWHbyqw bHMfl aJGZR TqhCr DLcbAYMy aJGZR LZPOJsyw TqhCr iCTqhC klKjS aJGZR aJGZR rAdYlRD TqhCarx GKWKq EKTrG gVGiZ PeazC yOWHR zLGZX TmjIA dXtgI SxvAD kKIAbM ADUWBx rMDSPv myaRQ hIIoY jNctOw EMhgf EjgPE YzLmcM pXpSXXD bGqYaCCIN JMTzKFt PtvEf JMhKFt dnBYlR iCTqhC DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven RiseRiseRise Geode Geode OPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION wPentium Pentium nPentium Pentium Mobile Mobile Celeron OPentium IRWIN oJMWESTMERE PENTIUM MOBILE MOBILE WOLFDALE MEROM JMDUAL wMORE QUADCORE PINEVIEW CEDARVIEW wCopyright Plauger licensed Dinkumware RIGHTS RESERVED ApkVkSl TqhCr aJGZR TqhCr DeBvf TqhCr Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN PuwEAI AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE wEALREADY EBADF ECANCELED ZECONNABORTED EDESTADDRREQ EEXIST EINVAL wPEMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE woPbCENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY ENOTSUP EPERM EPIPE HlESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK EREMOTEIO Lzpermission denied yhzKkaddress family supported temporary failure permanent failure family supported oTDyb aJGresolved protocol unknown service available socket connection already progress operation canceled lvysmeI connection refused connection reset destination address required Uhost unreachable interrupted system invalid argument error socket already connected message Ysnetwork unreachable buffer space available device enough memory machine network space device socket connected directory directory empty protocol error Eresult large system process cross device permitted unknown error links JMasync event wpoll signal unknown error malloc malloc malloc malloc malloc PQueueUserWorkItem malloc CreateEvent ReleaseSemaphore CreateEvent beCreateEvent CreateEvent jYuJGRX iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress OMgsw OMgswkernel GetModuleHandleA CreateSymbolicLinkW CancelSynchronousIo powrprof socket closesocket Missing after object member Missing object member escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected nLSVz UqtYh Syntax error value object array expected DugtRu wYBUm HContent Length false SnZoi SNhyG LtYnh KklrQp wTswWgb AYGpg iTChM xRPGvC ZADYsL yWNLS hCAsxyH FFbOw qcTOH XaRqd lxqnC nWdmn IeXjR LLrtVNE tRoYswW qsjAdF RYNKkyXMs aiMtl nFHjhxt udLYlRK JqnYX QHTkh lgPBX pQESh ANdpVYMOI fafyxijfhkdanfrzz aJGZR TqhCr DvSfY WoKNt epQENV ZPzvdWo QZNOv dYKef oZprF eakzC yOWHR DZNDL FcsEzr FsTMaR lCdDs Hyoua dLBBB CVuoGzVl VgmoV xjaIwI xGsAG fmqya pXMtb laboyH PMjhb WmDfvn cBquE CrXpnAB aJGZR TqhCr DvSfY WoKNt epQENV ZPzvdWo QZNOv dYKef oZprF eakzC yOWHR DZNDL FcsEzr FsTMaR lCdDs Hyoua dLBBB CVuoGzVl VgmoV xjaIwI xGsAG fmqya pXMtb laboyH PMjhb WmDfvn cBquE CrXpnAB aJGZR TqhCr DvSfY WoKNt epQENV ZPzvdWo QZNOv dYKef oZprF eakzC yOWHR DZNDL FcsEzr FsTMaR lCdDs Hyoua dLBBB CVuoGzVl VgmoV xjaIwI xGsAG fmqya pXMtb laboyH PMjhb WmDfvn cBquE CrXpnAB aJGZR TqhCr DvSfY WoKNt epQENV ZPzvdWo QZNOv dYKef oZprF eakzC yOWHR DZNDL FcsEzr FsTMaR lCdDs Hyoua dLBBB CVuoGzVl VgmoV xjaIwI xGsAG fmqya pXMtb laboyH PMjhb WmDfvn cBquE CrXpnAB aJGZR TqhCr DvSfY WoKNt epQENV ZPzvdWo QZNOv dYKef oZprF eakzC yOWHR DZNDL FcsEzr FsTMaR lCdDs Hyoua dLBBB CVuoGzVl VgmoV xjaIwI xGsAG fmqya pXMtb laboyH PMjhb WmDfvn cBquE CrXpnAB aJGZR TqhCr DvSfY WoKNt epQENV ZPzvdWo QZNOv dYKef oZprF eakzC yOWHR DZNDL FcsEzr FsTMaR lCdDs Hyoua dLBBB CVuoGzVl VgmoV xjaIwI xGsAG fmqya aJGZR TqhCar XvdWo QZNOv bZhebO KuYgd GyOJPF jVfCf qIcuA nTFRKf dqCJII ZGUnV HrWfd JTwVC zPHSycj YEhiW NvXVp axPhX wlHfH WoKNt ZNOhv dYKef PeazC yOWHR DZNDL FcsEzr FsTMaR ppNTz OFcgwaW vfvbTi JLnUw ulqNE rdQBe dxcxA,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj yAaDIg hiHBV xfNXOO iaNApf XwUtv WGNhB dxfMHPhJmu RTDqtS buFCv PAajHE JCekZ hRUCX fhnIS vEPtoW EfHXp VsrWQ kuGlRySnmr SirXI MIIDG ZThPmEJcM SnQtY tWJpqO NGLwr GkDrz WJFiX PDUVy nqplh VBVUX cvzub lMCfSo fMhNOV vKBnB Hlbbs oBTVn xnFJd MVzRs nbQuXs TAHCI OOXPLUKspXJ TXFGV zrgdwL WVekfcr uNWGb wPIfpT jmjFryB cVhIV QdLvRd LcgAlMzMSqD ObDpj VvyHm tEOuh egumtd AZpFL KDJvJRG okJRrSSrHUH Zzkis dgSLp NhDmQOXp qkyeg yrRBA tdJocDaJP jZRCgVo usjoIv IALJZ NKTnE KMAWme LXGjq dOoEI oGsoum mbAlP PuGFmG LANEw LHYlJ ZIxCCCp DBCcN QQffM cHCnv KcRQgz DavGJ EUDhd pREhe EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl IsOnW hFUpE KdvldEGyX DtnnUJ NjBxh Iamqc yeGUsc iYqvY VfenU yLVsI ryCKn kcqlc PkrHT kOnoUI npbbq rKzjqUjh rCdBM ZupLa DiTfVHQ MWHdL DTfiT NNtCTOb HacStf RTLNWC QjBXYE MWHdL ySVWN vqUBJ MWHdL BCgKIAC ErjeNb bGrWx eDvZnK HMgBf RPlJT zMnRH OtROTj jKvjr rNKVv pKGTkH hqxuMnl sVIZU HbXbUTLr ifLdF RBsZz EawwbU awFFdv SGKun kfETT fIZwaKR FwzJh UQSVWf qZPYu LXwep OkFZw SVpYPWy xXQqPpD WwHXt giwWAv zozFHr tmIUX hoqBFx HaSRhM CcfDxs HemkK WgXaTPp QBeuE KgtIqO ZfTirS KstbA mYaMIpL VEAKB tsXMh mFXVV vQnVWgB JfhEh HGvSZ NtBDBNhI GDzrn qRySIwFCM iSkbt KCHWEwN jTyms DTspw KVYsRnyZa yxGum UtGCa Lpkih kshgX YExGJxxz ijJAwX eiNnQL ktqRj sOmSiU LKifNF jJUYTh FaYhd wwFwY fUAqDAi fpjal PicHLr NpexL EKDze WjRwu tTaqv Mmcdk KGKpa skGWm ZUfxZ CMqvm zyoOVRo ideXRA mpWQi WxqXC qAjYK dLUVF xJxoTlI bdspu RXGFV YVoig wfExd ZApLVbG wajwlx qQrjU xEoQf ktScfh CZXDDu KwIfv UgXuth inrrU WNtYY pUZLO dnccC zhbgdL sUhaM HFHeo vCNcr oqYXpf MWHdL uVlsI ZISaj kfrNl oCrYis OjkGh WqVIsa aCuxee TSUVWL VWRPN VWRPq FKNeKZ zGTITK iUoGK vJGVIE QvSVWhI RKSVWh CLAmDUlxd GPYhftMp wqQcC xuKPJT tIZqvdJd kKOzg WZqUO OzPTL HHkjz OhXrt SUVWT stefd lMFhL skdgv gctue YbhcI DJpTs UHDZD jmRyRjcbKl niRIp mXDDu riWjZs GFhizi LYFdWZ gRkUniLIES BPJEr iZXghg HxjXm fRiFRH uPlmziMqb vfDMYI uTmCDk UZTHd TdfESk FaENP mDynB HyXxIA HhjFf gBaAw eHyxxX wzJLhK UnUGBc GAJCT NsssAB CKbpB IwbLpt QnjsX hgROcMJ xCJKWu fZHFS XuFfB ZgSVhWB jqcTP kGgsg oIwhM csIoU CUkbJ Ybvbl fsHorJJ SGpxT Ugxkj jzozF NOzoX WsbgZt WvslP ydtVG DIMQcH coLtg ebaYU xkvPa hoZnAe mHWvw bjqul cCfTX tNzhhKJO QViLuat Xacft PJFdh dAnUzH AOoXp uWSXcZ AjjVFh qmVNmw ddHmm hDYqF Ebcta wQBho kSbwB iDTgX ArRBGg PmJVh oNifg zBoIV kKJjO tHfFB KwlWs GgVgH gDwoso cMcPQbo lWtCU hJWsEb CPRox vGvIl brpeVNZ mmEEg OSUVW HLNmeMS jtSQcis CKTMoU akdyIm VPjLh ksGwR jLEgv SrNxt QNJUB tKowE ctuRCm VmRTnS vENKu mJhWxb gDRMx kIaVW ptoMy lxhHq RbjALTG oCvHCDY QWBsMG MwsJB crfeD Lvcng qmKqc wOYXG IvyTi oQRlWB jMFHN OuWaM RjBvT UGyUuQ lzEfv pCRHuD dGkFIX pIDImHGX qjGqp pSQRIz nNIhl PfWBPnNF TUiFXE TUiFXE fIrlS MWHdLV mBNVT ndFff pYSQTJ tvhHI DGoCVZ JgnHO pllVSP uSUVhI SfBtH PONHq bUTKu SKKXf HEasv eyZjx sIzpP MrshR DvmpF aghskX HuXrKT UYVdC sXPVjt tLsdB SUVWC RjOuh fdztb TWitV CcKgZQ UGWooo VKzaiv SUVWh BhAqEx yDUXO QSUVW NhumaU EehLP wDpFg akwTvE MGpaFe GXGTt IVLJH FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS RdDgSJ bdzil DPuiS FaIKa wpZqK fnFks JVNQq gbiZo wtEPEPw DKxCH elrGa ElamBf GYLce jTtxv RHCMNw AxTXUW Rglhb ifYxEtQ GqKAXA EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE xYYEe PaUjh MEEEEE MEEEEMe sdZDN TSVWu EPMMtM QMHMu rzwvsB BINxx kWKUV rFFIv zFHLeq MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE MEEEEE MWHdL xVfPF tOrLc NFfSO ZVbqk MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP QlyLhr SVWeMEEMM RMEEM arcsx MWHdL FNOdiD PnYSaR VpMDfN NNJMJ iLlsQ XlHuh RRqtE EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM BODCc PrNIKT MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ gWHdL iTNdkRV QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU QvUjh MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE LkZrR dKUDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS LDrzF xVLsd xOxgeH jlRfN NFlSO aCiST aJyjN vQLRq passx mipcfYgc xVrqj EQscf eHPPG Rmonc dYYQk jpIgKJL nfnvZw eglflR yiUMQY uxDkT MpSNJU RxXfvQKp WAdnP xCnaD xSlPZXN muQWao fWghg vwhLc uNUmeY zEcJq sUswJgu pwRgrVOr KmgaO JMsdN ndAWag FTEON shUjU WacjN DiMxdog cwMtA NtBxG REMfCy dnInlp XZYwE OnSZUG gbSUa oFsTNhe EFkYRxD XuWtQA QxmDN GaUXoM hQlmZa EjlMDa CDVINYgUbq BhzCD VCEaA qFDTT LJcMnY BPpei foUOTR JfdvG dKzoK zsVKX yCCsZh JaiYlin kzjZcf Upitia KAPbx ljCVE rBRHR xKwjJ Obiau RXQoBq CWirT cxausf JPXhe GOZZj DjTdDC VfqfXsp WvYMX VSvuQH lcLUDOgO CqnGL JhrgV tipDm Bgukbnk SLJSv rKjWo dvNwv OSrVQz nHgOa kbrEBTP hZUFrB JKbel gUoVlz dHxsO nxpGJ AHwnOr MaclJ KNtSo PyPtfW CMPIL CRQKfrz JhxpN epWpYGCK KMJPY uhOLY TgHYz FVlrZ VfjuVe aKVdy uxbGU ZwKNK OwMFo ePVeI pVuIli HqYlx nZnkP sEpJew jnsLTF rFKzf ytHKIL LHgms oEgMFfemfyw YpHag WcqEk wxCmFs TIPsj QOhhza MtXyi FgDXQ kAFmZX OYtgS SUVWj BABABA niftM gzgGOQ KgiXJC rPUeb fhmnN PQYYt uYSWu LqIqg EntelE ineIEE GenuE ECZEn uZFWfB PeuEEEEd RUQVu QPEPh QPEPh OcGPTa aUjhJ HVghW gdGZQ wavtc AjIpt pfaEU PYYug PYYug YYEPV IUQQEP piPXIP AMPbcJhJ LyHvsM pLYgD Lajld AFZlk GhRbV dJdqxC DUQVu VVQYn UQSVu creuAnw mDkFpX HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY zewUVh QyHNPy nYiZvW CuiYM csmuP MlNnd zVgDCCzr aHKSv sbSeb BdUYX aqZPIx IFumM LdcDGk tPtLw PQYYPV Ujhxj URPQQh USVWj PPPPPy MeEPj WeJiAk JQttsn yYyUO jwSuOXu yrWWxxi NplmbD raBwE rnEaGQ EQPjjM VPuus Erxld auarI UQQVu JJGcj vVbvP CJhsI QllXJ bDzpOo Ihxop USVWN YmRgd oAZez aLufOl cUiaW UQSVMWj jnpyHp wMvOMur lJIbbr opyHp wvOMur lJIbbr rvtHH SqLSj JniLj ItOLt QcQHY hRulMq EOrIa jqcGcP jAZjX IqLFU hUGoquV szSsUQQVWjgYjGN PQPPESPW jsXfF FNUSVv IAlEN jUSVWF efDTfMk aaaUt KqfrgoNh UQQVW RRVSbW YgQftZr chMBju xJryj DQXmL KYkpy dQTwbd bMcyeG bMeoG bKUKN zZTUSV HHpRU RPQQE VQuuH MDhju uEPEPWSY zazNUS YPVWSu kPVWSu VEjcm BnDxPmskIT IIuxE gpEJk eXnjrS iqLgK utRCg LfSnJ zhcPg TAXFc HzMPP bRPpH RQStC hLAWO uURAc iyXmS ruzJS Squjc qzzpiz PUfQf zkxNm eWwIfY CtiMe sfMtB suDsO EOAUs MEQdp xUQQE uPuSW EEwPr UEHEu Jdywz cgEWQm QFetm XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu fdDnd ZxPaAh uBjAYjZ jAZjZ UQQVWO SVWtdAu oSTDUVu VFqJy RuIKAs PLalQ bollH vlTauxw hVlZA IjEtr jFGjDB AtvYuzNmzsIISc CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp zxUsVlS PPwGe fbRPa MEEEPu arxld QgNrV SOGYu PPPPPt PPPPP svUkE HLMMQP FdHGHB YYtVWh EWWPb uCYYt uVWTb WWWWWS FyNPok KjlMB YtVWj PPPPPPPPU VSYYt ACjoJ OCjoJ osCJV VzWBct EAEfEEj EPQEPEj LUWhrLR AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW dyIwevXI PPPPP PjUHPh PPPPP IBEPl ZaJgm TKTqR UQQfE fEEPj VuEBX fFZxC jkOhvK xRgTU NXzpkk fMQEn vhhca hiuWm EGWVj nCWTG fWrRme PNdMrI PpQTN MSVWu MQWPVk RljbQ MEEEPu usJsX uQkXPN PPPPPWSu QQQPu VWuSu PPVWPu QUWVSM thboI YPFEi lJrLEM sxrFF TqWcz EStSZ nkmGH pedGs TXeAV AtIIS EFbbebRB CjoJsca bGSJwWn WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu IDEYZ guWBNs MPKRM zdjTM nuXCn IZmtL avfYlHn QPLYYMt xluUWu lgyeZ yODKG blUiC IXApc wlOGo bvppN VZlmX FHxrz yemvV brxdm PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj nSHyu YHdkR civme yHXLl gtslcs NQBls AXVjBX SpWjw kvzSsZ MwAcz SOGCK qRXIu ZCQkm gIFPz gxCaX Fprqx HSaRN gWJcI dXnNH OcmbT WxxVL fgylDDQh WvvVL WHtAtVL RoLDf juPPbcOr cmKlC cdaNIKxd AWBhh vJeWTJKSUJE NmIke aNbSda csPVgh xSndESL rkMPHp OCWEG wkkEL jvUVu QQQPu wOUQdAY MEEEPu EEPVYY PycPHM lNlEJ BhYcfV yPMTD brNYl EPeuEEEEd csmuu UEcsmE PEEhg jtMQyHII VWlCv UQQSV GQGNi yuRYU WsexG SQaMw jinESY lPiZXV JClLqb deVlyB GAgeA CnCWlA vFTrcU vfBGE ILQfF uWdVBRgJXvZ uTMuYTh MdbXw BTqDlQ BJZcS spzVQm jJnJSE qNuSR HokGe zPwAqNu pTYTN ufhMhMA mlJLpMB fEnzp qGkzWh cfYQo cmFKl ZEKWCV PFPksRB iflIEj QWOXFl rTBwB OzCcy HKJMf MPAClw eiHmk HqBeCa eOojF IMwDGi QdbRvr uWdIii dTgks HFLSO sNpPzo HkuAqR QQxty szcEV QtRkwG TPdAZi PKhCcF zSHuv cETpi YlShy DDOFg JsnHI bpWJZUdIR DlXfW YxlsG jGsYUr duPTc PLhiGtG wqWijM uGLVh WBxTOI IfJEdU RHkmuq HePsO BfMzn pKeubh ayWOyj bYnqV VfMDa wUvhAN ECLMPF ESbSw WhBCd LOHYDW JlGLN qGAvr YcadL oRxfb xUIsta DYaYw FUUdd hyjiujs OJUNi uYgCA jlzkK SIuMZ QHWKF LAsMfV joWpHQN jyCfN LbMuv IKnUL OvOzbkN zoANZO iUwmNpa GsbiSFB QxAoV jxEPD sZRnO StKmgTU eErNI BmbMuSr yGMSM hVosU PaYcS hZenMp TNQAH chZRS vxUdu KvjFi kyMhO bjNJX BAMSp biuhu eUkHp VroXu Scwqb PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI wYnTftr uHEPu uEHPo DYPEYPhH adnVm BwOnHx MuUMEIEPML UMEMd rWPWA EEEMEME HnEMI MEEEE ntJETE EPEPM JooGg pnoRgU sDNzvo JUQQMEM rJWgj dLXZt iiEZcG rqmek Gthdn CMWUr KaCIf rkpLtm idLna uyVdVv snDHA inNSJ YYaEq Ziowb BUNnlc TxHzn lezSQ osLKY mEbYQFAk jCfFU EUcctCzlzU mbqCyM bdCVn isGjZ mmHKM SlvNp xpuDf mfLpN uWpFiR uWpEMFiI aYseg klVzRs bnrIVN neriY vkLlSG ELYQul hhUcO pIieT EMMUREPMMM EEMUQ hTUIS UQMEH MMEUE rygRi hgjvQ zDlGvl kcTPB mUQMM EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU EnLHnw MQMUU ceOLUi UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd ujILr rTqnJf ULMEH MUUEEMM UEEMMU zrLDN TBocIgws cwJkxIlh JjLkwwOj JWDvH tofasGA mCnrAm TpqMyQ ISRHQVay DjFLb oZBCxE zgfOP PZHrg locale PiSvl JqWiostream badbit failbit sERqW tvAQn yxOdQ hUehH Hbxme MHBWKc fBXaB CynXrnA RfQZn JcsAI ZRBCy vlhjZ RagIaU hMZiz DmxKV aQyuPm neccx array length kunknown error address family supported walready connected argument argument domain xjibad descriptor message connection already progress adevice resource directory empty large function supported unreachable illegal sequence inappropriate control operation invalid error directory FKaPa network reset network unreachable buffer space child process message available message space device FnSttU process supported operation supported eowner protocol error TTrWb state recoverable ntext files system files Fwrong protocol FlsAlloc FlsFree bDnRw SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx MQQUs KBuXk ywnWBuu nftMgy ddTIm bDhUH PrlJg byHHpVaJrl AOcsm nhfDM IDdTI DliCp cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor bAnIyY vcOev Class Array Complete Object Locator xpxxxx euRIwkEf RBvzBUuXMp YphNhV bnQKan vRrLxy yziftMk adJdIm YuzNK qHrwV ekceil floor nldexp hypot frexp guwPRh isinh PFjTX cgaTP bitlsk iMonday Tuesday UiHnOct January iMarch April yDecember BEgUw IDdTI EnumSystemLocalesEx LCIDToLocaleName nTftM nAfyMyb gwCQh LnMfDM EHlgL nAfMd EHlgL LnTftMu nnTftMY QYpzNM zQFVp zTwKc UqZiY mnGcYCf WpbKp aShRI DdqCD LtmYE uKdDiX MBRXqtYJ QlmVB FLMJJ buRdwYTZQ qwfTg etPnN iUlYK lHUyje aYGXlI rKLCEz Trukk qXGshK AIsCu EDhULe FENHwa OJCIh GgMtKC iYQKd LXcof uykFR XdphL zGntH nTftM TzyxV KqKeBP ContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey nWftM aqdJdIm ngftM gsqrt ZfUUU SKIwd IKzwg usage usage nyftM ngfyC vMXxz vKVmET PLNCCPJ nGlPWu nicehash WRBNl dVlzQ Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ kxTRL cjqcb igWta JLXCM mNlVez eIDYF oMsir iUeiUZ IjTVCX pduVB oHXcW vSCTp tgaDevT IOqhe WDAsydK oXcoHF OakIsrC evSZO ABCDEF kzKOm LhoxQ nTftM adJdyIm nHswV dVlzQ CNSzm deLlAJx GCKzEw RHIuK TdgZofo TQimg pKdJnc gDJohL Gumue rzmRXF vzSOe txnseCQ QPhSE nTftM qBymi RiXJbm zsEKK erSMUEy DlPheJ gTftM HdJdS kowjKB iXJmb ftMoH iXJmb ubvyF AVlxm ZXEOP hMATiid kgrWmW YeGumw GdRftMr adJdyIm adJdyIm niftMr LbcdJd PMpUQ nTftM adJdIm riftMH riftMl nTftM guwARh sbUPlzQ OVBpVD wySdYn AmtHX nxVPg jIGRqL fTZQGjI pkMyB bIlAi EUOXX rkNcA BwZpAf vlyje vZcZrG Ihuta pJhZi wDCIH DmxKV ewZmZ dCBcU ZpXKYy NKkEa IskESR nftMb uPyIm nftMi IZtLzNw DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven RiseRiseRise Geode Geode OPTERON PHENOM PHENOM iFUSION FUSION FUSION FUSION nPentium nPentium Pentium Pentium Mobile Mobile Celeron Pentium iIRWIN WESTMERE PENTIUM iCORE MOBILE iMOBILE WOLFDALE MEROM nMORE QUADCORE GPINEVIEW CEDARVIEW nCopyright Plauger licensed Dinkumware RIGHTS RESERVED adJdyIm iXJmbD nTftM dJdyZ Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN tnEAI AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE nEALREADY EBADF ECANCELED iECONNABORTED EDESTADDRREQ EEXIST wEINVAL KEMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY iENOTSUP EPERM EPIPE ftMESHUTDOWN ESPIPE UNKNOWN kENXIO EMLINK iEREMOTEIO permission denied address family supported temporary failure permanent failure family supported bAFHkA fresolved protocol unknown service available socket Pconnection already progress xGoperation canceled connection refused connection reset destination address required Vhost unreachable interrupted system invalid argument error socket already connected message network unreachable buffer space available device enough memory machine network space device TTDUW socket connected directory directory empty protocol error TTrWb yresult large system process Gcross device permitted unknown error links async event signal unknown error malloc malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent HKwBHkqM WaitForSingleObject ReleaseSemaphore CreateEvent YCreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress irnkernel GetModuleHandleA CreateSymbolicLinkW CancelSynchronousIo powrprof socket iclosesocket kMissing after object member GMissing object member escape sequence string Column additional characters expected parse unicode surrogate LtKmP unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected gSyntax error value object array expected Content Length false foFxx PsXlQ nucnGSM aCFNQKH bzkzc bQcwP YyPKA DwDIX YaoBV HezZU IMafg FBdeZJ jSwzA vgkxj ZNxAtz FCYtklKK BGMDH dfIUW ZcROQQ DtwokM BphGhV rPmLK qSRKXM pPyIm PpjWT wDpdh vvqgB IFjvMa lPomw fafyxijfhkdanfrzz nTftM adJdyIm iXJmb dVlzQ kFIlj hBEKm gnmps JgBwwlOG rVQlmM hwySBn WCnrknAm TZQGjI sHeLTudT UnFZBCy vlyje vZcZrG Bgwnk nrKjW jBRUCam wDCIH DmxKV nTftM adJdyIm iXJmb dVlzQ kFIlj hBEKm gnmps JgBwwlOG rVQlmM hwySBn WCnrknAm TZQGjI sHeLTudT UnFZBCy vlyje vZcZrG Bgwnk nrKjW jBRUCam wDCIH DmxKV nTftM adJdyIm iXJmb dVlzQ kFIlj hBEKm gnmps JgBwwlOG rVQlmM hwySBn WCnrknAm TZQGjI sHeLTudT UnFZBCy vlyje vZcZrG Bgwnk nrKjW jBRUCam wDCIH DmxKV nTftM adJdyIm iXJmb dVlzQ kFIlj hBEKm gnmps JgBwwlOG rVQlmM hwySBn WCnrknAm TZQGjI sHeLTudT UnFZBCy vlyje vZcZrG Bgwnk nrKjW jBRUCam wDCIH DmxKV nTftM adJdyIm iXJmb dVlzQ kFIlj hBEKm gnmps JgBwwlOG rVQlmM hwySBn WCnrknAm TZQGjI sHeLTudT UnFZBCy vlyje vZcZrG Bgwnk nrKjW jBRUCam wDCIH DmxKV nTftM adJdyIm iXJmb dVlzQ kFIlj hBEKm gnmps JgBwwlOG rVQlmM hwySBn WCnrknAm TZQGjI sHeLTudT UnFZBCy vlyje vZcZrG Bgwnk nrKjW jBRUCam wDCIH DmxKV adJdIm iXJmbf RyjzJ gnmps NBLwo TAOwn QgrFn LAdHv fDjqR ynisaR YozNA KhHDa hQmnGz lRyBo DlQeCV hTgQPr oOAbi GSROG nTftM dgdIF WbWGWol lRyGpb kFIlj Drbav JgBwwlOGpI TovPb XGELQ taGTApk ioQPjvN rVQlmM hwySBn WCnrknAm TZQGjI sHeLTudT sMSNk FsJFc jheSTvZ zhwnkQ YIcSO vDpoL,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj XtRaoA djPQH tDufgKAVP xiErm dzauN eTqOsd yQpNT lHgTQ XnKeXi YEqeo nzLRC VVXTm WUKjX RdDHn WxXfbv vdsFO VlSsBa HYZNZ jxxCZx aKoia pDRNUS NsSjnEU IvASI RcAPIl HUFNI CErvzlG cWxkO tzkSZ HknTa nkhQri MUCnUI sdsAk URkgl qajnM ZMpqH BXIdLviEOI MsexG PenrD jJOkXx mOtTJgoKuiwz NTyQU MBqRb WTcdmC LzJCWK uzIqy fecJM EOOPc bYJajl RXmcd tfcPL SXDhw NEJILY KjYAb UKPJNoA rviMK JBqvI jMDbj cCzZg dfLNF VLsVb jGEKb LNGUko BBEvo JCKqa wwdBCc oAFKB FBBKh ALuEz CSzOq HiSUSY zzGAK KKjhD uGuCU mjFOli bAjQfXAGK uURry MddyI cmlIr TDDKC zbRyBd VoSMCN VGTAUl EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl HNbnS rRqCh EExxo fUXTw tXMTMKML CypwZC tWbCmq moWff jCBYEa qrBEKU bdlui BcFJw dCeNyC zElWD wHjYrA UzTudn WfkxdoT BgkvV LhipbDg FuHjo wVder nPktl SbuvD zHoma jjGediJ EFUxe oFCQD RPjQnoI BroRpE HSVWN jVtcY mNpwD vjMkac fksVF REUpuzF TtcqBE nDfXX OGrBy LeFlP EjiYj VlWki MlUWJ ThLVu jKswFI oeivl whRZP jHihS fQoWIN bHxPk yUATD KjIjW UQSVWf BUMzG BZZGbr JUESI TIWHh LJRAn ByRxkR SVpYPWy xXQqPpD WwHXt aSavQs KezPT EASJPo FrWsy OCtfOI dyrCw ravEZ MnGKPc IjiUdv JbOxICet PJLEn DIJwg UWMnvj ORuke XgbMJYr HdPRrN bDVbr tUJGZj lYMQt uURQl CtIhZb kCaPs bEYQowdumEB CwGca hLNgh MTCZg cbQJIt POLea TktluLGV xJyHBK AMLwZcp Vdsixv DtYQE stXBS zeSzU XNTNO mxqYlBKqyjr NlkFv eSjsQO cKxDcz rbpCw cTmXBltmtg rPDCS ynfxmE HWUQc LejVB Nthrc eWpjGO Fisth cyRKt xXbBZcfG XxFaK wSqhW iZgHI Mummno hYxwY LiLCyi eDdPAf DtizxYxN AlOOv MPrdd FLJaAQA macgdMO yRjKzRS KYXcQ psMMW EuWDxS PcRDT JfZBu skeEc QzspE OAFjbbZ jbKsy VnuSp ywIAd vgZLO BMBRwCN REIgm ywhpY OALUU HSaLi cXtDL raJZD oTJcdP bfYzAAn JhrCl usayKI IqgiAXq RkZkgf TSUVWL VWRPN VWRPq vhMBs csRujYuu fHsAvG THfOaHb SVWhI TOxEB DSVWh XVLdr CEqvc scCPn milSu kRGgd NACeaumz AJgkU OSzbUH obJwREh USspTzI cVeKL SUVWT YOIWj BwNHqW OfCKv ZSKqNGl fzbxZ UUqzr YhFeLI hDTkW JRuFE xRfrD hCTPhe VCrMx RlGsNW chend tObKPs AvUvG qMzhF fciPo KwqIou MOOQAr WHnuSSs goWnU yaNKh Wszje WUiXgH TtpcX QcPXy zqDIvn LSXJxcIp yfFzuW KXobn klfuHSu xzlgY pRNZB DczNw GqMNv XueMt Zbuas tiVQLIB cZNBz qbvUV kgJqX kmOOZl gmcxs JaqBH xGVUuB GBYxA DgSAhX pydAq cvxuS CvZcH QbzTI XTqFy PRURr oFYqh MhFZhwQeQ hZoxdf PWJVBI CTjdRvb tUQnejQK KXFhy aNkNTg kQgBx hhzuWK zETcjZ Snxgo qEzxMb eOevBH kVbFI RjBQV EGoWq pukDF MRynPr tWPKg tQJAz jNpRn iRFRJ BAnWVNo UFehyK RpSzb vNxedW yaYHR odLRt QctRe sTdkdko xMswz XWalH rMIxPX pueiA ZvqvkVw uOyTTwdT AMpNs yMLmZ VPjLh oLxks PuCQb vOOUi VtLFg oryMX vIngef HLMwv OjPGE AyCnTlLv lQOcoz jAGzGfL RDLXS mHMRU XYTSq iDdtNQ XUgDevD WsGfkk CeXxE nchAq daVRauU JbZKPb fAwMH gpZRY sVkYOA QVAef RiBVDK yoxHp PcuuTp XzHpT iTCogh qoxhC shIFX NApnA hesliGeZ ALskIH yCyLi yCyLi tKNAj uexgH RaIyepCq iAIGC OcZSE tvhHI PjwhLhK zQNLS uSUVhI wtNipy ZZouwY PsJiHLbD tOvQA kUzrK pMvnUa mpHyU jLXgCP HmnfO ujxpw sozXKC yoJMr sXPVjt tLsdB utbEp nJFeL QjOoXX vzLNY SUVWC UWaUh ViInS LbhIEazV mSqbT gEout vwSZxgd GLfyZ SUVWh vjLYbZ InnLR fdwdm TuJEJ vQnDF QSUVW gWunF LqGLV mOCqv TXrPgwa eqros GXGTt VikBo bnVex AlaAS FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS xEZCK SwTMzm okVHk ZUCcbnM cKbWD ptIur OJUfJ QqvDP StFCt PGepbA SXdZzF zKvbS oEDXQ sSNLK VBmCzr ecmUaD EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE eVAxl xYYEe FDHRg gCWsc ScdZX cvgAX MEEEEE MEEEEMe TSVWu EPMMtM IrJxf HUjhZ yRgUH yUyqI tBiHU MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH yiUjh SVWeMe EPMEEEE MTVMMHVE vtlUE MEEEEE WoWRY wgDRmFBn ZACCC ZlLLR tsDrG vMzhZo ELUnc hHkYkga MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP JLvgu GKoue Hxnyp vDFmQ SVWeMEEMM RMEEM WnyiH gFTFff edRawS rWrXi eXFZBNN bhAIH AcHju pIkMQZ iyEulpc xLEtO vYSam dQmMKC EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM augKs xVCdC MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ DWMEZL QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU iNmDHl EEMME MMUUEEM SVWeQ EuWuS OgAugKIz rwbFMKqU lIHLb ECBLy RMMoH lqjPt WAkOx fbngY HffQa lidmt gZpaVZ vOmnXf bNDnU QbPoP ISrCE cXFeF nqxJq mLPfw BErDuM VLCZrA QPeRT YUPLd lnStP SeviW Vdufr CtsqAK YzbQSr jMhPH cuJhM iZrzb aYDyWj dHxBB qkVSzB imIWa xmxthx GdMqZ ljpIP XGxQxr HdsiS mXRVF XSFBM LNPar vJDmIx IdiGm LUdvE qsULR zGNQT ghTXF oyDbd vJoHP FuUUW vzvuz ExxeQc zhVziRR lBiDa qvudp UewpP dAfLbq KCRKC JYbsDK XzXDZ nwYkb NhUxE aNzpCqN lXmCI pgjMt qebez DHPVS UYRlq MYIGM klYXq vMrnRIZzS LGhrTLMw RBJdT CRywb rrFdva bVqVBQH jpidBl gLSKYJir FuJffBA OyHay HtDkh PxKLqKP lGEVKY DFEXzi FozeU fMuvDE OtiePi gDFHC GXHeL pLTJnh bWBPk tcXgP uBkEpJ OxcuE KCrwrt cSGnC nbIVuU YekkLt pVgur MzGBRFxn IwjrYrBN hXbjq jLvNwe AZNZw zkATF oiILr ezScy IYXzi IjlVnwb yqcwrm wKAWK OQfJD WCPrQU lZPXDvh zmsIL WMhfOJ FlEmn lgCJfBG zFYzSLh vtkODT OwuFv dseyT WxgZuu TTrMQ ASzHp bIxBA NtmWf yQsChNh rkocDm rWSDWs fbLOvW oTlNo jIiYADo xaYru OsJHN yYnLa IEgwl KMkHy SUVWj BABABA EuUUg YoJvi qoXzA zGsrbN NthQjOr lnjPT NthOjr vsCrS MxknSbI DfcOL ALhdu HlBCL hSrhE PQYYt DHcUV lBhuZ vtdficdY uYSWu lCztV lZaqEV EntelE ineIEE GenuE whoLh PeuEEEEd iEsAW KRSPSV iEsAW ahdZH QPEPh QPEPh OMroo Sxeru PbKKhxs OPTQb PYYug PYYug YYEPV UQQEP FUXciY YbJmIV XlWVgvFKP GJgOC eeZCZ cTMUKC VVQYn xVRWRx OoBpsT UQSVu McSvnd HuYUV EPuuu TZKUu GPkqC SVWUu tfVUk tLxXj USVWUj UQPXY LvUVu RimYSYY xthqhPXqmE CuiYM csmuP dGoHhIW PNuyI bHOMP YocBg ULhmp uMKsJ tPtLw PQYYPV Ujhxj BSVWT URPQQh USVWj QjPfW mNIjLp PPPPPy ZKeUWM MeEPj ZzmBE kKxzdt IDRgT sOHiQf DlkuVxh aNQwe FgGes XeExUE UoEtBgI qPSwyz EQPjjM VPuus ulUQQVu zrsnj wZihJ DCwqfW onjPW YUSVWN wTTkR EXmLI UQSVMWj jnyyN vDqvj sycwd ItOLt ALHoT WXeHpqcW ICHtR vqbou bGNLw EUQSV jAZjX hUQQVWjgYjGN PQPPESPW jsXfF vlWLIn qUQQVW dsxJl pwKGnh RYTHFT uAsvS RPQQE VQuuH hYpAfjoP uEPEPWSY YPVWSu kPVWSu yBwMX PzUOW buWXkpq csruK BJIRN SeyTyDJ dQQBFIU bkfMD OddrW jvkFY ooWLMbU YTcCc Modqh CRoMu uPuSW EEwPr UEHEu cYTPUhJ UWyAIVF Mguds ArJUA XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu WhGbe EsBJqNo TViAU uBjAYjZ jAZjZ UQQVWO SVWtdAu StsgD HTugjM fXisdk zeNKc FYWxD AmYkW oUVmNmQ liIvX XoUQVu qkiOS cUvyO UcDxl CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp qBNsZ kwCNN qBNsZ PQzhE haGED jOHDJ CZZqA TWGQf MEEEPu OzQQy nMuhS sIfda BPHMP VCJhH GWVcofv Gziglbo wBHPQF JVati KrKzr dOLdB SOGYu PPPPPt PPPPP HLMMQP WGbYQO ThHePn jTHES Beshv eFgjQq YYtVWh EWWPb uCYYt uVWTb WWWWWS sXvyg ruPtkr RJfQKBH WjaKQ clbfu YtVWj PPPPPPPPU VSYYt UImRZo EAEfEEj EPQEPEj QhtTARj AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP KuQIrf ExRhRpY QNmLZ UQQfE fEEPj MhNIA oxrKe XCOeSfW OnkfeYm sYjuqg smRUw SkOoy XnHry BKnlv EGWVj rTPst zmxeuNI QCvTK xiutb FrHFn MSVWu MQWPVk MEEEPu yrguQ JfCyc MBJSe PPPPPWSu QQQPu VWuSu PPVWPu UWVSM gQrAn CUoNerP RxElCq jjrLg WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj qzpEi wHuhjj YuwHu pxpwa mDfoQl JJPENWr hbggA czxOkTjiF QPLYYMt ihaaL wTPKLHL pRdKI vepngc DMvjo tvRtu LeExG KAWGQ OAzrr zGDGt GrFap FfNAh HEiNgA wospHF QHQVa fpDNfgn HpDFMxB eLVoe DTktYek gyLLa ekkWv CUWlWYS McriFR PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj mDRVv zibrk IMtzEDOk kssXD motyFw QupyU WxxVL vbkEe WvvVL WHtAtVL NUeOo SVlkJ Jfcdn zhBHn yXvUXBs zcrbTP GWgJzl SRNZt mLnDAk tJEHo JLeHX ICnUA zyYykQCemftl abgpZ fYtch ybEaFp WKwYs LnqfR QyNEs bBEiCVEjh fksxG QQQPu MEEEPu EEPVYY OxSRrq WyFWk myNdu jVuUS owEkkpDl XrKHJ EPeuEEEEd csmuu UEcsmE PEEhg YcPgDC QoUtiHLh VWlCv UQQSV qhZObP dSfuS AfnmV ObOyX fsuct LSxFLKm sReEL MmlrT KsngBa CGpFzJ Ukjua kbTYQcw BaUpOU anFNp jBDgxc VpCXhd rmHbl JVwys WOzPH qohIRk eTgAgR oyFQEX XYeXM AFCtp yNHJY plnDL SpTNT xRFeb duWXYm YwIOf ytbSA HrciX LNnAE FgCcT QtBKR tGRck djZdz XusQxX bnWLV GRXFoo kHuMq IhWjP zDNMx YnHCG VhqYD vOAIcx FfJLO xVaKA pNPrH gyoEkm tpxyyp AAIQA QeGGJi XbOuL xMIGap PxtHKQ OezVl MaRyT PmXybpK zcwyv kYnNOo ynFMm FYOBynUm uGoeUP jIyIVR klVot ijhkYNml HTmWf LnXZaZ KSHytd spyiE YrxeDomgiwR TmhqOH WRlJCV rEKFk VlHhJx CPPvN qZqCZ ejEFn NeGcGk dXpIpK bWoYMe XFlqqk KpeLC lnqDAc BZvGz NbVYM yXGbaTP kxEkfr cJaAY uWTPv ruhkc jEWHB VznxMJJSd oKWjZb rsWUW PkxQqI TktlGL zxRmQIul fLOzAez jxEPD tKjRNl PexolII XBLeA fHrvu MBMSM eYspnW spWqV hxEuc NkKZNWYCew YYYghb xpGJO uhMGC JpLjf ojrIo KvhdOh Hkjbf uUQvL qRMAA xQOms vMMAE PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI xQMvE uHEPu uEHPo DYPEYPhH gHTMt rsRsx JDuiwU MuUMEIEPML UMEMd pmLhR aEaxu EEEMEME HnEMI MEEEE ntJETE EPEPM fBcCUQQMEM fRrpJ AJvNn jeXHpZ NSAjv hXnit uHLeg JtSBm zNuQyg ZxhSj ePbuBM hDgKl KdAMp cBuXQ mfufg akDYC ozNzE hTYLc TJLajOi cAigz JNNwe fzGoEK NzmNI rGgmaU rpfThb yyNeq xKAnq JxXWk iRwgIp FUngm PGHlG Asuch gcCeT YYexY SeiXn EMMUREPMMM EEMUQ UQMEH UBhMn MMEUE vCunwA egeBLE EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU UqcKOX MQMUU tEInL UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd ULMEH MUUEEMM UEEMMU sHKrQ zkUGV rcQRHL xezJvE vqfoj EVRgeT ZrXEUI jteDx Gwttk PrjrEn VEaNzd xslbI RabjKuEhD xgQBKj iyrnTNB UQVjt Sgmxw ozPEa szzGC locale iostream badbit failbit qxmniT bfKAE WSnos grXTt OgEKM wzZOj vKfwj QZZXAEUI zpszX SamPR gUjnt AaVha mbISI GWnGe onmOt OUUTauS rwnIS HufLX DcUZMR zzZnl QcZcx array length unknown error address family supported already connected argument argument domain descriptor message Jxconnection already progress device resource directory empty large IjOfunction supported unreachable jOillegal sequence inappropriate control operation Jxinvalid error directory Jxnetwork reset network unreachable buffer space child process message available message kwGjOno space device gJIJw process supported operation supported owner jOprotocol error OBMrr state recoverable files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer ckwGG InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx HLievEas qCGsP brQZMTx HrToI AMWnt pUjypUO AMVne AMhne pUjiUW YbxReHJafHR uLOrp tvuhmq RpUmtHh oJsYEKg cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx LuMIU grAoZ nUTmK aGoGf ZMzEF Masin Vceil floor ldexp hypot Mfrexp lixnsinh uoBOp NrMHHwnK BBrAEs nMonday Tuesday LfMMay January nMarch April December jdGJx xpjlU LCIDToLocaleName jfhNAN AjZtU udSJx JxFwpjw rkjCEfl RNZqM nZHFu rQnTxC hvGjw hNKnv tCiaY VIfzY dRhSV GJwhrR PxMvASj haAEZ thZPE LtmYE UbLcu WBSJq EkUZG gYvEX mHfaMU aqfSEp heXddZ MhMtiee fUmnA LyaNWzU fGwiI lQDXR LDOtIaG QbFiB eAJDv eqTPV ttEqi gmLoq lCPHifcvPs WvxML KIgeNz JpUWzNM zGntH UUUId NPOoYCmf iMyUWB Jxfvnf ContextStackSize ContextPriority SchedulingProtocol YbqnT ZfUUU EMQLhM dEScCSlQWVRSu usage usage THYEW KWIkE wNJCH yTYnN gdnfs nicehash ZLBbrQ Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ biYwR JtliH PTPZF cWGWL AbQAg JLXCM mNlVez DGniFDh wMSYV WceOR pBVRBU Mrmfr UBNrt jhumP zOzPH AooMl GMhZd opNRM YZCMu eXJtJmJ dOTPZd DztMOl ABCDEF RNhrB sTzDjiM CVjhb WUboG PHtCnaX zrChK joXDuBP qLhAr qsELfDF btjoS WtGmI TiHLb zAnmCH TGZFsCRu uugML aEkrkt YDNcEFvANo OmiQd IoMsP ZNhJf zjwUW dJxUt jbCsy ClDqu jSLAt kbNwrJLH VdDlB KgcGJx lYNTD JiGsC nBMns VIJUWw SWEasOi ZCCGsh RDAoA VJUcw TiHLF gLMhF rTtfR yzHBd nBMOs yEeLWn jOsmO ojwUW jwTLhK ojwUW yEeZn ZqbsP DCJRNZ QhADi GVweH WCKnr QZIwiU qDJxV jWgXo AAxjR TFKMJ etUVP pgnuRz dRmGByxZ MUQaGY XcizQ ubNQk WEKRoH zsfWR zWEasQci nbIeq DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso JxAuthenticAMD JxCyrixInstead NexGenDriven LHhaUW RiseRiseRise Geode Geode MOPTERON PHENOM PHENOM nFUSION FUSION FUSION FUSION Pentium yIVcLUW Pentium Pentium Pentium VcLUW Mobile Mobile Celeron iMPentium FIRWIN jOWESTMERE PENTIUM MOBILE nMOBILE WOLFDALE MEROM jODUAL QUADCORE OjwPINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED TiHLb EasIAXb YZNcn zbOmX Unknown system error Unknown system error MEACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY RaxCb NONAME PROTOCOL SERVICE EALREADY EBADF MECANCELED nECONNABORTED dEDESTADDRREQ EEXIST EINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM MENOPROTOOPT RMENOSYS ENOTCONN RnMENOTEMPTY nENOTSUP EPERM EPIPE RHCLhESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK mYnEREMOTEIO permission denied JYGGDBMrr address family supported temporary failure permanent failure family supported BMresolved protocol unknown service available socket gpRkw dconnection already progress operation canceled connection refused connection reset destination address required GoAgy cwOCf unreachable interrupted system invalid argument error socket already connected message cfBIxnetwork unreachable rGxGi buffer space available device enough memory machine network space device dsocket connected directory directory empty protocol error result large system process jwcross device permitted unknown error links jOasync event CdrQLs signal unknown error Xxgjn malloc Xxgjn pBsSAuv malloc WBduv malloc malloc malloc iegCO QueueUserWorkItem malloc CreateEvent ReleaseSemaphore ACreateEvent Xxgjn CreateEvent CreateEvent Xxgjn iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress kernel GetModuleHandleA tcTnF CreateSymbolicLinkW iAiBG CancelSynchronousIo powrprof dsocket nclosesocket Missing after object member jwMissing object member JjBad escape sequence string Column additional characters expected parse unicode surrogate qMBad unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected frhGg Syntax error value object array expected Content Length Mfalse GvGjBeK NqIvF wjlps omkDi eviyUO txazwZs VjVpn qPnlCk nDZou Ruaze fMjYk ZwHyC wubNZT jhjRVEX pHYowIHUn QLEYGZIa uliKMKoY seNtrc MsPQP kLpKpXJj GNkqd raixQ JDqDQ fafyxijfhkdanfrzz TiHLb rTtfs utUQx xLJvE JwrJL QZXiU AaVyaNzp udWaI DcnMZ jOLMN rnOTNO LsnfsQl tgmwx oCPaS RQKRn EFXnEe duyvc OUuTauS HeuQXfx jOfYkK sBaeB zEjMh VUqpm TiHLb rTtfs utUQx xLJvE JwrJL QZXiU AaVyaNzp udWaI DcnMZ jOLMN rnOTNO LsnfsQl tgmwx oCPaS RQKRn EFXnEe duyvc OUuTauS HeuQXfx jOfYkK sBaeB zEjMh VUqpm TiHLb rTtfs utUQx xLJvE JwrJL QZXiU AaVyaNzp udWaI DcnMZ jOLMN rnOTNO LsnfsQl tgmwx oCPaS RQKRn EFXnEe duyvc OUuTauS HeuQXfx jOfYkK sBaeB zEjMh VUqpm TiHLb rTtfs utUQx xLJvE JwrJL QZXiU AaVyaNzp udWaI DcnMZ jOLMN rnOTNO LsnfsQl tgmwx oCPaS RQKRn EFXnEe duyvc OUuTauS HeuQXfx jOfYkK sBaeB zEjMh VUqpm TiHLb rTtfs utUQx xLJvE JwrJL QZXiU AaVyaNzp udWaI DcnMZ jOLMN rnOTNO LsnfsQl tgmwx oCPaS RQKRn EFXnEe duyvc OUuTauS HeuQXfx jOfYkK sBaeB zEjMh VUqpm TiHLb rTtfs utUQx xLJvE JwrJL QZXiU AaVyaNzp udWaI DcnMZ jOLMN rnOTNO LsnfsQl tgmwx oCPaS RQKRn EFXnEe duyvc OUuTauS HeuQXfx jOfYkK bfzAn zlmhj zjrdza zszXM PHjOi HhCUW PBMdn cdCDA GseVTD yIKxds PDTuG GVHhCr aujPK VutQxI xOLJVvE JwrJL QZXiU AaVyaNzp udWaI fgkKY yjtrT NDCvt NcCpV qqiKbd jrkOc cLNkC,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj AhNuSnv XRcRj bSqSM EreGG kgxMyJ nNsjO AlZMiH cfplKj hdnPv mqwGXg ROPMpF SKpsIw ngLFwBh lNMilKsr ZcoxY SaHTq uRRyD cKeUz LOSDxen AYuAjO MaEhX uPhpPA Cfmav osGHG rpLPb iXKDxR hLcYv hljsY QbnwVY vlQrh RLrLc CUdQBr UfCaw ElQNA iQcPCMR QdRBo YISGxR LRlfK KeYIjqH LUfQQ AKUWf VsNvNk tvMpK EyBjK LooSmsV DAyqH azeaKvr qiehH fwxqsZ wnKAFv DfsTaA skhenu TLVJcB ASJcc MstBf kdelK AvfZY dXsCoWh jcLtV CFkAvl hmNXy EygRz ixyTLi VeLWr TGWVm Faeln lUzGF jDIfG FtVkn YPyAh mSNGo kIcYRc nyJCHcD qKcpYW vjQNgE QiEYS ITJBc QxawI LKBTSee EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl fHxhP jeYJX UxokJ fTNyNN AgMUF weMuS ihahe ybANH PQeovpLd dDnlh FMgqV noAOn TgNwUWo CtEAIluW ASeRf TfEQj ACsxG iuABL bIejIU owDsPf UdIVi qZbRJ jCIZw FODWC yZEuNw MIYHBI ScxPCdrmG iaDva Hwpbacna kbTgr PCbct qjjaLqf MvqXIb ZUbxYS cRWqg pILTx qqWzv jvOcc nkJDUi gwvbTbvd qJnHW YFxpk HxUQSVWf qxFTy aDGpU yphVv XdGhy aIRHS VtYwK jcSNyz SVpYPWy xXQqPpD WwHXt QfPauTw wNXmm AaDhVI BZnAO mgiIAxq Jqqbnei qaoQZG jsruvm LacEw WGZHy WFVcM aUolsr RYrWs lTZYI Iswql GrqAOp xWNNa avXdD LIXUK NXfLM pQmiX HUljcg MKrprhz kOscL zNYeW bbsESA tZYimv FjknP LcjuLKOq QEXDI iEfiu CPmbK HXQxO iYoKQaZt ERxJA nXChxc VjEyPVK zWZSW ISbLqF diNsO salQbu gFftMJ gYjttMk cjwUC OwBzWq kquQrdH UdRos YnTZh HyBhr RcJFVpk UAyYt nrmKq aYXAbG QgVbhJz bgLdn bIsohT pWuxD ChuPZEDx wptXa ovnfc cZOdJU KjVxdEC YkKPFA xVlLdq atubR FWhqqSKD zNhpy QVbqm SzbeCB KUbXOqHA zJQRb UwTdhh lvpSF dBTBy rPHMG MBBLJ vUevK PcwYB SqGSA ETineyJb tAjnu SSyakS bVwWUhj mAXxXL UYqmTy BnGtn ocJfFpg aCUyd iOFqqEG ycLiBOL XWYHq tjHPnFL YUqkS oLebn cZpLCm zpJaQ juGIP XkeQe KGRKV OlRYT sVkpy mzlaJy nLWOY GhiTU WUJPP OeCLCZ TSUVWL VWRPN VWRPq QwYbY NWtjC qJnHW exOvu SVWhI uFNSAg ewBFeS SXyoMg LfOisA Oftpc VqCPxiBa FbUDg iaGYv dRNAndyT WkNGI lcZZpi NGRXk GBUHy puEavM wQFdk EiIZS WhMqq LjNtLmmv lzbYhG DZVYh ajPdB HeyRzLb uXIFlAGM SUVWT EdlNy BbtalK tVnAMwU idggM INpTy AAYguFdqT DBFbLD BGTgP nnhvi hzFBqk iftQc HUDsaIr jULsb iRDGT xuLIe yRboK ZfqtVK PdWZb nltNVm GecrEZ jBdKZ MbwCI wgGng emxRsW ERZhr zVtsG sMthe ESEYp BcrjIt SrGNGeejW UHbAGL wmkPZJ XESCXr JlZvU OipgO yzDgeAI efcEY qsGMa psPtRk FVsuF RZDxw PhUJK qJOTtDl uNOOF bnmSJlA WIlfb QKINaISmt AWTjo hVzIR MAGYZ oqIfP xUqWA euoqW wCzyI uPZvTSm HYbTUw xDOoeA ZwMOYDLR EWzCP PWSNbZ bXUDvd jaLTc ScJnG jKktS BjDcp mDLRb cEQGN nTLsz chXlW FPJrD rbRWc ZeMrsEM TSWAeld MemMwv DBFpP PKeWBX mQpOtLo IUItx VPjLh jHEhW uHAxb bqZZB CNTbv gMETI bogbC lSFCa jvyEYt QpLWY ntupum itokH DouzL UVjGv XFsLRO oslbz HbBZlWZ LEpaxUvVr aqnTQvL ONVDQ qeLtw dOLON RjDOv gCzJV ZylWU uTClr feAEAc MUxVW hcJqG OVXriR HjgWG QQRgl jFWuu blpyaC CWweKu WdQRaoBfxaW fVOeaTQC PejRT JVrln sqHqS xfSxW WIVpUwD WIVpUwD SjGLVu XGPUN rcXre ipdOU DOsJE tvhHI uSUVhI wUkoX bxvYa SYcbV yFClb mUmvKTcoL zQNYN EGEikxvln eVqKW ibOtG yCiXa GCKQQ YfIzTa XciZrx kqoWs keUwk ZHWIb cjIIF sXPVjt tLsdB cTVwH SUVWC LUiEt SNaCv KmFxR iuPGF ZZbPj SaURW EgArq ofsfV upyqr Owydd SUVWh YFUVW SmMSI OOAfX QSUVW jykdr rEOrm BUkqgHCv GXGTt ttLPu FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS foXGDq TnlWI mrxVq vvdYh cLrlo nXCRFQnZ RuQes dHTtNP aPYuJ ULxcXM ZqgMQOB TJpdqvmA hbvhyD hkWpj fIYaOAO vjYkA EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE xYYEe RGbam KxOfr twUQME MEEEEE MEEEEMe dFWhr bdQAV BzoFP TSVWu EPMMtM hevxbF tjtUE MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE MEEEEE eDjrOKlzcm AtaLyi ICCkj MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP iZsqF JERaH SVWeMEEMM RMEEM OTujF Ojfhy RgMNN kgNWe HqUpA ilaut vIkTn lShpo zkWBiu fvNAi GgVSR mkfzB UHRQJ EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE HxUjh EMMUU UREPM PwSLU NDkcs cUDkC jqPjTmP YesrA MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ AhpERw UCPKp tTOlp QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU mQpOtm zXajd EEMME MMUUEEM SVWeQ EuWuS OYTWP WthEUAn GDAYR xTiKt QFyVY sbDJQYtR cMIpyNW RKxkH ndcZTIXJ eMTQMdskX CdjEZ zeVouG VuTke ezpFh YkxEH qNnAA lvmjIsM CyhrL ExeYj HKAgc ShRxU SvPbR JoFvH SsRoG OmrngjmL XtVXGFEx OLXuXc EOIbL kdCad AdlZU mSAyTkTZ tbNxFG FitcSMhx YMCZfj qaTqm SrbFT SwqAWF TvFDcxP RafKQ GQAEk VTrpbIe OVDYJ wwATnl VicJOlg FGSvh sSwBSX LzEVr WPxis MgPrd nSNGtyR aJQBiq koeas bgfyP ymhcd JVnYUFxU OiSaM WupyWud GUTca GbHejH yOUgaG LpkQR akwxwCkCT DqFWp pjdxCt Jfndi waszg pSPGV sqZwlYihVTg WcmOKClrKK BDNImY PqMRO SjhMuF lAKGCrh xUthjC vXsNI yRUePiUvg uVsfb oCQaO ExHQa uFkVr fnAdy WBPkt JWQiFX PjHgiL TFxws BiPiD OgwOWF HUBmC fbGOV TAJQk rwNMn OSnYGf VBiMj lFPVDx duRLUe TUtKr itGkV fEmXuHF AGEDv ESsrS gpdyNiFh SUVWj BABABA wWThjRyG uxMJs hRBzp slSmUEs EkjpS ufpudw TxTAU NUupByj nhjTG VmIiU uyCYZ oKSdp PQYYt uYSWu EntelE ineIEE GenuE PeuEEEEd BqtUU yCadfw LUQVu QPEPh QPEPh YFPwK NHyOs qZTjmUm glGCq mIEvc xwPUM tpZVjyhV PYYug PYYug YYEPV aUQQEP bVfjyaQl bCTVEv afZiuCO KCuuU SBDcldN lbeUV kNbpub FkIoDyT pOtzM VVQYn IblgUwJ wXkcv maWOrK HaUQSVu DOGjzG qsiTva YrplNtm HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY jYZkR YAHUVh CuiYM csmuP yolvU RXUdU fTBrwSU zdyAG vTahUu tPtLw PQYYPV Ujhxj HSVWT URPQQh USVWj sHTpjUm EWywrkQl TqEVVSG PPPPPy cVTTb MeEPj mQlpKFxs fvJVlUC qWStI CYumi fZVjK pfvJDA UyKEVK EQPjjM VPuus UQQVu tQHUbA dGhSt Eaneq peGds XzaabxrYeA GvgohUSbF USVWN yBhKh AFulNu zUbdug KOUJR jfFUVu UQSVMWj yzUBD yzUBD AXJOi ItOLt asUAgm SUQSV jAZjX UQQVWjgYjGN PQPPESPW jsXfF yFhSO vDuJLT oUQQVW FUQQE OwoQb nERkjv yYWjR BboZT ridDnNq juDTo RPQQE VQuuH aFUDA uEPEPWSY GXYPr YPVWSu kPVWSu yfsXFD XWNNdk LPQqtk FEvgCaz DWXzS gEbWj cZERd pnvDU HIJLS jmkljo ydAJn UmzTCH bTApUQ vzoVU ffXbH pkHAiB xbBYI XcDzI Sxorl uYLNB qhsPBJL WBZlt msrXd uEaoJ dRGbq uBtId IqyVt kpuxp PaSQX INfLz tUQQE uPuSW EEwPr UEHEu EbRfy okOiu RAwJUE tGcTD JUQVV hYMFz qWrRfs XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu PKCtl uBjAYjZ jAZjZ UQQVWO iLtXtM SVWtdAu Vbvrh BKtOD yOkht iGYuu UYzUDs ZLCfh UtxASz BFUOKC kpLmU oiLOw JPTvX Dtthc cUJwBI QEEGrl CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp BYzXh dZUcsm jFJwEi uEPuIY CJkSDN jBheUr esdWzS zpnCcTw JVApI WNPvXnII MMyUNF MEEEPu QtQDjl MZdafuZ eZnkxms HlwSFe gqJZDD ktrwhmEII iuCiuM HSeyg SOGYu PPPPPt PPPPP HLMMQP WYHMYq DKpyu YYtVWh EWWPb uCYYt uVWTb WWWWWS expyg YtVWj PPPPPPPPU Teihj VSYYt EJtQlvUq tQlvU LmYgN szowE EAEfEEj EPQEPEj gohHa AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW oiUZiRfn PPPPP PjUHPh PPPPP fhLEG NIQvILMX UQQfE fEEPj GOUQH EGWVj tdhlxf dCAUj Macer uUDsr XItjk MSVWu MQWPVk CaAbx MEEEPu LkUSg xGhUMnS iLrWGw WtFVAW PPPPPWSu QQQPu VWuSu PPVWPu UWVSM DhKLA mLsKl gwDby tTeMa WswMKG tQlvUq tPsRL WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu xENaD LEooqD CYSMu oJZqqm cDYVI fWYFPeK QPLYYMt JIniE fsdTe omKJo YHLIHQ XHfrEx Dsohdhg gwCQp klQnI ecUEE zaxKW WEPvS hjRDP KVOuT PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj sKEXFL dFmQqy qiGmrB MTRpTrU EtVnPy IvEjtH HwYRfM RhLYKSW YnOqt rftMAY wofbg WxxVL XrscK WvvVL WHtAtVL TeUQM vOvVF Pdbyy KGLSD fOJPR KrQeL nRMjd DpvGSps uNkdq TafiMQ jFanF bQhHf eqAdN koYVF Dpolj tmXEAWwIr pElbz hXUSuh Antoz OdTSpE BWcNWU QQQPu OiCAz MEEEPu EEPVYY lrUrEw grwksrP XfCHW VyHjvr qbyhjR slOSKY XZFytQWVU EPeuEEEEd csmuu UEcsmE PEEhg NlJGyc gPDQti HvGhn zrOam VWlCv hBydh gUQQSV lWYHMIV LBTcvo vdjtOW EDivtsTs vBxar TuZsZ IkPQT CvjhM YGMgq Qpgdj CjfHp VLqUN yLUsee UFnwYW UBSUR xuxLX BbAvuNB UfEdXx QkdeL JjpDnO uYzsi hOFDyyzLdc ijLlp xfguYiG qEXRV MoLyUV TmJDsuZ IzzIF sjBLpm UghAZ yuRhG qVjlsT xbSDQD PCUHTb JINyr pXVdr YweIkM QpitD fTqISb yvVCm aSNeVs ZgqZI itTaP VpeEn qsUEAwhv zvksr ELSNC TBQCthKKfu HvHernW tpUbL WJYEmL UMAFA fywvFv gljnr jkwIns pMCpX QUHrY EmfSYKmUEs fMbEan nerFL FHNlEl EHRZF KEEht hnSkyD anJMe LxAnv WxYSlLW yVvlr bpuJh GmTOWo dsXbJ dszMM yNdmC mlxmgAEiM ypcac vczDB YDxaI CahBzR YjHEK TFvKv lAAhGANi OhIHLQ ltCYjZ BsYbP EBlHkV BaWCZ DmigF GpXdz rzRiJJk qHBrqp EDbdrtC vwKkZ KLhtC CwGHG YxTsK YiPqHb MWGXUCt JDtZu pGrHE DxAvmc xBQqM RMXvQ xjxEPD uCtCp vmUAE SnMTQ VhDxh tqMXMP ZpxAC lBfqM GZvBSM BQyqMX CDSHL MYvhE LfDoXjmOR IacGY lZJDk vIYCbjX OHUgD qbBXcM QMxNMAE PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH TtUQMj cvaLrvI wGjQL gdRfp iAEQp MuUMEIEPML UMEMd HmMne WNaEWK hGmnq EEEMEME HnEMI MEEEE ntJETE EPEPM HImoH yuaIEa CxUtIC nGSND rUQQMEM GhVzk qgjdrwVw nvfGc yMEWng LHNgU GqUxEU hBfLSa pJJOb EjgXB HINhtx hkson uTucr TObTt BbfXj hjyax IAFVT igptL knyEZ kxIIr pLFTc oSZUigg dVrbS FHhTp Rnrzf QSqffP ksMSC cvnSf JlMdYb IzuJr jScYvA vGCkPj IshtWZY pRfVkD dmeDu hnXeBTp PmNYi RYxht JVtud FZemA oELkda ALCPn kjFXI OdvNg EMMUREPMMM EEMUQ UQMEH kCjLg MMEUE zpJJOI uyuac PunvZRa EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU QpOtTcs wUuiQ LVJNJ cuTvk Idagm efRFF BLgOADCcRl MQMUU IdaUzm nBfVW HSYFS UQMjE HSYFUQM EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd mQUQME lefHL ULMEH MUUEEMM UEEMMU BbjOns XWbBQpF ksCIy oVHpd FlbCmq TjGWEYs nDtBl PZBSeW VcQRgj PujXHZmGT locale ziostream badbit failbit CuUze PadIH nwjcS bBZgR tMYEqui WbvQhp kZGtDFd nsLXu OTuQK Ytlph GzDCjAs Jrqvn sHfzE Faxzgj PPjHaTG dDUxEy array length gunknown error address family supported already connected argument argument domain descriptor message connection already progress device resource directory empty Kfile large function supported unreachable xillegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device ufKhz process supported DASoperation supported owner protocol error state recoverable files system files dwrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx IRgaHz IRgaMHz IPgaHb WeHAlQ IRgaaHb gaEHh gaAEHu gaoHn mgalHV galaHe IRgaaHb gayHM gaXHe gawHe gaLHf gaLHh KFLsepmw jzwcsm zhKBh cdecl stdcall clrcall restrict operator vftable tSJHm typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx zINms BRSitz YGknWKjoF qBmGM LhtfW VPsBh vCAdIJ tHUAn gceil floor ldexp hypot frexp XEiFk ZHsinh JRXLZ ThFBpeP esWnYb xJTeTJu ZvQBbLSiyn NYKnpj XMonday Tuesday HoQhKxl xzFeb January HMarch April December EnumSystemLocalesEx KLCIDToLocaleName mgtXH mgtXH mgtXH mgtXH mgtXH trHUW cHFbxJ JkeOR CTSqLh pdOKuue xvwIgZq XNXBJRx QQuZR CYKtJ LtmYE rXTKc oZjYi JWIqP uQSzb lHrfAk paKEs KbGBeb BdMEB renYuSM cuKymA myLSXR RXWBi ezbQu pCAHO ppqYN RftyER QoCfQ TxSwDWt klhdr QWGrpv AGWgNV rBQxY XqPMO zGntH eXEjcPtas rONON kxgEH aLAAPT ContextStackSize ContextPriority SchedulingProtocol HbUmn tUmnL bQSsqrt ZfUUU wenQSa LuBZk SWWrXa JlflHK PZeWD usage usage zbkPn stetf AGjuP OoRqd nicehash nJkYg SBnTz vnsem Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ mQwzt jAUvIoY sjOHl LIBzC pwMOL YhjqA Eggpp JLXCM mNlVez iGShFMz JhytO MjnIVBB uGOQI widTS MuPArA IHjpV ABCDEF ECOpB CUQxrI llKkF ERDYW uPmDR pwhwj VvbfFmK Airak RvCsv xYWlD hqWqi jwPjX lEXus QyKxX zWmMI LjHUAni fYQtW Amaga PGGoz pxuof aedNmS zRQWV pFVjP zWmMI tLNNg nwjcS frylSH XSxEqe tjHUAn AWDZN NaOjfPV KUYmKw HusHx DfzaE bQSqw ssqjT mUmWN Weofc bfYcR rnNYa qTSqL IsZCN hTORM CtXrxc jMeDi fRSTT wKaOs khaOW qGfkh KVIRD JVrvsnUl HCzJE zVWAO VPotR NlpScq XKfHk MPPLu pskfzTr WSvgs HUCHQ qOrCS bQSXbw HusHT HuYsHx DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven RiseRiseRise Geode Geode OPTERON PHENOM PHENOM HFUSION FUSION FUSION FUSION Pentium zPentium Pentium Pentium Mobile Mobile Celeron XPentium IRWIN WESTMERE PENTIUM MOBILE HMOBILE WOLFDALE MEROM QUADCORE sPINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF ECANCELED HECONNABORTED mEUEDESTADDRREQ EEXIST EINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT ENOSYS ENOTCONN kosqvENOTEMPTY HENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE KUNKNOWN gENXIO EMLINK HEREMOTEIO permission denied gziNcr address family supported temporary failure permanent failure family supported hjresolved protocol unknown service available socket kUconnection already progress soperation canceled connection refused connection reset destination address required qhost unreachable interrupted system invalid argument error socket already connected sYyKL wmessage network unreachable buffer space available device VUnot enough memory machine network space device Usocket connected directory directory empty Izprotocol error result large system process scross device permitted unknown error KcUtoo links async event signal unknown error wHYsn malloc KEWJg MQQuv malloc malloc malloc malloc SQueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore CreateEvent SdxSR CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress kernel GetModuleHandleA CreateSymbolicLinkW CancelSynchronousIo powrprof socket Jclosesocket gMissing after object member sMissing object member GkojLK dnFfT escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected QSSyntax error value object array expected JHull Content Length false LnDiF XzPpR RjCzL GnvjG TlQWrvz DlPLi TdhmQ cCyBa ivZIn dGncO ixkoTP ntabObR AnErS wyISA TcqGr maksV Fhpnyx jXgeY hrYAn gdVrlS LhjTWv ADEupW fafyxijfhkdanfrzz tjHUAnL nwjcS dWHEV nKRYO qTSqr kDLNtU pxuoML wcZqOfW ESZLS iBsjO aWlAFw blMPht nsLXu khaOW CjlsT JVrvn HCzJE IHFYD elSFp PPjHZWG ZhkcY qOrCS tjHUAnL nwjcS dWHEV nKRYO qTSqr kDLNtU pxuoML wcZqOfW ESZLS iBsjO aWlAFw blMPht nsLXu khaOW CjlsT JVrvn HCzJE IHFYD elSFp PPjHZWG ZhkcY qOrCS tjHUAnL nwjcS dWHEV nKRYO qTSqr kDLNtU pxuoML wcZqOfW ESZLS iBsjO aWlAFw blMPht nsLXu khaOW CjlsT JVrvn HCzJE IHFYD elSFp PPjHZWG ZhkcY qOrCS tjHUAnL nwjcS dWHEV nKRYO qTSqr kDLNtU pxuoML wcZqOfW ESZLS iBsjO aWlAFw blMPht nsLXu khaOW CjlsT JVrvn HCzJE IHFYD elSFp PPjHZWG ZhkcY qOrCS tjHUAnL nwjcS dWHEV nKRYO qTSqr kDLNtU pxuoML wcZqOfW ESZLS iBsjO aWlAFw blMPht nsLXu khaOW CjlsT JVrvn HCzJE IHFYD elSFp PPjHZWG ZhkcY qOrCS tjHUAnL nwjcS dWHEV nKRYO qTSqr kDLNtU pxuoML wcZqOfW ESZLS iBsjO aWlAFw blMPht nsLXu khaOW CjlsT JVrvn HCzJE IHFYD elSFp PPjHZWG ZhkcY tqsUL tVqGr nKRYO CWsRU GkaRwcQ GezRuY zKMqlr uMweeQ zwDNce dDlIhwCtP jPuZw dWHEV nKRYO eTSqtr pxuoML wcZqOfW ESZLS iBsjO aWlAFw blMPht nsLXu habOW jlsTL yTrWi,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj qRuLL LRXFd xKBcrJH UCmNs YvAft PmAZk KXtIW vzjPR yXhcsf rKSMWk uRPlt fDZxm yHVIY DwdxQ UgBvz fYBdHSZ XjZfHWeEreZ FWwGq JBESxKc sqJcn btXLl saDxw AqIjA APrMjf yQSRi hLEnV gnlJf MOomu kRtPE rHDXj Gdqvr Jlbgl rreBiv RqmMb XNOzqR GmwQjd DzNyy Avepo XkUIx meIGGOC NQyWUJcU hEXKDK ZMokB rtsaq CGwGg dVlrMIJCzfG ksEehZ tQxWJz LoOTi rAdRs fcwVuvcAy JLHOx lOlNU plvAAS Pgftp gnVgD ONvlw FgWNN ginNiU pbjuy ggvlB OlFfh MDTezdn pHZPi KeOyw mboFkd peXHE zWRmM pkUmp nKjkZShPy hfwevrJ McSbvC bNLfi kzKkS hNRzWx nwIxtiyvs tvGvu dJoMYZwG qeeHt sJaEO ErHyA FToIB sGQBst DAUsa EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl UbYGAqUK ZaFuJdk goEGf FhMNb AUEBxKu UCRsC NMhIDik oZrdNy wiulxX ZAyKP Wxvbz KhwSw CYaEx pspDS qRywn BQJSC isMdXW XFUqv XdvWM OBzjfL dehfHrvc FaicD pvhBfBK FlwSy cyJGW vurkDwZQvd nfStT EQdRz PuHYM UwClO xjWKU WjcnLRl QaqtR yZIpn qIHese YxxAEy DfHfx iggex qEKKBy AmwoA sjGvZ XuvUPc bKdBtN orwGFPf lywcgftw dvmQx AuNlT hgcEo UQSVWf FysuQ rsYDb eVnvO tGuQQ SetCfx SVpYPWy xXQqPpD WwHXt PtaVjx nciVh BLsHc ULIwrf APADI ZWFWhBmx bGpMxz qpJjp JJgkk XRwvl zWnXZb gXWHukYS uETuce kVyEc idaMg PRYaGv JoVyjp TkjfLvu CEpKCE LWndS OIOxw eHiqqQ cAXeH rzpdMy HRuyi MUvmQ GtRrl LVPxhz DCeFvuex TYWrq MXfZfCN JGLuR SyQQS NKJhA MiUEJL FDBbVC xHsvj niqqe MBOzvA MspNy QKiHx QfVTKK OnNjR dgIOo yAWKoy hTppZ FaTuuGp dzfXyy rrooSP NjAOK Ljrjx AsDmr wxdVok qEDPU JAXGT PDYrNq NRzWY UdVKG BNXJp nacJCm cbsCG MVDmXR WMTLBmC VYbiC JmHBW bUfBM wMbxHj KIktmX XtNab YLclz qQyHXD XMwrV ORquX mQpdo fQveh sCKGJ uHViA mJTUOO gmBGnA HZtScB PbOYGeh bGzse dwzAp MnkLD hPsji wCCdf knovi pObtw GuHsg mQxOR EYGrni KkRCSTsWS yAElH TSUVWL VWRPN VWRPq cPcSN bPUkU JjolTH SVWhI JBPBea qbMoh oGHKw LQyFYzFE UJBIA bkQpSN CNUCAQxW JXObIi wjPKx ZjyeQp ZXVDHb RNZQc SUVWT oAGeFj orqIMO hGCjF OqcWs AJlTOf ecHBB CCZzj BzNzq rOWsc ZciJn OrZOa CqDAl kbpEB lbtrX jQrTC fpFuGgW ROkFxZ TYYeapV DtoJIQ muXAAXY GlwSvYUS tgWRC rbkgP cKoLL MUkktd RyHLe JrLrU wHBzis fLtRtf cCRoem RnHZR bAgYPV ezYcG KevEy ISIQMX ukqkA MehzpX peuRo jrUIe cFYjgE IwPqRBF HgrsRl bJAOC HxsBOJ fcFDo eUwOHBGb bbmWN MuxPtCH fgqAs VBIYK tPdmr uatBE HvUxER BBWFmy UTpgX qOwlXDIWP NuHuC ozlVSvak BJSnV QdRUo LHjqK qwhXX nTCWzmw azCcHHYh ChBAJN dayVG Urrab wWMdX tFSwsG etYSw syWYIWK XltmsR ZplIcvw EyCMz AVzQA bzwUO RDclR epNBToFtV qeJzd VPjLh bLAFc XMgCS EEieP PbZSp xDJCmN OHDZB YDgzH OWvSVg jBfAtC ywvqI TNTrT ZJzVh cmPYlCU Tapxe YwbRC PIKpx iCUmr rHXhXc wmQNBz hgshO PUxVW QXepp JurmWg qgIwvS GzCzL cVMZBBW XqjBr SQzvg DYhoX hwVwWt nzdGw DGDxgF AxKWz DGDxgF BanIi hPncl tvhHI eBWMx qKuaj uSUVhI enIYiN jeNLgt kUyFNZ FdQUQCE qJoRx pNylMa DyImtJ eiVdd PaPuiAx KntQsJA jBIQqm EELEI EzVIXl eDEAP kDUzIL CAnPKrh vqcfur HXfiJ wbKheD YLPPp uSCWh BVjyAc roPSU sXPVjt tLsdB TpAqRmIZ fCotS SUVWC ThRJF cnXawVXM gfZGo lTlPMB ZQAqBq RoiXGG BtwmR SUVWh dXQgTjuT arrqo qQSUVW vPIMk RXWiinc YTJta XawEL GdLEm RMzdt XZBMdmfu EmDDi GXGTt MnQhDF UvwqY RrcbH kPJMZY FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS iDqXNn bzgbC WjUsT UzrtG SoYkC mIBhV gRtPhlf FintkI hGFPm xIPEgH kmZmw cwHvWLyxNc QWGZS ctvmDN bvhxbvS wAVPUd XVoOXF CqkbaQn PtxUX fiKglzs wMPiuL ZSUjK EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE Zobnq buwmp ePsqi xYYEe HATUG YuqBWGa qdgoG MEEEEE MEEEEMe RlAFc TSVWu EPMMtM BYOLsap QUjhZ fBtNaUd PmJTUv jxHrK DWHUE MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE MEEEEE JpFai JGZWgNY vqudO hbaAo MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP SVWeMEEMM RMEEM IwkGfm HNTvwH tHMPb UrBAMOA dLAfo KHLWh QYNCG Wonlgkef Fukdui PwQyI bDFrfM EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM ygXaHC cFaeAb swTpu MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ XuqPJ LQCYF SXkabms XeiRNHjE QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UUDMEPM EtRMQMZEUE UREPMH EUUEEMMU CalGc SljRq NMktmc EEMME MMUUEEM SVWeQ EuWuS MhVawQ EBoQzluR kLSuq qIDQQ MvZHxM kqIbkqA Hravq hwCvJ GbnJwy uWMWI ApqpN fHzDw OjraWux MUElD Ifstr zYXKa RFpYP scFFHk olTnTlhZ jteJx gWQqsm IYNHJo lLAvJy jMYJA bguDI YTiLy qNhdi QwcdJ SOEvs Ezove XeGREE axNse PmmVip owlqZQ IPaDQ QrWqj oideDg MwwWug eKRHN WOXFi HtsfE hxAOOS yAgKMI eCOzt bSqAUri KnCqosG OXCoY ZiorfW UBHNv JeAsI KBgTq tUbGNKYkFjdcp TcKQo VJoHDtk BaSwISbe zZBPu TQBCRu gkvKtke pXifK MwTGv LQEkgo swakG CdRGS sEdjs NvrTw WEkWi EZzVm qOumThS YNHEw JapLQ zyMdGf PPGoB VpUfG YccvQ IhBXj ydZZBE mtJOU xJCbX dmYQM FOHwY hIwDZjIclh Nzkwa vWZTq rAecB XjHJb vFdyf pCUWi zriaW OenOH VjfZk HELtwS cJqEr XAUuCg RhCxr pxLgs cDpZx ycFUk vLbSD wzkrr ilBNot Cinrkb ITMKU TcuBc WxERo UjSsY JuZrD JDovyo xEGHu rdhkEJv mOioB gjTJnV JwbGzV XJNwF mlTRZ ArMWb YyfSA DrtPr BNnwC IruIL DstKg IxDWPr qSqiKOC PmqUna AgBFgk yvKREWKK OtZlH MfeOm ewQeS JtwvQv AHpVNxYdn JtWlj LHEEz ePkbWezri gIEQHo rcuZiJiFUK IvCAZhsZc wmCTV nTTWt lvDHo hsqQp ooavs Acyha SUVWj BABABA FcHumXO JIPxc vjNPi CGNKC qLzfg HdKTZ CMdXW PQYYt QiohUE uYSWu cZWHd EntelE ineIEE GenuE NMWkxo PeuEEEEd QGxLD gJEil wgCwiX dAgCRW QPEPh QPEPh PYYug PYYug YYEPV UQQEP ieeNR TvYJA mEWgc RmqxQ OdVSMn mNWSEBZ wTUQVu VVQYn EhgSTLgX XAUQSVu RuKzd HuYUV EPuuu DGfXoa SVWUu tfVUk tLxXj USVWUj UQPXY pmTfCv HmLCIzx CuiYM csmuP EGmXU XGpsji xjTQf FbDEK XNSKa lXQsiC tPtLw PQYYPV lmWmX Ujhxj JCiwn URPQQh USVWj tFZjYF PPPPPy UkBPN MeEPj BlUPejQ cWwUN thTvPtk PFhFd njfqD PBXQS EQPjjM VPuus UQQVu YERNcYf Bvwpb fRUBf oheMM SUSVWN fZpDe UQSVMWj OnOaKD OnOaKD DGCDSh aHkSPx ItOLt FdnCPTc KhkZMvW fsUMFnL GUQSV jAZjX FiWKNC NckUN HjNtH UQQVWjgYjGN PQPPESPW jsXfF JDOTW DUSVv BOBFc BokiWi ZrbDH hDbPm ehCtmH ogtBW UQQVW WBeVFi nGxkXhh VyUQQE BJpOhyO OzIyy cWEdPC XvIvc FscxAXT RPQQE VQuuH BfsYi KIYDo Mvshjf uEPEPWSY ivYAb YPVWSu kPVWSu PuHuflO WomvD urUnM MCIcqh Jdkld xOXtZ zFxDTi YQIGfP lxQbLOi jIgFirN esIxz CSilUG eKIwcXr VhtpW QcfdM VlpQF QhatC VCuTP uPuSW EEwPr UEHEu lHvDn Mcced mmlXT COqGG ihCxoi KIniE AFcqh RJIAK COEUR WtrTy zTnwO ITUQQS XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu nCKyUu etQybd hLCDh wlZxhM bofIHsb uBjAYjZ jAZjZ UQQVWO SVWtdAu qXlwSk LTUVu cmbilk ETnoK PDBJXau AmlsID xAhat KuaYVF YDHaVA wgTaAj CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp txoSnCt SUcsm hgUdEz EKBVP VgGQf YGbAK npeVS bzrllu FHqHS MEEEPu avSAq TJCyI tdJOq SOGYu PPPPPt PPPPP KqUkE ktXGn dDLvUQs HLMMQP uEIZL jTprWxs mAXJS adFCcD YYtVWh EWWPb uCYYt uVWTb WWWWWS gAbbC CqgnB YtVWj PPPPPPPPU VSYYt vFwGY EAEfEEj EPQEPEj sKcwW AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP lVMxX WixMdjG UQQfE fEEPj oUQybd Lbwzwd whyMyv EGWVj NrVEryV RnTwL NlXSLM baXEoC zrsiI MSVWu MQWPVk UKqZrHN qPyxLJ MEEEPu MdFwyX PPPPPWSu QQQPu VWuSu PPVWPu qcPvz XrEyUWVSM jcIoM HQfhV AohUU OhDXRx syKIn RlDmp oFjGk IQnmk Vsetu sqwkq kwEtt HrTgc fVnoB WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu EXClz HzXIBl aBRFN AGuTOQ THeBW KZXRAY QPLYYMt FwIbRct Omthu iLyZb ehiHf foDPR gAbnZH TLgXz dEgMlwWyT kjXTz QjDjg NcviY mUDOmohyS PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj jxZgT DWXoHi saOJtq zmQMD TKiOu JaZXed dLLsAtcqq qbOnn ZMAcS uZibO BFOaZf WxxVL WvvVL WHtAtVL iJfOqD vzFTF axQLLTh DNyMwt oQOpco KOtki NyOWL whhSje eQefBH BoOzh DElbdq TgEnts YGWHOd MGBdCX DXZtBtn MCxjO PBTyAFq dZGbb dhUNS Wdsra QQQPu MEEEPu EEPVYY vMZxK ohPPbl EaBRFD MdWFX pQNjQI neqzFft MqQZEL UWfKQup RWLOA fcsfm EPeuEEEEd csmuu UEcsmE PEEhg CQRZcxX Fvfto RlpML ecVoA VWlCv MdWFX UQQSV FnBeXVx KPVvG aVRej zaFSz byXnwm dvXDD skveJKI maEbF GOpzd NKtSnBY DtXaUl mXWJU rLeKq TLRXWY qQpYm lmIYA ipHnr hYuty SeJKc VHIak DNkzc IdWwu TUDFD twGzet autvVKG Rwtlgv nuASJ OeVOHI wGqMX iTFDU WLuci PkFwBv lHCTxNL YekbM zVxhybX HNtlLl fbyyR XqDOy aAGKKc jUuwSV RYbzA kIPHjv YnbtKys SRpaUO lkNmx ZcQmQX YdNLxO PCcKv OZVxZ EISmW NttqR WMrnFa ltmoA QDReR tFMaJ gMsjPb JnzSc tJgpbn xcpMP FTgFSw qrmNBG TKyXNm VAGmyCpxU AlFRC aHhzP SOURG jbLJzx PBylg ShWLu TOjiA YGJBBUQ JegXu QfmivgyPH jIkrF asMahOx Dghyoh keZEQ TothMOdl mJTUp nmzehK IwkHWxv qpuim jxEPD tQWIJ faMgz vaZzn eqMXMP LJocR ZTorh nQvKJzXr rLhkN cOIRU FfWiaX CVzsP dxghF Tblayg ssvpG QMawC fNtAf XWcmUSD PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH mXmmP UUQMj ureos kfMpwwsMdRZ hbKLXB MuUMEIEPML UMEMd NTdEYl pLVlGk FMgUjh EEEMEME HnEMI MEEEE ntJETE EPEPM eFYYau elFUQQMEM TQRHQ Ynmkr uDxfF QWPOOT ePALBPfP zSrGb aTWeM wqPNRmD QjdWG TLZbP YXJGZk BcYEbU dkkounc lOCOX qPFEk VGjou isvZv KNjgXr uUpFJ UzuZm HXXtW YEoYrnSZ yjGCM KDUXPx tiMaVl RSanhK EMMUREPMMM EEMUQ CSPFc UQMEH MMEUE pvhBW EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU YjQCd MQMUU wfnLEC mJTUU vUQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd ZKwxV TLUQME ULMEH MUUEEMM UEEMMU QmfRZ Lzega CMXAc fCNXEY lOmzfhi GYjnQ YCEli ZlwdR DVHllcB bTfRYj UKHnZ gUbad locale iostream badbit failbit lCzWFc nnVyb lCQbYOnWc hdVVmx HJCEWE AflWb rDvMo urcsRg wDhkj gplEPGlr DVdmL Owsaq yVfKus hDwZTs uGPNt SFHvO zGaScc lkdRR oidRDgn ElNclB ItkWOx dzWLD BZJcwqKiME OZAMZ array length unknown error address family supported already connected argument argument domain descriptor message connection already progress device resource directory empty large function supported unreachable illegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device process supported moperation supported owner protocol error state recoverable files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer ogfRe InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx xioXP BfrTF zFcQmR ImBUk zFJQem Qkupc Xucsm cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx kHNhY hhfIqU CLnmeXAu xMrUZ zamUx NmpbXrJZ fEWwzu MBeKDFN floor ldexp hypot frexp Zeexp qndql UTdWk lglFf yAMFHz Monday Tuesday SGOct January March April December zFcuQ Edzmq uhzFc EnumSystemLocalesEx dLCIDToLocaleName FRQem cgDHSx hzFpQ zFBQmRq Whurb NzTFQmXp tyArM QlnzqDQmw gxtts BSzDkg glNUXYAJ aswqgL EFTsC RefFW LtmYE PaPkL ZcVjwJu pLiYb DZGRG FmNAMt Kagrf EBpumIJ uTWGp kNvTh fGuiDW xzKif XheES MZpdONR HktqA ZKpYy iTYaNXM ARsNj vfXtu koxedm FmDtlg jfyoYk OLJVK AdCDa JSQcOe whlxX AgnMbUf qcRAJ Kkvlp rIWsMezX fFDcSU zGntH CzFcG hTAMhiSh pbPgb ContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey ZeERG zFcsQm Qmsqrt ZfUUU KqUjF NfdVM RfNIKO CAgJr ibvaM usage usage frJJNN VtcDXs KDFkxb EfvAdKi nicehash Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ EXPdi IdWqK FHDQJ laLCvhK mUJGK qIAGyXF mJNvNg JLXCM mNlVez xcnYj vYiDc tlAWn yypdhb eAUgS DJKpAv DAEObOj RuxgSz zVckJn jwEDz ABCDEF eJpfr UZjHKz CsMdXA NPHWmBt YATnlpv QfzeLj svfWpe cUCOm QsRnVJ yjwPX apRqS swDEw GQQNL RFbavG xzOLF zVSyd CsMqC SDYgHd vMctK ZdygU YCXJhIeGs JWpfJkt vvUGWq wCcbz dvouq GXlCzFc MBKDFN sVOio HrpSK ydOnG QdVGUoEa Lzcgv CAwFaN LxnjUi QLerJ CzAFcQmN kxkfA brMrXlCzFc wPdOYG OUmHf TVhwFm nyWct KjHzS ZoXco QXlCzFc ArMXlCzFc pkUaI fxSjW GBqtb oiDMoBWAO alEPEaS swqMQ VKupxD QFBgq bQRcCg zJuEB XypzHrOwl ylmPZ OkqxAOH asEkk hHvKqI oSZllhdRRS csNjd jGkdb PbWClcq iPERG ZJcwqKiME SzGdxw JWRhrOQNB KCFwe bgxJkZoX GmCpu ZoXco DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven FcRiseRiseRise Geode Geode OPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION Pentium TpPentium Pentium Pentium qydQm Mobile Mobile Celeron Pentium IRWIN WESTMERE PENTIUM XTCORE MOBILE MOBILE WOLFDALE MEROM QUADCORE PINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED RMpxwcZoX whkzY Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF ECANCELED ECONNABORTED EDESTADDRREQ EEXIST EINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY ENOTSUP EPERM EPIPE rMESHUTDOWN ESPIPE dUNKNOWN ENXIO EMLINK EREMOTEIO permission denied address family supported temporary failure Fcpermanent failure family supported resolved protocol unknown service available socket connection already progress operation canceled Fcconnection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected message network unreachable buffer space available device Kmxonot enough memory machine network space device socket connected directory directory empty VVprotocol error result large system WXWEWO djpmj process cross device permitted unknown error links async event signal unknown error afrXd malloc malloc malloc malloc malloc mQueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore CzCreateEvent CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress HTlxt GetProcAddress GetProcAddress kernel GetModuleHandleA CancelSynchronousIo powrprof OYFdZf RsRsocket closesocket Missing after object member Missing object member iqRBad escape sequence string Column additional characters expected parse unicode surrogate ObOUm inBad unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected hZQmSyntax error value object array expected Content Length false XgDNB ZbZOB ukbrGitiR crOHy Ewsbb bqNGxdaRNIM yWhSJ xfbTOM dsPIuf MxZppNbRa IgKdCz fIgoI GYSDNua ZBuVV JmFFb DGQqs KkpGe MfPVg kbZtow vZhiv oEeGn bMioXF qQfunG gTaBU wpqDRd mxEUq zHcVl dCtpH yTZKg fZVGdD imizi GZQOuM fafyxijfhkdanfrzz CsMdXA oiDMoBW DkEjz nKAVa wlBfW NjAvK ruEzv iypzHrOwl UfVWil JNlmPZ GPNdCX askkI SFHvObz ZllhdRRS oidaDgg vsfbn KcqMepo zCcFMYre QOoui ucnHh BZJcwqKiME JWRhrOQNB KzMSA CsMdXA oiDMoBW DkEjz nKAVa wlBfW NjAvK ruEzv iypzHrOwl UfVWil JNlmPZ GPNdCX askkI SFHvObz ZllhdRRS oidaDgg vsfbn KcqMepo zCcFMYre QOoui ucnHh BZJcwqKiME JWRhrOQNB KzMSA CsMdXA oiDMoBW DkEjz nKAVa wlBfW NjAvK ruEzv iypzHrOwl UfVWil JNlmPZ GPNdCX askkI SFHvObz ZllhdRRS oidaDgg vsfbn KcqMepo zCcFMYre QOoui ucnHh BZJcwqKiME JWRhrOQNB KzMSA CsMdXA oiDMoBW DkEjz nKAVa wlBfW NjAvK ruEzv iypzHrOwl UfVWil JNlmPZ GPNdCX askkI SFHvObz ZllhdRRS oidaDgg vsfbn KcqMepo zCcFMYre QOoui ucnHh BZJcwqKiME JWRhrOQNB KzMSA CsMdXA oiDMoBW DkEjz nKAVa wlBfW NjAvK ruEzv iypzHrOwl UfVWil JNlmPZ GPNdCX askkI SFHvObz ZllhdRRS oidaDgg vsfbn KcqMepo zCcFMYre QOoui ucnHh BZJcwqKiME JWRhrOQNB KzMSA CsMdXA oiDMoBW DkEjz nKAVa wlBfW NjAvK ruEzv iypzHrOwl UfVWil JNlmPZ GPNdCX askkI SFHvObz ZllhdRRS oidaDgg vsfbn KcqMepo zCcFMYre QOoui ucnHh BZJcwqKiME JWRhrOQNB MBepDF aiIiU ydXATuK Cqxyajz PUvTHrU VJkeYhHk KOAnT jSdsj XsQRNd yZcXhc juvxn qHkSio CsMAV tWCxq DSiUe OVyppjCWG EThvP Rwjff MDRxF CsMdXA slokE LHVGm oiDKMoBWO Jkwfrq DkEjz nKAVa wlBfW NjAvK ruEzv iypzHrOwl UVWil KZFqO EWskkW fsNjdWe efIjXJ,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj uTPUqpJ jjKenN lkICK rJNuOx LfmVic bHcgy gjVhwpH tjTmKa qeQca Oilhp ffQUH mcWgc rWIGk tipHo Ypcyq fQnLK YuhaOS mlVxR tOWll jjEyK eUxSp xWVBg wEElq EFUGk biotXI ZTTXKTu FNKiW YCDjT sYsCV LKlSh MHixm sBJfSeuz KMERqm CtRjd KKuxl iJauws PqihI RcgHux JSgjH aIcHF FkjqC ObzXvX cmVbZ pIIyh uowTD Mjqgw WijAnf cDTCc bMiRB DtXjk HAKkfv nUWxj COgTW tMWnu aTaDC wRwBI rCPdO rEutadP wNVyAi RawMbx ltqvYeWv qJwwt zEopf jOXOK srpQdE StJxUhTgk akiUl EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl zUhYoiX YpJBY oUrWX oldKu JLzIr bCBci qWaMg NrvIRq nKkAhA onQcr TeDhFO ilyNP kSOIc UoRToYpv wYuFV kEJKi HjGKD HHyLA vLEsUA SMQcIdJbXe lfCxFO zhsLZH SWmCH sNofK JpDge Wvdaz HDRYwM ctepq ttIyR fGdBmr sWQeu eWAWy dtFEc rXDXdeGc QVWKu CpXtf WfUQSVWf bqkSLX GYTZZR sDfeWO wCfwF hGvvI xskrx JJIkj SVpYPWy xXQqPpD WwHXt nyzew eackL HYVeS TjCJeu ABGotN ShTGI hepzQxHo IIuZh kJYfBc mWxUcs OpzUf raPUPC YBeRF WWYzTS FOkJMz Ypmut VFGmHyw sIeHEkK Ojnwb YoFlc KEbEuV dusca gneET vtxmq AhpEMbvoRjv HcjeDv tEJTt grguR uzyLx JwHIb ujVEQ ZQBMo ZqUmR VpruCk kmoYT vxiEX bNrMn bkVFP qaakt ArFJsn qHoJT PaiYG jGJeiIc dJYETiQK AkmAm tedZBx axnle eeccy LpaAs OoAyU nhVUy YwVkz ztnRHI OTRSp aCZPyy aCksn tLwNXG JigUFa AFlIl sWrkw VdeMl YDSBB sDVuc WUKBz MYSFJ fHiws wzqzj pcZYo IvnRN AAfde vbbMG hTUeCs BSFPBO COglINXX mGtqi JEPkUz fjYPs KLnWY LOxfNf pKFGG swYis XBoRK vQPlN bWGSc ISaxRl cWPQyc Cynyp HizhsDS SYWSE wodoA haEcE rIJuo WmwSN SqxEC UPeuV oPFoW TSUVWL VWRPN VWRPq tDAiUj ixnMwe DCRIPh SmMZFe nFQFd gdkzC gjyIBj PxynXA vUsZUC SVWhI uTPUq PgJKZ uTPUqpA zQcSU yXVRLPT ZtOOn AIAPlO irRYWc MwFaWK lzLEoL zpPSP FzLLXW qmQXl eRHun SUVWT tmIYJ nnQCA ZBEfP ZlLckk azTnK WuRwW yTqkxkz guhZEht QAFUuO mfJJi ItLEB kONdBs UpvRo wMxSp Wkrqn czhRC rIZMrvSp RjzgC lAOmOp HJOdr QDxJUG qZrKRY jzVBl TTvPD MvRaS GSmgz lGOKL Rmolqo kKIlgH LIMnui qdgWl SrGFHP ZqZGM kKCOjocLd gpUhePqcRV hpgRM tdQMu uRSvA bKJNf HlAyO bjThM jLqYX OGJAB BYcLq rQlps bIemL FhZAN IHzzs NkeCB bzeJt TCJSET kZuGH sciLV VbhDJncL NRfpm jDpmk nICkqNL OVfuy AublA krZfsXSc uhWsv TBXaxn oGdRVFkT fLraO lwDlNk bbbsW ZdSPAu PyIOIvE znKqC WSWYJG FpOmc mfGYLn gnUneBK hCVeB SUGcZET ahxyY PnZgx xudSq MmKjJ vpVlK NIEnP GTqUs aEcAkk lvyrfC wJZfc Rfvtx ofQejT DEcIr FWjbXB thxvY grVvt fMgeu FhbEoo sIXQDJ WxbDO IZLUG VPjLh haTfC dGWvy WXmyA JoMun iWKRW UpviL rdubM SHExC mieDg wWyHPi lfdkj egRJrz KCYBuh igVSKY OCgkSU StlMd tfZtDNk nNSUcPnH GXlaV mDmnoaw QCYYV DZuUB OZUlL wpUYW XBfvamQJgjOyM CLLIrEN WiOrs TRnnp NhcRuB whQnTP dOXxdLJ AvmBDpG hpTUXN ltBFg gZmYB NtVMdSPIqb Waxnb qbQcHx EqCby eqXHI CybdmB IqOMY ylImVw HQSam InGdnN rbAPeMu IrZEMuuByS scFjpa QxObC glCni scFjpa QxObC bDinV tvhHI ACcxbxoj uSUVhI swAAa VfAqXY fKkkxuIih tqBGr oNHCOC IKRZvgyGq dOfDMtl AYxZXM PqHai AhTcRa zKiNw IoiNVif WDykB ZmYbp HZuaxVeXT JHuvjdc MJMpRg gBqQcKf JdXJa GIUlsdj Ugtult sXPVjt tLsdB SUVWC wkGhrr GjNow UiVDi DYfXm ezhPxW YiEBnnm rpWvYCZ SUVWh aQSUVW pJKqY ZvJuq UuKsf hLzatOloGf GXGTt WWDYr FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS eKzATg cpLQbT LAzGd tuCHd kDeZoL ilfJJTCz SJFBLfuw BTdOo NuZfj SnJmfVc dtcnC oPgkN thZAt EAyJy hXCMU lNDMOqb tOfdyXs eExEp OmoHv CJEWd ZYyPF HrBbJ EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE fZDSo yYfkgP eEUjh xYYEe iGCis QRhXJ ytZKW uTPUqp MEEEEE MEEEEMe TSVWu EPMMtM uTPUqpsjq CyevW uTPUq iCuNAs TSusq jYvht MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE uTPUqpHR MEEEEE wOSWsq TJEbJ ryVvS fScUGz UgQLcl BQjHCZ SeCZej BGHDo IGhNu ERfjBQU MEEEEE MEEEEE EEEEE uTPUq EMMUU UEEMMU SVWeMM MMUUEE MQUREP uhUVHB Pcqla jGoRlH rucxPY SVWeMEEMM RMEEM uTPUq NIqYf LpAjIHY duBKPS lmBLSc vpueg MONrS FjyFuW qgqHFDB wWGBX kRZyMr Tlybu EmPkmBU EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE wsheAKJM WfUjh EMMUU UREPM uTPUqpLeqIH UqFkl pctuv OSzCE zQcTRPGk uTPUq ZRLZH MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ FJmEnZ YSoUQo QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU ClNrk MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE EUDMEPM EtRMQMZEUE UREPMH EUUEEMMU OHrik hKgit EEMME MMUUEEM SVWeQ EuWuS DJDXU GrChk HVDbz TNoyc Gqudx Cbkcy uIBKW JfSeu pOvhFc wMDCz sjZyjE IloOOX SNEZU baTKh nZlgr SkGRO yLeYQ TBiojq eJBKFL rhhgw jJVkVxA bTMPjG pzZjEpj EleKyC LQDhA NdzvJ imdfq JRRWYiFq VKuKV MvIEZT InmMH fOCFK yfbfOU XcIkl wfFgdSh sZhlA Bzqbpg vGmrq MHhKvc bNYhy RDIZV YuGGt xsatySS qxXoHa yqzsU KBgGoJ vLBOzo yDkwNUF ujOFB TjrNUY tGKBl bIFjx pFsaDbC okTrj TPMNuU wFEsXb FQXfNZTKdy SIBsZ vLPPw ejrXx QxFSBlb mEARd oJYAzKD bwgZHNa eyICz IohSv jpSyCn nxyeZ JTtLc pdFPq IFcFAa FcuzNR pkEaZ hTGDFRM pgmGG ATEAP litYZk CzLWz ttsZSm jYQHV iWWtM rgeaAYG QdwEg posuS RQrCYu JjmPDBE ndZWe FwsnN reOaI Gszhcbl uvDnGe jENoqv roNnnZ NlLPl RjkAnSb hLMMZ ARxzx aAFmvj KXLVJ Ivdsv nQJUwbf EBnAAOZ MkGhD iZedW dJnIY OLjPzVeP IfXApx HMJGYf tDjpr fHqds Jdpmxw ovqyeY hzeXh lZTGAi sxYkF cVSPJEI sDyxDzM Hgngvj jONlI CfVeV tylii QMTdU IgJTI PBWfoQ azPRf hOPrN xrSHI ZSKjuJ Nwghk spdxV moOmD HmRsF gSjvM ydeeKV Gbqyvyp SUVWj BABABA wSSrp zYwybpO icfcd rCQIBH ZOPpLS cxIbg PQYYt NqjPgG uYSWu pCJwl EntelE ineIEE GenuE TBJOkT PeuEEEEd AUQVu QPEPh QPEPh TUjhJ MRYXl fzaYT yiGGy YrUeHA JQeVWj PYYug PYYug YYEPV YaBUQQEP EJUWg BDqGWNV trJLL VVQYn BiJMI UQSVu sYUVu HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY bPbBE YhzfiP YidQN fxOyK CuiYM csmuP igDoi FePAHs tPtLw PQYYPV Ujhxj ifSVWT URPQQh USVWj VRzlc PPPPPy TyQkF zUnMMj bvUWM MeEPj gQFdF DRIaL hQsYQ ASPBJ RBxrH ftUYU hMboPzT wKQlr EQPjjM VPuus Wtbwx xvzXs lwUQQVu VsWYlG QDzsCQ ROeuC EKZlbY DBzmk USVWN BHHSZ XHIAi dRSQro UQSVMWj VqqCFDMJ LvzPaG wfPOl CFDMJ isFgx sQCqS MUbkX ItOLt KvdWww cxMrc hrIoyv CHnPlD ucObN IomuUQSV jAZjX tuoEW zPUtE eghUgf aUQQVWjgYjGN PQPPESPW jsXfF yJvMT FSVWF IZdNQ UQQVW wmGXFDE bEbxv oUnJzo MUQQE soInm rzSAX fGLVQ wDyCFg KnRwX sMefeNSR wexrf RPQQE VQuuH RAKru uEPEPWSY YPVWSu kPVWSu VPTRg YpePi dkzYy NiuYar TkCeF uMYLy bUUOp JpMkD ZKOLD LOFqa HwqsKo cpzqgh GBuxf KOPTi oRDOA NcVLv UnbKw nllYN jvUJz uPuSW EEwPr UEHEu zOhIs PHzhx eipjb apUQVV wSBEe WktBz XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu cveUu RTtJq uBjAYjZ bNUdq jAZjZ UQQVWO yawdj SVWtdAu TCUVu CFCVRWSJ IUQVu rBUHU dIdKfh gJGzi cVOlg goMUi SuSJwm GgRspe CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp XLzNQSY ssRCt gzqSBu BxWVqcVu fMkVXo aigYa xUhSw QvTwto MEEEPu RNqpB KWvJr xuSWV SOGYu PPPPPt PPPPP vKQHYoH ddbMv HnnUQs HLMMQP bJShs Zbpvb tOJJk YYtVWh EWWPb uCYYt uVWTb WWWWWS hMsQG UcAVz eYxFKSW kFUza beweY YtVWj PPPPPPPPU icNxT VSYYt bKXBB PBPBWv RsTijys EAEfEEj EPQEPEj AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP hyULY ZNcFg UQQfE fEEPj rJLdN jzDNa EJPBm tKvsA EGWVj MECJr fgZLX ncIXgE NHUpq MSVWu MQWPVk gJmQM BibGN MEEEPu NrnoJc JzXsZ QRwZu SjroSe mDueCEQ NIcqO PPPPPWSu QQQPu VWuSu PPVWPu UWVSM FuoFjK PUwxQ oibXY qkGSjk zmYRP YaNHv nEYBl WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu ioXgU wnrzy CpBHP uMJmE QPLYYMt opftV ZNqOf SCOKG izGcrv hiRGo AYUEm bCMSrA dcFSR bBFVkw WzBLn aaNQD mQcBt ceLPI BjMuz oAWQY suCVOwq mQIhxN kyfuH VUGzh YYcWf yCUJCRj PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj ZTveP zLQpM vRDFUEC IbgkN JZvCq hRqhA kzxXj ryDpd lMPZe IxTibb AtqVsp MCotL DjSYj hhDOQr WxxVL issYdg YENWK WvvVL WHtAtVL YCHXFzmEui OhdKkP ToFhH CvGoz XHjqV AiSxOTq VZVyk mcmtKo ZoLsf rolOZ synRe AlZGW OMkbI umuui QQQPu kpOIq RrSgkz MEEEPu EEPVYY uxUHzu WAmlD LugWS uQopsva wbzWVU EPeuEEEEd csmuu UEcsmE PEEhg MlgFNof VWlCv UQQSV VPUcT SxSAx qXHfTz sPFnD kYsyz jiwqwS wrfPeY fzEQm xxfkP YeiDV wHwjV lnvqbCvT IcSndkp kkdmK pTHgY jTOHAe nBLAj PNunq gLvSK XYoXHtb Gmdfrv LAyyMm xfmlj wXiajB ytmupY BWRMi KZVgQ myXAc jIsVG cOnBvO QaCUi AIeHNC vWtKt cSKVl vdRUR TPiXK Zajfx soASd JWgfx gYijI jNVhIatnD DknIzoav SNLQk wFLtny HmNqx cFAky jwRExmx oJiCMLp PvoiJ cSHiO VMRgj xyBKe MLfxRc PVoHk iLnux EgqUPZqab ktXfdO gBMrG mxVdL nCyzM mikqX cwzrb HXXTr PkSxn aylECo fXqTi jXjBZ Uliutgh ZSfDdXXN burRY gxprl Uplsgt uzBebGAd ppNwL jiMQvv viFMEQmP BYmDYd QhIUGB GBLRgF xIIcB KqbWNuX ZEBAB TLwUYf LjaBH pEfkSxL ZoUkVtZ VpeME DqnPY zolMt IfAGC MXvpRK VwEtBy WORlY gHujD sspQT WiLTcRa OfoSZ uppKt WfjxEPD UWbwHGz SnMTpKKc wSSrXyB IzuWM MXMPpK GXaDn YjzurW uQBCi bqyvy AjSuM jQJUib PrZvu NEkzd NPOmm hjeBBX MRpGKb eRtneM PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI vGBQgDt uHEPu uEHPo DYPEYPhH uTPUqpHV SjbLk RSEkv jpfhD REiwPV CsJSv sVFBe MuUMEIEPML UMEMd uTPUqpKPq KOScJ LZWSI kYCBr Breok EEEMEME HnEMI MEEEE ntJETE EPEPM uTPUqp GUaYl UQQMEM uTPUqp fWOfLj dvDsG wjENsz ZXLdN ITLcUHv uTPUqpA eqOIH OyqyS wqQmo tOAQsB yLoqS oNnIB SGIfhRE NhQvp HotkV bYmjaI iIUhaFp PByvG mujqS fHzLc TbbWNB JyrVP Bzkery VjsZN IIZPiy CpHsq XoiNlD YSKSC nmEAtJT slFsT hEsVq ZaiNN ejwNbk QZipqM pQXsxc VnWOc SZKPn oRVESGTiD JcZBf kXkGq WLUHJvC yaGZw MgSpKy WzRZbIH QCIHz kHdpFDMxC GXdJAD EMMUREPMMM EEMUQ zzCxo UQMEH EbtxL MMEUE KyjENo EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU fWYnQ DKPPd lGUjh MQMUU NIqYf avDhLXR pxriK UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd uTPUqp ULMEH MUUEEMM UEEMMU rEUqz QGzIbW sxIPW xdQBGblrS TqKVB VsRHu rJkvXsyD tsPSUtUt iTSoP BcrTc lHYneF bALyPzF sKBHUTFP IRrao ZgJAVRp iiyyt gWzOM bYXcyUl qabad locale kvWoK iostream oqUqn badbit failbit aEooKa MxBIP htuTrBzU bQusn lQrMtA aotnL wNkwLv QLyPW UsBHUTFPH Fpzqd ggJnARp oLCus xseATt cSUZM eHaxW array length qaXMcx unknown error address family supported yalready connected argument argument domain descriptor message TqaUB Wconnection already progress device resource directory empty dqgKlHX Afile large function supported unreachable illegal sequence inappropriate control operation Winvalid error directory Wnetwork reset network unreachable buffer space child process message available message space device cYxRp process nAqnot supported operation supported WmUqowner protocol error zqaOH state recoverable files system files EMrwWh jwrong protocol FlsAlloc FlsFree SetThreadpoolTimer hakIkj InitializeSRWLock hakIk CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx UqyCq fZNoX flFQr RqfWCPS UkpGk ybwqQ uObzk uznje NWUqe zruzcnj lDEUU LFJvcIVFqY AihyP zNnpj UqzhW cdecl stdcall clrcall Qrestrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx eEuhO CIztl UvWCF RYGqa KrHCJ PdaOX PUqzh uhznj UOxdw RwjqS iBasin tiBsin floor ldexp hypot HqRiBfrexp vlexp zrOuN ycJSY BTAxi dHcbJD kcnSy NzEgb fQgNc YBWed Monday Tuesday January March April uhDecember zEnji Qgsaa vAihy RWjSfC zNnpj ALCIDToLocaleName PUqzh MuEzLnj jqSfC uyewxl kfZNj yejax NOKuyIP AuokyKAl zGcIM xYztK iMxEY ExbXq rZKSnw Voewt PICeQ LtmYE TVcorY yqiwDQW pElfK hztQc movqpd HgOHc ZpBHU dyWMZ sCYCx hCXcR LSFkv lgZNfS XXZzW zGntH WkFprY KSiuMM slfaSL ContextPriority SchedulingProtocol uhIzknjo qoYjb RpqSP ZfUUU BtdrLlWc XzwoW IzrcN usage usage grCAq RGpwC wKJca qYyzw gauctT nicehash xMKhE tESYqWe Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ YTLfZafy qvWCp GGPPU PFdCW mhknxZm dnqqx JLXCM mNlVez eLobQdA IFpRm bZUsDXY admldq qCNkx vrLKvSJ OCiKf MbKNh ySTQpy APffm ooHtnW pTCuSi WGRvq ABCDEF fMyXk PUqzh jENofK ayodmwAr RvMKJ Dqqlf PcwAOU cGmcJz luahjV nClvB FqgUN dizuJSPO FcZIfM mEMXe PUqzh PUqzhW EBNuh IqYSjb Dmnyw QcidSf WNRSfZz HiFWm Igobf PUqzh dntCp jENofK PUqzh PUqzh PUqzh lBuhAxha PUqzh dkSpCMlv MxyBE GjGOp PUqzh lBuhIxnj PUqzh XlBqgx PUqzh PUqzh qgTIx PUqzh PUqzh PUqzh PUqzh PUqzh lBqgSx PUqzh PUqzh PUqzh PUqzh PUqzh NNIqYSjb EgjqSm KqPtY Olwzl iWtuY WJwib RSDQy bxnau FbQcu Twpjk ksAFl XVsBT VsRHu IsBHU dTwsH jGpXg HipPpdd IhXJsV iOvhi UcAEt cVZrkK RWHoxl lYwgH ctLcc AkmWMy jYQxcb lkfBWIMQ xLxGu jENofK PUqBa uhEnj PUqzh BNuhAEnj uhYEnj DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso WAuthenticAMD WCyrixInstead NexGenDriven WreSU EnjRiseRiseRise Geode Geode BOPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION Pentium Pentium OPUqPentium Pentium azOuhCPU Mobile Mobile Celeron BPentium IRWIN WESTMERE PENTIUM MOBILE MOBILE WOLFDALE MEROM QUADCORE zcTvzhfLT PINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED KavRd PUqzh PUqzh IqYSjb PUqzh Syosc Unknown system error Unknown system error DcCBEACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN YitEAI AGAIN BADFLAGS CANCELED FAMILY nRICqEAI NONAME PROTOCOL SERVICE XJLXS EALREADY EBADF JBECANCELED ECONNABORTED hEDESTADDRREQ EEXIST yEINVAL NkOFB UqEMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE qENOMEM BENOPROTOOPT BENOSYS ENOTCONN BENOTEMPTY ENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE AUNKNOWN ENXIO EMLINK EREMOTEIO ZTjlX Foqpermission denied address family supported temporary failure Enjpermanent failure family supported resolved protocol unknown service available socket whconnection already progress operation canceled Enjconnection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected ckmessage Onetwork unreachable buffer space available device enough memory machine network space device YOzhsocket connected directory directory empty RzzDwhg protocol error hresult large system EHEnjno process wPUqAHF cross device permitted unknown error links async CJBfs event OPUqpoll signal unknown error malloc malloc RJJyh malloc malloc malloc QueueUserWorkItem malloc CreateEvent hakIk WaitForSingleObject ReleaseSemaphore Gmznj zCreateEvent CreateEvent CreateEvent jAiyT nzzuCz iphlpapi ntdll GetModuleHandleA GetProcAddress UqGetProcAddress GetProcAddress TzzDOPUq rkernel GetModuleHandleA powrprof socket closesocket Missing after object member Missing object member gcjBad escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected Content Length iBfalse BRVQS RwLBk xpPEeB nCCowKdZi ksAujk WkDNS GWKEkN WuvhG xJTjY xUeFPy CaqrZ IZlOJ SRJzTB kYWQBv IhyzE Sjaoi vUXMya XYWcyCtuD fafyxijfhkdanfrzz PUqzh IqYSjb jENofK QCybHQ azYUz LMxIbPW ksAFl VsRHu Ccynv wNknw jYsnCF DWdfD IsBHUTd cSUZM jAaXu AkmWMy xpkJXX TVVuih jYQxcb PUqzh IqYSjb jENofK QCybHQ azYUz LMxIbPW ksAFl VsRHu Ccynv wNknw jYsnCF DWdfD IsBHUTd cSUZM jAaXu AkmWMy xpkJXX TVVuih jYQxcb PUqzh IqYSjb jENofK QCybHQ azYUz LMxIbPW ksAFl VsRHu Ccynv wNknw jYsnCF DWdfD IsBHUTd cSUZM jAaXu AkmWMy xpkJXX TVVuih jYQxcb PUqzh IqYSjb jENofK QCybHQ azYUz LMxIbPW ksAFl VsRHu Ccynv wNknw jYsnCF DWdfD IsBHUTd cSUZM jAaXu AkmWMy xpkJXX TVVuih jYQxcb PUqzh IqYSjb jENofK QCybHQ azYUz LMxIbPW ksAFl VsRHu Ccynv wNknw jYsnCF DWdfD IsBHUTd cSUZM jAaXu AkmWMy xpkJXX TVVuih jYQxcb PUqzh IqYSjb jENofK QCybHQ azYUz LMxIbPW ksAFl VsRHu Ccynv wNknw jYsnCF DWdfD IsBHUTd cSUZM jAaXuA PUqzvh EnjWc IqYSjb jENoK QCybHQ azYUz iEcBZ xbPip LSVqtIiL yWVhG Gvkom bYxHNRU mJNpl Guhzgnj njqSr GzdaWj hYqVBaT TGMuk exwrB PUqzh nzfMOWq XFHbb zzDIZr QCybHQ LMxIbPW rGYmK blvrM GGLEyq ksAFl VsRHu Ccynv wNknw jYsnCF DWdfD IsBHUTd AMRKp opQQD iOirG trOYC EkUxx kiRCP zrzfc,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj sVoWzhq KZjTxN ylAyTu ilrkNL KctAX TYzpq kqmBU xtfcU wySVt dhRup lmzCm KIDWm cEsEUE BFNBH ddXEaB jdYxo vzYyR xeAmeG IJLVu aeTwY DxbJn SsWjf ZfSDQ xmaEB fpjiPT wixPI tjpjfl kADrV nMvKTD fzmJPUK AqEJm dlYxot fFcwq RupRwR HdgNPP OLsMM UDMzR JwKDf IvDQkJ zAPGv Slsaq rlnQt pSSLf mXdgOwu VwQCI twHwqsQ uItUB xmhAXK yFnkk jlgcwl naDRo IVgVD maooJ xguVO DKDczvh TaPbJe knkWP PyEiK vjFgl UkfiIxH sNToHa tNSCP cQVZkID pzvELe chfAu waHEv ZyuVo iwWSz NVVfk gYMsS mszNJ PgiwJ yZXMX siKRN CnkDux UzSYJ YUCMh ZiGuWEB ElssrQzSL ztfDq ZHBxZ iYIoWo xJtRn DXFCU HwSNZ fRtxv MlHtI EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl sYlOPj iCcZs YcDiv mvOXP spFYmpJ mwdXfY ItuSw cBCRZ leFgnNa swRyQ AohQe yfEYl qUiaYx ZyXeg YmheTyp seOkn HdLHV qNxvlSqmBOup QdHkb KSMqK rxzRy XxcPC mGFOe QUJCdP WRGQWb JwtVQ weUjK mfgiR BTVZK McEZTfkVj NiAACNWs Ndlfi aOZYQ AjbRWFx hQKEh Jxjty TTfCoD nZHDU oqXrwv UQSVWf ogVWN KrMkNg bzWRt vVAoDI mNzWkP EnWMx SVpYPWy xXQqPpD WwHXt RNMHdw UwODn ToLrIQ bOgov BLOId Xuaox PWZBX TPpHj EInekI USVEy JCDSO KdWHf sculR Ubkrvo AAhPb ENAHDS CaZnf cRWJu zKNYQ ysJIW JBxqyG blwbux tEiEX pHdIsK drDzl nTVtr YBCdV riQdl DaqLC jvuPk IeGPh DIewvN kMiMS jfIFTr ywIuO gKtDKb JaGkr feDgu xnWqeVPe vWeKM KpBXON UbIqy fKVrqdll JNszb lpsxc BScEo LNEDFX wRfzx GkDfL keKTb WSFFY WlFcwvqL rKHkK Nkgvp mTMRM HmbFD qLlYEe TfIBd IANBR bRtfM PhghrQmg sqbCq WKkSW YmBnQ DLFxcPC avZJKs QvMYnH lPfjJl IUQPp nUOVU TcLzK xynoA oWMTC DFudOs GCWly VpcmQ HaAKE PtMkfR nWUlTTE uyVQIZ XwegB Yxqiya krYvTR XJBKRn CXQOU UgjBaH gtQsx OMUsED pNhFd voWdr UioetdM VguYr skffj ylnQR TSUVWL VWRPN VWRPq thSVWhI TfkmV OLBGF RwEsLoFK fwfVm zjABN wzGVW pikky VteHQq UpZVc KQNTc ZscSA AIrDZ jzMDYE lLmbU bjwqs OOytWaX SUVWT DfBHX UzZPO yXZioWwe nKFAtg ztDCP PlVOVoOp tbIUY GzFyv NtBVsgn ExxPS TJFHj iUXKEQ VKqef vIZBn sJGco uGeTelC OEenV ebacOLwj MzzXq OcImDJX SzhZl adgcX bcNjo UkuTg uLAaw EGHlTU TLBFIGJ NrNLx qUqdnh RvKWA eowBG xQtyH GuenQhI RypDN BQRbB TZnRD Hwiie MFKxk LRlsa zjolyv QUhdc xkjeY XMOsOu eicTz mRQra uMUCM pKYbl loEzIq fnrri MLpKM FQFQKN yVOha nULfw JlDqw uqBoa UsaIC OiBWfU aIGAV HDNDQcZ HYynS DIdgk HwMpb zfYKD kUOoZ EqQJy yIdvo FIxVgP PeSxjNyY MFfQs ZIhEq NZzYe Auqsam kXSHNXA PkSwpp vRbYSF wWbgfG netjG YqASadQ FjRTq hitVR uMiLg NHfaX yoYoH tSxMK nPprFo eAgHm lsKsSw uHcAuC AGroq IEFsW DKqrbcD tQOjw MPwLxX xiBLoL CbdCyM IUrwh vExEb FwWbO RjQsm IqrvC seWNR nDsDG nlHmD JqNxklhs hHZDV hUeadA VPjLh XuOOM pOOuKW SuOLk minUo QYpmBE CWZNd HoqBC OVimqY IwwKj EeiKV wceYC jcMMBloU IoCgV VYJDZ ixjeD WpIEq YuHWi YOXMWq ezbbT LHozP POWTQ pJAXN VHbMS FUxVW LYUtwjH NKOdo dBHEne kQpYpHF BefiAPysN lmXoG trbnKKI IBrqeh ihokgR zPecth btOGC rlGBY tijZE tvpdp tZiTCcf hBridPzx mviad flgpe TTFVY DdKRqpXn BRXyR SUzjy hlMhG QAoJe xLigW TSbbd XOBhR hoVRpCJY izptd hoVRpCJY pBrgOH tvhHI rogIL psNJy FFfks eHgZYWol naClLX SFtiI uSUVhI FpQduOMM QogcW xCJfH yCsJF ObOoO qGUyJwd BTBOw HcHbucT HKGXT MgielpU kuTyx SNvRF Rvfkt rBMIFB xUYjt tqkVq yVsYW sXPVjt tLsdB LjjFli ZQOTQ aJgfpv vCINXnQ bUxUF SUVWC cDsUNQ qscWK JEGtv AAYxg QQIHk etaZV Hxxnf UqbDtXPQ sUvOl eWdlJjIXI kjFGv ZUWZH EpLss SUVWh vPhtZ iQSUVW KOtTH lYLVw hWMUPj jDmQaRe oOuvF UitHr ZSKHU kJgusB sndho GXGTt tWKOsmpq FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS LjjFl KDutJ HotwL uLIqNx ZkIpRzB GHDYP iDdoskSn wdViB edruM wifyg kdXkUG Unzal Fngla cbMMnWspYNzd QgtmbI YoPen bbwWy mrUsVS XBhSnpU GMfRtUi UttMk pqgcfh pyOMvbno KgFYd IuLTdaj QVhQmi FsTxC bJUjh EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE TTbVV xYYEe JyUvOq BTUQME HcSfB MEEEEE MEEEEMe TSVWu EPMMtM sQpKoAik VVfxZ oWjgZ YUjhZ uOTfpXqDTo MFYyX ndnWCZ ZhMWTzB tMkfR MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE JNnyi iBJUE MEEEEE EuhmI ATpXZ eTzFqe vzXXH MEEEEE MEEEEE EEEEE kKMEA EMMUU UEEMMU SVWeMM MMUUEE MQUREP lAHLf vLjoA iWsli tTWUr SVWeMEEMM RMEEM ZTdfde TlVCf zcmjz nGHIR tFMgS EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM SZOQw SoCcm MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ lLRyl QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU thUjh MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE DMUDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS ZElItx LoGOO AfkCgc yVfVLdfA kZdKG Sigme hlkYV NEUmu oDwZDzhgw oLdjj ihDBu nYmWs VMiFor JyrQF SWweq llCgbvk gGJLA suifE YDguE LlWwY bqhcP ZjjNr Ybcln HnUuSH ziemHN aAACJ PlnEV xDdIt DLFxcPC hUOcSP QWeZg CgMKg nkDZb TmOQMpT LtDTI PbljZI ClxWi YDEJIR RDprj jfRYL jTDifp UKrvTr UmoQQ EiBimO FHFuT iqXEHYY njSgjdro FKtLal xOtlI ySREKV ccGdN SQBEP PZwKP xkkdyd xcaFZs MelsEL ttWbpb VWDrt iyWiTvOJ arOiij LFKbip pDhid TAdyv VCKgz CaZyVx DEGmfedjIc WwdNNT SXmiA sVBYm TaXFEN QHRTLLW ywrvNn WdJIQ gtaod SHxRoe WTVxlUf NEfAG asNuO mgvVE zmXeEaO YAjEKLw Kdsrx nIiwLH xvbaDM unioN AnQeX JyfgL OEwkA FSnKE gcJOVH fwlUj jIyBD HlacF PSkkH VdwSh ugHmei xLIVC JGAtn snXcX tTaQJ sPHrs XGMiLp Arglxjl sYxVH GPYms hODKtKr YXBfd PwCUL tbLjXx VWHoQ yHcOS OIVkr wRkKwtQ QVmxfj RpTsXN DGBqC UZxTe uvBHh jzsgc NxPuE ncfSxQ hZvUaN paHzM cHbuH ZPiDW AqGRJ ZZxipD OjYCP gZDKA eDSbFnt xdrQsH FFMjnI rEQyEO SbLXr khYsS mBXFfE qGnAR LVouAv lelVQ rjCvy YovtxK BmdnM fcrDUQ BcuuIC psvHO eKaIb vfMGA QMnkF veajx SUVWj BABABA YmOcTul VuZgI BcYIv ETHPb OdpGu IHdMYv YmTuy iNctqT eLAXl AKluT SHTcMk TvALIRJ EvBnq CfChT dHdNH EOdcA PQYYt UJtYE uOjOy WIyWd uYSWu UtOdsTz EntelE ineIEE GenuE rBRXu PeuEEEEd VovEP wkFcmbpJ VovEP bVslRJx hNWUo QPEPh QPEPh KZvDDx xFlZv PZUSW PYYug PYYug YYEPV dUQQEP iFIvc nQuBI laamL BEXxjY VVQYn zphGJjwj RcNsl aledgc gcpZd oCbek eTuyj iGlUQSVu ZyJVX MorRO ClwMi tLRKe HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY YMNBiB DsawS LVhdZ glsMpPpVL tRzUVh Zemhor CuiYM csmuP OokeM kRyBcS oNHeY YpJpMt DtdrEm bqxbQ XlmMJJ tPtLw PQYYPV Ujhxj URPQQh USVWj PPPPPy MeEPj jRnFo UsnZp jERSl dcFgOg BgckAG EQPjjM VPuus XDccu UQQVu CumTb USVWN UhdozUVu QUQSVMWj GHrfk SFoKDzqN DqlwM ItOLt hQANf yBfCw IuGzSUQSV jAZjX uZaFn YUUQQVWjgYjGN PQPPESPW jsXfF iNHBUM fdjTc UQQVW BnEUQQE VQZLw XfMIgQXG yFaKX joUwF iwPhQ JTkibRl GvNDm MInCuO RPQQE VQuuH kDdbq CVYMN uEPEPWSY YPVWSu kPVWSu mYBwV YyqUev QSxZV qxVvC GDVsT sIhdz xJKVw DQWFe TLKMx FUnrE uEvUg cFFPmN ELvqHa cnbDJUS RMKFCZV eHKxc AwajQxX MHEeq fomIM JpaUJ KtYgU YKquZB uPuSW EEwPr UEHEu IDNfZy oBZUq NViwh eUQVV ELAji ZoAUA DUQQS XfEFhP EPEPk AlVpu ZNKZEAWh PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu DZmFHn MAzmh IdJfk nOdLQ IXsin HhSiwY uBjAYjZ jAZjZ UQQVWO SVWtdAu CcZsL uBEDn XmZBj WyOlSj wrUQVu KlOyi YdNjRB UrRfhd edVQd CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp USlMN ZIUQQ jrgkUcsm KfzHy CtSYcm BDHjeQloX AAfzG ijHlc EmtnPK LPaUE MEEEPu CumTb UAdKy MVJILd vXZEh XBKOy HbnmT qxkYc RgrHjwm JUnRybB SOGYu PPPPPt PPPPP oIUkE HLMMQP WAyqM GTeRo SHgbslr YYtVWh EWWPb uCYYt uVWTb WWWWWS OOjXlxdj YtVWj PPPPPPPPU VSYYt ZfZEyD vlKBy NnJIj asQSM fBQMN YWlgH EAEfEEj EPQEPEj CumTb YbqEet AYYUr PPPPP LYbiV VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW YuJTSF PPPPP PjUHPh PPPPP GVemj fghQY HyUQQfE fEEPj CumTb MAYxV euAmp saZlz jOZzsNQ EGWVj VhnzI pwUNUj BWaqH MSVWu MQWPVk MdQKE gNMQH zWimX KPUVu MEEEPu WnaLFvpD PPPPPWSu QQQPu VWuSu PPVWPu tUWVSM NbxlK XUEwI DxIhc emhpw ZHZGz JZhhrvk XmSiv SdOtK lSkkV kDOKRw sYaXPXS WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu AihHps dWmpr mnVMi VKlrY nrwxU YUUQQ FzttO saZluI QPLYYMt ZCYOO ztPeUs rjbCEac pBlHuE qTvBY EfhIh ELmDd rgVrK ImNfUE TwEgT qpjed PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj FwMPn xqQgRp cyCHv aKvmYL OIFVUn HBVvfO pkJtA bfBzO UZKdt DzPbPp cJQqqk MRBHvbO WwsnaD WxxVL XBSHUmA WvvVL WHtAtVL SxQXlhojN kSkBZ fXLxf GDZcxM oTvIr AJWEc XwSzRMxWw qFGwKr JQiUS LiFXLa YxPZfv dpOGdK KhmgB inBmA IwphfQ ueHhs jtoOQf ijskhvh QQQPu MEEEPu EEPVYY sfCnt msYCr BADZl rAQHD CHSUn BblUE yRsUfu MUkpf LgNVVZ XcCDK VyVhqGk AHutmP vFWVU EPeuEEEEd csmuu UEcsmE PEEhg pqwKZa yKtPk ogPNwn vgnka xkzpP ISGSql rXhnz VWlCv Vhnzg UQQSV eLWOQF YkxKGVXx YOLtT ZeXAL NDlZGZW UEJonx AATAj MoPxQ mXbNGe qXcXv xKoTN AuURY CCaSM HOZqb QnoEK kVGiyNs nLaXJJlr NZtuPbj xzSkU OwxSqtA QwjnW fAHVFx yQgpoVQ FVFCbD OGbouj SxzVM zrzzs FIDQx PXbulmg QbqUx dkLAL frTONQ LnxIg SvYbZ Qjvrv QFBjF ChJMC wlRKD LbqYjJ vrkyj wgJgjA IQHsi TAOwSF nmFAIH wCXWI jbBtx VcFjh sSYnj VWddx MZIGu KFerg MOOxIBZ XukCeu lAGrL bQdgIvDoF njgOyyM FWtYu odcTbOh oAqwEYjJ LBMKX JbHZLEU fmdLc LYHacp GyPJO GsVFWi FOvwT ETWWo rNdJS yOABfG OoyLg siIRD iQlyK gjyQqag cdtBw arwRw UprSi NTRqK oQaSC CSDdPO vcoRA fTbyoY DbjEfm QORSTIds wxpNy lZdKhi Suuil EKoHYZ ekhuH wXPzmOs zwjoH phfpTp JLCyEy CAtKyJ tMxaSy vViXD LHVdrY ukjIM ZEgJS RhSReK Puobe kgQxG bmXxF DMXvC sqzdL tMkfR HbHEMvE NytZp bVNWB jxEPD ytMEO wNqMCVY LaHyW TGhYA SnMTC WxBAMXMPGC zatMX jOoYmI xscgHjOt wQsjzZrz MaBnh sDivRv QecVY oJaxqGo Mdcmj UYsPhv vslNp CMIIJ gPNjTc ZaPMAE PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH oVRQj MuUMEIEPML UMEMd EEEMEME HnEMI MEEEE ntJETE EPEPM NUQQMEM cWZEUbT mcAivs xBMoT cMscm NHqRL RtdKKc NPdnP zijmeg kHzekj gMJrhS ecnqN jBAAUQq uMzAr XSHuC waDPT djDEu LVXWu bylBNAr yxAntI QCIho JjGRaq ftRMy pyEdj yxnDh Fmkpj XayAE FDLxF FlOLEN NxkAi HTdFbO kjBKe ohEPO DVRZkra EMMUREPMMM EEMUQ UQMEH MMEUE EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU VVfxkur dedCWi BByBd MQMUU fvbvd fBBRR RcXGo UQMjE rxUQM EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd FvUQME ULMEH MUUEEMM UEEMMU WHuyQ UCDIBc wfLkd TcHbk mAoYK Cqvyc FwECI bUhKil xwvbH SVmJZJqV OKozg OBfUu WFOLg awtrqPd oZyqv yiVKUki GVrDQ mlxnR qZLCdB ZoVtd dAnoE zUGtZ BOTYW locale iostream badbit failbit hBebRj ncfkI fyxTa kfmad HTHzb GUbOt uTeLVD SVmJZqVvu iOAwd qgvMcWYk TiVKUki kOknqoLdcB ZQWtVs OjDri oVIdv iSpZD HmOGZ jliAK CUyqd gArjejdVXOcQlY array length Huunknown error address family supported already connected argument argument domain descriptor message kkconnection already progress huOQdevice resource directory empty Rfile large function supported unreachable illegal sequence inappropriate control operation kNxkinvalid error directory Nxknetwork reset network unreachable buffer space child process message available message space device sCOQno process PnEqkNxk supported operation supported Nemhowner protocol error state recoverable files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx yIbfk zqTGs MykTHE rZNKQh YoIgMP lkqBR jXsvU uvOnQ Aemhd bqNxk qNxkl qxlSj temhs Oemhs bqxlSk qNxkl cemhs cemhq qxlSe lUTAa cemhs qxblS Uemhb NUemhe bqxlSi hemhK bqxlSP qqNxklUp nqNxks ZikzOT jpBFM uYwwnp DsfDE qxklSu XjEQi cdecl stdcall clrcall Uahrestrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator PGnkx virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx YysaI kqykRXO JPHMU thGci BRXTp nzwhe Ouceil floor ldexp hypot frexp ufWed Monday Tuesday January March April December qqTxkls VlTQA SQVvZ xuTlZw vOQcD EnumSystemLocalesEx lSLCIDToLocaleName WrgVrem qNxkH qXxElRw hemhe lTyAb qNxklM qxklP LqNxkl qNxkP wEvcF QlVsiDB oUOsyeF THZAPR lsFLz MlvtQ qwWbe ZDqxqy WBraz jeAHk LtmYE MXmclS MZhQLqDWI UKbEdf ePxuX jlyNv hagXFs EvEHe gQoXV LPxBu FtnBuBt LHslt iQMjaw DVfkcJR dCwyi SIopM TfVNPE kzxVHX ckBjk rVgWItcS jhLkiw zGntH qNxvS fiGjnxOl emhContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey GlSQu dOQLD BuPQZ ZfUUU oSfcF usage usage pZUSu lSbGDUo zbyaS WDAAe xkOlS nicehash lSbGDU jsdoCX AsACGhO qVQXg NUgPB iycsZ lSbGDUo Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ iYGoa EQKSi DXVTBK AowpzWd TMXdC RicKR TWaWtg GaoCXrW mDvTe QpZoK JLXCM mNlVez ffxQCe MBRWqS qKdEF uxdJT QuRrlW biivx lXgPY oSUpV rPjYPx OPwnW BErctsFB Slare Ljocd wGtZPz ABCDEF kJamiM JeXsQz qNxklS uOQDp vuCiby uMPXdWUO wnhPWhqs TcljOpc slEyxK hzzBh kckEqSMg mYNcaa qNxlS qNxklS QVsWZ Pqegku IRGGKLMA hpUov ojwSZ CTkFo ypqgvfh VgrDhQ qNxklS rtKqT rnFLk HTHbN sYoZjP qNxklS QVscWZ qNxklSk qNxklS qNxklS SVscWZ segICx QDTqT uOQDp qNxklS qNxklS HOuOQDp qNxklS WrARvoh WrARvo qNxklS NxklS qNxklS qNxklS KZAYx qNxklS qNxklS qNxklS UTcOl qNxklS qNxklS qNxklS qNxklS qNxklS OUmer qyoEMfo XJzNj aWtnBlBdgcy ithpUo ENpLWt raZqR PYMrg jRUueo uZsfx lYfjLU ambgIQ JbbYt IhUhUe jKMED CszgWK ypcWZ rtqTh qvoemh OuOQp BRXJP qNxklS mTNxk qvoemhyTNxk qvoemhrTNxk qvoemh LVrPx qvoemhZTNxk qvoemhTNxk LVrPx qvoemhINxk DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso NxkAuthenticAMD NxkCyrixInstead NexGenDriven sNxkN RiseRiseRise Geode Geode OPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION Pentium Pentium emhPentium Pentium Mobile Mobile Celeron Pentium PIRWIN WESTMERE PENTIUM TCORE MOBILE MOBILE WOLFDALE MEROM QUADCORE PINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED OuOQT qNxklS uOQDthek EXAbq uOQDp SVscWZ qNxklS sknoRa qNxklS Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY femhEAI NONAME PROTOCOL SERVICE EALREADY EBADF ECANCELED ECONNABORTED UAqEDESTADDRREQ EEXIST EINVAL memhEMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE mhENOMEM ENOPROTOOPT ENOSYS ENOTCONN DnisENOTEMPTY ENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE DqcilSUNKNOWN uENXIO EMLINK EREMOTEIO Umhpermission denied address family supported temporary failure permanent failure family supported resolved protocol unknown service available socket qconnection already progress operation canceled qgxQf connection refused connection reset destination address required Thost unreachable interrupted system invalid argument error socket already connected dqglS Qmessage network unreachable buffer space available device enough memory machine network amhno space device qsocket connected directory directory empty wsbYx Rprotocol error kZsDO result large system process cross device permitted unknown error links async event emhpoll plStty signal unknown error cCmhR malloc cCmhR malloc RCquv malloc malloc malloc RCqgxb QueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore KZCreateEvent RCqgxb hCreateEvent CreateEvent POQqD iphlpapi ntdll GetModuleHandleA GetProcAddress emhGetProcAddress GetProcAddress HgcMfmPu kernel GetModuleHandleA CreateSymbolicLinkW powrprof qsocket closesocket uMissing after object member Missing object member SNAqg aGBad escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected qgxlSGS Content Length false Rqjut YQWfc JzXPWhY WaAwka gybmjk KjDbcypm soyzD CoWVQ UggwH Bdqyc GBLpMe RZvikr dOgpGanP vRMYMB zQwlM UjQDahV ibUPxk ZTDAPwd MGUnnr EaeiU FloYe fafyxijfhkdanfrzz qNxklS uOQDp SVscWZ UNeIY HTcHb FtnBdgcy SVmJwZDqVv jnHst hpUodY ojwSZ tzpwb ypqgvMc QnyPK VgrDQ vwytK tQDIe YyDMT MTjsyx HmOJGZs CUyqd jKMED CszgWK NRXCg qNxklS uOQDp SVscWZ UNeIY HTcHb FtnBdgcy SVmJwZDqVv jnHst hpUodY ojwSZ tzpwb ypqgvMc QnyPK VgrDQ vwytK tQDIe YyDMT MTjsyx HmOJGZs CUyqd jKMED CszgWK NRXCg qNxklS uOQDp SVscWZ UNeIY HTcHb FtnBdgcy SVmJwZDqVv jnHst hpUodY ojwSZ tzpwb ypqgvMc QnyPK VgrDQ vwytK tQDIe YyDMT MTjsyx HmOJGZs CUyqd jKMED CszgWK NRXCg qNxklS uOQDp SVscWZ UNeIY HTcHb FtnBdgcy SVmJwZDqVv jnHst hpUodY ojwSZ tzpwb ypqgvMc QnyPK VgrDQ vwytK tQDIe YyDMT MTjsyx HmOJGZs CUyqd jKMED CszgWK NRXCg qNxklS uOQDp SVscWZ UNeIY HTcHb FtnBdgcy SVmJwZDqVv jnHst hpUodY ojwSZ tzpwb ypqgvMc QnyPK VgrDQ vwytK tQDIe YyDMT MTjsyx HmOJGZs CUyqd jKMED CszgWK NRXCg qNxklS uOQDp SVscWZ UNeIY HTcHb FtnBdgcy SVmJwZDqVv jnHst hpUodY ojwSZ tzpwb ypqgvMc QnyPK VgrDQ vwytK tQDIe YyDMT MTjsyx HmOJGZs CUyqd jKMED qNxklS SVscWZ UNeIY ZeIRJ XZoREV kJYjHd UpghB IpvdB DcVZI puWaw yRqhvMc kxDvMR tShhX ZQaCe CfmSc qNxklS KZICY OXQcD EVhaY jHkaD uMWSAe ZUmaM iGRbt tnBgcy hpUodY ojwSZ tzpwb ypqgvMc QnyPK VgrDQ KPpaln ITtPX LUtqU SvYAYE OwtSc ZhEAy PKqtrfwHy,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj iifcCMdth MEmxug UJfuOlxT IhMDvQSB IQOGr pEVNIrkjS qTQLEX IekMW GmGcycD oVOuAl RExERy PKmifl Agfqnuv TGoqnH OaaZI RGmhn cFeAl pIhdrw dWbgK nrLgB kqQCK hrHbE oMDlS ZbWhwZh XuWgW jcKWQ thpwcc iYvQOBMiV uzrkMd rsctR inPJI xaXJV ioWsi lRuJP cPHWd xdXDedC kkvEa IetSY LIfRs IqGIU sryzue zgpjCk JaCsj TYurJArIo jcqSjBTp SrHSwo fvFyG ewdACS MjNTVF lfqhqT PBSKnZjU nbwKrx FxoqI UHbCJu GBcIE ZDoGu kFCCjf xohzC tcaZZ mtDzhX JSnHp OEtxKy gSUdS vsvEPHi tWTka lHAxugP Dvgxt BPynG VyzMm qGPQaM iDyiR WnuiS nSRsb upSNgeP feRET EQYiY UWNmn jcDmUl EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl QMNhP VHQKf sNtxPsEyH TNkeOJKs LREXO XDByQ RwYZI VwEoyccU VZYtV doAJAN Gxaon YnYIC AeVRIeAq VZiWD rhNzWfs AAEtA xOnNzaa WZmKcsl wFhmcUHE xaDOe dSCSX COjbrlY CwgOoT RBZhN cgUeqo hhkbNum BiwaUJx PXkxt hYEWy CSVWN qqodqe Mddox ZeKrWoM cHbnuH XZlDM pJFGo oRaZGOl yBbUh ubhoxP ezokTc poaMuc tczvvHa pgikZ sPACr pJrCv pNcGZD GqCudW FUACpB DcXItXMfR IaeKtU zALJhUOMs QMNUQSVWf BTiBs blVRq avTKR UUHvd JQuOo sEypFU ZZspNPrZ SVpYPWy xXQqPpD WwHXt DRbpd fzAcZ NWkeYryp MVpmY tcUxoB InPgV IXhFJJ PlbRa uYiihgisp TljzX UTEvZ LjxQfG KeELN CojpMoJ agqVC jZWSc Ycnkd SJOTCv hPnolr fWoIoCes rSdrD UhuVt BRZFNmCk FiqlR hOUDl IMNHL rFjhQF gVNyi YuyJCuUl XxNWgVZE fmAyCXW Akwtm vTmdD Wzyny XmSjR FVRXT ItkRq YJolZ ACnjus lCZsGFIc EodJt ULJYP NqjPm xRKcn wSuUt OHXPU ugjHn VEfpW bUlxd lFWOs eyhSLs BpyhtG icIbI aFnwI IjaihD dywjAeTN qJqLF ejnkXA JfvDHP MjYrXhEyG mQFKF jUwiN UtNiZZn GeUCEX pdxgh znZJsQK hHdey BpVll lSHvUI YHQRQ TAYGX Haagc iYpWP AmDbuy YEUjh mzpum FDmVA odbKK dcKCe RxJBI PIIfRv emEBL RhHrj BrgbUR QhBpw VdRyp aKHgA TSUVWL VWRPN VWRPq aNgTT TNINb rRlxT kaVFv csrTz SVWhI HUrSQb vheXI SgBRw UoyvN uuvjZ pbonT EotJd oxCWsQ QheJqi coXCp fwEQt TraEe DDaKiVOJ GrJPm BMwgbe EoYrg WAXvl SUVWT IHSyq ElPNX RsyBwm IUxrFC tnuHor qtZIC zkwSR snGjHl DZzjlUj ZYtVy UjTsQDXV EiiWNi bVqlQ ysmMg iTYuyG lvseDU vXgDAJ YTEYy giQxp sjYve VeGCj rejAdl iLbmL ueySw kUpMn yhvrl RpROp mseoX TiDaR jDrHEI ATaxP MxcKQ hyCuf DGwxs BkRGtA QExqA NChNS myuXI GIhvI XZnNXM umyhj onUgyTLn LNmhU MZmuMtc CNUJB YQZja jFvsA nqdHy gsnvSxBu OpMGm ppBEpI POHVDg xhzySCbN nxuEC AvheUWa lFwfs TwjbX TkJfx UENHx dDaPS BKkcw XvJrDp lxRiHU vvPWX jTlCB rIXEr OYvql hZNmEM VvEMY BbyCue QGktT zCbip oHJuEXU akhys rDklTNn cSUVW pOvAN DGrCpk VPjLh ArMNo XaqaR jOYmSH PlCdv wmVyB tSdti aVQhK Hevge WnXaE uLaTm dEUvgr xVYyE blJOFpCZ RvvdK Meykrd sUQtF kjUbMUHj jJYem pnNzk Moqdrb hwWuVW zDeaf dnPliix zMbAPq fTYlX nvkPim GCuRbmlLl FHkhi vFvbS SPfZjZJ kYxGT XWQkSn ghmUS aZbTmg wCKIM RYTKF DdxrI EcIMNPmS AOAgR ORMCjfS Hmgxg ZmaoAQ aUIOp ggbQC OIciGn DmbEE CmrNBh YWCaMg GqrdgF ulkqOh KjYfe NzkwS izCEA PrZKk tvhHI pNWrt uSUVhI CrJTC qZKJy ZZHgbHY OTXiX wvyZa zwZVQ yisyQ XjzEr pUcer PzEMP BsGBtGc PKiSU bowJKa jAhoTp RtBVa JzuqZPz dMYjlU zhudqAL sXPVjt tLsdB SUVWC pzepNB AqUIVXn eNWgF lnOGi KmPWg JXaKzk eECtBY hvxKXm vYKLRtq orDrc rHESd qEGaQ VWLRe Jwxcef feLHi OeoVU SUVWh xQLAT sYoLK ssssI gfMdDp WyQSUVW tcrCQkP zuQNkV kkGAtH pipBm ocaiW dDbPx akKDnd GXGTt Czbni etogd ztEIf vHFjMG LmOcjGm FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS KmeDgmKqMd GrSBnXP Ofaed SWRyr FbFvx nIEdI PvOLM julvZ zWHkl TaYwQ TZGJf mzoNDzd xjnrd KURPv gHWcD daeFTh KQXxa QbTWjC EKnEt KwnRo qPzKmF uDHOo rbtsb ivrgb mpOEs MNOFI kUBxW VMwhMb SsXYAmG iNvWz EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE duqLZ GcUjh xYYEe nIzsJ oUQME MEEEEE MEEEEMe TSVWu EPMMtM nApua uSiPWM kNzCC MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe moGiaA EPMEEEE MTVMMHVE XCmeu gIvNv dkanN SxFVS SxFVS MEEEEE UzbpVQT dtuzn PCwPa dGSmz fKJDC LxDhCr MEEEEE MEEEEE EEEEE fuZrH EMMUU UEEMMU SVWeMM MMUUEE MQUREP epBFyJ MqGxU XsQPI SVWeMEEMM RMEEM agOiX ixRWw bkBLkb LsLJhM pIqhCa QJTSS FoScNI HYuwBTz EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE QMNUjh EMMUU UREPM OXpvB fuarH Vtuoua MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ AiNfeM iCRXw byktu QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS lPvAb FgBQw LVDkL QNwpN QJOTS tAjEv IibCeAp xdAsi mEGMd yHxxVsOu zRhyu TaDrP AOHjx CXbeAflNUY XMSAgpvS gxBLDvnS KvzTAi DVrwu kSoyMUb FyEYK TcYdvSk kAFTx PkHcC hxGxB DaAJS LNXFAGC cBkuY qvjSD sNTlFibaO CXnVZ ROuyg KkUADc YkHBuJ qeIGmU SdhDsp wbWlp YvEqiFdd fxmjNc DKragXkg PTvKl ixofUjZ fzLSD alfWubN exlib DNOiB uFwjm fRSlee bZyJQG TbiRf eGyenFBZg sJlUx rQLXD QCpCg txktG dAsMb MGBuzeD opWReTO bkBrF ITVJe oGlFo nePANa ZSgVit BHUIaq QdVcH AKetF wigow EljdI kKDnd legbt KfnKLp nLMau NrgKc txhoc BFmTR sbAnb mUwIrbe qhAjy sYLCuR zFvYS ZlFWD CawsAJci fMpRx HxUBgI ZQkCM ZwCQKXc cgHjro bkUAm DJnKt VuALrS EebKH ysdBF NvkoC RzXSV XalZE JLHut VRDFC qcAfa HNzeeEz bVSDHt Qrevsa abKQO ipSPFE BIYPx UYVdk aiaBP laPGwd liYkMA LXiQX ybpsB KZaXbq NSSrk VgMNTQ hBIiX BnKTaA PPPwr GALhn SUVWj BABABA mNJDq QTgYT odbDA BFQhS ncbiz mULEDC AFYyLPk PQYYt eVYjPd uYSWu cFuQM EntelE ineIEE GenuE PeuEEEEd QPEPh QPEPh eXeLt YBaEs PYYug PYYug YYEPV CUQQEP eChsT Zkcwo JUblU pxLPiyv WGXvW WTiJdP UkROg CRHpcK VVQYn mpQlx XmuFEtcZB nXcUQSVu Tuczp seCpn HuYUV EPuuu fkHVim SVWUu tfVUk tLxXj USVWUj UQPXY aWJsL pChDx yrUVh lpcLq wyNkeBiW edGML hUASj CuiYM csmuP ceHEeM WNSZQ BvCsFL IzZrpL OFUic ImLaQ VMhKb tPtLw PQYYPV WIzEff ArHwps Ujhxj YpSVWT URPQQh USVWj PPPPPy MeEPj ArHeD KrvEg nMcai tvQSJA CDJTaFZ Vsgsd qzhuuP EQPjjM VPuus ArHbf FvUQQVu GtRrS lLxzR voDYk qqIhprS USVWN mOChG ShbBM pFsEn UQSVMWj JNsfEs wcPzPpx EodAemh CiqBsYG TPYZr iFcbd ItOLt cxHDKx lhRDw ydjmky jAZjX WtciI lUQQVWjgYjGN PQPPESPW jsXfF zLvLi GjSzA UQQVW GcQjQ hbOKn AAnEu Ennpj iUlRdb ZtkgM baLWv RpSTS ZSQmOG VUvixW RPQQE VQuuH FGxYb svEuF HRhdZ uEPEPWSY GcDrn DZhOQ YPVWSu kPVWSu ELDyo RjSiI zUgrk cxzyC rbthjwpD cHLYd nFAnG KTxMaC KljBd PkpXRRtMP SJOUjP gWZcUfA uNtBh UrTtq nayIU Qwjwrg uPuSW EEwPr UEHEu XHBev kKftN zkSAK eVYKYqR wBZboUQVV tJhcA VNcuey XfEFhP EPEPk AlVpu kDAMPjYl PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu bVYfWs uBjAYjZ jAZjZ UQQVWO SVWtdAu ixIIW FZGxkenUVu cNWkh mqBfz MgWaht EERIRB ycPyN OnNwM nDdPdu ZpopZ iKFIW vzLzc tzlQO CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp AUcsm XJTvHo cWJspy KOlzQ rrdIw GRFQc khgeRtrATvPsy zLWNs fYOJF GPggi gjxnUc QRiUE MEEEPu vWKXudAHD VfZiK piauwVz Ljobj KJEjXDSD pPKSI SOGYu PPPPPt PPPPP HLMMQP Ouuuf JkxPI oFePPyN QHemZQ cfEXoP xfUuSw YYtVWh EWWPb uCYYt uVWTb WWWWWS HpxxY nSkUW YtVWj PPPPPPPPU VSYYt meDJN getPG EAEfEEj EPQEPEj XiKvtO lTSgJw AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP NwpBo MUQQfE fEEPj ZcxlK MMRBrx sUkOg rBSTzt ZjNPi afXhf wAtpX ZjAPi EGWVj YRThOk UGyBY HjxvG MSVWu MQWPVk EOHue YuUVu MEEEPu RAkWIV PPPPPWSu QQQPu VWuSu PPVWPu UWVSM mlcIA XSxOp QoKNqHGrN ICTWi WUuCaSj ffRNc crNKTSL WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu jzxQokqH YwhQw CfJiGW BkisY ehrqj oMVkz cbdZoy QPLYYMt wMUhg lwvAW VIuAl UqfRh TDhmUc TseMM jUbZH AwcUEE PWgdp IGYlb HKYPEtO RVZrNO JQDht Qjkje PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj uAprH GEONG jSsvt oezaC PPboZ nPMex loDerG WNkuGG gRjRTW jSAUf rHfUSY WxxVL WvvVL WHtAtVL mKBhGH RFmZiN HSLUUf ekDea HhPadm xDUwQJkJ FVdKZ Gmyer LFbMrD PJlMa bDafEQ SKQLWY GVZED eDsHt DkLDT LIFhS QQQPu MEEEPu EEPVYY IBOqHuHZ OOjPr YsFUE fmbiL uufqd eSQhu TIEOI SMOhI rDiRv EPeuEEEEd csmuu UEcsmE PEEhg VWlCv UQQSV ItSPD kPICX LHMUNo JImmP AyaHs QyDAK MpjdT yGoRlb xoXpHs kmAqeHe ixOtM WCUja HzeOa WmLOH NmTQT XJhGn wgwma HuRhAz Hcdqz EvFTz klBvNB veFjG wEWEh ovyyL aprFq sIUIFT pswtl vYmrwPo jENKzfhvu vcimi abggn rtJMc FWgas aGkYu OrZgz GLteK APYQx Iqdxmj gZfLF cmlFxK CQgOd YzRNVY KGTYOr UsgOZ oaMhWX uYjaiSL qfySh gjeZBY mCmqXc txdVxY oXVlx CKWlwtE yqiHw neZXJ suUaN rfXjRTsE XXXBm ipEtHf mqEUs NBlTv cNwTk DvaNu CGrYl iIljcI gAdhSqoLF rxroxo HXomD AGIloscH tKXGH DqDNN JGmZTUD CdAxi ydEJIm uuBeD JfuvXf SdXoE BACke rqEaY Oonem iEyCh OEmLn zwKpA tuJNXV MvDaz UDBzG MXvgJ FaRZR BoEhRmrA qHpxL GMNjxEPD EwJJm pGDqj pgHxC locpA SnMTgJ MXMPIgJ UxKyR Kbwka hXJZuw eXFQv TZLJYs KGouW xLWcHS uvQqdr WHFKf nHXCs BiKwG PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI Bejjy uHEPu uEHPo DYPEYPhH tUQMj pThpl ahgHc xBAQL sKorc uTjRs ywBYO MuUMEIEPML UMEMd dkOOt OkJyNrSU uZUjh EEEMEME HnEMI MEEEE ntJETE EPEPM yPhKUQQMEM XcwCrZ xbkmkJg jcQMB ySbbG DKuze EMkyGnzcL JJnaQ aigid EYehbV ZTktho fweIr RABxuOe BynVi tlbAT osfit LUpwP ixmAWY GFzwU ffpOY MQKXK BxTZQ LYaID Hdacl WohKTF qOvBWj WTWaN fIVoWRe UlbMq qkGwo oDFeqyS QnENaq mSxtKGGxs OJGLi kOJXR yjBeF zxhmYL LxzVqb ZOzUk wpAUbuyXt KgbVU czMQM EMMUREPMMM EEMUQ XMsOr Njykdk UQMEH MMEUE XHcXSz BHPlc LmtQYH EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU sGGvU feSUi UMkcX MQMUU agOiXHy vtZCxTJ NNKwn YEUQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd cQIuQ ULMEH MUUEEMM UEEMMU RUGtt hTqhj UgAmwe ZLHAt AkPxSmv owmpO locale gaGeN iostream badbit failbit CYBNYgz yYeWM aojKP kgBar xBeNTw jnuvP LCwby RdEmjS kPxSm TxdKUh SxFKV MynOK MFYmc jQiTf YzZRhN vZDjwS Wzaej ihRpwcx array length Qunknown error address family supported already connected argument argument domain descriptor message GHEconnection already progress device resource directory empty GeGufile large JJfunction supported unreachable jillegal sequence inappropriate control operation GArHEinvalid error directory ArHEnetwork reset network unreachable buffer space child process message available message space device process GArHE supported operation supported iowner protocol error hgsSS Cgstate recoverable FQhtoo files system files rwrong protocol FlsAlloc FlsFree wewxy SetThreadpoolTimer InitializeSRWLock oluFQm CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx iXQem nReZH HArHE hbTXo sFWjN vNvHrDO OpmCl yNaGc ajPkQ fWXFq HbzYw iXQem ArHEyu iQemX eDrhf rEeui pQemr iQtem ArHEs urOxlu QkUyX fbKHk LLDuE cdecl stdcall clrcall JDwrestrict operator vftable typeof local static guard string MbTPDNg default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning zYFeZ local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx pTitHvR IRWKyN xtdQD uTnycVL vlLRu whFam mxzIJ mrODy mPlTs HrHEe TPWgW eZasin eZsin Qceil floor ldexp hypot eZfrexp hsinh GOhCICv rCmWNs HuEiS hMonday Tuesday January hMarch April December AADHH pQAeZ pQeZA mkqCl STPTgq QreZh rdgNAN ArHeu ArHeUu grEju WrfEhuc TPWgs ArHEeVul rEhuP rHEeun tbyFkC qRqWcY YQYeZ xdPbq URqKa YqFax UwcXO pWYtV YgocpU oJTjh zIvbh vbekc JvmDP CofpB hDheZ LtmYE JkkLL sNqCA wLxzQs QrInkB HjKRI RPbGr OgeMt DJSuC FUoVp YzcMId ShYTQ MVsfcM kzXgC YPNwzw WDORKUA mdKUt PsMXm FHMWk ABGWGH OnOPa myrCZG yOGwc nmekOI zGntH SnLvfM SDMFYvq YNSlkZ jIrIL ContextStackSize ContextPriority SchedulingProtocol TVPWgI mkarHE ZfUUU UpmHv NOJnzh UxvBRH XWDYy usage usage iTcbK SqGQl AXzXx aYlQhe GXTbS TseZpmO nicehash BElKa bUFkCrH Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ RJLKd uswbET UJhImc qJpUBibqcwsG JLXCM mNlVez nwXgNb rkXXE ZahCo bMjqRq VbXrsa qerKI xXDRC YxZMr TaCxh fpEsb ABCDEF sWNNMdlZPQJE MwXrt RtPDyt OKybs kbCrH OKZKq dwaJoM jImzo knOwpcx teojS ciokg lGZEP BTAYI mZIUIq uJuxQr riZFvp zreMmp MxZItF kgBQEYVU NwNYI rFaMv islgP MwTBH CLloH yZYtVKE kHZsoSt FuwxYW CSEnI nhdszDJT LKRAEnmjo eZHpw BBhqr TPWgx AqgHBtc hTVWw jPjAE wIUKwV ArHEuuk qrNgK xIPWgB cfYkgB jQddkYD iTihBX zoCuosw Suoyz eZnpw eZXpw EZGlArHE ArHEE plrdxc Mtctk eZLpw NeZLpw eZHrpw eZCpw xKYBe zoCuoD mQYuB YbgSa mgbtM nubhI Qgbek JExlY UllHp KKhLWqa EBmjW TmdKUk dPEWE hRJzJa JjIxEp IEaHLfg qcdhF aUjTa oWuyE otMZYEP BiRweZLw IYrHEkZ sAArHE tctik eZlpw qVHvC hPzUv ArHEt qVHvCvE DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso ArHEAuthenticAMD ArHECyrixInstead NexGenDriven ArHEQX ArHEXQl LrRiseRiseRise Geode Geode eZOPTERON PHENOM PHENOM hFUSION FUSION FUSION FUSION Pentium GfSxOA Pentium Pentium Pentium Mobile Mobile Celeron Pentium UIRWIN WESTMERE PENTIUM MOBILE hMOBILE WOLFDALE MEROM QUADCORE PINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED wWfeE Unknown system error Unknown system error eZEACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF feZECANCELED hECONNABORTED tODby EDESTADDRREQ EEXIST EINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ODdTZENOPROTOOPT OfYZENOSYS ENOTCONN ENOTEMPTY hENOTSUP EPERM EPIPE NgESHUTDOWN ESPIPE MuUNKNOWN QENXIO EMLINK hEREMOTEIO permission denied FSAxl hgsyG address family supported temporary failure Lrpermanent failure family supported resolved protocol unknown service available socket connection already progress operation canceled Lrconnection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected JuzEq rTGTB message NEnetwork unreachable buffer space available device enough memory machine network luFno space device socket connected directory directory empty vprotocol error fzGyl result large system process cross device permitted unknown error links ALLasync event signal unknown error flCuuv malloc flCuAa dukMuv malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent ReleaseSemaphore CreateEvent CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress kernel GetModuleHandleA oaxlnz oluFK CancelSynchronousIo powrprof socket hclosesocket QMissing after object member Missing object member rHEVQ escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected SBUegh pPContent Length eZfalse rfZNB kipdXL kjbPA IBItxh CATkCetSam MltAR jjZIR dxIpk IvDIq KgRJG HgDER vbSiT kYnnt zoscW fQQwO jwbBHr dkPqsH ibKqilG WDgZKQ PyZXF WPoQe rJHzk MNGRw ofBHn asyuAhTm ABSYv FIBnU UKtwV JcwVR fafyxijfhkdanfrzz kbCrH VZYtVvE YtBju TmdKUk wmpON kMyPK OpyrA Wzaej otMZcP IuOFuqzD kbCrH VZYtVvE YtBju TmdKUk wmpON kMyPK OpyrA Wzaej otMZcP IuOFuqzD kbCrH VZYtVvE YtBju TmdKUk wmpON kMyPK OpyrA Wzaej otMZcP IuOFuqzD kbCrH VZYtVvE YtBju TmdKUk wmpON kMyPK OpyrA Wzaej otMZcP IuOFuqzD kbCrH VZYtVvE YtBju TmdKUk wmpON kMyPK OpyrA Wzaej otMZcP IuOFuqzD kbCrH VZYtVvE YtBju TmdKUk wmpON kMyPK OpyrA Wzaej harKz kgBYr BFCPg UTCsf vWsvmZ zaDYIP RAEpmj BcvXU TtgWgfv iplLy OMghX TxbvZ FZtHyNx SHdbif IfJgB ViYtVE TmdKUk wmpON LPnrJ RmvEU EOrFS MDprG IrrLf ypyrD CAnUmT AeKFN nYUqay dBIPCk kktDY,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj iaqOFf maxiTEn UCehJ dNwBL yEzpE KoiDU StQsVI QzpDDN WGsGK GtiIywD OrXTig rfWZi szqOXK JUmCx AXDOs CWnNWt UQxcP lobNy EABQW HZPGqts GPxIs KaLUQ luYqh auDQk vAxURd TVhRBR BldBi vSGpk GliWMQ Bztcw vKgNh nHmOf blHVWM vCVTw IiORUwDB GQpPc JoQDq IatLXY Ivgyy ulPkt BMkkLlh LQdCkO NbWUY KMpOH kvcAV twjna ySBif DPYwY KLmuR QdbwnTkgZ InKxg bAaHNF lrrTo SVNtHM YuKzz TCBuz cVIfuMkuN Ufsln JNSVrjH ZUnvXP LaLQr NajiX PeeoC mSSbE HOSDP llQYAA KFNkBU pJdhe OwcgJ JNYRf iyjLU ySPNCQ leqwf qLDMmkv mezzv vLvBW HRhwhK PIPUl EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl OlAFP QzHgE rEYwzg bctdC NGKYw NoVLs GaXRr XUqwae IGBfr pJcyw OlAFe omlCf PBaQh TKFEyFsr jMCsZb lAFWy KwBvgL NpwIMuq XNswK yRjOY AGuVj XMMWy rlMKZ AHLDQ oNgGZ MMQNr yAThYU uwSBSMio CMeJZw dDAHA VsrRrPG bKCCe EXAOBxnp Lexlr vcPVHO IxSMb oLDYj WzOOjT BzhhX cwJyUD LIUvf QWxKA DopdBo CgefO INVAi TymTDer bKPWG EwBLm UQSVWf UnRfGB CjEfOS HYNOgEy XfmhV axzcJ SVpYPWy xXQqPpD WwHXt OlAFFa nOdZk NTZjgu sghDI ALKuwBvh QmIGd WENyx jeluTvueSg upgIv gSSeM MLJBh sUUOAI sMCMJ CUFBaR RsvkeH fhliXy Vaobb StrER VMiMG JRWiq KRBvd puRqi FFgLN jZPzp IzmYB RnrHK WIFJz vZsVAf aslZhaQ BEkkR EXAfQ HqCwcI YGDlE nMCEj iMNPBl KUHPg AFMXc YgnwO SKfwIUYD QYfdB FajAL mNaTPmU aaqsR BZOIG xGQFl OavKq MhDPG yyTlK zlQXT ksNep uCLbZ IAVip ygcadFJS XSYba PSnOz OqEOQfUdF yrTeU pbQQJ ecVBj SasPJ gRBZwy uvNKsG cBdQo uAroK sbrcsQeMiw alFFn OlAFe GlHMA iXaJJA opvht NONwB bNYMUd ldOfW lAFUjh wYyQR krBjAN ucLCS HYICC vcoeW tLpOYK Gqqbg jUqsl TSUVWL VWRPN VWRPq vUHzB WERaqO LgjAW pPTrN sBqTS iuHIBf JSVWhI eRjXf qWxiq Zcmlc DSVWh qJmFxyg ehDYx BIDxd YzAvU SAAMt OTVUu nJQmeRRy zoGlC XXqgI IZlldO xcoyW SUVWT hELLS iqSvFCy auzLU TcDhD gvvOL Comfa dubxR KOetQUe QRsvL ilRfMha ZoYtQ LZDqF jMjGE fszTw ZPHZv VEeTpVt XoMSVPE bZVHtLTG fgvLU xTdqe tFFar ovrNVe CpSbIf wHmGiw fLENu KoELj gdeWdm zNIUt AfirhAW ZIxqk PoaxZ kPCXDN jXyMS acCJf cCCKf grFYo SkEQUCl GuWKdt NvcSHJx yVzST adzpiN hdGPh BCjDQZv Bfotc QCWvz wkbKK xrHYNk OccJmA Dijnwh vLeMh HMeCg yKehv dlYrB YFTRc VZwXM CmLuCY kwCvY xilju NIKwBLnKhI jLwhQ UqXKyp tJxrr SIjrxl qcLWo KSeFq BccECPz ycGOu WnPsR bWwMp gbDqWP RsuDm yoHmx xkZar sIefJ ONNtOLy BGUGZ NGuJY UMsdH eUYHw btAVp bpsCz FpZhgM KkfPXq ATVit ZdHULdU AIvdE NKTbH fSUVW uCBTmyA aOUbC RtgaNS VPjLh kPHzQ JXRQih whEBLn EOjea HFAePMMLYD HuuqL aVmMH JqIaWiB xsUznOu VhOhJ oknEt DBxrr ReJkD XUxVW krQQB KFyNp Akohd zupspY OTRjdR NELnNl QdPum miQHj qpcXi YHcDkeB iggSJ HARsa GGmLzw Iqnkszk FppYS IwOqnf GAgiS tvhHI yIMchBOmu qPYVm PxxRT uSUVhI VsNHZsH YytNs ojbuFz EwXvG pzDeM SwsTn GywVj bNYMM xiufI UUCLm gzQCD bEyvA jOKSM GASRL jLAoc tjeEQo jOtPhs MqtZe oSCnDS DRXer iHAvmN JhLpbE RJOzE UCeSU sXPVjt tLsdB CAsKsga SUVWC ICSpv ZWLvL bDKwB ctnxd MgbDKU DlylH fCqLgn wBxhZ JBCawCY COZxv SUVWh kONKJX iYFAST jzBpv QSUVW kuZpu EpMuM GXGTt MIgcYD UjlQgG EtdSI BtaSR YhAAo XqZRS DOsacRk FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS nhfgO MgbKV mGrTTV tEaxV Awvij eQpeRO wDbWD neFvYWXd TISXu tsHjIM ODwoB CUBEv ODBZd ceTkc TIcjb XzzNH LFujKO GmTqP KockG KGKutD YXLDM PENcK ZPwzo xDrLn iMEfw iSgrLKdRM tvGuM vKaqjeP EQxla rATxPFw jJSZSn EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE xYYEe HOSwP qvtaP RYnVujh EOUQME MEEEEE MEEEEMe ZmMQej TSVWu EPMMtM IiSqn kHljoG DkERe MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe VUUjh EPMEEEE MTVMMHVE nUokp nUokp MEEEEE JKXFt IrFNY hYIVG jemRt iyIhD JNfCeh XMmYu oXtnN holyfM jCIup MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP XONwxih MoDLS SVWeMEEMM RMEEM GLlgZ TfDgLiU TKmGpj TcWDw nJnkDi IvPye PwEGzu OTqMu sHrAT FeqhB EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd qlRvzF MEEMMU EMMUUE EMMUU UREPM fKdaI MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ OlAFU bSYjW CvzvrQ QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE WTUDMEPM EtRMQMZEUE UREPMH EUUEEMMU MgbaNSb EEMME MMUUEEM SVWeQ EuWuS uDqCj dNcBA tvDAt NxbRFHO lUxHcv IYAhRh qOyid CBrHYega EnfVExpRj BEQDf JACgT mvyVv pvXVUC ArvzR hmrcHM Pscpq EvZSP IRPCv OYAZBN kypohw CxBlVT aSiJD EpUff ypFZZk MgHBZs kEjHQW SMRiQ qDqrhx qWBYJ jTYvB Sfvji FOBgu vxFFc CNBAh VWWeeuf enQwu nIUkT TAouX ZPxTC KFIHB VvYcK AQRrB zEKiV xQTTn bIbWs XcaPL BjtJU iOjej lhQkLp yShVGtU NfBtZW zGguP IbhmBE SrfXI edqQA qYHBA mVnLIa asFcq JsZYAp MFyrk uCXeY KnQjka HupCbIK NrzBap avGpg MQLpK VlWDE IhYPdD cfyZLE XOVhE wyayP ZTfCb BKmTE XRjUaj afcsX uxgBJX DpBZj mZBgX xnQvM tFGcK CgvyAZ GCUty MAfCG FErbiS jUjwRd hmiNnXgf RfEyo suzEE DvrtK Njuwm qlPvu FQTEcEY vdezL fFnXer QRHuC hnRux DXNxM FjLJOB IviyY DuMPk VphVEH zscFEh zftGp tellV SSzsa wKjQY ATOTJO ZkhZN cGCgN JeuAm NCNsz DISeN xIMhL dUKTf fEJusP ogslO PgxDM faukLp KJDCV mrQvV QGvER FjHSw WZDHvk uUKNc SoHSQO ydBDDYjk AdhPQ fHLfggdcH stemO WogfL UidKvME yAeSVH GFofU NZiSjZP SUVWj BABABA RUnrn QxsqM dIEhKT qaqlNs WsUqmI ylxsJ rkBlf lodgA YOqfS FRujF TSdTL sDpJwJ ABWPu keeLD QyRVw jbcaJLcNr PQYYt eZZZPm WXOcKA PeKlV uYSWu EntelE ineIEE GenuE PeuEEEEd xUUQVu HdqYZCB QPEPh QPEPh igdey SjueF fqXUU durky GYlUM PYYug PYYug YYEPV FUQQEP VNjWV TeyavyB gUQVu VVQYn GYdci AuEZmP tsHUQSVu VObAOqX HuYUV EPuuu iHCOADc SVWUu tfVUk tLxXj USVWUj UQPXY yCUVu BgiFTBVE iDgRMW CuiYM csmuP LGzvE Nmxqs WWWgKD tPtLw PQYYPV Ujhxj URPQQh USVWj uFaFOsjz PPPPPy MeEPj uZVOC fIOjvq fEvvq JsxdFF qUldK kjoOH ghTmu EQPjjM VPuus CdeUQQVu scKXJ EYUul lmrFw GsSpA srjJq USVWN ZEQejV emsWe UQSVMWj rrPKG AgQiXG GJucx Zjyop zwpBAh ItOLt zRdrS fswCW zaeih znOri ldWOQ jAZjX UuCOWpY UeJzy UQQVWjgYjGN PQPPESPW jsXfF RTuUM EwaQH UQQVW DXkiBjN TjjNm XXotZ xEhcbr KYzQqJh XguGx XFyCaN RPQQE VQuuH SUBGm uEPEPWSY YPVWSu kPVWSu boEnE PXCEOhk UtvCxr NPykAg FRBsZ VujBG OZOgo KgURL rkJJr lDAjs ZRclr ZXyDgbgt GhCqG ZkxAW GyzHr tEAUQQE uPuSW EEwPr UEHEu NIEdrCbM qIngzeDFe aUQQS XfEFhP EPEPk AlVpu ZAQISq PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu ovgwL KIuYEj zSbXF SsWYTt YoAvP uBjAYjZ LWCgG jAZjZ UQQVWO SVWtdAu DboaX CSoAGPq sswhMMP MuEUQVu DfXVc YrfmBpmVN yczeEg CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp HUcsm SWiiuL VcqBF PgAUdTt OweFF NcEyX rXZwG Rrcsb caYvl JuWBk eskmC xyhPUXRgld KNzzJ QAFwV zupxX RJcES MEEEPu pZHywWM zVHhH NOnVakD AnmkP SOGYu PPPPPt PPPPP HLMMQP IlSkO Oatdy wBvhSNP YYtVWh EWWPb uCYYt uVWTb WWWWWS DYzwN jJojT KZoIJTLd ZtLDk FPkMr YtVWj PPPPPPPPU VSYYt wGEdUqLT ejDdXo EAEfEEj EPQEPEj hFqRC AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP pHJkil rGSfW UQQfE fEEPj FecTbEs OPXEM tNjeqfC EGWVj TdpQj pMLNEzN QRZsM LSDiHa BdWbl MSVWu MQWPVk GfOUU qPxKG JXHAB Xdiow MEEEPu BGRgO zpSbS AAICU qbgLl PPPPPWSu QQQPu VWuSu PPVWPu JUWVSM Annhj onUVu EmPnN mHDbJ Drurt njSuPMlXFT WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu zHgaJ rqQRQ LgAget NZztu QPLYYMt uPTKCw XfszE kwWBws YUPLL srRMp BQFmvyn ZRhXV QyGMu XYvzc eOrlblb JAICG vLGOV dgfUy CpAKN HfRUEE nWXzBE loflARc IMMXp VWuqQ SsSxg ASTEkI PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj SnMKX VeWIW Nspxh HpkPW olCIs lQPVm jAQXk WxxVL WvvVL WHtAtVL PDUQM BKYasG HtynV QnwXF VFMMm aGiKbAx KUQBWL VMcNK xuchaW kSHCR oEAvs ASDAw SWXRd rslfM ZwTZuG qgxnK lgTmG YucadU qKuNw BqTUS xVoZY taPzS CKbICY QQQPu MEEEPu EEPVYY tQBzGxeOWF npfiR ikjVXjy UCtAb tVxLC XeZjw mDjQP ISbws jNJqf ljXzH NEzGb WnUWVU EPeuEEEEd csmuu UEcsmE PEEhg Uhygdx VWlCv mNDZVZ XoVnm UQQSV MDbSp AFwlR QhMrng oRMFH UHEDgfX tGEFc pVjuCv QynDG IoCUIM jeNfQzY sgJJadx pQViW dsVcgKh UHaoO EEyfG IhSnB powPS KZMBFS iUsFZ sarUO ZKwLDN bhUFCj PWlnq hcZZh HSxjF tKVXA nZvNw mstnk wQbRHhz hNdKL Mrcoj ovnQW OUyeJ sBNApB qJAfG OWFNf wQpRO nDbWg rbBLK EHZaT KhblrOT rRpyu RMqKjB Fkfbh ADwDg Cmddvpg WiTfb qCSLE sWFoy hRzSVgOD ZqFFao usXNxO rSxKnk CpNEZ VvmyC HNdukM zxullH QpdWel SghRq ERWqb WTSEOoB BWdXZ gclBX fPhuV FKkuyW JmXlva rdmAC Uxfpu VmtDB erOILT rDDCD uddNr HGUwv EXEqhLq XaOJG TRGkXsC esBtxG NEOVZ XxaVhX bWyHO qiRMn tAFaS usEdCKh KhQxQ MXvrQws MFhEi nApvdotz xgjdS dIGjg SXhcK ONwjj HqobO KpXGI OlAFFhD jxEPD WGXpdKWF pnfRzp TUyfC whtVJ SnMTrQ kUsPWB NUyurl DAWRp RYdie cXBxK SiYuz rIqoTEY EjWnF qUmFow QoZCm SenRH SKIUd ervgU KoMAE PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH lzvOv mzIfs MuUMEIEPML UMEMd CRHpN EEEMEME HnEMI MEEEE ntJETE EPEPM YmCJNn GikfEIl gEqUQQMEM AMEOVP snvjku tKDztI SIWcg ZwotA eydrB bIMcXBR PeafCF srCTa okrCW wiZLc YfXtLu khecv bgCHL mEgVr smsNp hjTyi LfKET tvqXD HRHnS SroLOk enEju gorOkXVhF XZyNM tVuug kPLwg OBHzD akPYud XtQbn cgBgPs EGLgNl XDIBo cShPL conYj URGSr UvIgM HQYnL vGpkgumf jZWvX WOotc UbXTP dTpdhd vVRDFYG UBNRK dOcuw EMMUREPMMM EEMUQ EUQMEH ZdPOlAFe MMEUE ZdPOlAFe YbbRSQE CKjoQsG ZUQMM EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU JZQgwuPTGV EXgoJ MQMUU xKAvX OlAFUQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd VRMgbUQME EULMEH MUUEEMM UEEMMU XNRrV rAkuu lHvTFwCRP kGUFwj ZzEdI lWMza QRNYk AXEvD eRJQL OhVyoB QFLkS mjCyW MOlrM PdpJd OHNUW awWng xwGAZ DbxFn hWNbWL zEjCEW locale iostream SNpjQios badbit failbit jaupxBm RVgOZzh WIPTL kQGwj joFzd owRom catyvX rDvzgZ QfFmD hVyoB LkkSsc tZrtl EXMbX IhWNbWL uJMcVV uUQHP ieitO nUGZbZw WXsQT JJAjp array length Dunknown error address family supported already connected argument argument domain descriptor message connection already progress device resource directory empty large cCAfunction supported unreachable illegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device process supported rwoperation supported Towner protocol error wEsXiJ state recoverable MTitoo files system files Swrong protocol FlsAlloc FlsFree SetThreadpoolTimer STmwsp InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx QMKSt wLsqr kYbYkE kmXahoVB oRERR WXxIK sXxIKE DfQCk ELYrLML kNrOGE wHsHa YEcNM cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable qOjniV placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx kHBZcU lNtoi eshqOTj qEqqZ OBpkgSz GaELO voKSMzR Qasin Dceil floor ldexp hypot Qfrexp soDgEdC isinh mmeht PWcLqxk KNBzj BDWed EiMonday Tuesday January iMarch April December iImezS LCIDToLocaleName QXqJJ zyujn eXxKs xZqMcD zSTqt MCXUK BHnRx YKBfM qIuUds rSvZxV FlNaA WkEYE ugOqFa sDkHJEs wBlUO ycwkH BKPXYS XYZOryV amXGNm qeJJF LtmYE SLHig NbWRLo ALgrE VoQhN uIvVazxk jMdYy QdiSY WkOnV zetZR XOPCZ pgWzP oWIud JbfTj rYDiPG ZdScF kaLJR PBBKSaLN Ddnky IJDcP ivheOeL KXlfo zGntH uaSyfc ECgxN fpBiT MnnvY uContextStackSize ContextPriority SchedulingProtocol oKMzt UMQsqrt ZfUUU OsBAj gaXgxL usage usage WgxPHD HFfJO QlDHu TpcfMm oXBksqo nicehash LndQHWiGYN OXGik kxqUM Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ uwULm JhAcl iElltb JLXCM mNlVez PLzPN hrlmK WbXeK ItDFV UCKzFQr bPgOJwMqT JjVkxE WIKja Zmqar sEFVKK ABCDEF eAoTP kNdnp DBWZd WXxKA dydnmXU msNNVS MtEHc FyvSK YgMcD XpYZjRD lNwsaHA XaYZxv eIOry rjZTBDY QRWKNY qeJJLEFDW yXOqw DuJVo DSVsjM WXGxKd pbiQO GikcE isvOO wBhooP aYZxv Ogkwb CknXVih WXxKA voKBI cEWXxKA WXGxKd AObJA Gnfqw Etnio caZxv Akdcwu XpYZj GzGVR zpQBC WXxKALE voKMzG WXxKA WXxKd WXxKA IunrU zSgFf CbcDd EuTEh HlJEL XYsuOry eKBbCR cIQjXS PAEFRA aMpHEl qTJBX lAmWw CNWuv HvAec nUGIFZw FRddl ASFxC MGKGVxK xqJHMh iUsLk nVpQBC DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven bUMRiseRiseRise Geode Geode QOPTERON PHENOM PHENOM iFUSION FUSION FUSION FUSION Pentium ePentium Pentium Pentium Mobile Mobile Celeron Pentium IRWIN WESTMERE PENTIUM MOBILE iMOBILE WOLFDALE MEROM QUADCORE PINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED xqJMcD WXxKA LWLzeC Unknown system error Unknown system error QEACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF QECANCELED iECONNABORTED zEDESTADDRREQ EEXIST EINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM OQENOPROTOOPT QENOSYS ENOTCONN ENOTEMPTY iENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN DENXIO EMLINK iEREMOTEIO permission denied address family supported temporary failure UMpermanent failure family supported XOxKresolved protocol unknown service available socket zconnection already progress moperation canceled UMconnection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected message network unreachable buffer space available device enough memory machine network space device zsocket connected directory directory empty wAUKQ protocol error result large system process cross device permitted unknown error links IQasync event signal unknown error malloc malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore CreateEvent CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress FlnHe kernel GetModuleHandleA CreateSymbolicLinkW CancelSynchronousIo powrprof zsocket Ziclosesocket zBXjQ DMissing after object member ErXXsw Missing object member XpsBad escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected DRQzb Content Length Qfalse quKCS PEGUME VaYQIA ocVMV rbfqiaYQI zjvyqiC xogvi PZKtI qhQvU BfNXv kajac XmRQQzZFv hjMHU zGuWk deLBX PNygUa VRHMXu MfSlPz GIPmI bmyhUdVN BrpzQ ZWEYZYR BlKjH InltFX yskYc myKRSdH wlVUI YXANU EaykNz xsYyRHOufGEynX GYksm wNSauH fafyxijfhkdanfrzz WXxKA xqJMcD XNRrnVV aYZxv ktIvZ WzWSg QRWKNY eJJLEFDW kXOqw BUouu LkSVsjM jPVrZ tZrSt MOZrN dYvZq WAbhH KDkho CNWuv ieitO nUGZbZw WXxKA xqJMcD XNRrnVV aYZxv ktIvZ WzWSg QRWKNY eJJLEFDW kXOqw BUouu LkSVsjM jPVrZ tZrSt MOZrN dYvZq WAbhH KDkho CNWuv ieitO nUGZbZw WXxKA xqJMcD XNRrnVV aYZxv ktIvZ WzWSg QRWKNY eJJLEFDW kXOqw BUouu LkSVsjM jPVrZ tZrSt MOZrN dYvZq WAbhH KDkho CNWuv ieitO nUGZbZw WXxKA xqJMcD XNRrnVV aYZxv ktIvZ WzWSg QRWKNY eJJLEFDW kXOqw BUouu LkSVsjM jPVrZ tZrSt MOZrN dYvZq WAbhH KDkho CNWuv ieitO nUGZbZw WXxKA xqJMcD XNRrnVV aYZxv ktIvZ WzWSg QRWKNY eJJLEFDW kXOqw BUouu LkSVsjM jPVrZ tZrSt MOZrN dYvZq WAbhH KDkho CNWuv ieitO nUGZbZw WXxKA xqJMcD XNRrnVV aYZxv ktIvZ WzWSg QRWKNY eJJLEFDW kXOqw BUouu LkSVsjM jPVrZ tZrSt MOZrN dYvZq WAbhH KDkho CNWuv ieitO nUGZbZw xGMcD Iunzr hGJdFsJ NRWCl ottzw GBKtt WXyxK qJMYTD HXEuY IxJhI qznCG urIkWY kbHZg bXxUK XNRrnVV fifjb RwYER ktIlZ QRWKNY eJJLEFDW kXOqw BUouu LkSVsjM jPVrZ tZrSt MOZrN dYvZq TqrSH XWCcm hLRHU yUTAx aZaUQqk BseAC yHyZw BFnFxR,1\nprogram cannot rdata gfids reloc PEEpE EVPEd ESVWPEd UjhWD EVWPEd tHPHxN VVVVZ UjhrD UVNLt PSWvL ESVWPEd ESVWPEd PREPEPEPC sCWSMi UjhGD UjhGD UjhxD QPVqT ESVWPEd sCQVM YUjhD tzVME PQSVW UjhPD UjhWD EPEdE ESVWE UjhID UjhxD EPEdE RRRRRRRRR RRRRR RRRRRR RRRRRRR RRRRRR RRRRRRRR uSSWU tHWSV txVmF XPEdP WUySh SUVWj PSVUi tSUVw SVWjPj VOhQt SUVWtIW VPBhP PVQhH DPsHh rahrA VLhrA utVUj SvTVR uLjPh SVWtWt QQRjUr UPVSW tAQRv PRVmk vlWKG UVWtEs tNuJu thQRW rdUVRPh QSUVW YSUVt FpPVS GQRhL vhvxS tCvxm uLvxz vhvxj vhvxPU FdFlFh FdSvpvd umRQh PQRUlq WURPo RPQVm RPQVl jdPVl QVRPAl jdPUFr WVRPj PURSt RPWVh DdThD tXGFt HPVvh HsBFD teKPPQ EPQhP EPQhP KutFtX YQSWh RPRPj PhDUE zWhDDE WhLDE WhdDE RQWjSc QPhIE tBPhKE PhTLE PhTLE PhXNE HPhQE tZPhLE uvhRE BtgUp YPSVt trunD uIShl uISht SVWhh uAGPp VhhaE sAUhcE ShTbE PShbE HSUVt PWVKX gfffO tRcjwD PhdcE hDLeE DPhdeE jjjSj PhDfE PhDfE QjQQjjjVR PREAu uthDgE uLhTgE tbVWj SRQUZ EQRhHhE EQRhxhE ERhgE WSdshAH APhjE TTLSut SASLu AUTHu PQVhjE uNhliE QPSrQPShQPS TQPSJQPS YfyQC VjdUjjP PjjPS QnPupVo WQnPt QhxlE VjjVFjjVt STLSu USERu SASLu itOQj QSUVW tNQPh STARu TTLSu SIZEu AUTHu tphgE tPQWI tkPhpzE jjjVDm QjQQjjjW USjjt jjjVqf jjjVc NHFDj QSUVW UPWCU SWjjt VhpxE PQVWO PhxtE VRQPh VRQPh UVhhuE QhHuE jjjVL DPhsE RQUPh PjPPjjjSGh uPhsE wXhsE jjjSA uVPWr QhDsE PhLsE PhXrE QhxlE uSCpCl DPhTyE tuhyE tEKXt CXKXCp KtACtu KXCDth RhPzE jPPnj XSPRQ UVSUk VdUWj QrHAIH EQSVt ttftb YQUVW tPPgd tGSVU HQPRd DPSWf EQPhE RPjjUp VPWPh WWhlE dQSPV PWRQc PVPhE PVPhUE PWPShHE PWPSh PWPShE HPhHE WPFPP UPFpP shWPD VUPRE stWUSjj TUUUwS PRSMz tpmtc MHELA MLEDD EDMLUt uDhLE tQVVjWj SVjWj tSVVVVjWVh SVjWj tmPfD DPUWx PVpPt tQNtJ wySUn PShDVE PQiYYt xffftfpflfhE jPEVP UDjDEj MEineIE EEEEE PeuEEEEd uuDVF PrYYug PUYYug QPEPh QPEPh WWuSu tFVSuuu WWVSWu PuEEd MbMPa handle already multi handle FLUSH RELOAD Cookie CURLOPT VERIFYHOST longer supports value Connection intact connection seems state Resolving timed after milliseconds Connection timed after milliseconds Operation timed after milliseconds bytes received Operation timed after milliseconds bytes received Hostname found cache Expire transfer Internal error removing splay Internal error clearing splay ignoring failed cookie localhost oversized cookie dropped bytes secure httponly domain skipped cookie tailmatch domain version expires HttpOnly FALSE cookie dropped domain cookies Replaced Added cookie domain expire unknown Netscape Cookie https cookies generated libcurl Fatal libcurl error WARNING failed cookies proxy Could resolve getaddrinfo thread failed start Hostname cache stale zapped Shuffling addresses Hostname found cache Couldn parse CURLOPT RESOLVE removal entry Resolve address found illegal Couldn parse CURLOPT RESOLVE entry RESOLVE addresses discarded Added cache RESOLVE wildcard enabling wildcard checks ABCDEF image image image image plain application application binary quoted printable Content itself subpart boundary Content multipart mixed application octet stream Content Disposition multipart attachment filename Content Disposition Content Transfer Encoding Content Transfer Encoding multipart security secur multi Unrecognized parameter value passed CURLOPT SSLVERSION SSLVERSION incompatible SSLVERSION BEGIN PUBLIC PUBLIC public BACKEND protocol Closing connection Connection seems pipeline multiplex serially Found bundle Server doesn support multi Server doesn support multi Could pipeline asked Could multiplex asked Connection still resolving reuse Connection enough reuse Penalized Multiplexed connection found Found pending candidate reuse CURLOPT PIPEWAIT unknown proxytype option given Connected Failed convert contains letter Protocol supported disabled libcurl Please encode Invalid address format proxy proxy proxy PROXY proxy variable https socks socks socks socks socks Unsupported proxy scheme Unsupported proxy libcurl built without HTTPS proxy support valid number proxy string memory shortage proxy PROXY Couldn netrc using defaults anonymous example valid number connect string Connecting hostname Connecting Couldn resolve Couldn resolve proxy Found connection requests reuse connection anyway using existing connection connections allowed connections available cache connections available picked clear picked proxy picked clear picked Agent failure failure Write callback asked PAUSE supported Failed writing Failed writing header Failed KEEPALIVE Failed KEEPALIVE Couldn interface Local Interface using address family family resolved family Couldn getsockname failed errno Local local failed trying failed errno getpeername failed errno ssrem failed errno ssloc failed errno Connection After connect Connection failed connect failed Failed connect Could NODELAY NODELAY failed errno Trying Immediate connect Digest Proxy sAuthorization Digest gopher imaps ldaps smtps telnet libcurl WinIDN identity Unrecognized content encoding libcurl understands content encodings chunked allocate connect buffer CONNECT phase completed Establish proxy tunnel CONNECT Proxy Connection Proxy Connection Alive Agent CONNECT Failed sending CONNECT proxy Proxy CONNECT aborted timeout CONNECT response large Proxy CONNECT connection closed Proxy CONNECT aborted chunk reading Ignore bytes response Ignore chunked response Authenticate Proxy authenticate Content Length Ignoring Content Length CONNECT response close Connection Transfer Encoding Ignoring Transfer Encoding CONNECT response CONNECT responded chunked Proxy Connection Connect again please Received proxy after CONNECT Proxy replied CONNECT request Moving trailers state machine initialized sending Unable allocate trailing headers buffer operation aborted trailing headers callback Successfully compiled trailers operation aborted callback callback asked PAUSE supported function returned funny value Signaling chunked upload after trailers Signaling chunked upload terminating chunk Cannot rewind callback returned error ioctl callback returned ioctl callback returned error necessary rewind possible requested document enough requested document enough Rewinding stream bytes length Excess found pipelined excess length Ignoring response entire document already downloaded server doesn support ranges Cannot resume Simulate response Failed writing chunked encoding Leftovers after chunking bytes Rewinding bytes Rewinding stream bytes maxdownload bytecount nread Excess found pipelined excess maxdownload bytecount reading close Failed alloc scratch buffer completely uploaded select returned error waiting continue transfer closed bytes remaining transfer closed outstanding remaining Maximum redirects followed Issue another request Switch Disables REFUSED STREAM retrying fresh connect Connection retrying fresh connect HTTPS sAuthorization Basic Authorization Bearer Rewind stream after close instead sending bytes Forcing requested returned error Negotiate Proxy authorization Authorization Basic Authorization Bearer Proxy Server using Authentication problem Ignoring Ignoring duplicate digest header PROXY Empty reply server Expect continue Expect Expect continue Malformatted trailing header Skipping trailer Content Cookie Invalid TIMEVALUE Modified Since Unmodified Since Modified OPTIONS Referer Referer Cookie Accept Encoding Accept Encoding Transfer Encoding Chunky upload supported Transfer Encoding chunked Accept Accept Could stream Could bytes input already completely uploaded Range Range bytes Content Range Content Range bytes Content Range bytes Content Range bytes Cookie Content Length Content Length Failed sending request Content Length Failed sending request Content application urlencoded Failed sending request Failed sending request upload completely bytes Rejected bytes header Failed alloc memory header requested returned error Received allowed Received chunk close Assume close signal Connection closure while negotiating error before sending error before sending sending tossed Lying server serving Unsupported version response assume close after Maximum exceeded Overflow Content Length value Invalid Content Length value Server alive proxy connection alive proxy connection close connection alive Content Encoding Content Range Modified Location Connection cache closing oldest Callback aborted Resuming transfer position Total Received Xferd Average Speed Current Dload Upload Total Spent Speed Operation bytes transferred seconds Receive weight penalized pipeline blacklisted Server blacklisted Monday Tuesday Wednesday Thursday Friday Saturday Sunday abcdef ABCDEF WARNING Using random abcdef label range Label small memory RDATA length Malformat RCODE Unexpected Unexpected CLASS content error request completed request Failed encode packet Content application message seconds CNAME Could resolve kernel LoadLibraryExA AddDllDirectory schannel schannel supported EPHEM AGREEDKEY HUGHES SKIPJACK CYLINK SHAMD MASTER SCHANNEL MASTER SCHANNEL SCHANNEL MASTER MASTER MASTER REPLACE ECMQV ECDSA CurrentUser LocalMachine CurrentService Services Users schannel connection schannel Windows version connect servers algorithms version ntdll schannel version Windows support certificate verification bundle schannel using existing credential handle schannel incremented credential handle refcount schannel disabled server certificate revocation checks schannel checking server certificate revocation schannel verifyhost setting prevents Schannel comparing supplied target subject names server certificates Unrecognized parameter passed CURLOPT SSLVERSION Unable ciphers passed CONFIG schannel Failed certificate location schannel Failed store error schannel unable allocate memory Microsoft Unified Security Protocol Provider schannel failed schannel using address supported schannel offering schannel initial failed schannel certificate check failed schannel sending initial handshake sending bytes schannel failed initial handshake bytes schannel initial handshake bytes schannel connection schannel unable allocate memory schannel failed receive handshake schannel failed receive handshake connection failed schannel encrypted schannel encrypted buffer offset length schannel received incomplete message schannel client certificate requested schannel sending handshake sending bytes schannel failed handshake bytes schannel failed schannel encrypted length schannel handshake complete public match pinned public schannel connection schannel failed setup sequence detection schannel failed setup replay detection schannel failed setup confidentiality schannel failed setup memory allocation schannel failed setup stream orientation schannel failed retrieve result schannel server accepted server agree protocol schannel credential handle stale removing schannel failed store credential handle schannel stored credential handle session cache schannel failed retrieve remote context connection timeout select socket errno schannel timed sending bytes select socket errno schannel client wants bytes schannel enough decrypted already available schannel unrecoverable error occurred prior schannel server indicated shutdown prior schannel encdata buffer resized schannel plain returned CURLE AGAIN schannel plain returned CURLE ERROR schannel plain returned error schannel server closed connection schannel decrypted length schannel decrypted added schannel decrypted cached offset length schannel encrypted cached offset length schannel remote party requests renegotiation schannel renogotiate error pending schannel renogotiate encrypted available schannel renegotiating connection schannel renegotiation failed schannel connection renegotiated schannel failed decrypt schannel failed server schannel decrypted buffer offset length schannel schannel cleanup schannel server closed abruptly missing close notify schannel decrypted returned schannel shutting connection schannel ApplyControlToken failure schannel failed close bytes written schannel clear security context handle Schannel schannel Failed remote certificate context failed retrieving public server certificate MATCH lookup missing default CLIENT libcurl MATCH Failed sending request DEFINE LOOKUP CLIENT libcurl DEFINE CLIENT libcurl BINARY SUPPRESS AHEAD STATUS TIMING NAOCRD NAOHTS NAOHTD NAOFFD NAOVTS NAOVTD NAOLFD EXTEND ASCII LOGOUT MACRO TERMINAL SUPDUP SUPDUP OUTPUT LOCATION RECORD TACACS OUTPUT MARKING TTYLOC REGIME SPEED LFLOW LINEMODE XDISPLOC ENVIRON AUTHENTICATION ENCRYPT ENVIRON ABORT DMARK TELNET WSAStartup failed insufficient winsock version support telnet EXOPL Sending failed terminated Empty suboption unsupported unknown Width Height REPLY TTYPE Syntax error telnet option Unknown telnet option SUBOPTION processing failed WSACreateEvent failed WSACreateEvent function WSACloseEvent failed WSACloseEvent function WSAEventSelect failed WSAEventSelect function failed function WSACreateEvent failed failed WSACloseEvent failed FreeLibrary wsock failed timeouts state Total retry maxtry Malformed packet rejecting option value blksize invalid blocksize value packet blksize larger supported blksize smaller supported server requested blksize larger allocated requested blksize parsed tsize tsize parsed invalid tsize value packet Connected transmit Connected receive octet netascii timeout first internal error Received packet block again Received unexpected packet block expecting block Timeout waiting block Retries internal error Received block expecting giving waiting block internal error event finished Internal state machine error failed Received short packet error Internal error Unexpected packet response timeout LDAPS Microsoft Corporation local Vendor Version local local encrypted cleartext local trying establish connection local Cannot connect local remote binary There entries onetree subtree IMAPS CAPABILITY STORE FETCH SELECT EXAMINE SEARCH EXPUNGE Unexpected continuation response STARTTLS LOGIN AUTHENTICATE AUTHENTICATE known authentication mechanisms supported Cannot SELECT without mailbox SELECT FETCH FETCH FETCH FETCH Cannot FETCH without Cannot APPEND without mailbox Version Version Cannot APPEND unknown input APPEND Cannot SEARCH without query string SEARCH PREAUTH connection already authenticated unexpected server response LOGINDISABLED STARTTLS supported STARTTLS denied Authentication cancelled Access denied UIDVALIDITY Mailbox UIDVALIDITY changed Select failed Found bytes download Written bytes bytes transfer Failed parse FETCH response UIDVALIDITY MAILINDEX SECTION PARTIAL GOPHER Failed sending Gopher request unexpected server response supported Authentication failed SMTPS unexpected server response STARTTLS denied Remote access denied Command failed failed failed failed Error accept server connect Connection accepted server Checking server connect Accept timeout occurred while waiting server connect There negative response cache while connect Error while waiting server connect Ready accept connection server while waiting Doing handshake stream Preparing accepting server timeout response timeout response aborted select error getsockname failed failed resolve address provided socket failure local address failed failed failed ports Failure sending command Failure sending command Connect stream passively Failed already completely uploaded Failed attempt exiting Failed attempt Disabling Illegal number reply Weirdly formatted reply Couldn interpret response connection instead response resolve proxy resolve disabling usage Failed Connect stream actively Modified unsupported reply format Given exist Skipping comparison Couldn desired response instead assumed server doesn support Offset beyond already completely downloaded Instructs server resume offset Accept ranges bytes Couldn Failed upload available immediately bytes Maxdownload Getting response requested available Access denied rejected server server response expected unsupported parameter CURLOPT FTPSSLAUTH Failed clear command channel Entry Failed figure NAMEFMT command failed Server denied change given directory Failed command accepted Remembering Failure sending command control connection looks partial download completed closing connection server report Uploaded unaligned bytes Received partial bytes received string accepted Connecting perform SECONDARY Wildcard Parsing started Wildcard START Wildcard skipped Failure sending command memory Uploading without Request previous transfer Couldn writing Modified failed resume transfer request match response Receive invalid request DESCRIBE ANNOUNCE SETUP PAUSE TEARDOWN PARAMETER PARAMETER RECORD invalid request RTSPREQ Refusing issue request without session Transport Transport Refusing issue SETUP without Transport header Accept application Range cannot custom header Session Session cannot custom header Session Content parameters Content application Failed sending request error writing packet Cannot write packet Cannot pause Failed writing Unable header Session blank Session Session wanted Invalid input packet abcdefABCDEF abcdefABCDEF localhost AAAAAA BBBBBB netrc machine login password restarted handshake rejected handshake failure internal error sAuthorization SOCKS connecting proxy SOCKS communication SOCKS connect locally resolved SOCKS connection supported Failed resolve SOCKS connect SOCKS proxy Failed SOCKS connect request Failed receive SOCKS connect request SOCKS reply wrong version version should SOCKS request granted complete SOCKS connection request rejected failed complete SOCKS connection request rejected because SOCKS server cannot connect identd client complete SOCKS connection request rejected because client program identd report different complete SOCKS connection Unknown SOCKS connecting proxy SOCKS server resolving disabled hostnames length actual SOCKS connection SOCKS connection timeout SOCKS error occurred during connection warning unsupported value passed CURLOPT SOCKS SOCKS communication Unable initial SOCKS request SOCKS nothing SOCKS timeout SOCKS error occurred Unable receive initial SOCKS response Received invalid version initial SOCKS response Unable negotiate SOCKS context Failed SOCKS negotiation request Unable receive SOCKS negotiation response rejected SOCKS server SOCKS GSSAPI message authentication supported authentication method acceptable quite likely SOCKS server wanted username password since supplied server connection authentication method acceptable Undocumented SOCKS attempted server SOCKS connect locally resolved SOCKS connect locally resolved SOCKS connection supported Failed resolve SOCKS connect SOCKS protection implemented Failed SOCKS connect request Failed receive SOCKS connect request SOCKS reply wrong version version should complete SOCKS connection complete SOCKS connection complete SOCKS connection SOCKS request granted error Unsupported protocol Failed initialization using illegal format missing requested feature protocol option found built libcurl build decision Couldn resolve proxy Couldn resolve Couldn connect server Weird server reply Access denied remote resource server failed connect Accepting server connect timed server accept command unknown reply unknown reply unknown response format figure response Error framing layer couldn Transferred partial couldn retrieve failed specified Quote command returned error response error Failed writing received application Upload failed start before Failed local application Timeout reached command failed command failed Requested range delivered server Internal problem setting connect error Couldn resume download Couldn cannot search failed required function library found Operation aborted application callback libcurl function given argument Failed binding local connection Number redirects maximum amount unknown option passed libcurl Malformed telnet option Server returned nothing headers crypto engine found crypto engine default Failed initialise crypto engine Failed sending Failure receiving Problem local certificate Couldn specified cipher certificate remote Problem access rights Unrecognized Content Transfer Encoding Invalid Requested level failed Failed connection Failed access rights format Issuer check against certificate failed failed since rewinding stream failed Login denied Found Access Violation allocation exceeded Illegal operation Unknown transfer Remote already exists Conversion failed Caller register CURLOPT callback options Remote found Error layer Socket ready mismatch invalid session error Unable parse Chunk callback failed connection limit reached public match pinned public server certificate status verification FAILED Stream error framing layer function called within callback Unknown error interrupted access argument Invalid arguments descriptors would block Blocking progress Descriptor socket destination address message protocol Protocol option unsupported Protocol unsupported Socket unsupported Operation supported Address family supported Protocol family supported Address already Address available Network Network unreachable Network reset Connection aborted Connection reset buffer space Socket already connected Socket connected Socket references Timed Connection refused unreachable empty Process limit reached users quota Something stale Remote error Disconnected Winsock library ready Winsock library initialised Winsock version supported found found again Unrecoverable error nameserver record requested Unknown error CRYPT REVOKED ALGORITHM MISMATCH BINDINGS PKGID BUFFER SMALL CANNOT INSTALL CANNOT EXPIRED UNKNOWN WRONG USAGE CONTEXT EXPIRED CROSSREALM DELEGATION FAILURE CRYPTO SYSTEM INVALID DECRYPT FAILURE DELEGATION POLICY DELEGATION REQUIRED DOWNGRADE DETECTED ENCRYPT FAILURE ILLEGAL MESSAGE INCOMPLETE CREDENTIALS INCOMPLETE MESSAGE INSUFFICIENT MEMORY INTERNAL ERROR INVALID HANDLE INVALID PARAMETER INVALID TOKEN ISSUING UNTRUSTED ISSUING UNTRUSTED EXPIRED REVOKED INVALID REQUEST UNABLE REFER UNKNOWN ETYPE LOGON DENIED REFERRALS EXCEEDED MESSAGE ALTERED MULTIPLE ACCOUNTS OWNER AUTHENTICATING AUTHORITY CREDENTIALS IMPERSONATION ADDRESSES SUPPORT REPLY SEQUENCE PKINIT CLIENT FAILURE PKINIT MISMATCH POLICY SUPPORTED REVOCATION OFFLINE REVOCATION OFFLINE SECPKG FOUND SECURITY FAILED SHUTDOWN PROGRESS SMARTCARD EXPIRED SMARTCARD REVOKED SMARTCARD LOGON REQUIRED STRONG CRYPTO SUPPORTED TARGET UNKNOWN PRINCIPALS UNFINISHED CONTEXT DELETED UNKNOWN CREDENTIALS UNSUPPORTED FUNCTION UNSUPPORTED PREAUTH UNTRUSTED WRONG CREDENTIAL HANDLE WRONG PRINCIPAL COMPLETE CONTINUE COMPLETE NEEDED CONTEXT EXPIRED CONTINUE NEEDED INCOMPLETE CREDENTIALS LOCAL LOGON CONTEXT RENEGOTIATE SIGNATURE NEEDED ILLEGAL MESSAGE error usually occurs fatal alert received handshake failed detail available Windows System event WDigest DIGEST handshake failure empty challenge message realm stale digest MakeSignature failed error hexadecimal number Illegal missing hexadecimal sequence Malformed encoding found Write error content encoding found handshake failure empty message handshake failure message Status SPNEGO handshake failure empty challenge message failed sAuthorization Negotiate schannel invalid schannel failed schannel failed determine schannel exceeds bytes schannel failed BEGIN CERTIFICATE CERTIFICATE schannel correctly formatted schannel failed extract certificate schannel unexpected content extracting certificate schannel failed certificate certificate store schannel certificates schannel added certificate schannel CertGetNameString returned certificate information schannel CertGetNameString returned certificate information unexpected schannel connection hostname validated against certificate schannel connection hostname match against certificate schannel CertGetNameString failed match connection hostname against server certificate names schannel server certificate verification failed schannel failed create certificate store schannel failed create certificate chain engine schannel failed schannel trust error TRUST REVOKED schannel trust error TRUST PARTIAL CHAIN schannel trust error TRUST UNTRUSTED schannel trust error TRUST VALID schannel trust error TRUST REVOCATION STATUS UNKNOWN schannel error ecPublicKey ecdsa dhpublicnumber rsaEncryption WithRSAEncryption WithRSAEncryption WithRSAEncryption RSASSA WithRSAEncryption WithRSAEncryption WithRSAEncryption WithRSAEncryption serialNumber streetAddress title description postalCode givenName initials generationQualifier UniqueIdentifier dnQualifier pseudonym emailAddress subjectAltName issuerAltName basicConstraints Public Public Subject Subject Issuer Issuer Version Version Serial Number Serial Number Signature Algorithm Signature Algorithm Start Start Expire Expire Public Algorithm Public Algorithm Signature Signature CERTIFICATE server response timeout select error cached response handle response reading failed Excessive server response length received bytes Stripping LOGIN PLAIN DIGEST GSSAPI EXTERNAL XOAUTH OAUTHBEARER Unsupported authentication mechanism total error failed Kerberos Failed acquire credentials Failed initialise security context Failed authentication request Failed authentication token Failed receive authentication response rejected SOCKS server Invalid authentication response Failed receive authentication token Failed determine SOCKS server authencticated integrity confidentiality SOCKS server supports protection Failed query security context attributes EncryptMessage Failed encryption request Failed encryption Failed receive encryption response Invalid encryption response Failed receive encryption DecryptMessage Invalid encryption response length integrity confidentiality SOCKS access protection granted Bearer Bearer Bearer GSSAPI handshake failure empty challenge message GSSAPI handshake failure empty security message GSSAPI handshake failure invalid security GSSAPI handshake failure invalid security layer digit alnum alpha xdigit print graph space blank upper lower allocation array length identifier removed illegal sequence inappropriate control operation interrupted invalid argument invalid error directory message network network reset network unreachable buffer space child process available message available message protocol option space device stream resources device address device directory process directory socket stream connected enough memory supported operation canceled operation progress operation permitted operation supported operation would block owner permission denied protocol error protocol supported system resource deadlock would occur resource unavailable again result range state recoverable stream timeout timed files system files links symbolic levels value large wrong protocol address family supported address address available already connected argument argument domain address descriptor message broken connection aborted connection already progress connection refused connection reset cross device destination address required device resource directory empty executable format error exists large filename function supported unreachable unknown error FlsAlloc FlsFree FlsGetValue FlsSetValue InitOnceExecuteOnce CreateEventExW CreateSemaphoreW CreateSemaphoreExW SetThreadpoolTimer SetThreadpoolWait CloseThreadpoolWait CreateSymbolicLinkW GetCurrentPackageId GetTickCount InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx Unknown exception locale iostream iostream stream error badbit failbit eofbit transactionservices transactionservices transactionservices transactionservices transactionservices transactionservices transactionservices transactionservices transactionservices transactionservices recent transactionservices recent transactionservices recent serviceaddresses serviceaddresses serviceaddresses xsuccess connect check updates false config version console history fullversion XCURRENTVERSIONX wallet electrum wallets maximized false oneserver false recently electrum wallets rpcpassword CCrcocBvBcAD rpcuser addresses XCURRENTVERSIONX pingtransaction string vector invalid string position idata rdata rdata rdata rdata sxdata rdata zzzdbg xdata idata idata idata idata gfids Copyright Plauger licensed Dinkumware RIGHTS RESERVED AVtype AVbad alloc AVbad array length Locimp locale AVlogic error AVlength error AVout range AVfailure basic filebuf traits AVruntime error codecvt Mbstatet basic ifstream traits AVios AVerror category ctype AVsystem error AVcodecvt Facet Generic error category delete basic ofstream traits basic streambuf traits Iostream error category AVbad AUctype basic istream traits basic traits AVfacet locale basic ostream traits System error AVexception,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj SXJKp igxlwkX Jxemfk VZPEmP QPKhd RvXpkX rFchJE gLNIiirz IOeZf TkXvp ZTnEU WBRBd feUOv mWluf CGLBLpN IKvkYx gjCeY mNDCE Vpeoh qIXxL wLHZu UIDao eOxPPe Ttgbg TQqBz RHUqB vHBDt FHmxbfod ogIjt oMDWZ pXgrv LTZwK JeVHM HBxqh OhAQS LFMVNz cVQXfMa kZfqeM SpHljihS VWLYZ nSpIq lIgvb VZgPMKw eIFJZu zLYLzQe WHTSQ dzdcPu NebCq BFKTsto BWaCs ZXElct YncYy XjipF hjmGQ Vsjnq ofXNL fdyOf rVFmlSS qLLIm dNyzV lNbcqWo WRBso ZDzum TSnfpQc zxsKKTOKen MgZOcq eJctE IlJqE zePbp HphqA RUJkn ZEJVQ jubZQ XZLwu Kjsdl ciepzI EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl mQpXx xdivEdeg FnTtvX ehIob YCBJW JdheY AKJrSc ZMYmk jXYJH Bcsvm HnlNozC pKAkq fWzsl fLeyAy fisXg iVUzfqNN ErWOh PITSp ExFaQY neULQR DyMLzX WWrcF pEkrkufl DsHUH tcTPv CPGWq DWPlPr jZVwWy pFdErW zNTdaL AFrtcv oZbHJ AoNmX BsuBa XaUIWS NrXpky aBjqz QsYuE adIrb JiWYl loWLd FFolw ugGtiB FYvdvU biCiV UOMWM PtNDnztZ hUQSVWf ZEjEeoq yKqdF DLYEXUH LsdcmdhC eGUGnNW kxVmV SVpYPWy xXQqPpD WwHXt UrjfX EnpqGe QDNug UlisY lvEym ZxJWAi bjuwm eQcgig RycbOP BoncjguBN XqVkVw gaJoXSG fUCKq AtGQI HFlGmqs WxiZtK VdeGoPD XPLHH JmdEE lDICv tNfBF VuYVoGe YlBjyJ sfMvlC Zkkze jsoAZ VcpSm gLCPCq GyVqC YfylSp hNCELF SBcsD WFBYi AiqTF pJwRUK CLDWB zmjLM TYOZo PfkOv gsGNx aPqwO PdPhZ hARnp uPOcxq fNnEv SHQPq UcYqB SOIdX JHCqkTj osOioj NMiVC zWXWC LLFrig HHVHC qYHFn NzhZgQ Kpzupc RRkWz BmxbQh EdyBRRD HgLJKm OVsbi mnJZqK YLBcx hXcBr wCorz tXfLe OzlrE CNlMJ jwWptPZPb kAMjh OhMsY cMpWBX OCQRH OLwTZ aDNwG HlbYIML Hqxci GOzTqO FsdPc lbpBLh HuErW mwDBV kspTG gSTuz bztmN iHgwM KBpjE HYyDc oeUlWVI eKvowxa jyWac tdkThP MngTzU xjcHF xxiPfY uDhYVc TSUVWL VWRPN VWRPq XHoWe AwSgJo LLTNQ sXVXg POgmE QXlls OSVWhI emcHxeOy NSjpw PIEmIu xyIzML GLIxB yDJRZ ZJlpq VdLiX MgfMsC xxTJP sTigLzr olKcA SFcKE FNEScj quOIs MwCuh SUVWT bjeqLq jPNhp zmzEEO qpFbr dYvvL ZlnoB WQjpp UpLXKN oZOKr GtPOS eWcVa WrkEn QOSnk sMEfbu GSqxT wQWYHK JKLTgTdt ZyuEf MrIkNt NtupV gwqaFpg aolcfbM cVUnJ GZnYvYm myezfFQn wNIWf bJTPA qDJyu pKTPg BFxxy FJMQS ZrLgB RMgNx LFbKwy vRngI OOTyj IPkWB khBTtx LZMon TPIks SPMDJ Apzwa JDOTG ppVDvSq ensHB ArEdxKG WNkan vopVS UbOVj GwsOQ DriTo wzlCD LnDGsD hFwZw hQIRE rBllahR CAdRZAzf ArnNN Bhxet pYYJEmU KMivN RbbBCMPe YNVyN gmxSs AVRGo qYblI tjhBO bBHFm lCXGNz RjDcJH CZodRMck FuKGD ZwhBh rKsUa fEIcW BuJNz ijkoLn RfVyp oGYkUEQ UNzExE ZjaUpLX VPjLh MLFybX nnIxBj Uayth lBSmR PTkBd CSzQYj AaibY qMFaX lLiBqjh nHHdG hyaPF sNikPph reMWr HimJij wxhwW JmYMg DdGvg gRBbX Eazaik lzZkM Aczkr aTroxW ojUXN kHQZQ scBLpmp AeKvq oNOct pJFto gnyQe nEWIV dQVjK QaqTc PZxJUXe vlTgL xeQmC PnInHO UDPFe GjstZ DphUUo bCXyLcKq jiXga DOvygu fdPiy QrXRt cMBMF smYExO HnXdw nkASh Zozemq UbVzC UoFEV ioPGQKdg gzBHB qFABe NyrKn mOkko XLbHDcN BYiNnAZ fmSVW NyrKn mOkko XLbHDcN PKBQd fPQZA zLTMKGN tSThLL RWgaB ScKdYT tvhHI uSUVhI RwJdw aTVif fljyRw eAWau bgqNi juFaj cFmjl vPyorg gkKls CuqePNE uMWIl JrUIhaW yAfjg BTaWehi ywrgn kVkgOB IMOUMm AkiQd dcKia sXPVjt tLsdB UDltXbcOt yzVoB SUVWC HTCSR qHZxkxHlDU LesJFVh BMHMV bgzlU YvcAAU UALMSRLoq iqaDOi OKJjR WAIuH PwmFU SUVWh PtUVW DyRuzePNa MYMDC QSUVW XtIKY UlMPNDfaQ MnMqT BLLTz OVWTMv GXGTt JCzLte HhEmlzkE BJqfpr FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS mqqes LLcTz IxBVa OSnfYNd mjwEnlxYB jRBZv DaFuGEL LIaaD wgwPA fAACGV XyZAP ENfTO kWrFBogv DxIGF RLthBqe yHHeY cNANd VbJWP vJXFGtSk UUVWI sjtzXuR cPEMv VPnikJ MhbOFn JpCQURG EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE xYYEe ywUDAf MEEEEE MEEEEMe eQFlz TSVWu EPMMtM MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe qqQrUjh EPMEEEE MTVMMHVE MEEEEE zQYys cIqWB Bdily YQvYCA Xeiro pnntun tLjVWXsGDS asOqz lxOwLvv fHqaw Ecjtmgsi MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP xmvTA nMoTBY ECkUjh SVWeMEEMM RMEEM mbntLB OwlVX KuytA XkRWr HsySM BaeIJ hIVlR gVlyf TMDbn EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM Vgcrsgp oBmwr SeyQE MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ XXMnY QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE sUDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS QGBYw NKHodJ hfpIl DXCpLi ltcyzqF WZDJV fakMeK JvmGC eEQVQ MeKup anzTdf BPUrA qcyLu EByaTM rjRCs TOzPb aajJN kusayNk rnpla STZAQPq iSWeEQ apJApC ytXjm aEiUby adHNWv ScgAx UmEsd DrFqr YXlwLv PfedL WksZm KfbEZg kOMhAW xcxrt ZIpPj qqxXfB SLzqHv IDBhb rFeuC WYPYB RVwXO FwRUsy rQwby xhWSa CfyHx AngtHEw hsUKj IiwXk RFOQa IJfbdT JgBHu blwkUyP senZhu kGLMt TACqYj fomfl ctQTk Wqrpz QCrZGQ dqxLC cFCoK cYKym XjLeuQ PyzxQ dxMRV qgcNQv ooSNR pJzcO vyvei VGjHHF psFllB EejOVNPUdz QNQUOl ZFcCYPv KBuFy HMZvWX CHyki mLysh FxfvL jaLEN JFTgG dAHWvXt TfZHA vaIZU LVMfC xuvNu xWWOG yDJWT TGlOn VWJxQ BSAoQ DkcAV QLBiDC yWslSkpP OXaknz aVIQF KvckY cRHbg sVLWeW vIWTY yeydnvU ybSAV syTbdcDE kDvpX dDUfS WfSPx AelERS jlszL xyAuxv RTsyF hGfKIUab AobYk KrcRxQYg aWqNC QcLMD jDcXN AsmwO PDFmmVTt fRvPb xZigK IzQTt WzjYd JyiUmM PxLlab BctGL kYLzr AQpeSNy kMhAW KVsdv rgdRQn cmVTQ fDMtm RPoxYs SUVWj BABABA BQLbb ohBLL jIxBJ CvLdXs LxBeywG BmvWv jBzIF hMHTj ZSVvO rcjLZu PQYYt xgGnP rBSadg uYSWu EntelE ineIEE GenuE PeuEEEEd ljERzNUQVu QPEPh QPEPh Agoig Vkgil PYYug PYYug YYEPV GQUQQEP jOpyz XWtqR QeEMFU cOsqD fnaoL OAixkdF VVQYn UQSVu SglsY ArzRN HuYUV EPuuu iceti SVWUu tfVUk tLxXj USVWUj UQPXY UQiowJg wYnUVu CuiYM csmuP crVvVEj hUKohv PPOFE njGDB BTYNdw rrRMqe tPtLw PQYYPV MWibcG Ujhxj khSVWT URPQQh USVWj PPPPPy MeEPj EHHSGU qmQhx Dabgr EQPjjM VPuus QAFlxqq qNbQHLUQQVu JRdMMuQsaRe RBVAm ZFJdC GcEiu USVWN rhRfm jgKnWF UQSVMWj DRcqb YsukS sxovO DRcGqb yOEamBB ItOLt MSvpB uwspTMj fUlxen fsXyxc jAZjX XsfMxPv xqooX UQQVWjgYjGN PQPPESPW jsXfF IaFqf gEsqQ ESVWF tEOIT qUQQVW dmcwV YKUIz vXgwX CXCbazXw hBcml opURV ZcuUy RPQQE VQuuH dftEQ uEPEPWSY YPVWSu kPVWSu vlHOX MpZwa AtjsZj UVYOa EtkGxxcYV cONjT bzSBK UdZXmqP LyIzx wXStp ipBqq sCAnrM HteApqL OyPFs GkuFk sIBfJb bbzMz gaZIJ psPsn Gfweh UjjsQ uPuSW EEwPr UEHEu SajRf QciTH nSCXJ RpLlTMD hVaPUQVV eRrkY XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu aOpXj uBjAYjZ jAZjZ UQQVWO SVWtdAu pivjd FKEQI Ubngo XVekC eEQbG ApZGmodz wrSiA yamxj PhpfZ CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp OMoxlF RUORJ TwBgZE MEEEPu irzPI SClUM uwTvP qolYO JeKXoP FiHsm rcBTEa SOGYu PPPPPt PPPPP VLkLw HLMMQP Yrccz YYtVWh EWWPb uCYYt uVWTb WWWWWS YtVWj PPPPPPPPU PSkUj VSYYt VfcMi fNOXTb EyWsa hfgKv EAEfEEj EPQEPEj AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW MopAW PPPPP PjUHPh PPPPP cCzsM JlmZWc BSxxy zokGUQQfE fEEPj yIYwd qJwen KNbye AEQnXM EGWVj oVWeE NIADff PLLHmm RNBMS jrcigN zzCUjaMUS MSVWu MQWPVk sRHZp MEEEPu LkSEUlJU xqIXVX ZhqjH PPPPPWSu QQQPu VWuSu PPVWPu OUWVSM ldtrd ZpvnXMb pSXAPF ASTMUlfF EvIJW WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu bNmOdtr wPvxui ANtgu oJvQY asXFp CjLWt VWJCQA gzGbh QPLYYMt gxHAj NsGQt WBeQr wMSmy kitaB fyNkwo piyIfe bjjUG tFtKh oJadd XBkZl vrSNK yrqWD fhErW PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj uInpw ileRP nuKmL bHzOE rwbhS ifpdwH iPDYy QmkWG lHPDV eVhqO JBtaF jaSVU UgLZy YUzQzE egjFNc WxxVL WvvVL WHtAtVL GgAWS okXSV RzqtnLW XoMuR jDFkw RNPMrM XSanaO kZjjD OZUZm BNiQJ UmhaOrY lCXNf NpIyKes SGwef QQQPu iYjfQ MEEEPu EEPVYY cAEQnXZ RKnwM ntXCI hCqPib qsRKaWQ hvriA zTSDA tavsI qExaRY yxQsXXk HlxDyM YSjPn YDfLe EPeuEEEEd csmuu UEcsmE PEEhg mcmKSIkyR VWlCv IUUSfE UQQSV HNJcE WFjqp kFhyd OkjZK huUXj EfAvwH GKitlD CdSUdx apNik fmRlG CrckdqV RWCuW RJYGu vxxcy zByKX YyzKTo OPiPn dRZVZ ZkWWN mEVLA BOKSL gYCvge crWAm andijo xWwKe Nufpz AdwYkV ogSMV XQPcp oqkiWd TiMPMaP tRttGyD RaaYBc OsnJT mhttp KPAbr agmeH LYbGj MdLcwbZpjaHl GtfdC rsdZa dLswZUmw cIoxo vbxHF APUim zBeJia vsdDo MgiWq sjijmzr DlYTJW iuvxS vJwfS VrMWuwro XDaaQ OlRdV EqEsu jrOCe ZMDEz ALfWf vRllm oSGEJ adApOJbo UDGDioO EazBSB VVXYC OcDKY MFYlLh RbrOB bIExPY nOcJRZ ZfMHI LvlBdT LBwCy RtuEw lCqeA qDZntPO TQAPXP bgITZB yglMF oobUZ BBvOm wolZNNS FYacx PPLzB NFcIz HrlhkO pNFAr yGEmtOu VHpSX UbOiQ Zzklr aOEBl xvoXg IMXvN fLeGN QVInd sdRgqv hjxEPD GZBpS pMHxw PpfPFV PKqNMd SnMTW ujfVt BsBtM mgTUM psDJoV eWgMwiLq mBHaE fqcyl UDzai oQnTR Rrdfo fcdMI SAplb WcSBC rwaMMhZ YEYIH PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH tUQMj IrzAC gsyArb dYdbg MuUMEIEPML UMEMd LLgJC fDdNv EEEMEME HnEMI MEEEE ntJETE EPEPM doadR soQqkvM UQQMEM tohDg vthCdA vLLgJd nyOMZ NYPDq uhIiX aABOL qjtdOsVk zrcFw TXibH YCWJJ QdCwhE ImvOo PaTyF Fiaku fkTZk XTpYg uCzmCc lYIzasXS pWEYx NYetFe kVDLjt lMbEX AnISU PoynzfK yurfV DMCzoZQ HVLgBW zZfBV XfRMlx MpBcx mcxJof CwCgA oknpE EMMUREPMMM EEMUQ QUQMEH MMEUE jOYsR UUQMM EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU NtrTQ eyoaeE MQMUU gtckeU WSxUF dghkp yVNWqb wUQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd zBamB rzEwp OKUQME QULMEH MUUEEMM UEEMMU sXwxf seKvx yMHXs KzUxV TyKIBu ozRLFn VGarT CHurm wuXDI zkAqe aBoUsOou rhXwr GjFqF CiVXGq NowNu eiaUB WYmEjL xIpGC locale kHVTE iostream badbit failbit tlGxtU BaBQA mKoYU TyKIBur ZKpsv xZmSkXu yguaX Gtzjf WvIsG mElnP SyOeZ DuBpi qniPV FZRbz NJXtsu CikVGqhZs mnbvcX YCKrF CqGowN aUIHIBjA ZAuGe ZcRDm pNwFaYm DHGNJ fXLLT qokfIo array length YgTcunknown error address family supported already connected argument argument domain descriptor message connection already progress device resource directory empty Efile large Hrzfunction supported unreachable zillegal sequence inappropriate control operation wCaqN invalid error directory network reset network unreachable buffer space child process Orzno message available message llmzno space device process supported WaVZoperation supported owner qrzprotocol error zohgd state recoverable Cxqtoo files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer lBrzKOyM InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx gudKYYw YTCUIxBeH QaNaW NJTBV RyzEAU VRbrT WttZK TnAYY YXfQN xqgMr MxqCfMrW CxqMrTz xqfMr xqbBr xqfMrT xqMrT ANOdd xqMrW JMxqCr vrEuDbAO xqCMr ArORd xqfMrT xqHMr DLAOod xqfMr nqPPSC bRAOd FYcDmKCQD bIqiJb PFGJJ gGAOFd jlHte cdecl stdcall clrcall restrict operator vftable typeof local static guard string MgVLP default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx WBsLiDqs TbBdG qnHaTy YYoAENm eBsEZ KrgOKw jEitL eOxvLOW RJqVj xJUBz cceil floor ldexp hypot frexp xqsinh VfQwfo JtkEGr qMonday Tuesday January HlxqMarch April iDecember gLAOUde DyMLX LADOdy EnumSystemLocalesEx DLCIDToLocaleName xqNAN PErWS lxqORrz qfyrB rQODX vrtMjBl MIAOod nxqHrN bxHxwQ zdgfV FOYKH WSkOS oygWJ lwxCP VgXFi ESCdT givHh LtmYE koFURm MehED yNLHa nTLsq KXodC gzIQU nBufS YkSKx PmVEkBa VaLyD kQqUr BbBzpbs rLPMx NMKNf THZTX EOfbj OdrsrMFG zGntH VFUwOu DFJPO cYsNx GoqqFi ujyXMz ContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey ZfUUU DZQww eAGHu usage usage FUiGi ZNoKBGo ncoPET KeMVv exiAs tQBamA jfkqo TRrzd nicehash TRrzE Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ iNoWUM ZqNIS zykadP HvBOI PysxNr JLXCM mNlVez ayzbO ofFMs ovfrD yrQeN Zsfcd edJfE iMiHzhUQ BPVgQ epvXF MNvUF Vnwwo ABCDEF DfRrz GgTcw GpATwi kLigC ZElXmVi FYTyKLIxBu OSnJu CxTil xKuAj xYvec eTLkKeu yKRjU DTZKU xJmmI gsAUwl kyVYya XvtyxhR aShNt OukYj lxqbRrzy ErWSOD lxqak DyMLX KzmUx qhIaH uqtuA BLLgTz IzOBS UPGjU zDFGKp udWpvYv jToOL SWmOGG ZxdtS dWyul Glxqy uxpWn FYTyKLIxBu acNnM MITBV xfdRG zRrToH SjGOr VjAsK iviGs rtxJd FHXwQ PqLYq uNQnI qKmzgQ axKYTIK HrzWe KGlxq RrzFc prWxh prWth yKrFu SMhOI IrpcZ oPTSa Qovlz oDkVdWpv SqqGOe aBesB gHHhJ ExgWx WsqjRv RhSrWw qGowNa cQVji wnUJW JUCZkV alLPy OGMcg BriCg yfzxK aIkDf opIzM Sehea NgTvw HACUi UpSXKT NrySC NrySC hrzqfn NNrySC jmMoL DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven RiseRiseRise Geode Geode OPTERON PHENOM PHENOM clxqFUSION FUSION FUSION FUSION Pentium dPentium Pentium Pentium JJvCPU Mobile Mobile Celeron Pentium qIRWIN zWESTMERE PENTIUM qCORE MOBILE qlxqMOBILE WOLFDALE MEROM rzDUAL QUADCORE OPINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED GgTcK DyMLXP Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF ECANCELED lxqECONNABORTED MWEDESTADDRREQ EEXIST EINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT ENOSYS ENOTCONN PENOTEMPTY lxqENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE DUNKNOWN cENXIO EMLINK xqEREMOTEIO permission denied address family supported temporary failure permanent failure family supported resolved protocol unknown service available socket HrWconnection already progress IneBoM wOoperation canceled connection refused connection reset destination address required Nhost unreachable interrupted system invalid argument error socket already connected OfoZf message network unreachable buffer space available device rWnot enough memory machine network space device ErWsocket connected directory directory empty Hprotocol error iresult large system process Ocross device permitted unknown error YrWtoo links Rrzasync event signal unknown error malloc malloc malloc malloc malloc ZpQueueUserWorkItem malloc CreateEvent ReleaseSemaphore tZkGw iCreateEvent CreateEvent CreateEvent CAdOdC iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress kernel GetModuleHandleA CreateSymbolicLinkW CancelSynchronousIo powrprof wsocket zqclosesocket gTcMissing after object member OMissing object member escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected lxqull Content Length false ZOrBp cSHIR dHcuH AKlpB WCsNL rTPhD iaFgEJw iabzTwu tsTDv WsjmGBy tXxTx VsNxs hBpUJ OImma iJDalTQ lJkmp HcKUPM mOeWk oUiopS DZWII lHRSwdZ lbdcO GIKIQSv yADpA rngQx ojPpWr ZFuGMt lkPYq MERjtH MkuKN TBdNE gDJrx fafyxijfhkdanfrzz DyMLXs BLLgTz FYTyKLIxBu OSnJu IzOBS SVarT ZxWAil oDkVdWpv MgZOt jauSM gHGHhdTm ssNJXteu VGqzDZ qGowNa kVMkv wnUJW xIIjA JUCZkV GpNwFam rUDUL fXLLT hSYHZa QcLLK qUgTc DyMLXs BLLgTz FYTyKLIxBu OSnJu IzOBS SVarT ZxWAil oDkVdWpv MgZOt jauSM gHGHhdTm ssNJXteu VGqzDZ qGowNa kVMkv wnUJW xIIjA JUCZkV GpNwFam rUDUL fXLLT hSYHZa QcLLK qUgTc DyMLXs BLLgTz FYTyKLIxBu OSnJu IzOBS SVarT ZxWAil oDkVdWpv MgZOt jauSM gHGHhdTm ssNJXteu VGqzDZ qGowNa kVMkv wnUJW xIIjA JUCZkV GpNwFam rUDUL fXLLT hSYHZa QcLLK qUgTc DyMLXs BLLgTz FYTyKLIxBu OSnJu IzOBS SVarT ZxWAil oDkVdWpv MgZOt jauSM gHGHhdTm ssNJXteu VGqzDZ qGowNa kVMkv wnUJW xIIjA JUCZkV GpNwFam rUDUL fXLLT hSYHZa QcLLK qUgTc DyMLXs BLLgTz FYTyKLIxBu OSnJu IzOBS SVarT ZxWAil oDkVdWpv MgZOt jauSM gHGHhdTm ssNJXteu VGqzDZ qGowNa kVMkv wnUJW xIIjA JUCZkV GpNwFam rUDUL fXLLT hSYHZa QcLLK qUgTc DyMLXs BLLgTz FYTyKLIxBu OSnJu IzOBS SVarT ZxWAil oDkVdWpv MgZOt jauSM gHGHhdTm ssNJXteu VGqzDZ qGowNa kVMkv wnUJW xIIjA JUCZkV GpNwFam rUDUL fXLLT EgGBL BLgTz oxjsv FYTyKLIxB OSnJu aNycJ BIzZB LUGys uGIguMDC VDzDZk gkmVHE vXXisv LIxBzG NGkWH QyoObbRXJ zKkvo IslGTa xakwt BLLgTz uKBFYTyKLIxBu OSnJu rTGnH ZWiAi oDkVdWpv MgZOt jauSM gHGHhdTm ssNJXteu VGqzDZ qGowNa kVMkv wnUJW xIIjA scroU wKEpZ jJggsQ YNDCkM usoZB KCRZaE XHRBz,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj SDXJe QVCtE zlTHS HtosnirHzjC AOUtYSP QYJrJk zBboD wktJya GxbwD qrXaD KJNRr DDwXsk NmhlDc RictIK XlyTNK ieBdIcKs CWoOL IWEIkYR BNmGJ xXUVf OhIUf SgeLs GuhEGDg IlrNp GSmGT GQVDt kkXMH lUKLxywU WZcSYb Trrpi neSNc sMWxG klgUq lOkFp JyAxw zevKk AlQYidm MAISe mwzQF dvEva YYGsP kXprj mkWwZKc XaiXDMA wZJvn jAxuCR Yuxfg XampI PThcYX mfpzv YyZsf nLMBo XXzjt QPZeq SeoRc BZZqC WaqWZ VSLiM AygxMVDRqv pozGfe GsYcjAL oSWnbq rvCFR tHztRWtE vdrzv mdqRmZ AqymV zfSRM EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl kzJZJ LIBdZ YluNgp TRvUy Ijkgq ijPCaefGl djgyLDM iMIoPU pQjEGAtReiIzwr uCNzV vzTXX JGNph aRfQt xlvvl unJYas sXFfQ lmlmdL skary SyXmO tXaRzOYq lXzCp iKZVf GWuRt nhBnF DLwgAx wKyxF nYBMA MDbBC VpDLu HxeEA ZkJcj ZIwmm FzBAXL zoXoDKAf fhgGI nHadr UQSVWf RaXKnf AfyfU SVpYPWy xXQqPpD WwHXt giPHih KVzUB QUlDs cYAkuVz ElWgRw TiVSm UvvMs hTYkN ArqWWz dzytB WwxftL ueXcrmG cFutu fHCbp XyxLdT iATEp uyAxd lJxhPrP eekWop qacEN SSkrY IXzJf CvKGy WwLIzw BrPgP YclUPEZ PfNrKT JUlNQ tYodTx QyUJBp qWnXd xSjkxz LBBdq mIbZOGq jIpvLN AuMzI XUven kyhcF RJsbk MdmkGs kmEgJ eNidh GcELkx MaMKet SJMipi NcXYK cjmltxQe HwMCU kqmwN FVqye QmiBtI IimNN BnPYJ wrKRue qaEfS bfGSa LFBla zmhfNJ VlkRN CCiar oAEBOg qYiAnI hIMXj WEHAi LITwIpb hzdHS rJyew lXvhI eDPxO RqjCp AUSUVW BVksci XXuwkdK vyPJhR bAsIV hohjn XJUjh PLjES YfDJffqf ZzuSU xdhrh dvjeH FzBGX hIMXj AhbpV xxfHGr DLesX PUqiGnow OZBLGZ pMBotq RVFsY SvjAD SiPaz VrcxGw TSUVWL VWRPN VWRPq qrOPoUUO YqzdF UxSxo SVWhI wJZmS dNKzzOgeAHJf OhaAgn NAkus WanDzlc mkSPai LNjZC AbFNl HNlZCTi VnSxPU hcOcu oFHAg HmZaV aHryY owCLN rnfgAu sallwM SUVWT onkbqH GdgTF nFXjY fqWQL HvlRrZQ tjZGA cjujR SEvmW PRdeD wXxeNu XVZLyi wUqFD nndBiU lZJKG rnlccPj TTagu rJyHH YmRHYm xLszy XjIjRV NojEt fkGfc pUHto aettI lfOwf fUpoz pWjkv fQWmw TEBzna FGSYCh ZIxux kxNwf kimHOgE lhDaJ mIqLh zoEQz JpVSsJ DkGGAP qOcrO FOwOd tFdAvI NKSDgYd NCDfAgv bcsUgpP Shnil PWAOo ItUUcSsMF IEAHS VjiGD DzSrxG ppOBy dQpgvNv MVEDCe NXPYnQ vszSW hVauDcFu EWgFd oQTDh mftDbm ZOSIb xzQtvZ SInWL DBpsy BGyRQ NdqwLb bdhdL oSKNi PaAVK npwXT AgQJTWH NFNlM ZvCVT lVYwr NyoWke uycbqB EafBEP zQFODT wPycw KkMpf zPTMUc akIDMjw VttNhi gmZpu MglQM sRCxE AEPeA qvkKx gWsPEK uWFEZ GkEcZ EfcPx QTOON wsQFlJ NWvCE Emjrx uhRZZ mndJpR kLojO tySUVW xoOmL nArjv VPjLh trbQX ucSmiA akOWXh QVJpOjiB voNsc uxBFwJ lICODd erVprbMuM XQzmkG RPzBEQ LRaoY yxNtZD BVGEK VSoDE yACdC fIErE WdECk obwkA jYatG FvKhPM xzTfQ UWINb cnvogW xeHGjB JbdxG rYfHp eYcsD kuExI IPgHKuH sYatI wHcFIF YOori wzCTfkJr tJhqq DNhKhRU XwJPZRM EDVEL MnZOuNK dSmZh zsTGqt mikcXgc AxOIJQfK dJkBbR mRTMi cvzfb aUAvuE CEsZpk kBJNLZiOjm eUMcZ CEsZpk kBJNLZiOjm uAKUFiM WghBfKg aLirLu qYExQr MVYqQ tvhHI nsYoLg uSUVhI AvEXs lUCMiT vOvrL QgcPj agSJs ZfcLkW CXKqlB Xuaqr raPBhRmc ncDwK RSwDQ hOrRx SCRhtV evdvLY uvIyl UwrVKm yuuQJa sXPVjt tLsdB SUVWC hohjrJIYlo QGaKJK PXFzB amhglB BAsnhV TiTET BfUSy SUVWh UJUVW iGDpez FzBQj NMMiN SbYYE QSUVW rvwlc ZHHyx zkTmZ rMtha GXGTt KIbpQ qIAOw NbtlA tVmkB FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS TBnlDFrvhj PXyPJu JYtBy dfwHB nbWfq xXokqh wuOGpjD FPdCYw ThVUR OqsNfE WbNyd cfkFR CcTYV XOtiYV fiweUZ EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE xYYEe uRUuj XZFtW MEEEEE MEEEEMe TSVWu EPMMtM WmMzn MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH uPUjh SVWeMe EPMEEEE MTVMMHVE MEEEEE laGlkv xUDmVO MbUeo MEEEEE MEEEEE EEEEE cMvZI VNFSM EMMUU UEEMMU SVWeMM MMUUEE MQUREP DtrYt SVWeMEEMM RMEEM kzBGX SwKQHfJ SubOIY BKovg ryHgDNb fAxBu MyzUlVd UkJXLZ xuPfXW OvZwk EMkoH EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM FzBGX BxcXj MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ Vkscc ldmRu QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS XEaOwTX QbyNn GweAF vGNCr xslNJb ECzmY dlJcr CNoBbY NwtKU HtHhs gDhtY aYvNB BsURKEzl ATRpi GuWiTk SqKnTR qaIhVM KsCzD VVzYYvkW OcDkg jfLpAc SUgZy EHtfL rMbUewo BdxhO OVyzq XnRvrf tmZqg xdvSm LwrZK sTpmz SXmFm ECVUP qIpxec nEeGR AdUnw plecOT pSZpNN pPctwIy WXToDa lUUnz xCcEk QkFYp NARAh kBpjJ EKwcT mfgRV lXUALTv QwjGP giaBI LUaQK VgPwYew eMjUO XRtUyP otXkB YJjNep twoKI kndSM gesNznT rDQCKPp atAzJ AwzxMLRE yWgvO lSwcu DXxTot qFHPzlee VEtzVY vaKttfuCv NAbSP sKxyV hcJzjX SoZNPA bYrdA KsGGX KggOe uplYPU FzRHL mvykoOu HEOcn InEng yMGrK DzMKEN hhdvk YjVOp qXNUy jFSgc NfDCY dRHyk Xfeje jaXcX LcrTm WlfAg MJhUg OxdjG GCOGhib fWbGs FdJADMf wksEHwKVa CKGAkczHs jkvpn VowGXz nGgvtgY IcmFJFC pQpfM yzKTS XKXeVG agoMbiB nZKIH fcQnat lHotrt cRFliL FvYSvl aGBlt PzEBI CdYtLS udPAmBl hFMqS OBKrOD ktLNW SUVWj BABABA YbqKnu JZxnkA tWwqX cNlrY QDlQP TtIbydJg bvoWw YbkhHutY nlNzZcy PQYYt UpVGvJF KXjPd uYSWu EntelE ineIEE GenuE PeuEEEEd PUQVu QPEPh QPEPh PUjhJ ijzjp WAsUi PYYug PYYug YYEPV UQQEP RvHWFk mQtsKS lzpUe WEsCMIvoEszS BNSVF VVQYn iFzuXzLOQ pEQrnMX VpozW UQSVu deDpf HuYUV EPuuu pNYJz SowDf SVWUu tfVUk tLxXj USVWUj UQPXY KYZUY SyWXBvy lghYeC qEjMFr NeuuK kxcHX CuiYM csmuP lwsLn tPtLw PQYYPV cNpFur PbGKP tcghO Ujhxj URPQQh USVWj PPPPPy bCXUWM MeEPj MtfSs zhhqS lkPkto IuwkT EQPjjM VPuus CijnywX UQQVu eMEZt fGWpnk Bqdmn rTVXDU eOabQ myPnn ToXsQ USVWN SFUQSVMWj hnywR dGpml rxBkq dGpml LQvPH ItOLt VPdYQZ TMUQSV jAZjX yUQQVWjgYjGN PQPPESPW jsXfF pquLa VMAqlr ntVvwT ptjEn UQQVW VbAWe ZaXGXSGM usUQQE IpHcs KOreE NRzvI WXNAs PiWdX njrQYi RPQQE VQuuH DvULP uEPEPWSY YPVWSu kPVWSu hskcqgWZ ehrQBN ITNLOU WbPfap skTwC xBHZY gopjg Yncmbzs khNqu synwrF QAGRo JrLTP DaOAY zylRvU qOhThr zszRV BASsT gDHOY psHUB RfoIK OcICL osKIb xcZDqhS gEqFDi uPuSW EEwPr UEHEu JoAzhoiFKPH aTrxk isEoq nIQRdA nbnkq SnycQl fUQVV yDnBGJrQ XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu yIWDx ffJxV hpuLc eGSJBvc uBjAYjZ UwvJv jAZjZ UQQVWO SVWtdAu hpnKx mhLITfyI VPiqz EXBvT FkWZN nUoEHx MukHpn UCvzc nXwpR LEfEw AxVXtO pQWxi cUeuD TbJAk CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp eLUshUcsm rMnyx BEJBt KPVIx cXtCS bgPZA HIxRGg lHiGO MEEEPu HRlnXg ujSoR OrYYT KVzOVyzs sokXf eQygMZ SOGYu PPPPPt PPPPP KewUkE HLMMQP QELsZ KDNUEbg YYtVWh EWWPb uCYYt uVWTb WWWWWS ULUsw Lehbs lyZQk QmKej YtVWj PPPPPPPPU utlCo VSYYt irABJv grdxdYzu EAEfEEj EPQEPEj BvtUVu AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW WEIyE PPPPP PjUHPh PPPPP gmsIu iwVAUpf jUQQfE fEEPj jytnUc xqhXB atjJx ergjzpF YlBDO EGWVj lAxVi nUatM MSVWu MQWPVk WFwUU nSUVu MEEEPu xDwch JXyKaZ PPPPPWSu QQQPu VWuSu PPVWPu UWVSM LjPaXEF KVpuGcZ mwJst kjGKJOpZ LeLqal yqKrWeAX TzfdjvR bJUZDj Gnqat CYGlrH ZxCQX FtpZH WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu NmXxU qyUDz ubVwkHXpO oDzvP ThpAo qPaKC SEEch tSUgY QPLYYMt OWaxjV bAglN TXUqtX WqynC oRZWN ejvaF dasGx vQqVM LNhHow SsQva aLSif wpBjS LfCfQMfQ kJUVm RktSu UsUiW chfZUEE WvoBS jvJeHUH YMWyAsi jpunt jQkcL PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj MEjir uJkrJ IGirAQ rqIiJo kLYdX CqUliO MQYLum epAFw mQLtS WxxVL TYEqMP mHmni WvvVL WHtAtVL VoTUQM gruqdZ XiIdx cqbRM sOLvR PTnIF dQFIe qLahd jYQka yuOGQ KEByi rnHDb bYmNEnb iPGMac bNqUy QQQPu BlZcYA MEEEPu EEPVYY xTjSt DKVXj ouRqcR cZXkb oNtTQoraep LqCbdWKK squGV MzQhrn pnIkC eysOfEWVU EPeuEEEEd csmuu UEcsmE PEEhg VWlCv UQQSV pFUUx yPfQb VKzHG JYXqdF OYvXy tvXoJ RzMSZPM Xwvqyaz ZfAJO eIeVz QvaLT MWsRB fCNAHDOFU rGBSIz ZVmmIO BvrpeIW ZzJGN lQhaF feyIMZ CkxNP GUwZEX VMRgC jkHyxy QqjAy hAAsX oVDwF HbAVQ QIFuF CHSZqPaO XXALsN STQuIulu hHAub wITcTxM oMRGtm wzhpM nHQVY uAkBc wypKm vCOZM AKvsky GrEJc taPQV NGIEqz UWntm OcNcc rHSIL mYAqk EUjkE tCTPc pipRw QfUtgU twCuM SJrAdL AZldLP RJkgtt hvzcd vFRlVAt tWWRF SnUMHXT akfxpu YKczd xtJIF PHNnEty nDrgsN fRsUR NvBrd IFaII ZjyoIDtbY UUyrUTX XltLa FtcLC AumhL sizMLd JWweuCZ uOjCqrg lMuJK maAFn vRAsU mNZIu xUVYw pAUfe GDBsaNS cnOjmj KhOoy EYBwI MplJP ecXvosv HkONo yEYav LXDbFj SuvhFw IkzkD AUsWi NsXMz zELZtlO adiHoF aJqiwL jLtFLt NlmwC Uzizf qVGSY PSqeo cbzlT uOUEx rNqEIt aryYF IfxAxH oOpio sLpCF cMXvlm zGHad ylOtp jbtlrTv iLNhwJ jxEPD pKQSX HOHmI cgYGkAx DCIGR SnMTlt RMXMPl QFjQb fOqcMee jnkbL QfhjUMy dBfiTo WHwSjg filKa msgSpo wNHHb zmrgP qTpwtMRlH eAAsIUo PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH CurSa jLgpW MuUMEIEPML UMEMd zUzGC xjoqZO ymVyipzCc hilUtK FfJWUjh EEEMEME HnEMI MEEEE ntJETE EPEPM akfJwjjs RNfnZ qUQQMEM uULpU FJPKKFi bvNFW PvLPN chehD CqZdh MwEol ZfuZZ lRXjEe lNLzZ hdggd iObAZ jbpNf uMzcNTAl CFyqPJY ydhcLx GsfWi yYrUX BUSEN fbUsah kPxRJMv kliSu bPCJR zZqRWA ngJxQX oQINyR agTPH MtmrVB CnGSY UuIzV QtucjOGa hvtHK PFUbUgX LExnI OmgxJ BWCTX EMMUREPMMM EEMUQ ubVhmz UQMEH Ahjnx MMEUE Ahjnx Lnswq EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU HCRKnuI gVsaR QYidA eIZkf RWZSg oFpWZ JmmKl InoDf MQMUU FzBGX XJUQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd ULMEH MUUEEMM UEEMMU HQOqKn ggkdF NnkWe ZZUPD PnYYM nikQxp oQVSJ EHItB uMJmoS KLFBh OqgjOjz kKHjp mVxPj uDPtyT pRzOI tneIf iCZSM bnVlRnXZm DMaht locale piostream HCios badbit failbit jrRvJ UpTJxn WgukD DnYYdM YbjOw sKHIj MfpQBQ fVLMS gEUmx eHarp JFNgVq gwVHIJ tfXiJ gVQenRa array length unknown error address family supported Balready connected argument argument domain descriptor message connection already progress pFdevice resource directory empty large cQfunction supported unreachable illegal sequence inappropriate control operation invalid error directory PzLTKK network reset network unreachable buffer space child process message available message space device process supported rpLPq operation supported downer OPGAF protocol error state recoverable files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx ISfeS ujADs oaEGH FkWibg vCApB ZgIGi LsIpF RjHxW JrrDP EvmKE LbBAv nnBcsm cdecl stdcall clrcall frestrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx xBXch QLkcZ esxJL nwKJU MVKst gkdNF floor ldexp hypot frexp zUupl slpFWE eQCQB gkBFF APPdd iotBvJ Monday Tuesday January March April SLDecember jIuizBv gBkdb jIuIi EnumSystemLocalesEx LCIDToLocaleName xqUsUiY XLQgk NispBF HKqKn smpFA CNFvJ xxBuBZ ivlqS FlrdZ RmZYy hmQym oXfrSq TiOSZ Kesob tpXqgSFDm vhGuk LtmYE ZLsdFs QHcIlxH pocaaeYb Qfrxi XIZZvnH RoQDn hFhoqKpfN NzXzJs DHSPO scsOb XttrGj ITWJJ LqgBY Fegwm xaSyNR xCisp LaatR Phsqlw DLoEh zGntH XCuqW cOhUq acHNQ ContextStackSize ContextPriority SchedulingProtocol zXNOIN YWMtMf ZfUUU uNgiHx uNgiHx taVpS ZKBXP doSpE usage usage WdZvo tYwijP tddmaEh BscwxS nicehash bLjPw gbNnKd kdmYm NibqW Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ GrESdv GxHnQ cxIfi JLXCM mNlVez LnwldD dIIai JsqEA wejdty GfozZcbj GUaKia jDVrAJ EFFzWzM ABCDEF ddeYL WTmGn RYgja qXdPw rvvEm HCqKn UZUfeit jDLLGW ctwyfMZ tNXmBIp YrvLpF Emdce LoUOi fMhZLVl LEeiN uNgiX KAWRAu iUoncYM mRHLm jwDEpY jHssI JIZPJb uMfRQ pFHFo HCqKn cWmzw Wichp kdHFH lxUHl ohrfvYn kWFbW cWxuY ZuZuMS fugBh qUUdY uNgug qUUdOJ QNjvJ QNjvJ KoTKV YXalf xvvrmlUS WvQjaWB UgVXG PNljCu DVYbY fVLMS CTmyq fdrgsqs htXkc wumeBuCZ bmZpm muHwksF tfXiJ coJXekuj eVSwvBN yNOXA oErfv nwPxO HGqKn DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven RiseRiseRise Geode Geode OPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION Pentium uPentium Pentium Pentium Mobile Mobile Celeron Pentium jIRWIN WESTMERE PENTIUM zRrCORE MOBILE MOBILE WOLFDALE MEROM ujVYSK QUADCORE PINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED HCqKnu HCqKn oPEGn Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY AjzzR NONAME PROTOCOL SERVICE AjzwJ EALREADY EBADF ECANCELED ECONNABORTED EDESTADDRREQ EEXIST BEINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE yENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY ENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK EREMOTEIO permission denied address family supported temporary failure permanent failure family supported resolved protocol unknown service available socket connection already progress operation canceled connection refused connection reset destination address required Ihost unreachable interrupted system invalid argument error socket already connected Fmessage unetwork unreachable buffer space available device mWLbb enough memory machine network HUxCno space device socket connected directory directory empty protocol error dLresult large system process cross device permitted unknown error mWLbbJTd links Yasync event signal unknown error malloc malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent ReleaseSemaphore CreateEvent CreateEvent CreateEvent pFuWNP iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress VHHEi kernel GetModuleHandleA CreateSymbolicLinkW CancelSynchronousIo powrprof socket closesocket Missing after object member Missing object member escape sequence string Column additional characters expected parse unicode surrogate fEcYl unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected yPContent Length false pEhPL FOpJHpi QFrVw blgbx leEPY MWWpV IltiJ MiOBe AFCAx COXUK mreYsa xwUvVc QDsTw FsxYC SpSYNKZbN FoRiLL OtSEyyJ IfIck MimXJ XqKna GpLUTv YjnQV BmpVy fQvSCc ZVkRAu vcYMrp fafyxijfhkdanfrzz HCqKnu qXdPw OkbDEZ pbBFp MMfRQQV fVLMS Nwugi EDtxBTY amZpm JEtED rwksb nVlRndZ WGOTR cyrmG tfXiJ gVQenRa klNFGh MtfAg wwPauz QpXfej HCqKnu qXdPw OkbDEZ pbBFp MMfRQQV fVLMS Nwugi EDtxBTY amZpm JEtED rwksb nVlRndZ WGOTR cyrmG tfXiJ gVQenRa klNFGh MtfAg wwPauz QpXfej HCqKnu qXdPw OkbDEZ pbBFp MMfRQQV fVLMS Nwugi EDtxBTY amZpm JEtED rwksb nVlRndZ WGOTR cyrmG tfXiJ gVQenRa klNFGh MtfAg wwPauz QpXfej HCqKnu qXdPw OkbDEZ pbBFp MMfRQQV fVLMS Nwugi EDtxBTY amZpm JEtED rwksb nVlRndZ WGOTR cyrmG tfXiJ gVQenRa klNFGh MtfAg wwPauz QpXfej HCqKnu qXdPw OkbDEZ pbBFp MMfRQQV fVLMS Nwugi EDtxBTY amZpm JEtED rwksb nVlRndZ WGOTR cyrmG tfXiJ gVQenRa klNFGh MtfAg wwPauz QpXfej HCqKnu qXdPw OkbDEZ pbBFp MMfRQQV fVLMS Nwugi EDtxBTY amZpm JEtED rwksb nVlRndZ WGOTR cyrmG tfXiJ gVQenRa QGATm iuMSSoz rWORAuw OkbDEZ ceGotI aecxd pRcDH moTpm XIyoct sgpBFgWM kdUYxq SwPTd qXdPw TQUpT OkbDEZ kSZxL pbBFp MMfRQQV fVLMS NYwKiuSC GaZmJ KcooE cVGJX JwbhG lSmlB kstqQ dJOLHTp,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj fFBde sBKBL vDuwqHm qjyGy CzDPWq XGmna rdCvbImaZEvKh NnEFG NyEfA Mpooj AttUT FFrDrT asSlSLXGSD QIWAiPSVl ImQEj UArgZ dBvmm aiaQz naYqY BIJKlQUgd WqVQr auCKvm LbLDO ntLiW JFfNA DEYfH KHboK QQevfKFez PMzMt izPbCY DWUFy qCJrU NTeAK mfFdf aHQCR lqdjK cYRDn RFkoo naYqmW YHylGS pzDpQDzkc YRsai GslZo zbCYTT AaphL mSLOJ EPTDQ aPFpE mNWxGfx mFUKYv newqX egDVyy GaSodRf RmxOE cEVQul YNKuo bmIedl pwBqV rOUHw RbSym FDosR lBiOgr qvkPA ynKFA bCLoi kUfjE pkFRM ECQhh hddEm WWzbA afNxg BkqNIZ Gdaozi AxqJel COqfd veeAy pNzfyA FjsiXD EMtDs TqCVBdv kKeySthS FFlbN XDZMU Fitxyvlg ShWsab WyuiZMf cfJDPAq LdypU kGmAke OINMX EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl YCCMX HHurQZjqG ZmyUYK gIfitx OIcRgVH lMslCB ezhTUc LBUBX JxiVD ZDMTOl bSougR RkBWj YqimiT WoswH noGkLR UCEJMU aRzJxTi GGCtz rTSQc qeSsm aqfeEdGq oOrhb OrsKc MSMDj tKajH jKkGt zxuUfy xnKFu MDiyL kWFQu ObKjL isfsq ngbkH SzfcY tOyrq UwnTW mKoVu XfKvU EOFOn fQGyg NZJXqE GfCDI PvWNx SMKKLz wJpcfb NSHfSr IPLPO ZjVXt VUQSVWf mVOfk WpXuGX LoYTCf LHvjE ISaFpZJG CqazT FeQBH SVpYPWy xXQqPpD WwHXt NZmWbB BmCsbI rGvhX JUPtGo fICwxNJ hiUCcH gUuGFtgE dnuolK FaTWj yiOyO JTgBC vKMKO yWbVg jHdifq dDbaP OgAAXa LhwxKdcTb phZrAz ohqjW TlStTE FRFhR gfJXl tOtHP fVVMIP GWTFArPjWU OsCyQ BRSDfA ZVjDr ZoeYue yrywH BCmyI dUFRM ARcKWFId Hkglx FPXWWH ysjLG hIjTA igDOV AGruJBIC KtiPG KQCxG SHnkX pNqGJO xEvDZ UjKnG ZkFkx vrDSQz KSZNB sVbGKv jzPVm YEIcQ FpdgjY Iihszk MtUjn PGkMO jJkFJ WvsCy jmAocp JCHKg EetiGM YiMWN nHUILG woplZ lRIgA wTyNuE KESAW MdBWKD BvFrP UwNfS GSjon QViynm UcEBp UdkVF Aajsn thGZI QIaaF FkroV jDmdj bObCY AVzqve uDKZdp OaDtX bYjRL KwqQqudYl GEBtq JkMQA ratZl TSUVWL VWRPN VWRPq zNfZvX ysFLp BRtiJR ctdUe OXkmb PBTNRs cIQXn JgqOaY SVWhI oaQGM aGrBOx pmnRYY cDEjAe iPfTs CCdtor knRyC ghHSl FTstA wyQZt HuAls EOcHC kWIFk oqONW nfpbJ BNHxX KnOAF MbPdK MiOyJWc lOSdK ohCxU kySvmk SUVWT ywEyS AbedoxgqG Jxwdb owrGG qyMHw OFhtn HdmTa zPylo ZODSS JrkiF EAzetJ TrFHh wgmkzb aPBLN HZMmcS FuEDk GOZrX YcNXW bKXcfa OSuxKDj BqNYZ WliTGX cqSwD WGuxcfu arJIL wdWAB SzBjd EOwcow jYfbHe UyqNM cHaDk VqFlv PMQog EpqjG IQnPm SJeQE joHpgp VKXKwBt tyXNY ndZnj GXFrVS obtyf vqeog KjGAQ ycmNaXX RZcPWQ uEghL icUpo uPTyt TbaMr Dgnee wgnYz joJsEN tHIvw bliZDGTr KYXCN EZiiU kQZOmq qLhKJK rzCNX jRyZz ClZTS PSsvUgL UOVQgk ozEfu eEWDJU BFypf XqCRi VqkGX AYdMcdW HXZzf MjWkws yEAMt jnMCP ainVT INBaV nCnzvrxy gjpUc qFfQi yBPif QXBCxd sxgCw OTzGr HXKXE gNRFu ZNaML BXMyeRa MbHBX wmoWt ljCFY taiAuaR KhaUU YpBTb yRASUVW hqUhQV OsCyQ JIKrv VPjLh jXWvd YbZcZ VPrgK wWAUX qeVpELgkS trZejL ZsexIsw XUzXj nOOog iVfRMn nExHO SgQNu pMmvM cuHfBQQ aTRfLc lcKwsN nFVCS vUxVW cRXpd AKMWp JBnGO fFPCRl EuVbnDx MUlmBg xZecSs tlTXI TcsKz sahAK ZqsjPPr TCsqoh TyzaH TWiTq dFZQa tPYNU qSkNZp zwfZmrOI pPJHA vhdjl uxRwT ezBTl UpgVR ZXuDtx IFAMm vbSVW UpgVR dCZGc jKkMh clbjP YibNB yWQFsc tvhHI OJwVYgk uSUVhI JLFti kSwOp qSVhq TMoXR JokvSYq SMxhl OSNDxR yxpadV AHFwu Bylef iXKiM umlsgg doaZF kqybOD DBykW ZxEqD EnCmF HVCDts GKiLB sXPVjt tLsdB IkHoE SUVWC NSHUr dJuSR ySYBH SUVWh Nfbma ymQhq QSUVW zQKFAls zJRET XbUpy GXGTt vUUIT rXOCmh xDmUHJn mIILc MldEqag sxPuZ FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS qovlvL GCEAc qVWLkA fvqWGz WbvqT SeERpeoI GlJnPMB dbFXYan tahJix fYuLu ZlPqGPJ xdDnL ZZGKKwNx ZNuAE ITLbH RTKJe RubJt BwHTuGGT vwwLn HXOEHc iRWOks JSyVkL GPiyjt WpGZO lrmpnMnC EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE xYYEe HfTIn gQFZGi YZOOR acNUQME CCdyr WFFIg MEEEEE MEEEEMe tygtHA TSVWu EPMMtM RQVPz SQAWL zHRjk gyTSy MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe NfHUd EPMEEEE MTVMMHVE gXalc tNSUon MEEEEE RYjfg BcDky LXJPe HIaQa ScnVq RGKTM cFEnPyMQ MEEEEE MEEEEE EEEEE CCdyr EMMUU UEEMMU SVWeMM MMUUEE MQUREP dxQeJn SVWeMEEMM RMEEM AgQikmLE PadovRQ oqcuiI tcFKh sQOzzm iqnQx EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM CCdCr MOjcQ MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ agdAuyJL QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS IorTl FuceN FBXLVE frMJn RbddXm Rzuma IEgEq CVyaF JJpFu JnJcIdZ MrLdFi XlakEe XOfBDy iVUgE eTRSF ThvcQ NJiYB NMzcL ZfESsp Rrvah iIIjA jCyQl huwAQ IFxoQ zmoxk RZtmFw nMqxn hVLpa KiAgRki bBAvi hIwKBJ Znyhx czogj RfLsj rreot sRLVNZ vGMmQ EFAbo ATBBDR KjOpbx bbuLByeALQ okZzkK zGSvz aTzAW HuYjtU ImiDO rQFSo ONYDYLlI IHecm HyVeU IelJUzPatIA xRdiL XOtbi nuMVA lqKXU PgRIP bCiost SFLoS zQKfGO mggFjto DIKDY qcDpQ yPmFi ySWoKjv TsICg MSlmq eqVIh GrJoNJM IzPDJ ZgfYr hjbtD SBavsKsN UTUCM KaXLP sGadf sCOBGaY zoeAE TETZK ojoiAq JyQYAJ nibADT yFIkw ChpNr wyFIy hhnsDsduBZ TgLpc eaoJBY rPaxJjUn yDlVk dOsNq NfCQJQ HtPFY ZfdVr VxZTJXF odbUR RooIE FNajP xBMDC xvYdo BsRsx dYwgdbZ zPbPV tviIGLt zGpeRV xLSzMHs idlkGR KKdtEuM IODRi sUQpygq nJgzCXl LidCl SrApD uBjjcgtet zUVcHwc DlnPC QVjcc SptQp LzUSr DHKnm nJpvvX wLOSi fuUjy wYUQry DUlipFK rqPqv TPgGg TtUXSm aCMPMrn ltWNtN MmiCQf wKroU vRxPA LAJvUo TKXMw czdnE FeWfII IBrhee CzoThT MvWik YEfWY SUVWj BABABA RBLBK dCZTg ZOkUwq DTEsj kHehgJQ zsamM UmkNY drThdj rkAKU PQYYt uYSWu EntelE ineIEE GenuE hGVoq PeuEEEEd QCdtU ydEQoMW MdZyFA MWLcb QPEPh QPEPh FRtjr MNwKJ XxaHmtc iYtmn duQap nxIRvU NRUSW PYYug PYYug YYEPV UQQEP BlkOE oKQmig wtUSA XyTcX DUQVu GJsVF VVQYn UQSVu weUVu hscUV HuYUV EPuuu jKkkVC SVWUu tfVUk tLxXj USVWUj UQPXY QJzOQD JDyQli tCmEB ZHYSK BORQM CuiYM csmuP RcnCet tfBAV tPtLw PQYYPV EkviK Ujhxj hLBaz vVSVWT URPQQh USVWj EcFco PPPPPy MeEPj Vdngf HFcFZ fFdbY EQPjjM VPuus UQQVu vRcAz PbdZwu ioSxbI lXXkqA USVWN dxWSZ gSZPO zpyfW HUhSQTGu cVFUUM UQSVMWj UaKTK IZxXMq CrEBG GSLlNw MFFoO ItOLt KRxyV uYgfFq UkaMb ZdGla jAZjX DGVkH BjpxO ujLSuQ RRJor XeUQQVWjgYjGN PQPPESPW jsXfF DUSVv BjpxO CFWGi KFJUO UQQVW aUQQE Apipe dhZur WSPRW OCmQy jPUSV RPQQE VQuuH uEPEPWSY URydGZ YPVWSu kPVWSu FXOLl ltLyB HLaHghg cNouI SkjVOnUQ TAaRC rpPLQIyiz iFaqA exKFq XWdpQy YCPwWZL CPUnIS cehZM uPuSW EEwPr UEHEu kGzNzA CwsEBb lUQVV XfEFhP EPEPk AlVpu HCzTN qIsUxN rCMEBD PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu EpiJN IYYVMD oFVoh SpVLA ykEgvA ZbBym uBjAYjZ jAZjZ UQQVWO SVWtdAu BGDzcZk VuCAQ kaSsj dYKfmz ArQCoM gnyKG CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp yDNVYN LwNtK OXJLW VRibE xqemZH Dyauyk ViunKF yYMBDS iEnkL MEEEPu AMcJLc qGMKW TLNUE SOGYu PPPPPt PPPPP BzsFQ HLMMQP kZWjZg YYtVWh EWWPb uCYYt uVWTb WWWWWS BNpYg YtVWj PPPPPPPPU VSYYt BrSQA utfdFQd EAEfEEj EPQEPEj AYYUr PPPPP RuhSj VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PNVViY PPPPP PjUHPh PPPPP uuLsx pjauC aUQQfE fEEPj CTGCW EGWVj yDmey XwwcN XTUbF sRJRD LcHrkde UtmttUx CAlqQ MSVWu MQWPVk nhCmFxH XLENqS MEEEPu PPPPPWSu QQQPu VWuSu PPVWPu UWVSM MuGMk MmZtP dKfwqS vPLTtTU BrSQQgT SOwZT LHBJs WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu HmDdfJ aCGUg gyKptvK cjpoD XeUQQ QPLYYMt Vltry WznHuq tFoby muEWn EJbKD bkTvy NFSEH LjrsG AvbnRBk SRrTJ kUnYR nOqIU zHhtB pIrBN QUJwcRQ PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj WvIBf RDbozy wNuaY DTJAi EQrfN FXPZGG oQFDf YTpqT lDvHS rBMaL RxvlCeK GHUaTvH biBFiR WxxVL mMtwR WvvVL WHtAtVL aMwUF XiGOjO ZlLMM LltDrP vtPlWM LDaqP MAtCw DRzvkFu uHNGNOX OfHYi nBkPHciJ dPZnof BKDXv QnzpwpG LsUVu QQQPu MEEEPu EEPVYY quehUE fSQoos apUwZi nFbaUU LpoCE TGkGWg TdQaF LfmNn TmjfDVAT ytuZs mGtuck EPeuEEEEd csmuu UEcsmE PEEhg tDPaw ZXhWP VWlCv UWUSfE DPEwb UQQSV obbbI hsNjRxfP RYyaep pmhMe seiTf TgZRNHX PqcdI WRvLx eWSLWl VobSkHn RDGLf LBqCJ XpIlw SmxPus oRBiyy hGbCqEh gBsEP xzIRlh xzGXg BxRVP EZNjD glMEGY QUzYK tLvPG veikDsi rKZok oaplF sbJOJQ hBKCE WjJwy rZGXA GFUmD wPAxlOB EZgPn prwdsje zgKEl HEDmX ZkhcHr rxQOy GrBmgy vFTxo lrkPb kxcAO qROHBD WtyOWENa UAOHp oVSFY pazfbihO ixUXA bzzDHt aqXsa HppZz sCQNAY SEvAvs qRfHOP flTcy vFVEt NgUUhHib jBzjW wfBUy YOqHC PadYuG gbUFTf IUUnN KaZKJ ZAyxLy UjCxT UuYdb DsTiAq BdQdC sAFyi eYGwO eDTgoOE hobHel YczSXE uvpdw zrJvc PIPWBnUZ HZnqQ pnazO rzGYJ JuOWDE SSeQn XTHmQ stRud MXvZrpj AnMQh mSvwa LBXmGC CoTbH VjxEPD cjoUe gPAsWu ImDhM SnMTC YNaaOb DXRMSM jpwyj vuZwl SnCBYP XaSaPh oKNli zPViNoFn PRdEV hsqipM sTkvl xEVNwe wjkGd ZkDEJs ZUpQkc PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI Meibo uHEPu uEHPo DYPEYPhH AsQUo XAxmj Fcari JWoHUjh MuUMEIEPML UMEMd bMcUMv jemdLW VyYOc EEEMEME HnEMI MEEEE ntJETE EPEPM KGDJb FwwcS DHbpj YTKvrp UQQMEM nWwsge bExLVG CCdSr nYkMN queQD XqBiJ MEbsI fTMnjO KuiUrqInh SfkRO MJdkTLn wyfslB hpWGbS fWoqO aKTwCfE bLURq wUybd CBnZq NbNgD NUrwo QWdTf CRvol OOyuZ aVeLs PCSfN slUUd DzFzcAwA WUlubQ XMTljt cUSBgk bTCxZXc fDSqd gCANf Jozqj JFfOnx kMUvpzw EMMUREPMMM EEMUQ jKkUQMEH DoBEQS MMEUE gpGUPSLB nLKPBnp ZlSqW EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU skJeyr aGBLQVPK ObNHO MQMUU SwnZG zRqFZ vXvpHo yHIQmI UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd UmckQ jKkULMEH MUUEEMM UEEMMU sROYo bOotC TWwke zMzpyW SLTJd XqSkHdgj zswruFm bQNXU KIHrTn PxMKd upQtqd jdhhTF XQZjw CrajfP iKSVt GoWQLC azgqy Pctrx McKMj NiMynC iEsuA locale QkZMz KOlBqo Uiostream ZtQgZM badbit failbit KOlBqTl uuAgJxYEdf NbNBKSJ pUXPG zqSkHUgp gzwHum erEAQ IBLPxvMdS fpQtd vLved kjmrDi bxENZ TpLZh TKcAC wSzRVL xAGcU JiKSV FMvCn wVCGv TSNHn tAaiD WcStQx JPmKLgnY LVZif uWbKh zEjuwh NaZJkV FfMKO QJIYJ array length unknown error address family supported already connected argument argument domain descriptor message connection already progress rWdevice resource directory empty large function supported unreachable illegal sequence inappropriate control operation invalid error directory RCnetwork reset network unreachable buffer space child process message available message space device dlWno process Vqnot supported operation supported owner protocol error Sstate recoverable files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx QLGza yqBKm LJgdZ ETGOo WSkHI cIumG KDZuE fzkDT rCela BKeSU kdPcT cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor WxxzL Class Array Complete Object Locator xpxxxx wSofJ XXiqvX fWdni GkJuJ pZFgoVhJG gDuYKIXo Oceil floor ldexp hypot frexp yXMKyBK wsinh vpWoS pzoHnL QRynx PwMonday Tuesday January wMarch April KDecember ACINGqM PBKSU ZkULB EnumSystemLocalesEx LCIDToLocaleName QwNAN fduOf rfUeT ocHok qcMBXWT PBKMNSs qcMBXWT ZGkvTLB HzFDbd fGnMT HUJNS ZGkSfvSJ zswxz yppwefOO WsGYv JEYwX oYcof VNbkECU JkeRB YONnc IqvLI LtmYE mBboT QKqmo THTfZ rVAbH KtkgCAiu zFNyP ibkRY jFBKRx WPweG yALuB TJwyS Vqpgfv aoUzGt WTnTk OuXbAde AQuHqZ HSeNr ThOITD pEvIOG rjJZD eiONsUE kyKnr mGuBs yWpgDU xWIYUh zGntH zbESUP VHInKn ContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey NurWT PvSao ZfUUU MvRmHvM YgmkV usage usage NQVqc SNZrwsAK sTgGs nicehash cLgiN kDxSNr WsyvM PBrKe Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ VSvMI qZeyI avaLJLL ToFbP FRbgXp MesfiboK JLXCM mNlVez iWlsv GpTXC PnNcl NTefgy zkaXMp LnbTSNo NufpHG wpoLpR lxBlxM fEMJE PfCqOfS ABCDEF HfHFg duexX BePxj vqAPB XpaUNs nKFAl TuLoB xOWTD CqIQVq OKsAQt eeluxW UkKCf frSeL ppgcYJtwph mIQOQ bnEEJ aQCMz NfDzK jEBKMNSUe nKFAl JhhooF AEQXFAX GmNbN SNvWz QoVTf PwICvhv AvfAY AMqxd IuTkG TKORK LEBXC nKFAl MklCC CfufpaD Olmhm PGUCz NkbLkv LxOnOnb SkHPIc gBPIum coVTg CqIQVq ZGkDvSLB CqIQVq ZGkMUSLBO NbNVSJ HNkLP qSkHhgp zwHumefO FtAmx EjEBK AwOCmJ UMNSUe CqIQVqXB DoMQVq CqIQVqM XMjEBKMNSUe hMUSLB Fzhwp jdhmI VQORuY zefqMHZ oPxtn nTZhP pTkGk hLOwG XEHde BcAJH JoeCOi ktsqTV asDjC HYtTk KfaIEeR HTgoh LNRbig MrVmb VQFRT gtYcx BeJIh aMXksKiRN LkHyL ZGkMUSLBO KCqII XMcEBK wZcbd ZGkvxt ImztQ KeqAk DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD coCyrixInstead NexGenDriven RiseRiseRise Geode Geode OPTERON PHENOM PHENOM ewFUSION FUSION FUSION FUSION Pentium tPentium Pentium Pentium Mobile Mobile Celeron Pentium IRWIN VWESTMERE PENTIUM MOBILE wMOBILE WOLFDALE MEROM QUADCORE PINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED QDMcGz EBKMNSUe CqIQVq KSTKO EBKMNSUe Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF ECANCELED wECONNABORTED YEDESTADDRREQ EEXIST EINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY wENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK wEREMOTEIO permission denied address family supported temporary failure permanent failure family supported resolved protocol unknown service available socket Cfconnection already progress fKoperation canceled connection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected message network unreachable buffer space available device enough memory machine network space device Nfsocket connected directory directory empty fkKprotocol error result large system XkrtHji process cross device permitted unknown error links async event signal unknown error malloc malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore CreateEvent tDDFj CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress kernel GetModuleHandleA CreateSymbolicLinkW CancelSynchronousIo powrprof czsocket wclosesocket Missing after object member Missing object member escape sequence string Column additional characters expected parse unicode surrogate glKzr bsIwLL unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected cFljY DeqEiXG SContent Length false BEhSu adyvr gVKuA dhEGobuJh GLxGKx JjNfxYTq nAJUX kCNjsl RLgXCy zVefF uSmhfu hfpWS yhBEFGU DjCpM XcBpEws mTnjh FQpjY qcxxw FtuvngXE sTyvAZ PIHum XrhiQ jEYhT fafyxijfhkdanfrzz CqIQVq EBKMNSUe ZGkMUSLB nKFAl HNkLP qSkHhgp zwHum QoVTf bCYvyZ AKfAz KGpTz jdhhTF APOwG XEHdedOy OQjwq ydxXYWP xbpKDr vCnGn zvPoZ mctrx xjLdif sfasLEeR KinhXln lWXWI rPaHQFRT QJIYJ elcAw bMtJG aMXksKiR vBGdr wFtHC LkHyLyvU CqIQVq EBKMNSUe ZGkMUSLB nKFAl HNkLP qSkHhgp zwHum QoVTf bCYvyZ AKfAz KGpTz jdhhTF APOwG XEHdedOy OQjwq ydxXYWP xbpKDr vCnGn zvPoZ mctrx xjLdif sfasLEeR KinhXln lWXWI rPaHQFRT QJIYJ elcAw bMtJG aMXksKiR vBGdr wFtHC LkHyLyvU CqIQVq EBKMNSUe ZGkMUSLB nKFAl HNkLP qSkHhgp zwHum QoVTf bCYvyZ AKfAz KGpTz jdhhTF APOwG XEHdedOy OQjwq ydxXYWP xbpKDr vCnGn zvPoZ mctrx xjLdif sfasLEeR KinhXln lWXWI rPaHQFRT QJIYJ elcAw bMtJG aMXksKiR vBGdr wFtHC LkHyLyvU CqIQVq EBKMNSUe ZGkMUSLB nKFAl HNkLP qSkHhgp zwHum QoVTf bCYvyZ AKfAz KGpTz jdhhTF APOwG XEHdedOy OQjwq ydxXYWP xbpKDr vCnGn zvPoZ mctrx xjLdif sfasLEeR KinhXln lWXWI rPaHQFRT QJIYJ elcAw bMtJG aMXksKiR vBGdr wFtHC LkHyLyvU CqIQVq EBKMNSUe ZGkMUSLB nKFAl HNkLP qSkHhgp zwHum QoVTf bCYvyZ AKfAz KGpTz jdhhTF APOwG XEHdedOy OQjwq ydxXYWP xbpKDr vCnGn zvPoZ mctrx xjLdif sfasLEeR KinhXln lWXWI rPaHQFRT QJIYJ elcAw bMtJG aMXksKiR vBGdr wFtHC LkHyLyvU CqIQVq EBKMNSUe ZGkMUSLB nKFAl HNkLP qSkHhgp zwHum QoVTf bCYvyZ AKfAz KGpTz jdhhTF APOwG XEHdedOy OQjwq ydxXYWP xbpKDr vCnGn zvPoZ mctrx xjLdif sfasLEeR KinhXln lWXWI rPaHQFRT QJIYJ elcAw XMEBKMNSUe GkMUX nKFAl HNkLP qSkHhgp zwHum QoVTf TefMov VpZVWW isWDf INSBn JVrqi NhRyaR bFrTe BYGNxr EzQOZ BKNSe DeqEigm WBzlCopy kqPmT xUuLN vBpJF IygdI tulvU sqMMW BNKSUe nvUnf nKFAl vufbM zwHum GQoVTf bCYvyZ jdhhTF APOwG XEHdedOy OQjwq ydxXYWP xbpKDr vCnGn zvPoZ BYtTe xuYdi ZPfaCSEeR elLJrffk kQJIvyj,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj igPhAbTD BYfrN gcDZj gAelV mEBanp EwPEqxS LNrZk EInpDk bvjdus YReSe pDnWOl xBKXv bePLWk RlouA BwGyC FIfNoq rMoqz nBfoT BtUXL ocbHn nGOJy gzmJh hkQYY suOTZvmueD fEYAy dyChd YIOpx QPXnu XyqMls TtJPZ lhAfF weLUkg KgHegk tcYfw tEIxNkV pqESA bWdYs OuENAx PdCLjYe AuIam KQUEL YAJhD fVrciqv rTmQe NmMdT avzgX wIqzx eNdcdfKj iCbKK IwIFnp QrJggy uNVMI hMyCp kctWDI SIvtZ TVVlw LTdOZcED jJAiPM sLHaW BlOLkZUz IzCSB kFHJlub MqleQ wdLYmK wNvyfq PKoXB rcmCH uYDfTFK JfaGbcF UdqqKKV pliJh dDhkrS YBexn dBjWu HUzJorU HuHERh YfsBb rfunCI RMBMeW bYvWAu oKdUl EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl Ycfxer EHYcfpw xjqoq FYPks Jpwvn hpuMdVR hTDTo dmFnF RZrsPR gccLb GJbiu JWNEO fQLHS PDmRxSdM nhrFbmOE QycVyI PxQph EHYcf PBEAM KWSVWN cAdUYh comxiEd bDIyD KCCzs TxlZR ucEGy nDcOV OCIzXXL KOEDO SkYJbt YiIXS zJDuo yzlQMc OAqmoOx ZmozrF rpzJAh NyGGB qpTKJ DPwUR AfDdJ qDrxn XzVMZMc ZTCYUjQV UQSVWf vFGZF CoEHd svIJr SVpYPWy xXQqPpD WwHXt NcZfu TPvDmx RVblazmq nVcKB DXDwYr yhEfB HRuTG SNJowy WCIKM zBUjph AGWDi mDjZB LZkjP YkhhB ztkjD XoOjr EkQBk sNqwP KyWJf DErxWX ARcJn EcSzsiC czHwe zHcEP ZIETC kNTpNW QlWgP ClmBu CURKy GvjPL gWHPxLz dulBNM btOIuJa yvSsV SxMme xkKHUVcp jthQL qTfbi diSpPe jryHf ICQTO aoVFwz uuZYKc tbebr kHOUO OOnerGXo QdEzB IwqXh Cwskh eJfjY UeTIi cjRiV iFrkYS LSUVO rXzRgh lBHDqVcj ReLEcp yFyQw netjN TpFEPI eXSZo yIcqoZ fXyAy iXGmDa YSfYRk xEtVK XzAyv mXGps pvVFE jrcCEM ACxlR GVJgPg pSUVW EHYcf RGSVr OJCWr EHYcfVq yVWHS EHYcf yORkM XatZQwBb rLeOi KndPa xucPdj kdFfA UeLQJ EHYcf fECCzZ CbACDB OnipwW zyMChE joOkV WRKjC EMtKbW QpdhD LRtXqF lZBpos OctsbmSx UgOFv TSUVWL VWRPN VWRPq opSVnK heSHW tMPIY NOVdv WdFfu tEUxg xkyDn CCVmMx qSVWhI OcLVG hbvFK ejKpZX vXfQx rlNDze Wrfob BrfDw UQvFxEMdUl ZREXTe rtSFPb BoUXe lBWYXK sBoPb GXzzvph lQghJBMq WsgQKH aOnRHe tkpEP SUVWT atgfsLaz IrMLt Chbmc znqJS Ifpul HxfbX dmvsHztN icAQWUpP Zudijwl mQxEM LvcARtE JwhVo pvVFE MCgxVZ uUCsj Dhxvn FWtWU ERlus baJfi YZhBp tuLnZ eeTrt xRhJRmvEC sByeEST hsMRaj HvCwS iZbgG KPFqD UclLakZ xJctK pqZds MNPNdk TvNzD IpoHL xFrmP fNWijzniY hXKmJTPu Bdinr jizci HJoWtw kqCgv AgepRDX rzwQj DAAjt bHBStln kDaCY hiJyl DhnWDe KedGlT FFyFaF zMtZe PGmom gyynrRu WLaKMmB ZfvCFedZ hSYND LqpeT wjMSE Fuajs yPHLNV XamPO GVOJXXfZba ycSEa nQqdaKHR pjHVy SCftCH Uqzqw IOgzn mRHev QVtmo LkpbG hJylcnv utLCD kgVqZ BQekZF vvcLsj KdjrKH aCurS zeBPnDr wIVLb XiAyj fLZql mfesGvJ DErCa eBEkP iWKfwdU TfwqT GUnUB ZXUoL QFsnlK oaYUS ZkkUFi VPjLh LpoRj KAOxnE EdPbc cVxyLJq KxeTxC GSMgxh ZYUas vHkKd RGkqKYV kTlow vQItv SZEpo MfjOQ CANvZ Mntvof hQZnC FcyfS RLlgLzu RfIISGC EZApY ZgrVK bCBbW Gksnrg RrdGNP VbdSZ mJURK NbOuv rRmkj LIRzo qeIxlW ovnNS uRmjrcNG DOEliC fqQldO AAxAa aGNczAMF vvMjW aGNczAMF wZUwJT LeFBQ tvhHI HmiLcpxs uSUVhI ztxDRj NCOvmNM BfJud usuJv SpLVE fUeanjw DLijT dCrVn TkCqEy JtvmR ntCahY DEmjt sXPVjt tLsdB SUVWC lkscgn vSlDWq qvxKJIn TOjaC FRJlr tOTvP vgJqs LbQXP umOOicw SUVWh BoEvLxc ZNdUVW izfNAcG AQSUVW RakYsPS PVraQrq ryGMvo egxVFDVK GJMXb GzNtn GXGTt Wmjjt YCfYZW ZKCuz FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS HtBydGc wZZaN zfORDmX zcvFo jPPrzj nkQsdH vQhDsR mptIl WgULP kIOuT dnjmI MnZiKnqC ltAqh xZteHg CQaZU BToYn Mdoun EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE xYYEe MEEEEE MEEEEMe TSVWu EPMMtM BtXOh MEEEEE tZPEP EHYcfUI UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE mQyUHmK ZNdUE IxdUA qfmkhacm qfmkhacm MEEEEE ZNdUA JmXrf ZacGU BbDTd MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP QhPsi QBNnb SVWeMEEMM RMEEM pHrkxY oREgu RjYaG imyIE BOcMs ueeljbT BQlAp lsfaFL vlGtp EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM cncRA QaerMz hjzBZ oPuDlNdQ MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ ubuQJ GGqfK QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE khocK UDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS WoArHQU LBtySa rAtemnlt lmauOmD XpgNV vpEeg kIhQa XFAYn KrIbfGb ABAnD efYfxsS VCGRo FOrOgKzx UKNTo PauNy HbvbsFU VObvB BjXHT sBavpJeq OEwrs JgmRal vyDrE AkOOh VKUEt NQXWL XiWkbKp zFRuyUQl ioKFW hdxJb dtWyGZ RQMzbilG CpSby NGrlF gzmgVD PPpiSCV tbZup ewcdY iQDjh QOKDv eCNWoZ jDnCvn pcuSV oGYPI TwYfH iKwZG WnGqF SWsciH fVngu YyURI iMlgQYa bjjpM xZrQa AILuh PLXQkc PBivl tiifSC yHmWj EgamN AesFy vKOCK gdBayVC gfSMF AcaRv tTEAevN wPvqm SYuYsy ANRns GssRDb CMLKH ykzZu eCOceY TFQKB cIRhOA gAfdH azWHMR NPZVT bRRssV SQNZu yJalp jVVza gyqdW lBmdq sLijTSv BImYcn VbsLa WvymL alJVxSnr ANnBL FPban dgopeH LJTuW lCMdN IRill SkKNB cjrOZ gYpwm ZjcwI zPAoiEywa KgVeUx lCYzyL XplXaIhA IDgAa deLNoYU VzadRIH xXpkG gajvO YMLYs SCBbj uWBNNj rIAcoQ LidRv NEdgk MFKuF VRfeptp nookd PzzQW KOgrmMxX yGABH YjtLrv ADHZO OmdNp kbobs ebZWJ WiwzZkH oXBCf gBgrDN DlmIm kXzkPiA VgsKyW OabLAq vDspz tpkWm SUVWj BABABA LHpCT aWHLE KSYRzo DEpCzKL WLZqO kcHuD SDyaPc pxKWe eoXGA XjAxl GmXNC Ezcdl SWOwh DRDEC PQYYt ksMFnY uYSWu jGKYH EntelE ineIEE GenuE uhimTTdD cAEBJ PeuEEEEd xhTUQVu eMJVe QPEPh QPEPh ffmkajrwi PYYug PYYug YYEPV UQQEP zbLyd GPOjr SyZhBD emkLx VVQYn MANbt UQSVu ANRNBN HuYUV EPuuu QGytkZg SVWUu tfVUk tLxXj USVWUj UQPXY LKdgZ KGPOFTjE oKYmnU CuiYM csmuP LWRJPv uzTmLx XfSrz tPtLw PQYYPV Ujhxj URPQQh USVWj mPDHQUO WpHyL PPPPPy MeEPj mMPDn rBtXR CVyEKY eHGhW RHrGKL EQPjjM VPuus YgUQj fZUQQVu pnDnM eTtmC ginhY lYHXxI hlgULv EcwXE BkUrb USVWN CMlKB RmDNI UQSVMWj XCsim wzociB OTpLJ ItOLt JprVE IhNjFkK METra IUQSV jAZjX wgpFf LUQQVWjgYjGN PQPPESPW jsXfF kUSVv JRQODI UQQVW LgxUPD FAmjagS xSuSq Mrwbi joWjj RPQQE VQuuH RlCjwo JYSxM uEPEPWSY xgshaMg iYDJv YPVWSu kPVWSu sGthA cpKBz RtwTM aRacN njZXF bvIvXjM oMVFB Nczxdc OFJzlX EvCzt bnByP vYrXd WoGhi awdPoK luoejh MRnZgv eaiVzE WyOlB ZGqTL BvaOx uPuSW EEwPr UEHEu KuJap Mrcsy urhYX SUYja prQDxY XfEFhP EPEPk AlVpu hzlYgQ PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu bJaIh SLteJY KZGwk uBjAYjZ RXsfe jAZjZ UQQVWO SVWtdAu XHYcf jUfPu tzxOOo BNBdDYe LuOXZ ygCZf CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp YUcsm QdqIM iLQvO fQtYOSb vUNjSV Tfbon nJZLu MEEEPu GeDMb CLxByIFjw vgFXT WkrOr FVjEx mVzTTZ SOGYu PPPPPt PPPPP HLxTh HLMMQP vFqry YYtVWh EWWPb uCYYt uVWTb WWWWWS mslhn YtVWj PPPPPPPPU VSYYt sUWcTW CUslf EAEfEEj EPQEPEj dclNow AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW droEj PPPPP PjUHPh PPPPP mGBRU UQQfE fEEPj IocAn bTBdxjW QWXrr mmAbtiO UjUQH NOGUQH oJeEN EGWVj UzfXPY xEdsB knGhy cXrER hRJMu ltkIn lBULx MSVWu MQWPVk EMhMT qCFjE xDslB MEEEPu jNvcA PPPPPWSu QQQPu VWuSu PPVWPu Egdvw imKYfez qUWVSM TuRzGU lvhpe UVEMv TRuAW SvgYB CRIaCD WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu GUnbZy LmrkE poQWw UQlYI qDxmo SEBvdB QPLYYMt iqfUN jrRNF PcyHA EmjcX pHDSDD wBysn zQKVs fFQRC xJeJw EHYcf yOVFx yzowBo qvGiO Yxakl wkyHM mDhgK dqANt PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj BQSBa yQouP PdRCkf srXELOqG ibCRi ATCOceI nEtiJ ljUKv TTwBf nUiAoDZ TuwEF ZQckJtBJ BbJtKsmW COmCrFR WxxVL Fcpts WvvVL WHtAtVL dixIY YIjHM tPrkB ECcHPnV xJYoW fEPKFS PjoAPn PIRpA cBiRmVWli VCJTYIO xPOnD jOomnG IDWSW ddsaWB RKGzWw hbeYP QQQPu MEEEPu EEPVYY DsWaK AZuQTY TWUha zdwxoiHl vRPkJ YqbKc tPHVB EPeuEEEEd csmuu UEcsmE PEEhg zdmRw mgSAe HqvGl rTdHQ kafZrn VWlCv wUSfE yHFzD UQQSV lhrcpa nlLWHDE ENPtE SjbBGAv TTaoi UClKk oyISY LYQVy nbqBR jEdodY QlaMU Qmhfm zPbQMo bWWGj ArhNV Otkex ccgyW xCaXy lHQlH GIANTN ABCus JIZzLm LXvMWq itdIziO vgbfXa SjQqZ RXZmV jvaFH ZRsBYb ODwyvie rSyJZfQ fMzvj uBHpy PaZku yOStN EiiCMU TdStZO CwKblZ zRryv DrnrE dAcqr gzKNl lBDfD KPFgn OfKKYXm gtqmE bwKxd ACkSR OpilPGa qhQmS TcEKrD WhiRK FPXxPE MjLjtqa AHIPz odMCy ofiqZ OkkIB wPgOy dEfPo oZZAyh QNSQe BTWwgwWS znNRpT GpRHy YkgHcpWD nKTHwj WCPDa TfFWz HmphvzC PdSMla sECiW mgQuT ZPrXD lwPunp UiCVSr gudcN YoJzO miwVc QXerKC OwukFd aFtkm jNDwG lvEYoNnhzW zCMnn pXQHN iKDjd qtfBL ukgnK JzTgr aKXFA MHKoj YqRFWg PfogEHYcf fogEH fogEHYcf bEiuy NsDTy WsafD OtKhA ogEHYcf jxEPD ogEHYcf ewLTE IhaLV cHUbU TXxoT SnMTw ogEHYcf MXMPw ogEHYcf KogEHYcf JeJUD ZNdxA ogEHYcf tqBjxz ogEHYcf SogEHYcf ogEHYcf ogEHYcfMx vogEH ogEHbj IqBap pNGYq pAJLV GGjZjJ ILlHM UxeRR JPKdL TxXbV NTKkJ tIhzyH OMoMRw lIWlb xUefV pJqma irgCo moFmJK iPhMAE PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI LBUjh uHEPu uEHPo DYPEYPhH ngNco MuUMEIEPML UMEMd wuJexk EEEMEME HnEMI MEEEE ntJETE EPEPM wJZSd XTifOu UQQMEM mJrVnR qCtuJ wVeNi VkrsCZv WHAmDE yaSCe EHYcfp ySBlSRg kftNp gSUXP iVHOZ MeAhdm LQlTB OmUUdgW ywLIaqJ EnhubY CyWKq lYjKqqav VLCJa QNphN kCazy fohnlg HIOVS SJljw MYhhb xYvYch MFpIw HzLXVO kouQgW PcTmm ZLrnD oEuIW trXtwHt DnMdVrV GxvIn DWMtx EuHRJ NgoNR PptPli xoFvs oweNd BAZsD BvcRT lmfvHf vhoAA EMMUREPMMM EEMUQ UQMEH cptQL MMEUE qPyexd UvVFE eTUQMM EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU mRUek DmUjh MQMUU KIzht Tdqrpak VNvSvAg UQMjE wkgNdp EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd omiaY ULMEH MUUEEMM UEEMMU aOanhz azvAakY eFzhO GOcVd lMwVbxW qqAnVj xiunx YIOpX RmNzb ySiBNRU iLwOs PJCtF lzQeP SbXop CbaZwf joGfF FkUTG locale iostream badbit failbit qDawX tVYzX BGBYx aEEsz MyCmM DvvDb LFcsT yRCiM NDSFNC yiBMRU TQaAD JRQTuiJtt tSXpm CjVwb ezIToP nVDfP jyCbk SxZxH qicph array length unknown error address family supported already connected argument argument domain descriptor message connection already progress Hdevice resource directory empty large xfunction supported unreachable illegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device jBuRY process supported operation supported Ohowner xprotocol error jBstate recoverable files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer vgquE InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx bkseR DjLhSo OicKe nPbLA EjRZg GgBFXmp xjOhd SxaOh SxOhn SxROh xHOhs xHOhq SxOhs xHOhs SxuOha SxOhe SxUFOhe SxCOh xzcOh vbhIpS HTLvIP pambJrt KnHvZ cdecl stdcall clrcall KGhrestrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor MCEaEg Class Array HwUoB Complete Object Locator xpxxxx cpYnv Wgwzm JMOhun WkhizM pJxLv JKAVM tfXWe DNVyb XgUOw qzHMZN avqzag Rcprn aQWHj kUyBc DNBPR floor ldexp hypot frexp ETpch WjhSo Xsinh bFSkz WfFPHW iqIGn IPUan Wupow piXMonday Tuesday bhOct January XMarch April sDecember xzFOhW xUROh ybQrt EnumSystemLocalesEx BLCIDToLocaleName LxBOhi xFOhe xCOhe dcVHD lglbSz gxUOuhE xUOhs BiSRMiM ktPkT ArBDTV jUfraYgl SbMKB vVkNG safCw YqDKGEi zrWpz OdDSD LtmYE acJIr gqdqY HHrLxw FSkJqu hTfTA FWcaH FcsXXVydm CiHrX FeMtjILnW XxZTdc zEESx GeHWD rwWcMrP EOlvm sjFrx fyohG omnTQ RhyglqCvj KzEVom cnwGZZ eJkeLxlDFL zGntH wYwUuml wqquvs FOhContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey cMeyh SbEkb asqrt ZfUUU QDkjCHXc egWja usage usage bHaOB mkACd IScXU NpuWq nicehash ECEXKm ETopRLq PbPeL eljkhb Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ KnXUt XIrzV GoHDzEPN DcbhFx QlipCDm JLXCM mNlVez nDDCJ oZOHT yfbrL ZJEqb XNGKgN ovHZz RpcZl ppZtUWN SOUla APnpe eYhmH XprKfLC UppNRz bAAOj lPCKM ABCDEF cJmZbU wqJoZY CZFNk Oicez QkTMC rPxWh MyUxXn mXQOeJV jUnSor gzFFA SojbxLTWT lpWUKtq EzkdIJuG esnmo AtGbX zoYLz miQFD mMxXn ReQngz yIEYmW ZfAIl qTIUS ZNukp oMaBwS eNXpo MlSzD TNPRB auDmAa MymMxXn BNPRy agenjH SOAQL WIMaB WCNXpo FDmAaA JWfyz MytmM XYrzl QovJd OKAPrn Joheg DkIjE XyjtvxZs xErniH QTdRf LCFyp sslBJ Jqzof NtjuY KmGHX vRjaY JIBaK MuJNj YAifV xBMwEg DURKy mjrpNOs wsAKJ DemLL iXWErX pOcpAhK SpQmb vkpkl sWIwVOa AADPZ WRVza UoPWk RpbHp hBgzg PLrQyy NXpoU Xutvx cpuPD TdWak Bbhna Xbtvx DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven RiseRiseRise Geode Geode OPTERON PHENOM PHENOM XFUSION FUSION FUSION FUSION Pentium Pentium qCOhPentium Pentium Mobile Mobile Celeron FnzpPentium IRWIN WESTMERE PENTIUM MOBILE XMOBILE WOLFDALE MEROM sxDUAL QUADCORE XbqzR PINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED KBNPRJS Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY WqWXL ONhEAI NONAME PROTOCOL SERVICE EALREADY EBADF ECANCELED XECONNABORTED EDESTADDRREQ EEXIST EINVAL OhEMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE hENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY XENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE BUNKNOWN ZdENXIO EMLINK XEREMOTEIO hpermission denied gDDsLnIh address family supported temporary failure VbkBuS permanent failure family supported qAhresolved protocol unknown service available socket connection already progress operation canceled bcQRe connection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected message network unreachable buffer space available device enough memory machine network space device socket connected directory directory empty nprotocol error result large system process HqzOhs kicBH cross device permitted unknown error links NLxasync event COhpoll signal unknown error ZgOJg malloc malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore KCreateEvent hCreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress FOhGetProcAddress GetProcAddress HCOhR zWTCP zWTCP kernel GetModuleHandleA CreateSymbolicLinkW powrprof socket Xclosesocket Missing after object member Missing object member escape sequence string Column additional characters expected parse unicode surrogate UhBad unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected aSyntax error value object array expected SgmLx BContent Length false fFDzr USiBbj NWfWaZaL Qfrsf auwUka uOktt vuKEr ZYEfd wgEPrODM lbfDJd CyApq gdaaL TmfFh LYXOL ziEJCox QfCLd BBfgOF yTBMp OicTb fOExEzX fafyxijfhkdanfrzz QkTMC omyzN Oicez MymMxXn LXTHDSv QlMbWH MVGyT OBYUU yiBMRUL jDXeg PVTQaA JIQuJ qSbXp PpiSCV nWPnpyNEH xuhzy ebTNyTAuV SxZxH fzBWxKY gBQIesGl QkTMC omyzN Oicez MymMxXn LXTHDSv QlMbWH MVGyT OBYUU yiBMRUL jDXeg PVTQaA JIQuJ qSbXp PpiSCV nWPnpyNEH xuhzy ebTNyTAuV SxZxH fzBWxKY gBQIesGl QkTMC omyzN Oicez MymMxXn LXTHDSv QlMbWH MVGyT OBYUU yiBMRUL jDXeg PVTQaA JIQuJ qSbXp PpiSCV nWPnpyNEH xuhzy ebTNyTAuV SxZxH fzBWxKY gBQIesGl QkTMC omyzN Oicez MymMxXn LXTHDSv QlMbWH MVGyT OBYUU yiBMRUL jDXeg PVTQaA JIQuJ qSbXp PpiSCV nWPnpyNEH xuhzy ebTNyTAuV SxZxH fzBWxKY gBQIesGl QkTMC omyzN Oicez MymMxXn LXTHDSv QlMbWH MVGyT OBYUU yiBMRUL jDXeg PVTQaA JIQuJ qSbXp PpiSCV nWPnpyNEH xuhzy ebTNyTAuV SxZxH fzBWxKY gBQIesGl QkTMC omyzN Oicez MymMxXn LXTHDSv QlMbWH MVGyT OBYUU yiBMRUL jDXeg PVTQaA JIQuJ qSbXp PpiSCV nWPnpyNEH xuhzy ebTNyTAuV SxZxH LeOhax cpDnET LFCeT HjbSz kTKMCC Oicenz FXmjTu GKNHN URKcsbaT ukltA XazTV elVQaYUGB jUWsn bSIauF DhvmtA OBYUU vfDcrw omyzN Oicez dDXbM LXTHDSv QlMbWH MVGyT yiBMRUL WWSmBy dSwXqE dCDFA,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj uyEAo yQrnp uVdwKS XgHxwqlQ zIxhtJ yOOCu NtLTj kqqmQ iYvGr SJkhz ESOdj PjWPr ZAELP tvDsO ocrDn CPXqQ zvwJx ZsbEh VutsV EJqEhI xXDsG FylRW tqxfg QvvAn gKIUPSo DLGNe mZTee QieUZuT NTOnR yzJMlRa gMMiJL sAUvz nYgpH mBUyB uaUDXbMo WsJFJ CPZqZ hVtQl HiaAM SUYDFBAh OdrpG ChPFj aWVdd WPvAtq kIcWer tSMNY NxSLC uHrSD ZYfvU reydI WPAaJg jDeCP zOGCeXb IbuYs MdDzeNt werHb oKlXGN gPMJd hzqrx mrISX POhSXu fRION WEIko wBkMJ sGgIqA SDxpM RuQMI vbFJn JDUvi BwXBc eJzMqX ImPkc zNESCV ZEtqdVN YMyls kgnFuDXG vXcIDg tbWXnco eGoIO erCCN EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl bGGRQJg EVmTV hzouO JcXLFHB UCsBn FEgqzL scmumCe qdbkZ CFLLg wiSTe LeOda FZgcn OvpXL VZlPsPT cIFeg inUjh EGiFFU PjLmLpH fBXxrE byfTA XNYIq nvmHF JuCpJgX ZIxFC hOAWNn SuUIwj YSeQj LYSfjA fHbNbYq gdRUwm BgditY nqCJL JRUGl FXlfXF CFhqW ejZrcq qBxFWC CePylo fIcqUS VevVW gDKtb GLwwhUi SyipB YCqez RqKQJ dSgKc bQuiq qUQSVWf EDnSP MLJnY poMoQN ghhvu SVpYPWy xXQqPpD WwHXt Xwqlo xosmrt HnmQphN gfsDHy iMwMp gxfIpJ XHHCGyl vYKzOD wMLUS qfXxX aMPjZ nUJyc jxWqE hMylrM gIzot buzSs xBOVuR xlSdI cemVB LmLiY mKLYUh tnUMct EGaEm vIUbV uIFahS dhlLu oXUIZS NkRZn MFhIC VUzpf NBekv amTON yenFG XGupxe KANsU zIaZWYt OhrLo ZtKefc PqtWW ppkGb mOhsMD ZADilX QHwDs MRlmO mPmpG AATyJM AcRGaJ IwWCsF CUSuxT vUDSsdc GXQyI PChVb vDdhNe emNFAJWK IJVvDm TNmBet kUMMZCxZ sRAxR lGXyC HABWrdA gAFYs QbGGp mgXRe YXAttiAC lPsvxr LiVaAd xOvAC xyoSq dtGeN aqyZPf NVreR SfRTDX mqiNBaJ HwvZmLOI qtOci AvUbK LAXgKp bKUutXw uenuRA DBKDa aatTH dgfBX uWMdV ZoRMUH QOOfO rDFwt IjUWBIO DbPWQ TOvGJ wMXPR cRFTF uzqjs tvNXz UlTyJ osHPBc DOzSbh TSUVWL VWRPN VWRPq CYOlrRMdn SVWhI exyEGHy ixpnFaX Txhtme rsOvt aXtHdy xpcfR zBnpN dHows XUwlVk LfcVy SUVWT VXRDdh zWWps mOIwY QSrSk tChjG KLXGFH nWNsK KJAup OVzRh wxukpK CpBIj fjvVc LQDuCx UkILj vAJpk uiVCQr kzrFf WLrqm drZDt YKlcC XuXtMAPf RXXEq VasLP YLDos aVWdG zzTyq PlJfrL YHfSV tUxrP ZHJPV CBxPrCw yOBiP sQinLuG rQvWf CJhaRh CkXPNZ yxjxp jRoMi mFvIh pyIyM WWXbH rdNwSfg ZXJIn djPYa IYWNt yDzBst FNtCX YlJqP aDlXbMC zDRQc SzjYQ QMRZc sWTfT sLxgo fboID IRboMi hNssymRB FFQsh YEvkZi FhnHW XoxZKz JGkuz AkrMwx jDbhyBt pnSrz sdtmq rSJwHKP CkGlBb KYtMS SgQaAG XiQha bFRcnMWD kFGrxVcStf CccqYAGX HyocB idghIUX wQkUA LnFBc ROFdKP kZHVn ocMdP CdDQc vaboz iTKDsY YEoNO FwEHUHM fQQAH Hautkf DgPzA kGoaX FfyIP tkNrsi nLbyLE VPjLh yroocb RHWdn nhyLI ITIpQ AmLfA vuoaF PxgLp rHDANv WLGAa qKvAx zlqyq PqmRE rKULM uSpHFY VxOga PTgDs fDOqh mKkxskCm kEpACE hDLAM kBrsb ChEGe XoLzC dDAnPHu CUovV ZEwAL PiFmz KzuWrja WmRwM mQTtWJ ycQni anpVx uXKxMi DaLqS dgatU wtBdB hmbbNaMn vEWycQOEZ DyxYK uEzSb fNSVW DyxYK SmVZA PHTwp lTNcEHtXa FvmMZ tvhHI bFyvb uSUVhI hSppIw lwFkDE LbQyH gyBCKkBEB tWVio iwqMD STpud qvLal XdrYq aWdOdpb QVoOks varfAot awksT NswXRL sXPVjt tLsdB rerUz sMtKvoL hBowG SUVWC AZtrE RfzxV ScYmBC pTvYn VqcNs wcopajTKs fuorm SUVWh qJBsc KLmLq QSUVW srcFkI OstdYNm TlKVDA NjDpF GXGTt izAPARADX AHcKb FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS WGmDO ePYqW xwajcC tXLXM BDriuax bquVJ pesRfY vseFcN hEDdG CINxx nXVTg CoIUT MHmOQT jlzzx XhZJJH UDBNX JocbO tEyUuC EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE efjcUjh xYYEe hqWFp wqloG tJgMV XfUQME MEEEEE MEEEEMe TSVWu EPMMtM BUjhZ IgGdq HWSneQj MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE MEEEEE sVvMBM yNyvi lTFYPw LniiC YraWz vnnrn dnmtI MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP mUxBg XlcCB Sujun eqkrTu SOuNY iUMNk SVWeMEEMM RMEEM nKUOP QyDKd hyojve kwBVh xAqnC yNijF HqdVBU psNKj bwhvhq tGyTk EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM eQJrU MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ ccSQa QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS EdKqb VGbzoh kdwkR AwPavp fBmZZ ulkXDDE GoESV aqAzJDA cysfKF ANlzHJ xoDOHl GekNo EfWqw FJfjD UzfsC Atlec joMry GqTdJ EJTiqw uNTosp HJDWc TZqMj uVzXj koJvHD kbDNLZ oynnzSn vciqT whCsHnn HqWCQ CiucV FWhzgUc dojEhc TwSyiR IDTKE AfEwFm WtPPH hYPlc sVlhi fGlRoL AnpwKT NTDIU bHnjZl FaDAhV smCIaA sAsih sgpDu ZcOdybil ZWTfm WMWvQ MUklKy uKfhcW FoFMP oUbgk bfhUa PsZgr bsGOe aALBPVA JnjTi EPveWq DgDuJg uESJLyg dgyAl CZmje lztgC PWdIAv aVkbj qZPBq wBEjuE XaIiUGt CttuJ BCZciK lFECW CYdqX Krhxp oiAzA GLkXk DwXKy GadkMsuqJ yImaz AgrXq CinSRJ oANyI ganDY ucNuL LRUIJH yLgFqR LkvxKC psIgf JsmvM xsELGm BuBju KLWir JGJip lxMVZ wccGx TstvL RLXMb EOAXf HqtIe UOjyk sdEHW KCsdD QAfod doFGI nYqOB TZdMY ilwdw kvOhOt lJNNRCHm fGtCf azcYK LCqZLqQ SphJEZvh MKheq bsYPpkgl oXCTB nIDAa GlNJgj wLJYl pHSXS mwXBd aCPvMi nSjFIw AtmTo VFGCa KVbNw taYYj PxmYn eVrNGGC EHLTz cjXSx EEokho NfVtrK HPJxvV iQKzH LMHGD Vjmuo nKJTd nZBuA HIJHA gPDLTVJ xyInq myfQv fbtzw uVMrQH kdgdbz qSjlH GUTeXeW XEziy gnueDN TwWcR SUVWj BABABA JCLqz JRzCD xPNRNhnKJ gvzdx NHErkC bkqwqlw ryiAJ GJQNU rlcCF vaUAl MnKnc tjgif PQYYt ysNKw uYSWu ooFuZ hIRYy NsyCU EntelE ineIEE GenuE PeuEEEEd QPEPh QPEPh irsPp huZwB MIeUSW PYYug PYYug YYEPV UQQEP ireFcfa ElkETU TKqJzf BWOncgfRHW VUQVu kqDVF VVQYn oMPRrE UQSVu NZuQR BjtmIKS hrvehk HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY uULMw CuiYM csmuP vxayj mUdKv tPtLw PQYYPV Kffxw Ujhxj qSVWT URPQQh USVWj HzjjDLBTqc fLKebe uaHLcr PPPPPy MeEPj YNIRy HhFLr gtxDVUMh WFwqA YiJDDI PcDAfj mXAOc vAXVRbN VWdnf VHoCXn EQPjjM VPuus UQQVu ccbyyb roeQE ILknb gMjKo USVWN QUQSVMWj iCJHY zyFTg jjehO nqWFeI iCJHY Cpsvp zyFTg OWQzeDH SwPXlm WkQza bFtkN ItOLt RdhtJ PDOpSB zcfxn TUQSV jAZjX okGTR UQQVWjgYjGN PQPPESPW jsXfF IyUSVv XDHNK CsQxW UQQVW Wjzrjv huAtB qqGQt umftk YznmL aGfjn VBpcg jLmLpz RPQQE VQuuH uEPEPWSY jpOWZ YPVWSu kPVWSu vnsLn faqpo UmKnF lSjLL daxQNwL WXRBJ XXoQf rwyZv auGlJz fIwzU qhrHOK Vzjgbf zVLEGN FxiRO nrNmB HZkgu WYOfN fgYfEFa uLCnPp DaUNM XPYHF uPuSW EEwPr UEHEu gPRHre UtAoP GKKnH KiTebc lvpzv azyqA pZjYBk paUQQS XfEFhP EPEPk AlVpu TEYhZTf PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu DjddR BgijTP Abebk jvPsv MomQi aVjid GWGJO uBjAYjZ typriNi jAZjZ UQQVWO SVWtdAu oZjAsFq nfysh CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp lUcsm qBeun SCYik rKYYG Hlpzxx coGHu MEEEPu roeQE aOEwFQ RpGUu WpzYP SOGYu PPPPPt PPPPP HLMMQP FJTwJj FsrAN raoFx YYtVWh EWWPb uCYYt uVWTb WWWWWS YtVWj PPPPPPPPU DvTHR GJQQe VSYYt ViOBr IjvuT bJLlb Sqiwz IjNbm EAEfEEj EPQEPEj tdslLuX roeQE AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW agXztr PPPPP PjUHPh PPPPP qdBkh TOGis UQQfE fEEPj roeQE ORGGa wyZCJW hViFJ EGWVj eKvnpq AVguD umsHq nTVOE yhsizY MSVWu MQWPVk zvfvK kmuLOEw tztyD MEEEPu ISUQZA zmDxZY OKMng PPPPPWSu QQQPu VWuSu PPVWPu UWVSM pdwJJ esolr jHQkn twilSkl OVMkd iZnijp iOKXI WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu gkVLS KWesu KemlTSsGgU QPLYYMt nloUWu BLgCEs PimxG KbhNS PixxU SIdoRgF mWIhQ YXnsR GPayL IVZDT ruZSn VUxtkI HNpZr QkKYKW stVgM icLxVuOj EVnYA hGgOt pIRRq PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj nqLWz ueqBT kGTVcU XhwJmYZ GXAfF WxxVL jaRjh OeGTb WvvVL WHtAtVL MbMyc BHasU vxYFyb SfIDk OCyFkW ZqwGS qwYQBWGta TLXIr KnxYO LqRAr PsjZA KEhPa Ubzwfj VAFYUz kpkfg KjhNY UYEYLF dEiDb RnfCY oxpYmjUBNx QQQPu Qtbgbi MEEEPu EEPVYY UMqry cGYem yyran RmKsICe zsfVuY ZwAxy XTsADS EPeuEEEEd csmuu UEcsmE PEEhg VWlCv SUSfE UQQSV pNoMr CBdQOj LaRrX uGrJZ OhiDA ckmin JmfId Iqpyb QpkrI qurdhz nsuhv LyHyC zsROfd PGYDv wnwNt fOvFZF VBQHo blRzp JqQLW slpQO FjgkI yvRwR SShrn oWGtQJ IuLqQ UHyrmYIp QfOZL Sruhq gUdhR dtKpFPoe zKtrgM zHtNjg Spkjp pZALx fsayu hPvkU oxydY Blsks PSqtr TaAUq XLamo lDkEwS cDyCj TJIRm lbCrZjAoy wQotTe kwmmQA PSHUnPpH nuWcM bPnKWpLHg wIGRNFDJ KlBXoe ToxvA mZOIuP bVYpU njtnBMR hLulO apRMw MewTTYJ KwGMy NFtjrqE bkJLM tRejQ teXGG WAlOb lUcQO Tkmas PYdikh GzpHO Ycdgpw FjGyYe eMMrdc oUHze zRMzm sjBQc qxjHWA BCnsMi FWpvQ Unziq AgiQS BfBjay zPnQI AZZYb CBfnF Nebbh UAxrR VLhQs AVRpb RgNtEy MMPPZ irxPh axyjA VEaIvk ZhCzwR NnoSg kWxwCad GPmaR qjxEPD FpBGOCX tbXmXU vbqlx PCPjl lWnAe MSMHqp mkHqp ulxMHy gvGVb hakaXG Coxwk xjibxY xDOCcvCy mQSHFj PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI mzNetUjh uHEPu uEHPo DYPEYPhH mbPjiiSGy pWmsz MuUMEIEPML UMEMd rPagb EEEMEME HnEMI MEEEE ntJETE EPEPM SaHKB YOWms nRcUQQMEM NBrtH GqFsqq AYDzN YUJCd VBlKLmF UtMspR RhuZH UcnWS BAFGq oJLXGyH rpLrr gJjjZ csFSZr BnhpW UlIMXsHb NdiPG lBdTnE KcrKsyM fTZCj pzUxJ VQFaoP tKMqAf shDvMz rJbNW osAfKR zpDyUm AYHRH kBdHv PguGEta YfOEtI rEbYth Cnxwuo WszZx GhHXE fnQrk HwKIq egXue QvZSL dINTT NokOvU EMMUREPMMM EEMUQ kcRBoC UQMEH MMEUE SHOEX qlocR ksRzOc EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU hjepTA dgYha MQMUU UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd ULMEH MUUEEMM UEEMMU nLAZoE HJMKv LmLRVf SblzJ BzsNhgk mLRAA PtOCdF vNapWGA ZCtDb xAMkW qmWWM KzotjH unqat JvlWVokheI ihjkW xaSwocK vFlqy nVSUx SSaeR IbrjPv ctXDJ BxycLl locale uCvoh iostream jTGios badbit failbit AcCeY SQGua VKZqowwK mLRtA rjaLw VaWxGA YZnQwF zftsH aWwoc JrbNmW PXoYskCaI rsemd vzbVR EZEUw JAZkAZd array length unknown error address family supported SLalready connected argument argument domain descriptor message Xconnection already progress device resource directory empty large wfunction supported unreachable willegal sequence inappropriate control operation Xinvalid error directory Xnetwork reset network unreachable buffer space child process message available message Yfjgduwno space device process supported operation supported owner wprotocol error state recoverable files system files qWwrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx VeMLmL MijpAv tESJHrt unKNDO SeIXd dMLia LqsjC jRqCRo QhATo NgWBJ dMLAB cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx Rnlxe LqbBC tikiAPUO RFekELg nkrtR nGJsr XQLOO hqbsC HHzMtK cmNdk nceil floor ldexp hypot frexp SVtMY uBkCl Nlzaw vSUOz cHWed QcMMonday Tuesday XkeWTZ January March April rDecember zpawwHH FddMELO tGKpH dMLAB UdMLYq EnumSystemLocalesEx LCIDToLocaleName NUdML lZoEd kaNeI lGVIrKgY dOMPL YiTaab dOMPL DSmjH qVowr gdfBXNq cKBTq Kzaymq bIodRv mLRrv PuGuL aUSZt LtmYE nyDVf SaKNiK fKBnW RkekN JIgKYK LEOWO gFfEfZjc ZFGhs CJisIc WBdnQ VTDOEV ehwLE SSGjCc vrnCRq DOfvtsRIb gmkCAj kADXT watOs cyvsm Zlmmw pydux GZaCZ XdLkv WDtdihCKw xRLnn zGntH gOqMRD WoQCHTLF LZHJm ContextStackSize ContextPriority SchedulingProtocol nkuVHax ymqbC NLFxtk UHstK ZfUUU usage usage qjccyk nicehash gNcRS rymRR odAgK ATWWD INhgmM Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ qprRM sycKC pBGRl trbNcm RtrKfn JLXCM mNlVez GjPic vRLYD GHpnU QkBsT CDMpy huYdZTI BbnaPRhWz eVOJMkJPkg mwhcC ABCDEF nQqDM dkVEUb KLmLqf vmGFbK wqlow fBXtEU EKoJc pWmGA phUSe GNyycuz lBFfr ohOTPA UldXXO qeewP TeXOJ gDixZ FGuHy yktASn rtPdHeh UfcGT MnKnc LrjauI AazWLGA UwNVl ZtfHf uxbggs kIYlYJ xgAvV mwGES ODJDS MLUkUK tkNeu HMtKv SmJTd ClowfAy yODASn zgUIF XzGLB IvDLNea XnFGz NkqFQquKMj HMtKv eNVcA VmLAxF EHOAjocM TDeDh WGKtrUY AazWLGA aSSwoc Nobim gCUxOA BODwru OgMtl iIaVc CfLKAms qtkwn qigsj vzbVR ccxAr kMiCK cemNz XVGLB DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso XAuthenticAMD XCyrixInstead NexGenDriven RiseRiseRise Geode Geode OPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION Pentium Fieyw Pentium Pentium Pentium Mobile Mobile Celeron Pentium IRWIN awWESTMERE PENTIUM wgCORE MOBILE MOBILE WOLFDALE MEROM wDUAL QUADCORE lPINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF ECANCELED ECONNABORTED EDESTADDRREQ EEXIST sLEINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT cpENOSYS ENOTCONN lENOTEMPTY QIENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN VXENXIO EMLINK EREMOTEIO permission denied qaddress family supported temporary failure permanent failure family supported Mresolved protocol unknown service available socket jKusR connection already progress Nloperation canceled connection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected vKJGY message AaXnetwork unreachable buffer space available device tExnot enough memory machine network space device socket connected directory directory empty sIFprotocol error rresult large system Zkjvhu process lcross device permitted unknown error links wasync event signal unknown error malloc malloc malloc malloc malloc rnqSY QueueUserWorkItem malloc CreateEvent ReleaseSemaphore YCreateEvent CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress YQKKUGZXj GetProcAddress GetProcAddress kernel GetModuleHandleA CreateSymbolicLinkW CancelSynchronousIo powrprof kefLRh todGsocket bclosesocket Missing after object member lMissing object member escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected BrUHfT Syntax error value object array expected UZdkK QLztk Content Length false OJUSkqu okwuz KhilTX YFAEbipw GAVZV hgyyIxy mrqjX lxwYZag cGRVsz OOinkwuSt YecxqAputm ztuzx FrYebI VtjpXwYA QYCOFK YrUMs iHsacbefW FWywP fZwhK SfJZii ZKyOAL aLkdaST jqfHX iUQLcoRU qbmcc PxKlo hfCQb xEQKn Dlnoq FlDfgu JqkyBH FOmbi IKJECl vDLBA qHvgP YRsYM SkquKo fafyxijfhkdanfrzz HMtKv KLmLqf vmGFbK wqlow fBXtryN vADAV yODASn pnlfz MnKncHO AfHbT AazWLGA jpbSX xDOkW YdtfH aSSwoc WAnpV unmDA RQSbF HSzYQ PWLhc kCHSO gfaXW rsemd vzbVR SjqcQ oMiCK DSsdc HMtKv KLmLqf vmGFbK wqlow fBXtryN vADAV yODASn pnlfz MnKncHO AfHbT AazWLGA jpbSX xDOkW YdtfH aSSwoc WAnpV unmDA RQSbF HSzYQ PWLhc kCHSO gfaXW rsemd vzbVR SjqcQ oMiCK DSsdc HMtKv KLmLqf vmGFbK wqlow fBXtryN vADAV yODASn pnlfz MnKncHO AfHbT AazWLGA jpbSX xDOkW YdtfH aSSwoc WAnpV unmDA RQSbF HSzYQ PWLhc kCHSO gfaXW rsemd vzbVR SjqcQ oMiCK DSsdc HMtKv KLmLqf vmGFbK wqlow fBXtryN vADAV yODASn pnlfz MnKncHO AfHbT AazWLGA jpbSX xDOkW YdtfH aSSwoc WAnpV unmDA RQSbF HSzYQ PWLhc kCHSO gfaXW rsemd vzbVR SjqcQ oMiCK DSsdc HMtKv KLmLqf vmGFbK wqlow fBXtryN vADAV yODASn pnlfz MnKncHO AfHbT AazWLGA jpbSX xDOkW YdtfH aSSwoc WAnpV unmDA RQSbF HSzYQ PWLhc kCHSO gfaXW rsemd vzbVR SjqcQ oMiCK DSsdc HMtKv KLmLqf vmGFbK wqlow fBXtryN vADAV yODASn pnlfz MnKncHO AfHbT AazWLGA jpbSX xDOkW YdtfH aSSwoc WAnpV unmDA RQSbF HSzYQ PWLhc kCHSO gfaXW rsemd vzbVR AczsE KLmLf vmFbK wqlow dgIfBXt yODASn vcHbTp AzQaf HkVBCzwO MylFA deqbt QLztk ntzjL UnktMDA PqWaVD WoAxw wnKDy nMXoU fBXtryN UErWD vLKDk yIDSS pnlfz MnKncHO BmLRA azWGAHbq jpbSX xDOkW YdtfH aSSwoc WAnpV unmDA nIiIB rMbdMlmW hFdPnQNK tKcCofSt ykIwJ PiLXa,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj lMaaS wHZuC dNPNnO swwit QIKEK wBNwKJ MNmOoG uqFlsx ertmU hDOXZ ayGWv RSKMZ yrZXh CboZG seZhe ffuew sKULnN nRDKBo GYFqC mZcbT xIukl WYPzQ JyNOP WAmKz VQEDRsF ovQBl mRTJzm asMmd AqzQo KNLpp DwJxF XOhdmPd dsgmjL HRwfv UrgGL GFuyH wsWvh mksFfWTb WmXZQi rhpeUEv gwikgmKS gpIuo nLZTA byCiMW wBkGq zczjm VAPYz SoXChb MovpNj GpiSy HiJib NpmBB rmEogn ebZMy xrkKyG Yrohy yFfibA llIbPqyp xNPpM KPGyU iTWJW HgYZh OXpzI gZmhK YrzAO lUOAea WyLcK MYOdz sGJHxl NYyjE GqTJh asjRr gOKwSp sgiTH ystbkHR CHrGMX CsQkqXt EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl xDZfv BSHioQ kUfIFQY QlICM uAtWx jKEIJs MPYrnYpF GPzLy HiJUHg HTNClKis qkKPmA ytXaVJo PLHsB XIYzM SUYll RpdsyGES bTPHrkPphU sxZqz rUYQC sQuWj RhJXA AJlCp FSVWN zgTnWb WdNmA Jgbtf GAlTK ChYwvn ZgJhX nbMUT rMDLtJ VcmHR PjoIV ZtOEu ktztrJ tPJnQP ukdic IvMCk XIHXVFE dGmVB BLvHSS SdHwp EiYsC Kbjdi ZqsrQ nWLvD NFmLs VsuogGf wSUQSVWf oXyrN fpuxrj VnzSCkOPp IUPlVSpL wPmXRs gmJYgRreK fQNIA mDXdg PHikU FLZlY SVpYPWy xXQqPpD WwHXt fqEQSl VOqfh nmuIs LYyziGQKt HZRzZ xQXrP lVGXVq PtMWGB cddsm GMwYZk YlOUZ PrWtI FzHxp MKgOOSo yDflO qUxvN WiaAf kPMmY HqeddM ueVDB cZWmD YdOMt WFAxtH lKFpO ktiUb EHoeW iChnG ewluy TKNgTd EJTmI STmCv VZdmK lqWJvKEoJ soYBlViv nHeuD zHswc jGHte QUqFPeG TEZjB NXXCO HjMYU yLPAZ NuEyR ldZJh bPeec vIFXN vfkeU fSVQKTk SRLkV dFPJp hAzJrWswEVRF qDjRz lgekV AHMmjq mDQEQ ghppn xZllE EBQZx AfNyN TuaVS ACvhiE ejUEp rqoLs zRbWs DVFdH yiwzl QsiuV IeLpgJk dGsRf TSgei PJSuE tTcqoX OlIjx FxAbLyi poeDFT HcwJs HelnO aZepXJ tVtnt WUwTlm RsEFoDm FjFZB iDbUjh sHFerk dEZfn vheKR FuENTNq ZcvQynX UfgOQb YuNUf lhDtva mvMjGv pqmhp DIkFR DhsaG XbEeB MvCwC lyFDv PBSApj nAnKF TSUVWL VWRPN VWRPq zaEZe lQBSu xkFCt ZWKAZ kSVWhI TpMTItxj bmECw KkNiP PVvwH LSiXYE YyQpv poXybOr sMbnt NwdyN IUebI SgMdz KFAsI hFFBS SUVWT skgRxQwf npjSt pmVch YzSzXt hVVvgc DrCqR cnbjq OFjboJS Wotprse lYhUe HHPLO Rvoev vumWR VwSXZ UZNYG BfYBby cWsdxI ZpsZA WaavBp tzkjS ssIcW FdIyf kiuvAd UtDvJe IpvfynC PSQhSk FxlcF QPWZmdHV RZCNDXlo fHGoBdQ pllhW TyCaUEd fgYNp BrSsR yUKTOtRn eGDrMo TcFXvK smxVp YnpIp DDRgJ QerZS drDRv VbwDcZ jjPrqw AQeTG xsOltd TAOsmE XrWEJ qYwAoJ CUuPPb OaCFf QYAqY mDsXqIL OaVgBlG eUCee fWsgq XqVyl XcJtY bAbdA kVTzd MYULBakeG syjpXIOq WztJqCh HbGwG jnvHC JGmLX nLkVz BjiPwS LrSip QnZaG MKADj iyAaII GbZFU KDpLthN axbkn hALZiA kwLxZM OHhcYj AdblK rleqS kttRZ uReZnS NxDlRf SPPuy PWEgshd AeibI WrWJN UOrSMf Jjmno Weirb dhTNA fonhS VPjLh bFsQw yMoFW ZdoteV JJJPW tfzsu JIbsVA LlnRIp nYXAO qhSkQSo jcmxU hGAxX oJYcE fuhCJA pnmLq ffDwr xPQHRtF NxzLe CrHMk mNCQk BgrDF eKjMz YjhJU Csuhn qzcUPEtP HmOqR RYtwH SIrCQz UAeTnvp ocwhN hpsfb FLZmi fxqJK LjrZlGM xzLvPU sUjIZ aDjtRUt iSJtcz pHTvObp TQWYxvYE yJsRLC wOnvK YPzab SHbXJ pVqyW mFvOtq yMNCN zcWQcTS YzGyALz YIbiW BeOPggrW VnrQc VxSVW oNkTl RlEMZo tvhHI uSUVhI DhSwa HFlYQt IXnYu rBHmkg TLgGoQa LZfKf QfPDDsSLLb UwMyY BHvIi leqAc gjjuqIM HyZTv ggIpNXgvK vihXB ogBdjukX kbcZc nhSwa sXPVjt tLsdB GNKTptQu dVizs BISmcl dCJkLgW SUVWC RXhUWKt evIMK beGEDS TsBorb TiQBS pplAa jZDJc SUVWh MFjOlq YZKMKIq ogGJI QSUVW gRBPbst jbzAchvIOP ZhWOk GXGTt fsWLrT fAfZZUr FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS NyddGbQ gUCPA wbccQ ckojNh GytNaA yaxASo eCdok uCCpJ cejXrI cunDtd ImIoeN WlXKp PBEam rxlsGtuw stdJmLq pbYClm Dtvfb xJLyf ivClJ Eiqnm yBaMJ raNlLI yIUjh EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE UsiJz bLElUjh xYYEe ajeIGX Rtlzv DYMBX yuqTIaaumY UZGMwBD LPCUs BRjSc TnxOK wVlHa MEEEEE MEEEEMe epsQw KtyWa TSVWu EPMMtM sUjhZ mQFhB AHiCNnDkQI CJhLeAER bRdUE jsDRB eirBB MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe rrvxYGfKQ nzUjh EPMEEEE MTVMMHVE MEEEEE JDIaT ngjMLU KYHIO MPKGrQUep KvUGnh fkuDp RQZyXELycZ lXIcX cNLVQF MEEEEE MEEEEE EEEEE qpyOw EMMUU UEEMMU SVWeMM MMUUEE MQUREP pfOIbD eUNON SJaHx SVWeMEEMM RMEEM IxqCmDM wcjOw TKEcueC PYRPc EqBTp wXnfFXSPm GlageR oJrJx RoDsuv Llcvf XPUWUS MwiOb EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE wSUjh EMMUU UREPM MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ ATjBh QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU senKh JvRJj EEMME MMUUEEM SVWeQ EuWuS kJhws zDDnQg qvWUV ZDOhV WVRAdj LzgnQ oBRba hYCfQ owLSf PrHVbl CjTIa EjTcI FHMqJ ZUiYl vbXeN rHzJV SuIKL TZjTd DypnmA RlHTB SnZTE buhZZ pnCKR vidBB BcESyR pIsLI PDpqFy UFGsIg Idzdd rcFxs ESMMt inMXZ gzmXgt bkiopK rOJdj aoadO CUplh fnmJf bqmTg AZxYs ARzCc vgiWe BsfaY cFDhlNF eVgXw xJbxK jOaHsH uXcGpaBzCB jtOQY cHoXB vBRUp FHbDq GSpJUy xkPIPt LtChd PKOcz KcAtc AXWmj EWWMcy pOXWX cjvao ellmtYs LltsnX ZKWNU rLyqZ gdtpq eEeaVM qRtSZ nqedJ GNAxG QcFnCgRL vuQLIZ adYyl rCbDaFf HlcJo VplTGheD TJAwaim Cwinsy aEtHn ZcjhD ZrbeR xVqCt OKRJQP eDMCkS kBpjYkZ GHCmBg PCClc trOoY UISly LSdmFDp sJxOIV oZKiT xGdyN fzKyN NmsaS YdCheOXB WntNZ ztNHTT WHPlM kMnYj agyzk MvrVt okUlhW eRyKV qAWNC TUxOG TlPMd XBKoV OtMyS nFumHj LOAvj IIcsZ KPWlA uGESy rTWjGm ZVgiV DWzCJ qWXAwb ktOem ULNffk MKtcz rLGlFAb CruYm WXZGUf FnWtT eNTVW hVtaq bOvnx ckwQZal tRMuZN mLZuf EkyEB YQzPdYZ Nwjaa wMfaiR ryDrPXURE SUVWj BABABA tOFkh GdfWR vtKgNnO SWxEl pYsEq gpKYu rZTAp seRog UFcra qcWGM PQYYt slqmr ZCPxyj uYSWu EntelE ineIEE GenuE VWXPZ PeuEEEEd QQapqD OuIBk QPEPh QPEPh GkMvbd sZiuG WKVWj PYYug PYYug YYEPV UQQEP DCezfKE HYBeT xzpqQ VVQYn tWtIBi GXHSi hfEkG pJtOQ IroVm VXExmM fjAUQUQSVu kaUVu iAKKl HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY DXnuLh mZHpUh TqUVh HzOWod nMEHBq CuiYM csmuP oJqsB dGAQjQ OQpVf niODU uZYXV tPtLw PQYYPV Ujhxj HEISSVWT URPQQh USVWj QWhuW PPPPPy MeEPj WkMAp qdEjn KQwnu RiNBP flyWn EFwss AVTJscD EQPjjM VPuus RFUQj UQQVu xdILL TaZCfmD USVWN vescw QzDUE UQSVMWj IEaJQHf XDMby tsNnV ItOLt opmUO AaEus GbUdFxScr vGbpX lwnTQ MUQSV jAZjX gSzBeC UQQVWjgYjGN PQPPESPW jsXfF qsUSVv VRSVWF HQvpf UQQVW nISxSqj kDaqD yDPiu VyUEzI HtdqH oyxYV GSMPy yoyUSV jCZXYH RPQQE VQuuH pAhEpDcf uEPEPWSY iQTiy DIzScn YPVWSu kPVWSu LRMyXmC HJBZu bKOlo munfXr IRawP TxocbDv GkquS CITYZ gGDBNv gGFIc igbKS fIQeG YvDTbUQ smguOK RVYxb orSskz qFSzYs XcrEgRV BCuDu uPuSW EEwPr UEHEu pJNMX tUNszV xkwKF yDMmZ nuUQQS XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu beJNyI luHlr MtXxT OEbrK fzxeRo uBjAYjZ upMjz jAZjZ UQQVWO SVWtdAu CWodow tpsUO uYbWP vkFwP CnPNb FqpnO bGImV fiWfg dJTnT wWwAU IUVbKL gzmQMOZ CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp xMubcj LUcsm xrEXA AglUr eDgVMm qtKMLCHI MEEEPu dAEgU ZasgO GdmMo SOGYu PPPPPt PPPPP UYsPw LVkUQs HLMMQP nnemhQY URxQnjp gdgCJy YYtVWh EWWPb uCYYt uVWTb WWWWWS YtVWj PPPPPPPPU VSYYt hMBFM EAEfEEj EPQEPEj dlqBbN AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP SwzRE JZvsjZY ZRPnI BQKMUf tpnGa UQQfE fEEPj Gpswa XcMei EGWVj euLKPX MSVWu MQWPVk MEEEPu pgpkwb UOhDb PPPPPWSu QQQPu VWuSu PPVWPu UWVSM VdlqB RBhGN laPUVu wGYfI JwRyu CasZorz JxLVI JFQMb WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu lbmJSJ CsVSWJzh tpcfJkPi btMGxa MiwXHAgP aJElOF hSYMBX jKGfZ RXcKFZ QPLYYMt muSAO mITUWu AlCaA YidqW UASVC lNCvZuC DXtCFq uHmTsq ETQeP xLohc KxJSn JbECD yVpVHs PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj Brhas ZmAmB IFmDvE lvybTo HdlCt wJLELB wHNWl bZgKeC wDyhH VvCIWc SSDWb jSUKL WxxVL guwAC WvvVL WHtAtVL XVmGb WCuGx YKvwL cPlVbmDR Bjiikhhn kzWIu LnGLy moZQq Zpgotc MDhuFo QQQPu nMBFM MEEEPu EEPVYY ytUuq sqCGF vKAYh nJpVJ xNvsgG QsAJxO XEjpo EPeuEEEEd csmuu UEcsmE PEEhg rDDdKi OuHOuK VWlCv UQQSV YKsIb xDtXX zLHXr KXdbOFwg kySqQ xMNUj gxaQvL LZyBw KZiRBZiz VHWXm npUHq KuRgP zIFpeE FrGTq bXRbT URLEc gIMWcfo pspPZa XyHwio KERxrvXU cQzuy fqoOalU MVdGWck SCRWR lVesI KaGmEg hwTUtH OkOVD FBJdUa kKtBeT zMYKg GylGVp MkpWS sDawA ZtfhA HFwWwS mlkcQ eLjPC GQAfo lXptf cJvpe fsFaP LUVlp cKRSeA SmSCtU GjKadO ERodRG tPJxu VqPCnMD vkTeK PhELqlD ZuqaH CbmrS EHbJoOq fCHPTPfL gjVkh QoncLa CrsAi CmMbt tjhQZ YVvAW ctHqw ioGme afwYUBI vgnplZ wzkrX fvULFd UIrtmo sFvOuy ZgMIys SZvGtU RoVqW mqrzN KSaTu WYIrf bxHRqM hbLFx IkmvbH aileA snlyDH tOvHti yGhJzY xemrZ AkmZB GnGQM fWdOH MxSlY dUFwc hoqTm tmJyV XnfBu PGisQ gkNXw BNAEjf NxtCQ YJAha sGbjUV wSjxEPD fxpAYm kOmlu RMyFb rjrwsM uCRRsMp yfwXD hcEKDXQ VOxixu VHxaVKHJ XpeXEu kmwee ZkgBxp RfIkWfh EuQnrw uODkz hZBhH jmVvo XiyUR BhSUh GqREZYNp euMRr VAcbhea PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH GdQEDS PJpBw jBSXF QjYst KxbcX FWpmd NGsxm MuUMEIEPML UMEMd ZhvXrU DfqCs hEwRe ejBSxF xQRVNd VlSyc EEEMEME HnEMI MEEEE ntJETE EPEPM DHHjq WaQZePUJne mUQQMEM KadOSO DomnA JGEDeU ebHOtS JkNKn HzIPSM vqvxu UOYba MprnCN nvPiva npExXI arevhUU ucrQOG XFota JIUKT Rjghp zLUrs kwWOy OzQCt wFlUk zMseX xwPcc ZsknM owdUC inGuWO DKuxG ctQwUW KoJZV BCNYfj xsxRK nfekfaMKc LMwxUj dvOMZ bpMFg aIdAk QevQS uBwRlUPLy ItVpS zkIwT GjxPb tWcqp zGbROK dvtxyH uFSis EMMUREPMMM EEMUQ JqWZZ ASbQw YPAdZ UQMEH MMEUE xbecG Jghpb EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU QRdSt ZbnhS pyvZV MQMUU XOGfOf aqRMw mbUQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd RpUQME ULMEH MUUEEMM UEEMMU NnSUF WCMDPO AxdGb FpCQGB TxKixmYK vqtqAg AAvFw afBVU nlPrmNe WOTwx OiYhc ERWji GRlXp EFlpsU EWhTJ QuPmi locale xiostream badbit failbit ApeQw tHkwx nQhDt vMDGa AhzVF WIaOOQS titcDg Awrey OHxDw dmSZjm nEHUXh xOrfl DypYv BlMGD xvqZkyL TyikP FUsshsx WWTfJ zRIOek EBCVl gNeZf mhIFez zXhSt RsBaDcx array length Dunknown error address family supported lqalready connected argument argument domain qgtbad descriptor message Fconnection already progress dlqNzPg fhGxG device resource directory empty large function supported unreachable illegal sequence inappropriate control operation BpMFinvalid error directory bpMFnetwork reset network unreachable buffer space child process message available message space device process IVjsd rLQws supported operation supported Yowner protocol error state recoverable DkRstext files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx RsKKD bpMFzQlq RYixc FsXFf NvlzvqJA CTxiUC HzInV bIrNd WtToc YGpMF odlqf YZGspMFwdlqh YGpMF GBpMFwls MFalq MFydlqLe GpMFs lquLkM SmUnE vuKDi YDEMv cdecl stdcall clrcall restrict WjkOs operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable YHjtE placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx QwWLb cEQbQ SexpYuOC TKNCqW zmsBy uttYj RoqqlYC AIMgL nhSWw MBoJc MBoDceil floor Rsldexp hypot frexp JOexp tsinh BKVun qNUqzxJ ZGDyW EnluC YGXMFl YGXMF tMonday Tuesday January tMarch April December ZFkTj YGjMF ufKDCI yDRJT EnumSystemLocalesEx LCIDToLocaleName DJAII Fydlq oLGVM YGfMF BGpMF lINeT xSDKb FrolI eTSUj aZGpMFlI QaYGpMFl pMFvKQl EMnSw dfQWC RxTOFE EMunhS Wfxkt WMWjGV msnkt muOvb vXQJc LtmYE UKUfS RoBwR jeBEzi vktdDj LbIfB ENGhi aUsOFX OfBdR fOwtowHx aDcxv vTbBND Lwrlc fuIrhr GcHOp XrCaa KENRs IFQwY TcLvPz tqKqhY NBRrP zGntH UufeDtRbgY Dskxc RfqGxm RsrETZjFy ouYContextStackSize ContextPriority SchedulingProtocol uKDMc ZfUUU iybxy usage usage WRhzz RsWLY hxOkW VdDiCs uGnztpD TkCBx nicehash RzvRs TBQUE RsWLY eSZZhr Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ ItOLP HdKOT FvZbi JLXCM mNlVez eoFiv PXzYeV nffEFn wOAXn AfLRr BHfZH PtVgIE NEUJV eKsNM DTBan rApdj ojMZyYS KEqSr oKDUHX ABCDEF FSTja ouOMu DKTGa CpzCh wbUEt eSMKj dfWCMD JuyHFO qayKYv raqcCI oOFGrp Hbelc fSehhzK yGEQx MPKqkas ssQKF fPuEN cCwxQ ZlyJyY NcDzXGQiw muBMt BIzXo sWRCS sgUsXj ZmIou Pwaoh avGCx QypwBSA Nllzv OQauWP ApsQwCX dfWCc lHcDu pzWDO afBUE jGdZv rDDaT eSMKj bpMFn YPaeh pqQhD RsfaD xukhsQwC RsfaD RsxaD eSMKa HMDxu rxBKF iKjGCv TvECm sWRCa MMyPAppl FOrfz dOEFx hxihw FsMBGldbY hhRFr muUTO VsuhW vqThM cxEej mmhSC aGTUf FEwluz zgGxN qXzcE YPbMF NiQwqC RsVqm YHbpMF aOfZL pqQhD bpMFB KbpMF YTebpMF YZcbpMF YKbpMF hdlqU DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso pMFAuthenticAMD pMFCyrixInstead NexGenDriven qgLQwRiseRiseRise RsSiS Geode Geode OPTERON PHENOM PHENOM tFUSION FUSION FUSION FUSION RsPentium Pentium YPentium Pentium Mobile Mobile Celeron Pentium tIRWIN WESTMERE PENTIUM tCORE MOBILE tMOBILE WOLFDALE MEROM RsMORE QUADCORE PINEVIEW CEDARVIEW RsCopyright Plauger licensed Dinkumware RIGHTS RESERVED eSMKj Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN CRsEAI AGAIN BADFLAGS RsEAI CANCELED FAMILY VYEAI NONAME RsEAI PROTOCOL SERVICE RsEALREADY EBADF vsoJc ECANCELED tECONNABORTED EDESTADDRREQ EEXIST tZWlqEINVAL YEMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE uYENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY tENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN zDENXIO EMLINK tEREMOTEIO LYpermission denied haddress family supported temporary failure Qwpermanent failure family supported uYNMq Yresolved protocol unknown service available socket connection already progress BFyWH Loperation canceled Qwconnection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected message qFFnetwork unreachable buffer space available device enough memory machine network IMgoyG space device IMsJg socket connected directory directory empty ASprotocol error uYsoL result large system process cross device permitted unknown error links async event Ypoll signal unknown error malloc malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent ReleaseSemaphore ApCreateEvent uTCreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress pERskernel GetModuleHandleA powrprof DXVzkRs uQBsocket tclosesocket DMissing after object member Missing object member rFBad escape sequence string Column additional characters expected parse unicode surrogate jYjBad unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected RsSee Syntax error value object array expected vZmCnR Content Length false GWNaz IhIYo ViyEso pLUDf Jybjd LtSYUmbq oOxrJ KQcme EFNHUA nuNml VfTuo ghGHhZ DAcPTVo dFDCYb PBgsy bimEN zgDwf AWUMMa VhWVP JVBBw YDQHa JMAJM MeFmQ vPnMFidlq OguDzgd DaOfz LtXcb nVeae sElNllzv nSPWK kyRbZ fafyxijfhkdanfrzz eSMKj dfWCMD CQBSl vOtqKg DKTGa afBUE nSPYrmN WtQTo vnJZa kjSUr WsWRC OHxDw RnLvXe uFPwaoh TAnYHl WWTJn qmGmni qQIFz eSSKKO vqThM VOltN gNeZf mhIFez XSaCFF FEwluz eSMKj dfWCMD CQBSl vOtqKg DKTGa afBUE nSPYrmN WtQTo vnJZa kjSUr WsWRC OHxDw RnLvXe uFPwaoh TAnYHl WWTJn qmGmni qQIFz eSSKKO vqThM VOltN gNeZf mhIFez XSaCFF FEwluz eSMKj dfWCMD CQBSl vOtqKg DKTGa afBUE nSPYrmN WtQTo vnJZa kjSUr WsWRC OHxDw RnLvXe uFPwaoh TAnYHl WWTJn qmGmni qQIFz eSSKKO vqThM VOltN gNeZf mhIFez XSaCFF FEwluz eSMKj dfWCMD CQBSl vOtqKg DKTGa afBUE nSPYrmN WtQTo vnJZa kjSUr WsWRC OHxDw RnLvXe uFPwaoh TAnYHl WWTJn qmGmni qQIFz eSSKKO vqThM VOltN gNeZf mhIFez XSaCFF FEwluz eSMKj dfWCMD CQBSl vOtqKg DKTGa afBUE nSPYrmN WtQTo vnJZa kjSUr WsWRC OHxDw RnLvXe uFPwaoh TAnYHl WWTJn qmGmni qQIFz eSSKKO vqThM VOltN gNeZf mhIFez XSaCFF FEwluz eSMKj dfWCMD CQBSl vOtqKg DKTGa afBUE nSPYrmN WtQTo vnJZa kjSUr WsWRC OHxDw RnLvXe uFPwaoh TAnYHl WWTJn qmGmni qQIFz eSSKKO vqThM VOltN gNeZf mhIFez dfWCMD OtqKg flQKFS jAhtF afBUE nSPYrmN beWYS iXXvN AEAlp WtCNz SJmlk IMZuiv KcHMc iDFIY iPPmB CkAaU KxCZD wPagh SgVvNM OtqXY iTPhu nyrUKL CQBSl vOtqKg DKTGa oGqeRo yuZIu kBreEY nSPYrmN WtQTo vynZa WsWRC OHxDw RnLvXe uFPwaoh AfqsSDQ AQFZhu FLRjczR MGuJG VjHpf RDrux KRRciX wUpjsV dXsbXz,1\nprogram cannot IQZIQZIQZZKQZUZKQZ ZHQZZZHQZ ZHQZn ZLQZIPZQZn ZMQZn ZHQZn ZHQZn ZHQZRichIQZ rdata quPQE QVubx EPEPE EPEPE CDGDOH VWEPu EEPEPE EEPXPME WPREP SVWEPE QQSVWee SVWee EPEPEP rMMrMM MXMPMHM false miner Copyright Ufasoft ufasoft Verbose output SOCKS proxy Examples socks options Options scrypt solid seconds hashing algorithm scrypt solid between getwork requests default agent custom agent string header default Ufasoft bitcoin miner disable default index select device Device multiple times default devices intensity Intensity usage default disable Polling default username password server default threads Number threads mining default number Cores disable mining temperature temperature Celsius degrees default Usage ERROR between getwork requests should seconds scrypt solid ERROR Unknown hashing algorithm should scrypt solid Thread number should Device Mining Using threads kHash MHash thread Processed Mhash average MHash Accepted average shares miner BitcoinSha BitcoinSha BitcoinMiner BitcoinSha BitcoinSha QAEAAV BitcoinMiner BitcoinSha OnRoundComplete BitcoinMiner UAEXXZ SetIntensity BitcoinMiner QAEXH UseSse BitcoinMiner,1\nprogram cannot rdata reloc QQSVuV iRcoV mzxtxP oAOCQv PfMkp gTVWt AQBxY zjNaj xFjqG VEEEWPu tpVft PiSCN APNdS uOiVMj tecXmfH qzIqr IjnRl gmoPy wLtRy nDkgm ykZIX nvAiP FbXyx JusyR BzXVE tCivxNB xTJnDw KGPKE HTQLg MKRzY LzoGX HVvta ZWahq SxZbh ACVfYqiV tfzuire XZNKDA RlcaCT TeJdy ylHkP hEGmC tgBGvqz aVsGVHN wrMgw AXLUM KZmCG BqKxeGwlGbk ZFzqu hjIbvhe zgsxc qKtwj chcxIkJp JYHcNT NjSqRV waZXv dIQbE itwuw MjBRTWAr rxHNs TWqpm yUfJXcj gjpCY awGDd zTHPH EFwkvh tuiHsd uLxWm bycdz hGozV zEmmeA yGIjG NdygN TwZFq wQIBLZ lQwMYr NQGwP nGpiy KEfTqF EZyQM xKdLP pxBQG lajJw STgIqI EyWRa gAvPcep YvxgD ucbDti ewGMO frBGpF VMBIg wzirq GfPGH QUAMiBp tAZQjd wGXOZhJ jxPct AxQmXEB cPuzUz NLphfOb MLcXC tVfwIg ySkga qJKITb BXZCG JIxrZ Rnlen xTtEO neNojJ dspAuy DURYYv tzGdr TLodz tEmQcg pmXfHpn BGqNZ kMRsYX kXkgf GpSMR efOkin wfckmAa luJwMmPrd aYsbX tsOxf wHviT fAJNvR hTGMKTN VOqkFO kAXlp yLzkLj uEovM GDfZPYe sKlPQb NuYBN skqQv BSLcj OAqOS jomTcr sxXwXEU PzBYp uyNNkG niOBee PRNKh VcTVi gJIygRoC bFkzH XWTIm tpKjY kwZNNF iTmpW NENdP GkAWT EMEPEP DCQhz OXkRWr CuGGn cvDHY dCbxSO tPOql SGasR ZajueG YreKJla IYMeP WwsuNe WNrJq BnPUO YnbVkh dZVqf Fcyeu FxeELaE wlGFd wHJmW PvyxXm boFsS bRogQ fyZVd FjUJRup qgUMM yGnnVvZ WCxFiQzt CuJwWa WRVNDbQ aPWNL fwwOoKW xcCqa gRnUIY WRPhC hgMgBr EHVLG RCytG Fuwgh IwskkvF eridXU AGRCC mTXQcz qqRLwe StjyNA AVzZHI LOkjG IKiBD SVQMH taJwFF BgWmy NJGPSs TcsAbIU qJxVjc wsiAuuqaI hFraS TctWO OihxAn GrYbo xybJTljfv mrlNI gHYDHDo oIsDbS VHEfW SVWUJE fhkTqMB SMCJts yBYvf IIzgWHu FNFZT OrCQW djNzp AXaYd jzXUB KMvAPUv oQQTD xDKDL UMkqa UITcn JIMTl Wtgcw zqUiIorU JzXEsZHYdr GdZAlj wMJzLTp XyKPIC nixsL qWakyg hjrER cBxYPD KYJAf isCUHR IvSeyr gXNLkG uCPbnjU gCpeU Cfmhd arbKYkvi kYgqL UyFHN hjzOL ffCNx xOpMrI kZhPq cILXm qCwAg XRohNu rktDA JJhphE RUMbQN blzoXxl HCloA AuKsi RQNBr GDMGs zBJHt ZNtLO xRcfq cwACfL Ftykiz FWDLNtZ RPqhv LEWKaPw WijZV KxMDt yOJEOZ NfOmb wQXjNkW ahbZNuT COrDQ bWVzX rjqHx VUQVj qhnSyLjB OdogX kkRWri TMxPK eGHDDH AKNzq bfZctXq FgVmO YXJWH kwQMdM BWAlz cfrVTlWZW dJJCza ZMqLH xJigA hHXWL SmnfU BZBTa bczmgHsZ TsydB GTnAv LSGon RcXKi TeWzN bENIM NdCPmPS pTdvWM SVMWuzj EUMfM kkRWr iywrL uXcqe ymEXsEXed LdNKo AtEVfy ohHCS hwFisC kkRWr FqZgTU CpgfoQgp EApyx ALAPQHQXEA QPATYl AtAxE EIZSa UAaSmI HhQaU Yaujr fGZXT goXUT MSDhz TCZWPkU pQUPg HAhCwC HexfD UmQgrD umSrmK QCDKOGE rEjAU wIFdG OHEvJM mZDkic ziGIV lQibwCq TBXHKwe xVAqp nJlHn ZLwgW heckE qtoMp lzIdO WLuCO TpcjIRf yanoVWoU lvNOy oFCMgJ PHIXf IdzGp Ybllli xfiQeT xQvNI OCmrt TJwwg WXTXY qClAOiR HZdmuF tGdLd WdnpImV gFCPQ WRpXt TpsOj gZtGE XjGwfx LIaSff pHIYr nbaBfP BJfXU CWKVr zsico EyRRB fyZAP CbMqw cZbIh ShOIa fZnYk VsPEq SZjFukw EULXn PnCsZ biKmt jhWQeE wfGbHe VpyNA VnDRTB noOUm wDBfTW EHWqp DkyQk jnyGI ciGPh qnXXwY oemAs XIdDxp BQIMa AWBRDu dJEdZ cPXSU vcxjDL nSSKFh Rjufp kypnRI RlRHh gwQAdjlPQ kkRWr PydHDs KVefmT IhHDg igAJN Rwqvk uuuuUUf EEEEEj XgTet BXwXw ZuNrT UAgQAJm hLnAJW ZVhhRlOq yCbmXBU SJujP MgCet ctOKogkQ DyUsTG ixFCE VLNivMf jSPpzpN eGuUfa CXeZZ AAfqU lYIsZ jOPnlT GFwXWoT PPrUA IqLbim updFe FHJsOylL MfvNzL fXGxs YOWvi eYdow ijRJURf iMAHuD xlwEgy wuhZri YkXJpQ AtBbD jYXxA oWIvh ojPVN kfqPNH XalcTK kuSApI VyNHrzh IZCVP JTrcGv NhXJF udUME EEEEEj UhdME fbgvJ BlkCQ mbHUw rrENPU dNawIMTq zmSDX HcPBrZ MtZijh vKcVO DzdiwJ YUwqPC fIYaq nZcWP WTqbmN AyCFF HlnYkw WrCGMcf ELkPye CfELE GOsKd WCPTEuN XxjwfQ RETMQc ECBXLL ErYQT vmjcqq nKSjzwRQ hpTsq dNsAFz lpGqr WJfQZ ODgYkf sAsOy YRKCy ItXIf sTbPe GmghdyQVf QkXtL FTwEM dfNWB xQNrP xmLijYR ayYpoK MxzXJ baJUY uSVhxL dXeQY eqOUNOX sRGFq ZIngXc Jroiu bjAKZ srQKY XIrtg AXVFt SqGzss BDIrNnA ZJDSWcEU kFvPDiJ jtSVW CnISuQ rzacn fGTGM nILSu vLemX kGVbN kbpNi AUGMw Pbuvey wAAeWF BTCWxTF uSrSoN SmFBa TmIOo ggqSB bnesKzhg kqHDE nAXvv EfqtHN GFZSI biwjSF akzXy FPAdFTA VDrMw TxTVPHP NIooS ESaVx ncuYC wibNY WPSVj QVWht SqxyL PogoP RiCIdHM lQvZZv UfmTJcZ LyFfA EIrNF HaxFRF XcTtz lpWRLqD IblHtyR OXWNQ gtgMuOe ODpdkv bnOfo pDdxl GWFIN oIgjVmq IcnEE pTpWyyh TlDXv dpLjw LFZEi ZgFpq qyDpP GsQfCC GZbqm OgCIzrb MoOZVIs ebppb hldPY ZVEYm HTuJv HZbgAX oaARq dGWRhE MyNLkGJ AwaBDG kkRWr OmlLH MHNbz BQPee DFAYlai mbKvrp gGuZzc Dfrpv mRGvhz AbcQvv djpto pFHyTy ZcafRD GEZtBl HQVufVed QPMkj EPMfG kkRWrUA kkRWrUE FGkgo vKGXw hUQSVWu ZyoNFn hLfjq NeBse EFqhaY OmlUT SVWeMv aUWIuo tacdg OuUSVu VNXdKk HEJuUh JkHVFS wRkJp rLdGtaT ODkff DfHfg tyZdo nrxzp ISLni EbrUV ojgQF iGPXl QjBIL YTzlK ccxIv rCnVMLcV eRyssc JoaTH cORDdN kHlzbgYq cuckJc OmuUyP GsSoF GVWSLTH xWFmcR bPTpE poEBf QoOZk VrfmM JZLywOSwA HIjYXT RyppL byNfs nFaqM oYyRm UxlYM eEVnf Ldfjy qVWlO EcsEgU viYsw ZJgBj NXdFpnM IyTqt pYhYQmTd aaTrXz xZGnS abvFV DvEtwk PjKWu kDEWrK KbSYW IQQuE ZymkNi YtZNm XuNWNb OreQx kaole MbyNkZ iaBwc rbQkA YRVES UYblv qxpjiho HLumdI GKPtY CJrab iDAqa mdJVmL CuFKT pZnVM sOYZQ gokXU Ystjy eoFDAQ qIXkhKQH PBfzn nRucH QlBUq PQYYt dxuTi uYSWu xjQDX EntelE ineIEE GenuE RCnVF ZSTGI PeuEEEEd rRGpU HRCVfz GVuZO eNUSV QPEPh QPEPh qXOZvcin UQQEP UQQSEVP WWuSu tFVSuuu WWVSWu cCBKCfL EVYyMR PvYhI uigVF eguhbZ nUQSE FADQA EPuuu FADQA OZhZO BEgIB jrTczHQNE KXIEC SVWUu tfVUk tLxXj USVWUj UQPXY GTEZg YlUVh TUlpg pvHUVh TUlpgc pORtPPhw dURKc NCJOig mmVWvP EPLYYE CuUYM csmuP ISudWCnV QLGyN UBnyv JWzdm CSVWT URPQQh USVWj EjRXC Hsnst PPPPPy MeEPj DSnTf AuVSYYt FZEKaG oLnsw UCTpMVP oCglV AriRf hhGMT qtsbEE EQPjjM VPuuts tKFnI BUQQVu cCnVL NDfVW vYPgsFwDmf GUoEXt UQSVMWj GRChw FMteT PYZDy pflrhw OodFpN duLpq lZSSa KtHkM fPLNn wEVTk SAOqO MWFlE AbhHhcxX JDJeN WAFyM VsXJs KIyfw sFZsD bLgpa PRLFB OOebQ gEGAw PuEPH RaUqBw xvWWrW uQbIU talKKg wLFOqN oQjUQQE hskeM uvVfSJO gFCDc gDggEv OLnJw jFjlly PEictY vmNCD PrtfA rzIQO LWmfU COPeq FWfPP oAKbbd xkYfOgD QOYIkIPW ySPZP dEnlM TBYODx IWKlH LJszz pmGmD AqZmf YdWSL iHPopYH DEEOO JsOFp vKjCfV fHxPux jEKCb cAKxo PaWki sFGpV ZZJjb bWzwr GXGQJo rlyXZE UXdRE FdVMVI hCAPv MRDjPR pvxWR uPuSW NTFNjX ZOdpK eFITzR DLhxM pWNHR HQrlO loaGCK btLIH XfEFhP EPEPk PPPPPPPPU GedxbQGe tSVWjA jAZjZ jTAiYE FifiDRT hwqmqV LlJCk EcqzU bMcMc OTMvH gXDSLr WILvSFb qRqVWz LVrXg OWsat pItsP HSFzR DqvGb TNTcCb SCtoWO rxhOk Rogxd tfyxj nufmC FbWxt wvHVN rAuWg xchtO spmHZ UQQSVW PPPPPtE pIIPZ BEPVj GqTFA YrKgU ngWnT sMvJQ ZTPevvhB qZIEVE KKnNxn IPVkr CjftxP SmGYu PPPPP PPPPP EEaHkd FLsMe nJHGv PPPPPPPPU YAUnf RyrAioGG FtMlJ XXAdlI DATPr aOmWAUP CsPVW melbb XOmpLD UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS DbQqj gMZsi ZlAcJ SSSSS ikMKy BPxNu oKssn aXsAWC HeZTbR UQQfE fEEPj jDBnN kxQGM KQzdik bXCpkr mRvbEA VNVDN caCiX FCYSS fcXOU mblJG ieJggA CbFDz IQCYB yLapRD wSrfh cCihkf THMtW bFROD MSVWu GwJffQYW QfDLZ KhFUu PPPPPw jxJXL kbfhk kmEiW iYNuMxq BQSiW XVImb UWVSM PgdXmV PJrSmFD ryHxF VfuHq bDTeX WWWPWS NopwJ mowmEQkgR RsrAL yiFRP WTDDU IzpeB rRcJXt trtvh xzXGf yyYmm zlwlg oUgevQE zZOzD JEyXKW RVPXS Ezoed SIxbtT WVgUy IjXUWu qSdVfy Twgct HsNJN dBvWO OESlR zNveN mRpiQ Gqnums TJtLSXtk gelrh XdhDs IQFqnk UQSVu SRCDI dEVGQ LGwia MWHeP HBHeR PpwSNu PrmuI SPJjN EAbBGK qlygS lisCurGt vLVfz NLlxpQsB fcMfO QGkKcS DKGxU vRidu UNTBnp tvVKg xJDOM CcAZfM VAWwC UtvlP vskZz hdnHZ eigzJ rlije VxCelWD RnMnj elNjY USJqT vxtFFn irHcvR SyqIAHz yfdQQ psVnL zzqMp FqHER EcsgT WiNyp WetIW LOiQUx iTPcV uurRtqt QaBqUgh dkwpmq byoar EOSwl vSgQlJxbe PeuEEd kkRWrUjhh EPeuEEEEd csmuu UEcsmE YAUnf KdYez mbkwZ bpXll PEbSJ HfIEt qQjHA UQQSV EXWOKLqOU GIWOLz DBkLX FKWIY AISPMd jxkpa BqOtbOS WujaU VNcGR OsNoXx BriyD FHErU zIMNH IqKMT vfvgz DfEfH QNPjb BzjzAC pTxYi GbyJC OpHeh dVfsvylLs rZPBn Rxtpr oCGCRn dsmkjE NFYOw lSPfz XDIhz mAlYB KyInaey OPibAHE dXivs YrrMS KcICk hNYEV BbNnMZ okaYGygX taIwMEM MTSLs vBtaU UFQjB sWmMyw PruLT hfqpTcSb ImXerp iBICax RWEqEK ozPBjjU CVvLi IqMdB KsJQrx obMfu sDojV xHoYyRm jkorVI GEpAV HwODx QljReS XdpzS UUGjx KvdiD ESWMx SWMLI AFIqM srhFYX AEwNiHlD ThTAV RvDwQwb mrdWPb JNwrl pVihl fgJot uuhYY ZUSWV CXYoI BraMTn dHfJF LgfKjqJI ZvMIh ysrOi bMgwb iEveF cbziQ rgExHbWvSzn dcdmNB pvjWgRG dvBsIh ZWWcFlBpI FUQQV HLYhxA HVwLYY PMPME QcASv UEPMh Lzjyd XWOLz pJvrN NRzef GxGFO rvDmf vNhfo MTZZgX nEOLj NJOHh MfzyiOSFR iktlOP XscGg aaFit QNlne rYOwjyC FwEHNj zzVGJivoB gRAcPZ ZiluY VNIClyB fxxPmCa KmqwyS cKdfp unPUk mRhHX HTXAK zkIMAT eqqTOof SLBfRu MzUwhU FMgMn BOFzlp ehvOzk QyYtC EOgRI YmqwyS cIWmv CrcKp gURru BMlkp WRhHXs ssMDqm MowIA FMuATy vnXiR biySPG notjc VUMgU ORbBl LTJBmPPK DBdyo WFwiM BemRnQ array length fQomVt msNyS gimwj address available already connected argument argument domain descriptor message HvgPSuconnection already progress connection refused connection reset IvsGeU device resource directory empty executable format error exists filename function supported jidentifier removed Finappropriate control operation interrupted invalid error SuUpU network unreachable available message available VWLde smFSuno space device device address stream connected UGnot supported operation canceled operation progress vFoperation supported Fprotocol error WNdgFread system LwzSuqp Hstate recoverable timed files system files symbolic levels wrong protocol DFlsFree gNxgF SeVCb FCreateSemaphoreExW FSetThreadpoolTimer GkiKuyY SetThreadpoolWait CloseThreadpoolWait CreateSymbolicLinkW GetCurrentPackageId CloseThreadpoolWork GetLocaleInfoEx SLINf STMNf SPENf STENf SUVNf BoDOpv BoDUpv BoDwMp BoDSpv MtxGLHD yYJea oltLV DikNw xiOuM cdecl pascal stdcall fastcall wnatS unaligned ooperator typeof vbase destructor vector deleting destructor default constructor closure vector constructor iterator vector destructor iterator local vftable local vftable constructor closure tpUlj dynamic initializer MPoperator Descriptor Class Descriptor Class Array Complete Object Locator kfXhZ WYIDE tAcyfRq XiOEWL FdITm scmHzu INITY msyQs pSuvcLE oatan SujHU hypot ocosh AGoGDb ewjAe oeRYqT dHGedfC BoDTGp BoDWGpv aeurvpVNWed oSunday Wednesday Thursday Friday January February FJuly November December oDWpv pHcxs ZDPMm RoUninitialize EDnan RroUiu FoCuu wjijbEx fBmsU WlJvXj mNySy rnRbTF niiwjl YznuN xJfeA FMvmW cwYAL fUnWK yXDZcK jJeAz iOjKm AeIal JXohS TnXyzZ OteDCbsI GBkXo HoIlr bBcXbx tSHHu Byxrw Ertjb RyahLv RqDUU TnRwP beCNWp HWTlPKNCE ccwCw jVobl VuvDnU nvNGm xRXtgMX wXUHq nAGNY aLgFb EpfpsE DfbNW bKDSL BmlQt xoJMC GpNIv bUoTp lzRnR YFYcK xUYvN MaxConcurrency wjcpV ContextStackSize ContextPriority BZzGlZzd Nsqrt qIGFHdC hsFrS HpCpy average usage usage vknzxMfRC BEXmR hwcRzT gTWTm stratum nicehash NxbZl Buujy diWXz libuv CykRc fhMdRO cIXWyaU cNOHW yuVZx FSnxfVFYz WNvKb onOaU RwbZSx JLXCM mNlVez TCuaB BjHbe BRDgHneP aHzxs BuTMt rrRprr EdRXa tAVDF ZEKID zWBzJ nsSrVv string aApjMlH KbKEX exbss DEONxtSglOT nJNNW hcQXW Yomgp XzbYk IxFWNrh MKjmJBC CHyGL YjyEX bSDXi FEqkn icTST IRQWMh esYUek VuhNyS Butjy iieVC UuNZrsh Yomgp xQunI ErJMrc JogBu eVgWm cEjlBIk dpqLn YvHlz RUpRJ BDpEFi ZAPHU ELjwtv bIJQkG VrwyJ LYfOQ pVyRF uKRdl msnCQs TuNZr DOcKWpN WrLkT TVPEJXQ jJtmPA Loywro iEVBUG kgqWI TFMld lVtkZS odlpv sWRIS mrXWOW AVpwPgJ gAcri ucgNRA iYpTB jSsrh YSMRgXL rJWwC HqIjF FOCfu QKaMdg YMKwn Npncw bbYAw nvYLq ttgZg PgKLJs sSgyW nKgAY OpVBV olUpv oUmpv opUpv opUpv opUpv otUpv otUpv opUpv olUpv opUpv olUpv cjmodme DllInstall ApIyja GenuineIntel AuthenticAMD njYNf NexGenDriven GenuineTMx GenuineTMx CentaurHauls CentaurHauls Geode OPTERON PHENOM PHENOM DFUSION FUSION FUSION FUSION Pentium Pentium FPentium Pentium Pentium Pentium Genuine Intel Genuine Intel Mobile oCeleron Celeron oPentium oIRWIN iCWESTMERE CELERON PENRYN DIAMONDVILLE rMEYoqSk qmqwyS EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT ADDRFAMILY AGAIN BADFLAGS FAMILY NODATA SERVICE EALREADY EBADF oKMJz SuECONNABORTED EDESTADDRREQ FEHOSTUNREACH EISCONN EISDIR EMSGSIZE ENAMETOOLONG DENETUNREACH ENFILE ENOBUFS oENOENT ENOMEM qUENOSPC ENOSYS yVSuENOTSOCK ENOTSUP oSGpv ESHUTDOWN oESRCH ETIMEDOUT oEXDEV EREMOTEIO Fpermission denied address already Faddress family supported gJnkRg Saddress family supported BhpUl Ninvalid value hints kpermanent failure unknown service argument buffer overflow SuppT YgRconnection reset Sufile already exists address system argument unreachable IkpMoU error socket already connected files message euUpU HnRRlA buffer space available device enough memory qSuprotocol available socket connected socket operation socket protocol supported protocol wrong socket jtjSHnmSp cannot after transport endpoint shutdown Ftext cross device permitted xGdURlOJr handle opipe process stream unknown rjzSaE Lerror Unknown error malloc SfaFAaoUgTjSuv malloc gxMdRO CreateEvent QueueUserWorkItem gCreateEvent CreateEvent CreateEvent malloc fJjgF JvGVw WaitForSingleObject ReleaseSemaphore sFlZV malloc CreateEvent CreateEvent Fiphlpapi ntdll GetModuleHandleA FGetProcAddress NZzGp GetProcAddress FGetProcAddress iQwvdnI GetProcAddress CreateSymbolicLinkW CancelIoEx ahfcknI getsockopt closesocket usocket kalupp valid document either array object value Missing after object member NvPnSlGPL number FEmpty escape sequence string escape sequence string VdVfeX Column Iivmq PspEP Location wMyrIK AnmII KBsZB OQqBp hfjri auxonS tSumCG DXSPN hhTRF OfJYC vxOEj SUxOI brtWOZd dIabMfK dQWSl fIfAt EYoQX RHRbCW jtXyN yhSuS Njfrq xqrfhiArwChCpmue qmqwyS ewjAe hcIXW Yomgp BDpEFi uAPHU xvtprk MAFTX QKaMdg tHeVU rRbql UDpnc DiSgH JNDHVBpuf vSbWKgZf WFwiM BemRnQ dwwgc wmcXv PRvYa ooRwHE gBpYu oYmFY GpiDM iunzF AlVinpa lVjAqbQ QklZS xpzkY LNDpj gyZhi KqDIF lEGbQ EVfxf rdQuS iKroDo qsLgo gHOan mhyeWVM guCvQu zYhZd KtgLTii romrJ ZvfMfK JLiBw QHZBa IVUxn eZtBNwb OAAYl mOJvy kHDSa bJQSt yiyAT jqHxW NAewfGO OIWRlR Cedhs sLEcV RVveE PACcmK rqFAc ptDsY Vuidt qGlerht prXGI gHAxxB zZfOq IkBumX UcRnN eLDfm CIoqLyR WpOEn OfccR VdvsK tzjWh MAYSe bfJXXo wDhDAA NuEIV ZnpEVt HMUqr LNQeN KtTcoL oTTIy hHXKZ GwUDx dwdIlr AitRr GXSCn fVtim fnjyB pmwxJ hcIXW AcWZS uORkz MFGHE auKRT qqWhFm xvtprkT ynull huJRtT iKGCDY JtUPlv RDavx arwcnp qmqwyS gcQna waYxfBJ BLUKD hcIdW Yokgp BDpEFi uAPHU xvtprk ZnFon zCOHQ AceRE tdPdS WBFRp UrZVBs PxNwl GVIld xFpBYnz byGjc ZxfCb,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj WjDYa UiBtF OMoKrn DbYYL gsPkJ ZRXPUKGV NEZje RUYfD qtyPXUI ablcuF DAoNmE VQOHo drOLw oBGIV KDUfs AUmqZ ShKxq rWbyU zakXs vbxDU kDKqk QCzJb KymVu CIrby mABpk WZkjVG TZbhW hvtBZ pgwlj skAIy PzIPQJ bOeZi qfhKde MkGyG QaOiQ ROLbp nVtXN Qhicc bNgOk CzsSlO XwwFO pzhwDp dHnuu XOEHalW PvOCkB BrMIQB SUbhV oIZnBU VGiVr Mrizm azdhZ PpiprI KfBwu KVxbFfFC UcaHd WNIOVc QGATc JlyYy QCorn WERxR TepjkmM RZRFE bNyPk AnGuPM xQsznS SIOwr znwxg KhNIg Fjamt lAJUV dfIvIJ acxsO SRfRa ChPlk kFRkiI AOgii svbyp Fsiia EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl PGmhP xmZumPg CAmVaX PEwWk tXOUl pqRgK SIhZvg ipuGU QClZe IIUMLhW rRFGS mEeMJ fGQdR sneVi CpjmV QGUYX SFSvO Eztsd DKavM VJoXXe kKoEg aUkjhfb PbAUW WKgHK xCRoo UGFqfyBMm xUkoV uTvyA ZnyBr RVajX BZcia oiiMs aYtcO DjIOYv wNdwa yAWcfIiQ MADbS McXia bGqgw YNMNj Anlgk sCLnem PGmUQSVWf vTxJL apaVE pwDmG RlWJf VDvhHc EFDXka KjgPWEVX PZMDl SVpYPWy xXQqPpD WwHXt gjNNG xQYIZ cHiNV BJVeT KSLoG WnipX QVKUh pCmwcn unsQMV JYIDx PbwYG aVhGkaW xvXFkO AumCJ SIGsiRh wPJRSo ptefdi GfxQc ZsIqW SuyYdQz GigsR WYWnh EVzpgc xTvLO UtIvzUh JWuFEns KQTcrl XxlwMLiO upqnK DnWILuFR PAOos aqykD TjodyM jJNBQy xFIBIr yAxqhbAz gwZiV uHxuz MDxqv rRDtI RaNOc CDnpk wgoZKLi TFLGO dSOFWyT noexT KHUlG NJPUXrt vNUTU hfAyb XxEaI ofIup YPiAP vVWaAS DqYOW VPhnC kRQcNfT ZpUox yFTmbS lxBYd FyuCX BnNbt dUAbp vsbBjM XZAPm mOWuh GeTjzeYp unvbx QidpY ZwjVZC QVQLedjLw YeTAW YXslZ MJyqv QGUYh wMXQuiSC mmtMr agfiaiJ OTgEZAT XlESb GeDXi OBARs WKVPx mfXMd hOOeqU bfGUl hgzkMuez XwYQc jxcKU YgOafW gUddiF JBrhdJ DUTIcSx nZQXZc TSUVWL VWRPN VWRPq cZWVB SVWhI WjDYa Xymen PSVWh WjDYa ohHHqq bogBQD VJilxZ NVlzJq TDfsq VhNXB zNzUI qMCAy ywUZRI qglmI frYql KnQQS SUVWT qUwke xdkFM DqwbKA iojvK JYLCl YhLYHgG UkPSSZY AfPRT DosVi KKqsGv VMXUi vcnYP pcoqX CFGyhx zFAlsz oimNkhY wMJff oYbWDt EzJRjZN UGUyB EGjJwk GCBvNP UkFKN PwmwI GwOsNn DIOsz bFNlkRBf NppbA NQdYUVKdD gkYOviR NeQizf nMPuPz DYqEM MMXnT nhLTqS kegSV AGEld DNpmJg ZumdNMW JnPLD GDpGlz VZHDS YJwzL rafDk pvKKN BZTmE ILRee dabsQ QaNRb GuUyl ZqIjx SSluj sfIrq FtEza adgFJK LGkXfR FfzaRsBA auBkRyY oudNdU IAaCb rKAek DiQAw eoiYMV YJYzw tOWLY FleCB OOWmQ SqTsUO EjStV HaWmR omfJWSHVS xcDnG QJpzw nqbaB EJuTr lFMnp UrDJjt BHsJZPO oWWJJ zcfVC hQmXz fROzS VnXyLT JOUDeRqJg bRzuW VmEea SNVcn dBbDQ yrdIN haxuL tbKEZH HCMfTL aHWHo tjxGo CdHMj yORBI xrvFA YXPAR YXPAR VPjLh oCvdVx Uojrq GAXHxmXz vcXqu xovvxvcO fEGNk nkrgy SWeijx OkBYwJK bgapHdDtC tmNuQ aQgcu foNeeZf UKaKj DmbjJ IFTxsL ZNsUFS QdAMLy OvSJW OgsGA Bvxrv QmJRo ftiCw vyuVA SeRqO woeeq dOhFE SIZIad aZmMz xSBBoi TbATxE cdNuQz ZDMpY isSVW ZDMpY RkBKt eIBde faBTK UCNFT wxMGz tvhHI dnYga qazpymh uSUVhI QyWEeRU yMyqY oqUEFlK dVndB GLVioAE NEMIN LulHC uXqcS EjitZ gjZQO tzdIF AJLKl dUcUr prFEq NqtPGmF BCkSO sXPVjt tLsdB TfNAB qYnKL CGGkhOB YPiAP SUVWC zaUxD jSlyYEN MqqeYn eWbDa eQeox QBFdZ SUVWh kNwjt wIuGf jnlqS QSUVW nAvAMYCq wQhAw cVRPs ECrqD sNImt hrHpSmL GXGTt NirDi FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS LXzbo tORBx dyVyMK xupRIxsv PyXNu NWmUl tCgsMD cVhjRl Tycwt okKzLS OWZdF XaVZs cwGcOpQX OojPF qAKnJ faIum LOywcHp zKxFT lKDbG vRcyC IQwOiq FcaAG KvPHD bCCDDVgh tyXtQ Ztnij EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE xYYEe ZxrCpW WjDYa qmzdUjh MEEEEE MEEEEMe NViYnqq TSVWu EPMMtM WjDYa OzpQO NLwCyPfUjhZ WjDYa MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe fXOCe EPMEEEE MTVMMHVE WjDYa pxdwgM EUyIz MEEEEE aXUDLoEe iSKvh QMOktLj oGljJVNtW Rfpqcz MEEEEE MEEEEE EEEEE WjDYajcX EMMUU UEEMMU SVWeMM MMUUEE MQUREP INHLn ekHkZ SVWeMEEMM RMEEM WjDYa CrQuHk aVHtK XUYVdY KAwcX kcLZA NAaEN WMpnoW MsJGT czfTJ JPDuyV yOWNf RRGrWv EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE PGmUjh EMMUU UREPM WjDYa ywSjv WjDYajc uuZLU FEhCHxt YPiAP MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ lSgzu kKoEg QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS jlceS jiVUV Rnscq PpfaEN kMAino upJio wdrArFMGD huspM Icfcm SoIHb rgkap fNdOiA QHSaK bMWDEOy sLMpmL WTDAj qCGra efDzE JxyyYZYXuc qINOia oPpJeDos aahyM IhgEfTO ArDMy GCEZq RBWUq PQlknrW VvwAjNu idoWL LyBMPY cPCEh XHWYzs oEkgCG ROqOg ZkLmK ngDTI KkiVuAz xfPAG vKIYD eTJpP Jgkhny iNKzGg FvrzWe Qxrja TGmWAGA PyuqU KJjOH RbJaagv rWPxboTN quwNA SGPhK EmSen TbVwIC xXKwbx fvPiq nNXuHhwO kjOhp kGbbe Yzeot usLMn yqDZCZ LYneez tbszmT uFIFJ CUNJe IMqNV HifFs wuHtN FixFXE VdNYKh jWSBp QsrjR JZPqN dRlwI meBwOt sTaHdd hmxmS mrfeA IWuVNwb adDjV opBjW ndxSy uKkan xeijmjt IMQYZb mCynipG nhWPX KuXlAS RhGhjFRdD ZXtekTRK cZWbYM HzlzdM ZYjtL oRNbob OsShfxS EOKAI VPJrY YPnth rIcSaJu LffAN GwWtD rLeNCbR CTzDW phwlrY qzObjf JxNsn kHyauRR Gwzbo xowlt KUnOxfZxeJd awmra zUdzL mAvIk WiCZk CCEzw esfPS iZQQPC xNxco ptOFp toMaL efYlB VzyMA tdIAT gVIhF awcodU VniVw MhKEg ZiwOH uaTkIM DSbgK CRCnQ JQPnf YiJHKF LnNGh SUVWj BABABA BQvgHc lRPfQ hKGcQ skmSd xTFVj BbGWCJ nIQve PTdMU GkPRl MbnOg YXzrdQ PQYYt uYSWu RFLGa TdDwd fByfik EntelE ineIEE GenuE fMaot PeuEEEEd mOqow UjwJAjQE QPEPh QPEPh kbnSu hCmpWQ PYYug PYYug YYEPV UQQEP JGeUE PKHLv SMUQVu VVQYn UQSVu ynAUVu HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY CuiYM csmuP OQRBju rMWhmo EYaXm YuGmP tPtLw PQYYPV TZicbl Ujhxj ymSVWT URPQQh USVWj PPPPPy MeEPj yaFsu hpWcw qkHnCwy icObd oIfhJ bWBKD wiNQq EQPjjM VPuus OUQQVu ZkWPf KFHov vlQFC uXHtFh vUSVWN wIwyU LUQSVMWj kbIkd axIVX kbIkd UTsuI qrjHV HDUWS nzqXKJ LgKxcJHh fMqqMA ItOLt wlCor fgwpg lnRMT jAZjX VsdZT eUmYw UQQVWjgYjGN PQPPESPW jsXfF niiQDy pUBVMr UQQVW QHcnqvW TKXhC IUQQE GiJVqj jEZWh bzhtFV OCpQX RPQQE VQuuH YCRBp NlfNd HYeGP uEPEPWSY wSDRA YPVWSu kPVWSu ZjjTCJ zsYoh CZSCx PzrtS qnVMzBGR aVItd zApzp lyyjY eGfAQU toxAdsTC HUmlZ uCcFO MGJsOL ZPOfK CqJUe uPuSW EEwPr UEHEu HUWNS sSjOZ qXXCgS AMESm XfEFhP EPEPk AlVpu HcnUVu JuQKE PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu LZCMQ uBjAYjZ jAZjZ UQQVWO BJUgh SVWtdAu mKxRqegr aKUVu yETBW XHNlLWU WMZfkE ziiIC NQmYY pvban ELitO FPjPAzy OHdxEz JhMqZKWb CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp CfuXWeV RxToE GBhWO GfHml uRHmmx qluPhnfLZ mUdTw xiFmnIAk MEEEPu PnemK RdySn BLDhH wLoxA ysDfh UrdYY opgZc bVDqV SOGYu PPPPPt PPPPP HLMMQP YYtVWh EWWPb uCYYt uVWTb WWWWWS PNdeR zkaut YtVWj PPPPPPPPU VSYYt VQYjz xiwzn eoxCwI ccQdl EAEfEEj EPQEPEj kNwuT IcvPR FiHCBOU AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP ZVjvn BGkgki RBjLo UQQfE fEEPj kGcDm XewQF oAQaFk UrdYYUIeNa UrdYY EGWVj OqmWKG rCofIl bJIqAaUY MSVWu MQWPVk MEEEPu klWKh hIiel PPPPPWSu QQQPu VWuSu PPVWPu UWVSM QvPiu LCcLl dwHjyX kjDZs HmxeLUVu HOPoB meqWg QiFlzr WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu PqMbq GWoJb UrdYY UrdYY widGpK fIcYg KxhtT QPLYYMt fgCtp RbwLH ELIlqD zJHtq vxxnEx FdHWVD jSeGz LPtNd cfHfn Byjct DbkRc PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj mCzvh EinJuT kkjYt qLvYv gwuQp vwMcF wSwlu jETJvn JkAFb fwMeF GdNuf WxxVL WvvVL WHtAtVL NMPjf HgFUa vspLl jBOGX yBaQOI lLPFm gFszU zxwiL oDHBt DMtEuD LGiAm QQQPu MEEEPu EEPVYY UrdYY jbqJt aipKu XLDJu LlbTD BZTMb sStyp LqUaKyQ OLTgk aOfbU rsfYw EPeuEEEEd csmuu UEcsmE PEEhg SzhZIm wANRfVm JIlhn Rdwih VWlCv DaqupNS IUQQSV oquEg NKLjF GjwQo uuAHJw cqAnPdu lujmFvQ QffLiA PODwMa HXvzQ eovUO NmkjhMbA OCZFLcLZJ ObTAE kQThz bjPTEeX aIDOUh yoZZs kDBKSS DaDsol sBoqR opubgB kSOHm XkJpdw hKrsP zzuCx TRgpO pRsVn BugIR XmmlZ IWOCa eTyMn nDUWG sOnXd GJOiB bbkpmw OEtHl ElIqG qcfjP vCDaRf QjYbd JhwmN RZkrj RwzwUF tGHDH WvxkP iDxXvKI jvBAGb PjTYd NVLmp SMCpC bvvIJa nWeEb GiXLdEl GBiVP sSzNPTo BluYg lKRtb cyWFrXO eWCvh tqqjqf niZSk aEOEf DzbqftSkK xXWpjlo fKThOi zzPmg emdRk kDAIuu NsvLiC kNnAp QXPag YJuvu eFLMd fhbIE tPoLI AgjYE RzjBs JNYdB brLrvd WqWbe hnVac bwvzy ASJDm qFUpHc OkWTB GQmDK crImt hJJqp czXomi vFtHiK wwNoV XZTAW hdDbd iFGMV OvuLxVFW RMLfpS PGmjxEPD MRJKj gOotZwO fnIaK cEjQM qYNRO cQUdt PCQam EpJZH WMoxO gMXMP DMSMsK byZip fDXLE PdhUt UygRV jxiyz hfhOnt RxENp btHMR TrVCK takgZ YuMAE PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI NoVpONB uHEPu uEHPo DYPEYPhH WjDYa jTIbyi JXcJL LpLxN sPSdW bwUjh MuUMEIEPML UMEMd WjDYa KawoF EUJhh cQgdz EEEMEME HnEMI MEEEE ntJETE EPEPM WjDYa UQQMEM WjDYa Qmood mFHnf lBnAW JGrdO WjDYa WtWXe eBCVt baHJaA fQvEM XVsma YgniL ahZBdJb Lruyk mPWTC zKuBV XQhgY QfaBnvKC BJeisR AZxGK PIORyb UBcKq wPomN MPjzs MRFDy aWqluj DJHLbW XaQrh VPnFA GDMZsp WyfRX ZOCHp iOFZCR jDsEK jBdXt KWFIQq oyUiZb ahpEV cnjUW yaosI lbsAH Sanuln TppHV LVwCGm jwPFp kXNhZo zardn woDJMV EMMUREPMMM EEMUQ UQMEH MMEUE dITAWV EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU JlceS AGkIs PDdjwc Kgkhw vIrAB MQMUU oxvYL NDYaU UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd NUQME WjDYa bUmYZ ULMEH MUUEEMM UEEMMU ObRoLlj IlNuaY KphyT ydwWhG wGRDZZ BDfhO mozPteEX jGJttjLC FJCtz aNlpE wwUQW DFWWR lfbSC Isarny BPcmdD meEQp locale ciostream TlKDYa badbit failbit SMTcEkmG eOcZSX wGxOT RMpWka WnGHw RFaHi TeFEab SjalS Isany SFqBP JUIcRJAm bYxTTg mRqNn array length unknown error address family supported Qalready connected argument argument domain descriptor message connection already progress Ldevice resource directory empty large kfunction supported unreachable illegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device process supported moperation supported nDYaowner kprotocol error state recoverable files system files fzBgwrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx kYjDYas kYjDYav blORO YgDXQ NEeFt fHRacJN TnLog jDYad kYjDYa kjDYa jDYae hChCK bDYas kDYas kYjDYat kDYag kDYae kDYar kDYan jDYas jDYaq jDYas kODYa kgDYab kOGDYae kmDYae kmKDYae kgDYa KDYae kYmDYaK kYmDYa TkkDa KhthC rqLXn efoDIMR Pllosw fxJMCfnhnGS AfnuyS aUXLf hsMZI TnhOc cdecl stdcall clrcall arestrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement gttJW vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx xOahl OXjGO mRHxO EEdEpCx CSdEV tqunF kCfYR SrIip eSfVi hCasin hCsin TGceil floor ldexp hypot hCfrexp UrpeA jDYas kjDYas Monday Tuesday January March April December cEovK XzFfl ROLljL LCIDToLocaleName kjDYa IkYjDYab kDYae jDYae kOKDa kgDba kYDYaK mTMxX fhCCs TMuBE yJmSml zamZt QabJV aKuWW GqTKYxQ LtmYE RLDIF HULdG XHhGc NZrKMj uBRVn PRkXO EYMFD odwKDH lPJOy PERfz JfWHY GRSUW DhAZzA RtdyA pHYfl RnMCmV VTBWwXz dwOhq zGntH hJWkVU ContextPriority SchedulingProtocol qUcJL ZfUUU kjDYa ibxwTT fLhCg jvqpfD Sgcpu usage usage mYage hCfNzx YRaUn nicehash mBroM eFKjZe hCfNzx Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ EQAnh ROhYg QuWqz WLwvp JLXCM mNlVez MFudl CvRTqQ svTgQwip zzvAh uQJoV xrDKJs JxEQu ABCDEF gknnAB oQRGr UEznx Wnzlj mcaClr kjDYa WoPkS NanNv siLYaSiv GxDAR JlRtjKk keVJW kjDYa Xmdgq KrndJVY udgND WTsEqt VedBl ymhbA UyhKu kjDYa HVVpM aCuZUh olrkc kjDYa kjDYa kjDYa qCvXISu Wnzlj oKrnkFs CAhyT wBERZ kjDYa kjDYa vjlMin kjDYa kjDYa kjDYa kjDYa kjDYa kjDYa kjDYa kjDYa kjDYa hNCrr oWrkc MzyjwWt spxqod jrsoF lLciJ WkaBUh keDbGEV imQlgp nzEHgB HwhKu iaxFP ixLjJ NlWCQWbq XhpksC xbBnn tITXOl ypfHlSD RCKWK UicRA ETEUUG gCtoe gdACp MYSCc kjDYa kjDYa jDYaW CAMNP DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso ZYTBFKp AuthenticAMD CyrixInstead NexGenDriven RiseRiseRise Geode Geode hCOPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION Pentium lPentium bLjDYaPentium Pentium CunYe Mobile Mobile Celeron Pentium IRWIN WESTMERE PENTIUM DCORE MOBILE MOBILE WOLFDALE MEROM kDUAL QUADCORE PINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED kjDYa kjDYa kjDYa kjDYa Unknown system error Unknown system error hCEACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN bLMbbW AGAIN BADFLAGS CANCELED FAMILY yYaEAI NONAME PROTOCOL SERVICE EALREADY EBADF hCECANCELED ECONNABORTED EDESTADDRREQ EEXIST BqQEINVAL dDYaEMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE YaENOMEM YCENOPROTOOPT fCENOSYS ENOTCONN ENOTEMPTY ENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN lENXIO EMLINK EREMOTEIO lYapermission denied address family supported temporary failure permanent failure family supported uRresolved protocol unknown service available socket connection already progress operation canceled connection refused connection reset destination address required Zhost unreachable interrupted system invalid argument error socket already connected mnttbJW Lmessage network unreachable buffer space available device enough memory machine network space device socket connected directory directory empty protocol error result large system process cross device permitted unknown error links kasync event mLjDYapoll signal unknown error malloc malloc tGIIb malloc malloc malloc malloc CreateEvent WaitForSingleObject ReleaseSemaphore CreateEvent aCreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress DYaGetProcAddress GetProcAddress LjDYa Tnttb kernel GetModuleHandleA CreateSymbolicLinkW powrprof socket closesocket Missing after object member Missing object member escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected EcJContent Length hCfalse WSOKNGDY QOCYA WSVOLa TTTVu VBOCYA BVLgxD RCAcE YgbIr vYcKbi yZMfDx VkvHG zXDevo uRZap PPVSE DWaYLf bJWQwe SamQMbKQPS FFZCE qGsYY TMYju LRONV WrSvK btuDpr TmfRGV jnOGjJvo wEQUi TPICN RiXjT MEzWdU Ljrgf ovdRFK Ozzzr aNLhim YicHOF fafyxijfhkdanfrzz kjDYa Wnzlj KrnedmcaCY MzyjwWt reiJHI GuHEw HwhKu raxTH tzTeE zjvlK BXaVS HoXKw EYxTu gCtoe fbGjO QpoQhfAyc kjDYa Wnzlj KrnedmcaCY MzyjwWt reiJHI GuHEw HwhKu raxTH tzTeE zjvlK BXaVS HoXKw EYxTu gCtoe fbGjO QpoQhfAyc kjDYa Wnzlj KrnedmcaCY MzyjwWt reiJHI GuHEw HwhKu raxTH tzTeE zjvlK BXaVS HoXKw EYxTu gCtoe fbGjO QpoQhfAyc kjDYa Wnzlj KrnedmcaCY MzyjwWt reiJHI GuHEw HwhKu raxTH tzTeE zjvlK BXaVS HoXKw EYxTu gCtoe fbGjO QpoQhfAyc kjDYa Wnzlj KrnedmcaCY MzyjwWt reiJHI GuHEw HwhKu raxTH tzTeE zjvlK BXaVS HoXKw EYxTu gCtoe fbGjO QpoQhfAyc kjDYa Wnzlj KrnedmcaCY MzyjwWt reiJHI GuHEw HwhKu raxTH tzTeE zjvlK BXaVS HoXKw EYxTu gCtoe fbGjO vjDYa oKrnSd JcaCY zKpAhyT HNbLgvU RhnOz wujSPoSq YTBRk bVNFB uryfb kjDYa PAMCU MofVsXy Wnzlj kKvDP MzyjwWt zOmcUXr reiJHI GuHEw HwhKu raxTH tzTeE zjvlK BXaVS fpbSC BOmYQ PKcaG mhOuy UoDtl DcQGK MBLEa,1\nprogram cannot reloc lSystem Resources ResourceReader mscorlib Version Culture neutral PublicKeyToken System Resources RuntimeResourceSet PADPADPNV CCLqVa Copyright Colin Percival ArtForz pooler mtrlt Kolivas Alexey Karimov rights reserved Redistribution source binary forms without modification permitted provided following conditions Redistributions source retain above copyright notice conditions following disclaimer Redistributions binary reproduce above copyright notice conditions following disclaimer documentation other materials provided distribution SOFTWARE PROVIDED AUTHOR CONTRIBUTORS EXPRESS IMPLIED WARRANTIES INCLUDING LIMITED IMPLIED WARRANTIES MERCHANTABILITY FITNESS PARTICULAR PURPOSE DISCLAIMED EVENT SHALL AUTHOR CONTRIBUTORS LIABLE DIRECT INDIRECT INCIDENTAL SPECIAL EXEMPLARY CONSEQUENTIAL DAMAGES INCLUDING LIMITED PROCUREMENT SUBSTITUTE GOODS SERVICES PROFITS BUSINESS INTERRUPTION HOWEVER CAUSED THEORY LIABILITY WHETHER CONTRACT STRICT LIABILITY INCLUDING NEGLIGENCE OTHERWISE ARISING SOFTWARE ADVISED POSSIBILITY DAMAGE originally written Colin Percival Tarsnap online backup system constant constant fbcfU xefbe befffaU define rotate define bitselect define define EndianSwap define define define define define restrict state restrict state const block const block const block const block state state define define define define define define define define block block block block block block block block block block block block block block block block undef undef undef undef undef undef undef undef state state fresh restrict state restrict state const block const block const block const block define state define state define state define state define state define state define state define state block block block block block block block block block block block block block block block block undef undef undef undef undef undef undef undef state state constant fixedW edcbf fixed restrict state restrict state state state define define define define define define define define fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW undef undef undef undef undef undef undef undef state state shittify pragma unroll EndianSwap pragma unroll EndianSwap unshittify pragma unroll EndianSwap pragma unroll EndianSwap salsa pragma unroll pragma unroll pragma unroll pragma unroll pragma unroll scrypt global restrict lookup shittify const zSIZE const xSIZE CONCURRENT THREADS global xSIZE xSIZE LOOKUP pragma unroll zSIZE lookup LOOKUP salsa LOOKUP LOOKUP LOOKUP LOOKUP LOOKUP xSIZE pragma unroll zSIZE lookup LOOKUP salsa endif LOOKUP xSIZE zSIZE lookup LOOKUP LOOKUP salsa LOOKUP salsa endif pragma unroll zSIZE salsa unshittify define FOUND define SETFOUND Xnonce output output FOUND Xnonce attribute group WORKSIZE kernel search global const restrict input volatile global restrict output global restrict padcache const midstate const midstate const target global tstate tstate ostate ostate input input input midstate midstate fresh ostate ostate fresh tstate tstate tstate tstate tstate tstate input input input input pragma unroll tstate tstate ostate ostate scrypt padcache fixed ostate ostate result EndianSwap ostate target result SETFOUND Copyright Colin Percival ArtForz pooler mtrlt Kolivas Alexey Karimov rights reserved Redistribution source binary forms without modification permitted provided following conditions Redistributions source retain above copyright notice conditions following disclaimer Redistributions binary reproduce above copyright notice conditions following disclaimer documentation other materials provided distribution SOFTWARE PROVIDED AUTHOR CONTRIBUTORS EXPRESS IMPLIED WARRANTIES INCLUDING LIMITED IMPLIED WARRANTIES MERCHANTABILITY FITNESS PARTICULAR PURPOSE DISCLAIMED EVENT SHALL AUTHOR CONTRIBUTORS LIABLE DIRECT INDIRECT INCIDENTAL SPECIAL EXEMPLARY CONSEQUENTIAL DAMAGES INCLUDING LIMITED PROCUREMENT SUBSTITUTE GOODS SERVICES PROFITS BUSINESS INTERRUPTION HOWEVER CAUSED THEORY LIABILITY WHETHER CONTRACT STRICT LIABILITY INCLUDING NEGLIGENCE OTHERWISE ARISING SOFTWARE ADVISED POSSIBILITY DAMAGE originally written Colin Percival Tarsnap online backup system constant constant fbcfU xefbe befffaU define rotate define bitselect define define EndianSwap define define define define define restrict state restrict state const block const block const block const block state state define define define define define define define define block block block block block block block block block block block block block block block block undef undef undef undef undef undef undef undef state state fresh restrict state restrict state const block const block const block const block define state define state define state define state define state define state define state define state block block block block block block block block block block block block block block block block undef undef undef undef undef undef undef undef state state constant fixedW edcbf fixed restrict state restrict state state state define define define define define define define define fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW undef undef undef undef undef undef undef undef state state shittify pragma unroll EndianSwap pragma unroll EndianSwap unshittify pragma unroll EndianSwap pragma unroll EndianSwap salsa pragma unroll pragma unroll pragma unroll pragma unroll pragma unroll scrypt global restrict lookup shittify const zSIZE const xSIZE CONCURRENT THREADS global xSIZE xSIZE LOOKUP pragma unroll zSIZE lookup LOOKUP salsa LOOKUP LOOKUP LOOKUP LOOKUP LOOKUP pragma unroll zSIZE lookup LOOKUP salsa endif LOOKUP pragma unroll zSIZE lookup LOOKUP LOOKUP salsa LOOKUP salsa endif pragma unroll zSIZE salsa unshittify define FOUND define SETFOUND Xnonce output output FOUND Xnonce attribute group WORKSIZE kernel search global const restrict input volatile global restrict output global restrict padcache const midstate const midstate const target global tstate tstate ostate ostate input input input midstate midstate fresh ostate ostate fresh tstate tstate tstate tstate tstate tstate input input input input pragma unroll tstate tstate ostate ostate scrypt padcache fixed ostate ostate result EndianSwap ostate target result SETFOUND Copyright Colin Percival ArtForz pooler mtrlt Kolivas rights reserved Redistribution source binary forms without modification permitted provided following conditions Redistributions source retain above copyright notice conditions following disclaimer Redistributions binary reproduce above copyright notice conditions following disclaimer documentation other materials provided distribution SOFTWARE PROVIDED AUTHOR CONTRIBUTORS EXPRESS IMPLIED WARRANTIES INCLUDING LIMITED IMPLIED WARRANTIES MERCHANTABILITY FITNESS PARTICULAR PURPOSE DISCLAIMED EVENT SHALL AUTHOR CONTRIBUTORS LIABLE DIRECT INDIRECT INCIDENTAL SPECIAL EXEMPLARY CONSEQUENTIAL DAMAGES INCLUDING LIMITED PROCUREMENT SUBSTITUTE GOODS SERVICES PROFITS BUSINESS INTERRUPTION HOWEVER CAUSED THEORY LIABILITY WHETHER CONTRACT STRICT LIABILITY INCLUDING NEGLIGENCE OTHERWISE ARISING SOFTWARE ADVISED POSSIBILITY DAMAGE originally written Colin Percival Tarsnap online backup system constant constant fbcfU xefbe befffaU define rotate define bitselect define define EndianSwap define define define define define restrict state restrict state const block const block const block const block state state define define define define define define define define block block block block block block block block block block block block block block block block undef undef undef undef undef undef undef undef state state fresh restrict state restrict state const block const block const block const block define state define state define state define state define state define state define state define state block block block block block block block block block block block block block block block block undef undef undef undef undef undef undef undef state state constant fixedW edcbf fixed restrict state restrict state state state define define define define define define define define fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW undef undef undef undef undef undef undef undef state state shittify pragma unroll EndianSwap pragma unroll EndianSwap unshittify pragma unroll EndianSwap pragma unroll EndianSwap salsa pragma unroll pragma unroll pragma unroll pragma unroll pragma unroll define Coord define Coord scrypt global restrict lookup shittify const zSIZE const ySIZE LOOKUP LOOKUP const xSIZE CONCURRENT THREADS global xSIZE LOOKUP pragma unroll zSIZE lookup LOOKUP salsa LOOKUP LOOKUP LOOKUP LOOKUP LOOKUP pragma unroll zSIZE lookup LOOKUP salsa endif LOOKUP pragma unroll zSIZE lookup LOOKUP LOOKUP salsa LOOKUP salsa endif pragma unroll zSIZE salsa unshittify define FOUND define SETFOUND Xnonce output output FOUND Xnonce attribute group WORKSIZE kernel search global const restrict input volatile global restrict output global restrict padcache const midstate const midstate const target global tstate tstate ostate ostate input input input midstate midstate fresh ostate ostate fresh tstate tstate tstate tstate tstate tstate input input input input pragma unroll tstate tstate ostate ostate scrypt padcache fixed ostate ostate result EndianSwap ostate target result SETFOUND program cannot rdata framx edata idata reloc SUWVS toCHt fUWVS UWVSL UWVSL PUWVS fUWVS UWVSLH fUWVS cfUWVS UWVSl tFzHz fUWVS fUWVS mfUWVS VfWVS UWVSL fUWVS fUWVS UWVSL xLxHL UWVSL CPSTC CPCTC kfSPCT CPSTC fUWVS tHJTt UWVSLt yUWVS fUWVS UWVSL UWVSL UWVSL UWVSL UWVSL EUWVS kfUWVS fUWVS fUWVS NPnTL kfUWVS CPCTD GfUWVSL fUWVS PUWVS CHCLC fUWVS gUWVSL UWVSlD JfVSTt UWVSP tENut fUWVSL UWVSL fUWVSLD fUWVS EpUtD MUpMtT UpMtT UWVSLl dJUWVS tfWVS kPSTL UWVSL fUWVS fUWVS tCEPD GNGNC cxfCH fUWVS twCDtXD DIuJD fUWVS HtVtRtND kUWVS fUWVS fUWVSl uBtgD jfWVS zfUWVS NfWVS SPKTT uUWVS kUWVS OUWVS HUWVS UWVSL fUWVS kfUWVS kNfpf kBfEc kRfUWVS knfDi tFFHt RfUWVSl TtXBT fUWVS tOWHt tIHuD fUWVS QtApQtD tBtfD jaUWVS XtkHtN CPCTC CPSTD CPSTD SPCTT ffWVS UWVSQl UWVSVt ufUWVS fUWVS tZtbD UWVSL UWVSLT FPFTD uffUWVS UWVSL GPGTD UWVSL UWVSL kfUWVSLt CPCTD UWVSL UWVSl DUWVS tUWVS UWVSL UWVSl fUWVS fUWVS ApQtAPQT UWVSL fUWVS fUWVS kOtND kUWVS kUWVS UWVSL fUWVS fWVSp fUWVS UWVSl IauthD fUWVS fUWVS fUWVS EDUHPD UWVSl ZOtUS WVSLD FCMEuE ofUWVS UWVSL UWVSP fUWVS kWVSL cfUWVS WVSlu EtDuU UWVSL UWVSl kIUWVS Htmtut TUWVS UWVSl UWVSL UWVSLl UWVSl UWVSL fUWVS RHJPt UWVSl utMPD fUWVS RHrPt RHJPt UWVSL wHCxt UWVSLl UWVSl fUWVS FUWVS fUWVS UWVSL UWVSL oHGTuT UWVSLt FlbFmD UWVSL oHGht GHhPt bQUWVS SHJPt vfUWVS pfWVS SHJPt CHPPt SHJPt SHJPt fUWVS TfWVS ufUWVS SHJPt KHQPt CHHPt KHQPt SHJPt UWVSLt tLuhl KHQPt fUWVS SHJPt zCHPP UWVSl UWVSl UWVSL UWVSL UWVSL UWVSl UWVSL fWVSD UWVSLD TfWVS fgfUWVSL fUWVSLl kfUWVS UWVSLl fUWVS fUWVS UWVSl fUWVSLl UWVSL yPtYD UWVSS fUWVSLt wfUWVS fUWVS fWVSD fUWVS fUWVS UWVSLl EUWVS fUWVSL UWVSL fUWVS UWVSl sHMdEd eDgCH CHCTC yjftp fUWVS udCtO gfUWVS udCtO gfUWVS ufCtQ sfUWVS bCDWfUWVS DUWVS UWVSL UWVSLt UWVSLt kgUWVS UWVSL kUWVS rktuD kUWVSL fUWVSLD uNfUWVS Ggfff fUWVSL UWVSL UWVSL fUWVSl gfffD EGgfff PEtuE kEtJE fUWVS OkWVS fUWVS fUWVSl fUWVS UWVSLt UWVSL libgcc register frame libgcj RegisterClasses deregister frame Couldn writing Content Length Accept ranges bytes Modified failed resume transfer Hostname sfound cache Hostname cache stale zapped Resolve found illegal Added cache kCallback aborted Resuming transfer position Total Received Xferd Average Speed Current Dload Upload Total Spent Speed filename application octet stream kContent multipart boundary Content Disposition Content multipart mixed boundary Content Disposition attachment Content couldn image image plain application FALSE unknown HttpOnly Replaced Added secure httponly domain skipped cookie tailmatch domain version expires cookie domain expire knone Cookie Netscape Cookie cookies generated libcurl Fatal libcurl error WARNING failed cookies Rewind stream after close instead sending bytes Empty reply server Avoided giant realloc header Failed alloc memory header Proxy Basic Proxy Server Digest Negotiate Proxy authorization Authorization sAuthorization Basic using requested returned error Negotiate Authentication problem Ignoring Ignoring duplicate digest header continue Expect Expect continue Content Content Length Connection Invalid TIMEVALUE Modified Since Unmodified Since Modified Transfer Encoding chunked Accept Proxy Connection Alive Agent Referer Referer Cookie Accept Encoding Accept Encoding Transfer Encoding Connection Connection chunked Accept Could stream Could bytes input already completely uploaded Range bytes Content Range Content Range bytes Content Range bytes Content Range bytes Proxy Connection Cookie Content Length Failed sending request Internal error Content Length Content Length Could Content header Failed sending request Content application urlencoded Failed sending request Failed sending request upload completely bytes Chunky upload supported Range chunk close Assume close signal sending tossed error before sending requested returned error assume close after Maximum exceeded Negative content length closing after transfer Server alive proxy connection alive close proxy connection close connection alive identity deflate compress compress Content Encoding Cookie Modified Authenticate Proxy authenticate Location HTTPS Failed writing Failed writing header failure failure kHeader Failure sending command Maximum exceeded server doesn support Offset beyond already completely downloaded Instructs server resume offset Connect stream passively Could stream Failed already completely uploaded getsockname failed failed resolve address provided local address failed failed failed ports socket failure Failure sending command Failure sending command Error accept server connect Connection accepted server Doing handshake stream memory Uploading without Request previous transfer requested available Access denied Failed attempt Disabling Illegal number reply Weirdly formatted reply Couldn interpret response Skips connection instead response resolve proxy resolve Connecting response timeout response aborted select error timeout Checking server connect Accept timeout occurred while waiting server connect There negative response cache while connect Error while waiting server connect Ready accept connection server while waiting Preparing accepting server Connection proxy confirmed unknown proxytype option given server response expected unsupported parameter CURLOPT FTPSSLAUTH rejected server Failed clear command channel Entry Failed figure NAMEFMT command failed Server denied change given directory Failed Modified unsupported reply format Given exist requested document enough requested document enough Skipping comparison Couldn desired response instead assumed Content Length Couldn command accepted disabling usage Failed Connect stream actively bytes Maxdownload Getting available immediately Failed upload response Accept ranges bytes kWildcard Parsing started Wildcard START Wildcard skipped perform SECONDARY kRemembering Failure sending command control connection looks partial download completed closing connection server report Uploaded unaligned bytes Received partial bytes received string accepted kFTPS Input domain encoded Failed convert WARNING WARNING check failed BUNDLE deflate FLUSH Cookie CURLOPT VERIFYHOST longer supports value Closing connection addHandleToPipeline length Connected Agent malformed Rebuilt Invalid address format Protocol supported disabled libcurl memory shortage proxy PROXY proxy proxy proxy PROXY socks socks socks socks socks abcdefABCDEF number large Couldn netrc using defaults anonymous example Found bundle Server doesn support pipelining Connection seems Connection still resolving reuse Connection enough reuse Found connection requests reuse connection anyway using existing connection connections available Couldn resolve Couldn resolve proxy Connection cache closing oldest Connection intact protocol default MATCH lookup missing CLIENT libcurl MATCH Failed sending request DEFINE LOOKUP CLIENT libcurl DEFINE CLIENT libcurl Operation bytes transferred seconds Microsoft Corporation local Vendor Version local onetree subtree local local Cannot connect local simple remote binary There entries cleartext local trying establish connection encrypted Error Client hello Client Client finished Server hello Server verify Server finished Request Client Hello request Server exchange Client exchange verify Finished Unknown alert handshake change cipher Unknown write returned SYSCALL errno write error write return error errno Signature Signature critical Certificate chain Subject Subject Issuer Issuer Version Version Serial Number Serial Number Serial Number Start Start Expire Expire Unable public Public Public couldn certificate Server certificate subject start expire subjectAltName matched subjectAltName match alternative certificate subject matches target ssluse illegal field unable obtain common certificate certificate subject match target common matched couldn issuer issuer Unable issuer Unable issuer Certificate issuer check failed certificate issuer check certificate verify result certificate verify result continuing anyway certificate verify Signature Algorithm Signature Algorithm Public Algorithm Public Algorithm libcurl using random certificate problem verify connection timeout OpenSSL built without support couldn create context couldn callback couldn callback argument Unsupported protocol version unable client certificate found wrong phrase engine support loading certificates engine cannot client engine initialized certificate properly unable client certificate crypto engine certificate could error reading could parse check password OpenSSL error unable private private match certificate cannot certificate certificate chain cannot certificate client supported certificate unable private interface unable create OpenSSL interface method failed private crypto engine unable private crypto engine private private supported supported private unable create structure Private match certificate public failed setting cipher error setting certificate verify locations CAfile CApath error setting certificate verify locations continuing anyway successfully certificate verify locations CAfile CApath error loading successfully CRLfile error signaled callback couldn create context handle WARNING failed configure server indication extension session failed using session failed select socket errno certificate problem Unknown protocol error connection connection using session stale removing failed store session Engine found Failed initialise Engine default crypto engine default crypto engine failed ERROR ERROR WRITE shutdown timeout OpenSSL libcurl libidn libssh librtmp libssh gopher https imaps smtps telnet EXOPL Sending failed terminated Empty suboption unsupported unknown Width Height REPLY TTYPE XDISPLOC Syntax error telnet option BINARY Unknown telnet option WSAStartup failed insufficient winsock version support telnet failed WSACreateEvent failed WSACreateEvent function WSACloseEvent failed WSACloseEvent function WSAEventSelect failed WSAEventSelect function failed function WSACreateEvent failed failed SUBOPTION processing WSACloseEvent failed FreeLibrary wsock failed kTELNET SUPPRESS AHEAD STATUS TIMING NAOCRD NAOHTS NAOHTD NAOFFD NAOVTS NAOVTD NAOLFD EXTEND ASCII LOGOUT MACRO TERMINAL SUPDUP SUPDUP OUTPUT LOCATION RECORD TACACS OUTPUT MARKING TTYLOC REGIME SPEED LFLOW LINEMODE ENVIRON AUTHENTICATION ENCRYPT ENVIRON ABORT DMARK machine login password netrc operation aborted callback function returned funny value callback returned error ioctl callback returned ioctl callback returned error necessary rewind possible requested document enough requested document enough select returned error Rewinding stream bytes length Excess found pipelined excess length Ignoring response server doesn support ranges Cannot resume Simulate response Failed writing Problem Chunked Encoded Leftovers after chunking bytes Rewinding bytes Rewinding stream bytes maxdownload bytecount nread Excess found pipelined excess maxdownload bytecount Unrecognized content encoding libcurl understands identity deflate content encodings reading close Failed alloc scratch buffer completely uploaded waiting continue Operation timed after milliseconds bytes received Operation timed after milliseconds bytes received transfer closed bytes remaining transfer closed outstanding remaining Maximum redirects followed Issue another request Violate switch Violate switch Disables connection seems Connection retrying fresh connect CHARSET CHARSET handled already multi handle CONNECT required Failed recent socket alnum alpha xdigit print graph space blank upper lower digit total kUnrecognized content encoding libcurl understands identity deflate content encodings kgetpeername failed errno getsockname failed errno ssrem failed errno ssloc failed errno failed errno Trying Could NODELAY NODELAY Failed KEEPALIVE Failed KEEPALIVE Couldn interface Local Interface using address family family resolved family Local local failed trying failed errno Immediate connect Couldn Connection After connect Connection failed connect failed Failed connect kCurl Internal error clearing splay Internal error removing splay broke handle state Resolving timed after milliseconds Connection timed after milliseconds Operation timed after milliseconds bytes received Error while processing content unencoding Error while processing content unencoding Unknown failure within decompression software Digest nonce stale realm opaque algorithm Proxy sAuthorization Digest username realm nonce cnonce response sAuthorization Digest username realm nonce response opaque algorithm Unknown error CURLSHcode unknown interrupted access argument Invalid arguments descriptors would block Blocking progress Descriptor socket destination address message protocol Protocol option unsupported Protocol unsupported Socket unsupported Operation supported Address family supported Protocol family supported Address already Address available Network Network unreachable Network reset Connection aborted Connection reset buffer space Socket already connected Socket connected Socket references Timed Connection refused unreachable empty Process limit reached users quota Something stale Remote error Disconnected Winsock library ready Winsock library initialised Winsock version supported found found again Unrecoverable error nameserver record requested Unknown error dlopen error Allocation failed Locale conversion failed Already prefix Round verify error prefix Invalid output length Contains minus Illegal ASCII characters Error Punycode operation Error string preparation error error SIGNATURE NEEDED RENEGOTIATE CONTEXT LOCAL LOGON INCOMPLETE CREDENTIALS CONTINUE NEEDED CONTEXT EXPIRED COMPLETE NEEDED COMPLETE CONTINUE WRONG PRINCIPAL WRONG CREDENTIAL HANDLE UNTRUSTED UNSUPPORTED PREAUTH UNSUPPORTED FUNCTION UNKNOWN CREDENTIALS UNFINISHED CONTEXT DELETED PRINCIPALS TARGET UNKNOWN STRONG CRYPTO SUPPORTED SMARTCARD LOGON REQUIRED SMARTCARD REVOKED SMARTCARD EXPIRED SHUTDOWN PROGRESS SECURITY FAILED SECPKG FOUND REVOCATION OFFLINE REVOCATION OFFLINE SUPPORTED POLICY PKINIT MISMATCH PKINIT CLIENT FAILURE SEQUENCE REPLY SUPPORT ADDRESSES IMPERSONATION CREDENTIALS AUTHENTICATING AUTHORITY OWNER MULTIPLE ACCOUNTS MESSAGE ALTERED REFERRALS EXCEEDED LOGON DENIED UNKNOWN ETYPE UNABLE REFER INVALID REQUEST REVOKED EXPIRED ISSUING UNTRUSTED ISSUING UNTRUSTED INVALID TOKEN INVALID PARAMETER INVALID HANDLE INTERNAL ERROR INSUFFICIENT MEMORY INCOMPLETE MESSAGE INCOMPLETE CREDENTIALS ILLEGAL MESSAGE ENCRYPT FAILURE DOWNGRADE DETECTED DELEGATION REQUIRED DELEGATION POLICY DECRYPT FAILURE CRYPTO SYSTEM INVALID CROSSREALM DELEGATION FAILURE CONTEXT EXPIRED WRONG USAGE UNKNOWN EXPIRED CANNOT CANNOT INSTALL BUFFER SMALL PKGID BINDINGS ALGORITHM MISMATCH Unsupported protocol Failed initialization using illegal format missing requested feature protocol option found built libcurl build decision Couldn resolve proxy Couldn resolve Couldn connect server weird server reply Access denied remote resource server failed connect unknown reply Accepting server connect timed unknown reply unknown response format figure response couldn Transferred partial couldn retrieve failed specified Quote command returned error response error Failed writing received application Upload failed start before Failed local application memory Timeout reached command failed command failed Requested range delivered server Internal problem setting connect error Couldn resume download Couldn cannot search failed required function library found Operation aborted application callback libcurl function given argument Failed binding local connection Number redirects maximum amount unknown option passed libcurl Malformed telnet option certificate remote Server returned nothing headers crypto engine found crypto engine default Failed sending Failure receiving Problem local certificate Couldn specified cipher certificate cannot authenticated given certificates Unrecognized Content Transfer Encoding Invalid Maximum exceeded Requested level failed failed since rewinding stream failed Failed initialise crypto engine Login denied Found Access Violation allocation exceeded Illegal operation Unknown transfer Remote already exists Conversion failed Caller register CURLOPT callback options Problem access rights Remote found Error layer Failed connection Socket ready Failed access rights format Issuer check against certificate failed server accept command mismatch invalid session error Unable parse Chunk callback failed connection limit reached kPlease multi perform Invalid multi handle Invalid handle Internal error Invalid socket argument Unknown option handle already added multi handle kUnknown share option Share currently Invalid share handle Feature enabled library kMonday Tuesday Wednesday Thursday Friday Saturday Sunday Received packet block again Received unexpected packet block expecting block Timeout waiting block Retries internal error Connection timeouts state Total retry maxtry Connected receive Received block expecting giving waiting block internal error event Connected transmit failed octet netascii tsize blksize timeout first internal error finished Internal state machine error kTFTP response timeout Received short packet Malformed packet rejecting option value invalid blocksize value packet blksize larger supported blksize smaller supported server requested blksize larger allocated requested blksize parsed tsize parsed invalid tsize value packet Internal error Unexpected packet Connection SOCKS communication SOCKS connect locally resolved Failed resolve SOCKS connect SOCKS proxy Failed SOCKS connect request Failed receive SOCKS connect request SOCKS reply wrong version version should SOCKS request granted complete SOCKS connection request rejected failed complete SOCKS connection request rejected because SOCKS server cannot connect identd client complete SOCKS connection request rejected because client program identd report different complete SOCKS connection Unknown SOCKS server resolving disabled hostnames length actual SOCKS connection SOCKS connection timeout SOCKS error occurred during connection Unable initial SOCKS request SOCKS nothing SOCKS timeout SOCKS error occurred Unable receive initial SOCKS response Received invalid version initial SOCKS response Unable negotiate SOCKS gssapi context Failed SOCKS negotiation request Unable receive SOCKS negotiation response rejected SOCKS server authentication method acceptable quite likely SOCKS server wanted username password since supplied server connection authentication method acceptable Undocumented SOCKS attempted server Failed resolve SOCKS connect SOCKS gssapi protection implemented Failed SOCKS connect request Failed receive SOCKS connect request SOCKS reply wrong version version should complete SOCKS connection complete SOCKS connection complete SOCKS connection Unknown error libssh error Failure establishing session fingerprint checksum match check Warning adding known failed Warning writing failed accepted authentication authentication methods available publickey Using public Using private Initialized public authentication public authentication failed password Initialized password authentication hostbased Could create agent object Failure connecting agent Failure requesting identities agent identity would match Agent based authentication successful keyboard interactive Initialized keyboard interactive authentication Authentication failure Authentication complete CONNECT phase Failure initializing session Sending quote commands current directory Syntax error command Supply parameter memory Syntax error first parameter chgrp chmod chown Syntax error chgrp chmod chown second parameter symlink Syntax error symlink second parameter mkdir rename Syntax error rename second parameter rmdir Unknown command chmod Attempt stats failed chgrp Syntax error chgrp number Syntax error chmod permissions number chown Syntax error chown number Attempt stats failed symlink command failed mkdir command failed rename command failed rmdir command failed command failed Creating failed Upload failed Could stream Failed Creating directory Could directory reading Could remote reading Could remote reading Offset beyond already completely downloaded Failed close libssh Failed libssh subsystem requires known upload Failed libssh channel Failed channel Channel failed close Failed libssh subsystem Shutdown Failed disconnect libssh session Failed disconnect libssh agent Failed libssh session Denied establishing session mismatch fingerprint Remote equal Denied establishing session fingerprint available kFailure initialising session Failed known hosts Operation timed QOOOOOO OOOOOOOOOO OOCOOO directory Permission denied Operation failed message server connected server Connection server Operation supported server Invalid handle already exists write protected media quota exceeded Unknown principle conflict Directory empty directory Invalid filename points itself kSSPI error failed confidentiality integrity gssapi confidentiality gssapi gssapi integrity Kerberos Failed acquire credentials Failed initialise security context Failed authentication request Failed authentication token Failed receive authentication response rejected SOCKS server Invalid authentication response Failed receive authentication token Failed determine SOCKS server authencticated gssapi SOCKS server supports gssapi protection Failed query security context attributes EncryptMessage Failed encryption request Failed encryption Failed receive encryption response Invalid encryption response Failed receive encryption DecryptMessage Invalid encryption response length SOCKS access protection granted security secur LOGOUT Cannot FETCH without FETCH tagged response CAPABILITY STORE FETCH SELECT EXAMINE SEARCH EXPUNGE Unexpected continuation response LOGIN PLAIN DIGEST GSSAPI XOAUTH LOGIN AUTHENTICATE AUTHENTICATE known authentication mechanisms supported Access denied UIDVALIDITY SECTION Cannot APPEND without mailbox Cannot APPEND unknown input APPEND Cannot SELECT without mailbox SELECT unexpected server response STARTTLS LOGINDISABLED EXTERNAL STARTTLS supported STARTTLS denied Access denied Authentication failed Authentication cancelled UIDVALIDITY Mailbox UIDVALIDITY changed Select failed Found bytes download Written bytes bytes transfer Failed parse FETCH response kIMAPS LOGIN PLAIN DIGEST GSSAPI EXTERNAL XOAUTH known authentication mechanisms supported Access denied unexpected server response supported STARTTLS denied Access denied Authentication failed Authentication cancelled localhost LOGIN PLAIN XOAUTH DIGEST known authentication mechanisms supported GSSAPI Access denied unexpected server response Remote access denied STARTTLS EXTERNAL STARTTLS supported STARTTLS denied Authentication failed Authentication cancelled Command failed failed failed failed kFailed alloc scratch buffer SMTPS server response timeout select error response reading failed Excessive server response length received bytes Stripping request match response Receive Accept application RECORD PARAMETER PARAMETER TEARDOWN PAUSE SETUP ANNOUNCE DESCRIBE OPTIONS invalid request RTSPREQ invalid request RTSPREQ Refusing issue request without session Transport Transport Refusing issue SETUP without Transport header Accept Accept Encoding Accept Encoding Agent Referer Referer Range Range cannot custom header Session Session cannot custom header Session Content Length Content Length Content Content parameters Content application Failed sending request kCannot write packet Cannot pause Failed writing error writing packet Unable header blank Session Session wanted RTMPTS RTMPS RTMPTE RTMPE RTMPT Failed sending Gopher request GOPHER Proxy sAuthorization Negotiate Negotiate KHTTP Proxy Connection Alive Establish proxy tunnel CONNECT Proxy Connection Agent CONNECT Failed sending CONNECT proxy Proxy CONNECT aborted timeout Proxy CONNECT aborted select error Proxy CONNECT aborted chunk reading bytes chunk continue Ignore bytes response bytes chunk Proxy CONNECT followed bytes opaque ignored known Authenticate Proxy authenticate Content Length close Connection chunked Transfer Encoding CONNECT responded chunked TUNNEL STATE switched Received proxy after CONNECT Proxy replied CONNECT request proxy Could resolve Proxy sAuthorization handshake rejected handshake failure internal error handshake failure unhandled condition nonce realm algorithm username realm nonce cnonce digest response AUTHENTICATE Bearer abcdef FALSE Receive weight penalized pipeline blacklisted Server blacklisted Server blacklisted Adding handle Adding handle Adding handle rtmpt rtmpe rtmpte rtmps rtmpts rtmfp RTMPT RTMPE RTMPTE RTMPS RTMPTS RTMFP setDataFrame onMetaData FCUnpublish deleteStream close Genuine Adobe Flash Player Genuine Adobe Flash Media Server pause createStream playlist playlist ready NetStream Pause Notify NetStream Notify NetStream UnpublishNotify NetStream NetStream Complete NetStream Publish Start NetStream Start NetConnection Connect InvalidApp NetStream StreamNotFound NetStream Failed NetStream Failed level onStatus error checkbw onbwdone onbwcheck onFCUnsubscribe onFCSubscribe onBWDone publish secureToken connect result secureTokenResponse releaseStream FCPublish FCSubscribe audio video duration objectEncoding pageUrl videoFunction videoCodecs audioCodecs capabilities tcUrl swfUrl flashVer nonprivate socks specified SOCKS proxy target server played stream played media player flashver Flash version string default Append arbitrary Connect message playpath target media server playlist playlist before command Stream seeking possible subscribe Stream subscribe token SecureToken response swfVfy Perform Verification swfAge Number cached start Stream start position milliseconds Stream position milliseconds buffer Buffer milliseconds timeout Session timeout seconds string integer boolean public public fulfill public least FFFFFFFFFFFFFFFFC FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFE FFFFFFFFFFFFFFFF GetDHOffset handshake Couldn calculate correct offset exiting GetDigestOffset Couldn calculate correct digest offset exiting GetDHOffset Couldn calculate offset exiting GetDigestOffset Couldn calculate digest offset exiting digestLen PACKET packet channel Protocol Hostname Playpath StartTime StopTime timeout Connecting SOCKS proxy SWFSHA SWFSize flashVer subscribepath tcUrl swfUrl pageUrl Unknown option Valid options Problem accessing INVALID FALSE timestamp HandleMetadata Metadata error decoding packet RTMPSockBuf returned GetSockError Accept Agent Shockwave Flash Connection Alive Cache Control cache Content application Content length WriteN error bytes SendPacket sanity failed trying header Invoking sending Sending SWFVerification response SendPause pauseTime FCSubscribe SendChunk HandleInvoke SendPlay Sanity failed string method invoke packet server invoking received result method error decoding invoke packet server error server requested close onStatus received result without matching request seekTime stopTime sending Closing connection ClientPacket HandleCtrl HandleServerBW HandleClientBW unknown packet received server received received bytes report received chunk change client received invoke bytes shared object supported ignoring received notify bytes message bytes fully supported shared object bytes supported ignoring stream bytes supported ignoring Stream SWFVerification received Stream BufferReady Stream BufferEmpty Stream IsRecorded Stream Stream Stream Begin Stream corrupt Ignoring SWFVerification request swfVfy kHTTP Content Length ReadN socket closed SHandShake Requested Couldn initialize Diffie Hellmann Initial server digest Server digest offset Serversig Client Uptime Player Version Client public offset Secret Calculated digest secure server digest Server signature calculated Sending handshake response handshake client signature match Handshaking finished Unknown version pubkey position Couldn generate Diffie Hellmann public Couldn write public Trying different position client digest Couldn verify client digest Client signature Digest Signature calculated Client genuine Adobe Wrong secret position Genuine Adobe Flash Player ReadPacket failed packet header failed packet header failed packet header failed packet failed packet header failed allocate packet failed extended timestamp nChannel Received packet before Ignoring Connect SOCKS negotiation SOCKS negotiation failed failed create socket Error Setting socket timeout failed failed connect socket SOCKS returned error Connect HandShake connected handshaking Client handshake failed Client digest offset Initial client digest Answer mismatch client server answered Server Uptime Version server refuse signed authentication Server signature Server genuine Adobe Connect failed handshaked connect failed Genuine Adobe Flash Media Server Client signature calculated Trying different position server digest Couldn verify server digest Server public offset Stream start requested frame ignoring ignoring small video packet ignoring small audio packet Complete server Assuming stream complete tagSize found appending Checked keyframe successfully Stream start requested frame ignoring Couldn allocate memory Wrong stream corrupted aborting Couldn seeked keyframe chunk First packet contain keyframe timestamps smaller keyframe timestamp probably resume failed Found keyframe resume keyframe timestamp Stream Keyframe doesn match skipable packet since doesn chunk stream corrupt Write AMFProp Encode invalid Encode failed encode property index ReadString string reference index supported ignoring Property INVALID INVALID Property Property FALSE BOOLEAN NUMBER Property sOBJECT STRING timestamp offset object begin object Decode Object encapsulated stream start OBJECT Class reference failed decode property Class externalizable dynamic classMembers Member DEFAULT ATTRIBUTE Externalizable check class object Object reference index Decode unknown unsupported datatype reference supported empty buffer buffer pointer kAMFProp Decode TYPED OBJECT supported supported RECORDSET reserved REFERENCE supported MOVIECLIP reserved range namesize Empty buffer buffer pointer enough decoding bytes unknown datatype kDECODING ERROR IGNORING BYTES UNTIL KNOWN PATTERN abcdef ERROR WARNING DEBUG DEBUG Mozilla Agent Referrer Content Length Modified Modified Since Setting socket timeout failed Connect failed HashSWF HOMEDRIVE HOMEPATH swfinfo Genuine Adobe Flash Player couldn contact swfurl error swfurl found connection while downloading swfurl couldn writing errno slist Parsing Unknown protocol Parsed Parsed Hostname exceeds characters hostname ondemand Parsed protocol rtmpt rtmpte application playpath rtmps rtmpts Invalid number rtmpe rtmfp Unable allocate memory local banner Invalid parameter specified method method negotiated kInvalid descriptor passed libssh description libssh socket provided Error allocating space remote banner Failed getting banner Unable exchange encryption userauth Unable userauth service Invalid response received server Failed sending banner zDchannel packet large Unable allocate packet Error waiting packet world Unable allocate datablock packet malloc zombie request Unable allocate memory READDIR packet libssh channel write failed Timeout waiting status message Protocol Error session authenticated session Would block starting channel Unable startup channel subsystem Would block request subsystem Unable request subsystem Would block requesting handle extended Unable allocate structure Would block sending Unable Timeout waiting response subsystem Invalid VERSION response Unable allocate memory OPENDIR packet Would block sending OPENDIR command Unable Would block waiting status message small STATUS small HANDLE Unable allocate handle structure Failed opening remote malloc WRITE error Protocol badness response Protocol badness unrecognised request response write failed Unable FSETSTAT Unable FSTAT command Unable allocate memory FSTAT FSETSTAT packet Unable allocate memory CLOSE packet Unable CLOSE command Error waiting status message Unable allocate memory REMOVE packet Unable REMOVE command Error waiting STATUS Server support RENAME Unable allocate memory RENAME packet Unable RENAME command already exists RENAME OVERWRITE specified Operation Supported Unable allocate memory EXTENDED packet fstatvfs openssh Error waiting EXTENDED REPLY Protocol Error short response statvfs openssh Unable allocate memory MKDIR packet Unable allocate memory RMDIR packet Unable RMDIR command Unable allocate memory packet Unable LSTAT SETSTAT command Server support SYMLINK READLINK Unable allocate memory SYMLINK READLINK REALPATH packet Unable SYMLINK READLINK command Invalid READLINK REALPATH response entries fegeheieieheWould block sending Unable channel Unable allocate space channel Failed allocating memory channel Unable allocate temporary space packet Would block sending channel request Unable channel request Would block Channel failure Unable allocate memory direct tcpip connection direct tcpip Unable allocate memeory setenv packet tcpip forward Would block sending global request packet forward listen request Unable global request packet forward listen request Unknown Unable allocate memory listener queue Unable complete request forward listen Would block waiting packet Channel found Would block sending setenv request Unable channel request packet setenv request Unable complete request channel setenv lengths large Would block sending request Unable request packet Failed require package Unable complete request channel request window change Would block sending window change request Unable window change packet MAGIC COOKIE Unable allocate memory request Would block sending packet Unable packet waiting response packet Unable complete request channel Unable allocate memory channel process request Would block sending channel request Unable channel request Failed waiting channel success Unable complete request channel process startup Unable allocate memory signal Would block sending window adjust Unable transfer window adjustment packet deferring transport would block already closed channel already received might ignored Unable channel libssh transport bailed Would block sending close channel Unable close channel request libssh channel closed invoked channel state cancel tcpip forward Would block sending forward request Invalid signature length Unable allocate memory known entry Unable allocate memory Unknown Unable allocate memory Unable allocate memory encoded Unable allocate memory comment Failed parse known hosts unexpectedly Failed parse known hosts unexpected length Unsupported known information store Unable allocate memory encoded Unable allocate memory encoded Known write buffer small Unable allocate memory known hosts collection Invalid information Failed parse known hosts Failed parse known hosts short Unknown Unknown format Failed parse known hosts Failed Write failed Unable public Invalid public Unable allocate memory public Unable public Invalid public Invalid encoded Missing public handler specified private Unable initialize private Unable allocate memory userauth connection Would block requesting userauth Unable userauth request Failed getting response error Unable allocate memory userauth password request password Would block writing password request Unable userauth password request Would block waiting Authentication failed username password Password expired callback failed Unable allocate memory userauth password change request Unable userauth password change request Password Expired callback specified Authentication failed memory hostbased Failed allocating additional space userauth hostbased packet Would block Unable userauth hostbased request failed Invalid signature supplied public username public combination Invalid public short Invalid public publickey Unable userauth publickey request Waiting USERAUTH response Username PublicKey combination invalid Unable allocate memory userauth publickey signed Callback returned error Failed allocating additional space userauth publickey packet Waiting publickey USERAUTH response Unable allocate memory keyboard interactive authentication keyboard interactive Unable keyboard interactive request Waiting keyboard USERAUTH response Authentication failed keyboard interactive Unable allocate memory keyboard interactive request field Unable allocate memory keyboard interactive instruction request field Unable allocate memory keyboard interactive prompts array Unable allocate memory keyboard interactive responses array Unable allocate memory keyboard interactive prompt message Unable allocate memory keyboard interactive response packet Unable userauth keyboard interactive request memory illegal request agent connected agent failure Pageant failed connecting agent illegal input found pageant PageantRequest failed setting pageant filemap agent setup agent malloc Unable allocate space agent connection illegal agent request agent failed Unable allocate command buffer session session Would block starting channel Would block requesting startup Unknown error while getting error string Would block waiting response remote failure Invalid response remote Would block sending Unable Would block waiting response Invalid response Would block Unable failed memory failed Unexpected channel close Unable allocate command buffer session Would block sending initial wakeup Would block waiting response Failed reading response Failed memory Failed Invalid response Unterminated response server Invalid response server short Invalid response server malformed mtime Invalid response server malformed mtime Invalid response server short malformed Would block waiting Invalid response server Invalid response server malformed Invalid response server invalid Invalid response server invalid Would block sending Unable allocate memory decoding Invalid Unable keepalive message keepalive libssh Invalid received socket disconnect Packet received unknown channel Packet contains offered receive truncating current receive window ignored Remote current window allows truncating status signal memory signal forwarded tcpip Unable allocate channel connection Unable channel confirmation Forward requested Unable failure allocate channel connection Forward Unavailable memory error Unable message Timed waiting reply Unable allocate memory Unable initialize hostkey importer Unable allocate buffer libssh Unable verify hostkey signature Unable NEWKEYS message Timed waiting NEWKEYS Unable allocate buffer digest Unable Group Exchange Request Timeout waiting GROUP reply Unable allocate memory Unable KEXINIT packet remote Unrecoverable error exchanging Invalid parameter specified method Error allocated space method preferences requested method currently supported kalgs Unknown method algorithm found Memory allocation failed Internal error rZhdiffie hellman group diffie hellman group exchange diffie hellman group Unable extract public private Unable private Unable extract public private Wrong passphrase invalid unrecognized private format Unable allocate memory private Unable extract public private Unsupported private format krijndael lysator kblowfish karcfour karcfour kcast khmac khmac khmac khmac ripemd khmac ripemd openssh kdecompression unitilized Unable allocate decompression buffer decompression failure Excessive growth decompression phase Unable expand decompression buffer Unable allocate memory compression decompression compression failure kzlib openssh knone kMingw runtime failure VirtualQuery failed bytes address Unknown pseudo relocation protocol version Unknown pseudo relocation PRINTF EXPONENT DIGITS kInfinity libcurl cleanup duphandle escape getinfo pause perform reset setopt strerror unescape escape formadd formfree formget getdate getenv global cleanup global global maprintf mfprintf mprintf msnprintf msprintf multi handle multi assign multi cleanup multi fdset multi multi multi perform multi remove handle multi setopt multi socket multi socket action multi socket multi strerror multi timeout multi mvaprintf mvfprintf mvprintf mvsnprintf mvsprintf share cleanup share share setopt share strerror slist append slist strequal strnequal unescape version version libssh agent connect libssh agent disconnect libssh agent libssh agent identity libssh agent libssh agent identities libssh agent userauth libssh banner libssh decode libssh channel close libssh channel direct tcpip libssh channel libssh channel flush libssh channel forward accept libssh channel forward cancel libssh channel forward listen libssh channel libssh channel signal libssh channel status libssh channel handle extended libssh channel handle extended libssh channel libssh channel process startup libssh channel libssh channel receive window adjust libssh channel receive window adjust libssh channel request libssh channel request libssh channel libssh channel blocking libssh channel setenv libssh channel closed libssh channel libssh channel window libssh channel window write libssh channel write libssh channel libssh libssh libssh hostkey libssh libssh keepalive config libssh keepalive libssh knownhost libssh knownhost libssh knownhost check libssh knownhost checkp libssh knownhost libssh knownhost libssh knownhost libssh knownhost libssh knownhost readfile libssh knownhost readline libssh knownhost writefile libssh knownhost writeline libssh libssh channel libssh libssh libssh libssh session abstract libssh session banner libssh session banner libssh session block directions libssh session callback libssh session disconnect libssh session libssh session libssh session blocking libssh session timeout libssh session handshake libssh session hostkey libssh session libssh session errno libssh session error libssh session method libssh session methods libssh session blocking libssh session timeout libssh session startup libssh session supported libssh close handle libssh fstat libssh fstatvfs libssh channel libssh libssh error libssh mkdir libssh libssh libssh readdir libssh rename libssh rmdir libssh libssh libssh shutdown libssh libssh statvfs libssh symlink libssh libssh libssh unlink libssh write libssh trace libssh trace sethandler libssh userauth authenticated libssh userauth hostbased fromfile libssh userauth keyboard interactive libssh userauth libssh userauth password libssh userauth publickey libssh userauth publickey fromfile CloseHandle CreateFileMappingA FormatMessageA FreeLibrary GetACP GetCurrentThreadId GetFileType GetLastError GetModuleHandleA GetProcAddress GetStdHandle GetTickCount GetVersionExA InterlockedExchange IsDBCSLeadByteEx LoadLibraryA MapViewOfFile MultiByteToWideChar PeekNamedPipe ReadFile SetLastError Sleep SleepEx TlsGetValue UnmapViewOfFile VirtualProtect VirtualQuery WaitForSingleObject WideCharToMultiByte close putenv strdup stricmp strnicmp write dllonexit assert beginthreadex errno flsbuf fstati isctype lseeki pctype stati stricmp strnicmp abort calloc difftime fclose fflush fgets fopen fprintf fputc fputs fread fseek ftell fwrite getenv gmtime localeconv localtime malloc memchr memcmp memcpy memmove memset mktime qsort realloc rewind setlocale sprintf sscanf strchr strcmp strcpy strerror strlen strncmp strncpy strpbrk strrchr strspn strstr strtod strtol strtoul tolower vfprintf wcslen FindWindowA SendMessageA timeGetTime stringA first attributeA first entry values initA memfreeA msgfree attributeA entry search optionA simple unbind value WSACleanup WSAGetLastError WSAIoctl WSASetLastError WSAStartup WSAFDIsSet accept closesocket connect gethostbyname gethostname getpeername getsockname getsockopt htonl htons ioctlsocket listen ntohl ntohs recvfrom select sendto setsockopt socket ascii unicode stringprep check version stringprep locale charset check INTEGER STRING STRING length STRING print STRING STRING clear value CRYPTO cleanup CRYPTO CRYPTO malloc compute generate verify ENGINE ENGINE ENGINE ENGINE finish ENGINE ENGINE first ENGINE ENGINE ENGINE ENGINE builtin engines ENGINE private ENGINE default clear error error string error string strings error error remove thread state CIPHER cleanup CIPHER CIPHER CIPHER CIPHER padding Cipher CipherInit DigestFinal DigestInit DigestUpdate EncryptInit EncryptUpdate parameters cleanup cipherbyname digestbyname ripemd GENERAL NAMES cleanup Final Update Final Update OPENSSL algorithms noconf OpenSSL ciphers OpenSSL digests DSAPrivateKey PrivateKey RSAPrivateKey write parse bytes status verify SSLeay OpenSSL create method destroy method input flags string method closer method opener method reader method writer method closer method opener method reader method writer result print EXTENSION critical EXTENSION object LOOKUP ENTRY entry index print STORE current STORE lookup STORE flags check issued issuer pubkey serialNumber subject verify error string OBJECT value CIPHER client callback check private store verify locations cipher default passwd default passwd userdata default verify paths verify PrivateKey PrivateKey certificate certificate chain certificate SESSION connect session certificate current cipher error chain certificate privatekey verify result library error strings pending connect state session shutdown write client method method client method deflate deflateEnd deflateInit inflate inflateEnd inflateInit inflateInit zlibVersion KERNEL msvcrt msvcrt WINMM wldap libidn LIBEAY SSLEAY program cannot rdata framD edata idata reloc wqBUB UWVSL UWVSL UWVSL UWVSL UWVSl eUWVS PPPTT HUWVS FEfUWVS UWVSTD MXuKt GFCtVSt MXuKt UWVShD GFSvv UWVSt SPGFEf cUSVWl block transform CRYPTOGAMS appro openssl USVWt PSQRG PSQRG PSQRG lPxqSHA block transform CRYPTOGAMS appro openssl USVWt PSQRG PSQRG PSQRG PSQRG DOHWL PSQRGP PSQRG dOhWl PSQRGp AJNscwO Cocxr DlSHA block transform CRYPTOGAMS appro openssl fUWVS ELCLE UWVSL GFJfS fUWVS USVWt yyyyyyooo mRRUR wwwwww GZZuZ Iqqqqqq Tzzzzzz ssssss EVnvvvvvv Cjjjw vuuuuuu rrrrrr xxxxxx QsfQsf btttttt tiiio Apppppp TqoTqog UWVSL hDtwP kUWVS UWVSLl MtouD FUWVS USVWl WVWVt USVWl WVWVt XOzBT UWVSl UWVSl cUWVS kkkkooooTT ggggV bbMMvvvvEE YYYYGG SSrrrr qqqqssb nnnnZZZZ RRRRv SSSShh jjjjFFggr XXXXJJkk PPPPx KKQQQQ ccwwuuB Gdddd nnCCbbbb Ymmmm NNIIllllVVVV eeeezzzzGG ooxxxxJ BqqffffHH aaaaj WWWWii iiiipp IIUUUUP BBhhhhAA TTTTmm JLXCM mNlVez JLXCM mNlVez JLXCM mNlVez JLXCM mNlVez USVWt Uvmvmvv mzmzRY jyxyxX Edwdwkk pHhXpHhXE NiNiee MFMFTTq plZrNlZrN ZwKiZwKi OOnene elpHP AOgst elpHP AOgst elpHP AOgst elpHP AOgst USVWt USVWL USVWt USVWt CRYPTOGAMS appro openssl UWVST BQUWVS AUWVS MtouL CRYPTOGAMS appro openssl USVWl WVWVt AUWVS MtouL UWVSP FYUWVS MtouD KUWVS CDsHH USVWl WVWVt MtouD UWVSRt UWVSD MtouD USVWD USVWt USVWD USVWt hOlWG OUSVWL Camellia appro openssl UWVSLl UWVSLt AUWVS UUWVS UWVSLt fUWVS DGJat cteMti UWVSL UWVSL mUWVS UWVSP UWVSLt USVWt fVWUS Montgomery Multiplication CRYPTOGAMS appro openssl UWVSL UWVSL fUWVS UWVSL UWVSL UWVSQD UWVSl UWVSL fUWVS fUWVS fUWVS fUWVS fUWVS fUWVS fUWVS fUWVS fUWVS fUWVS fUWVS fUWVS UWVSLt UWVSLl UWVSL tMFtD UWVSLl UWVSLt UWVSLt PtEtAt PtQtMtItE TUWVS PUWVS tMdtUhtElu tCdtChtKluT fUWVS UWVSL VdSdVhShVlSlVpSp UWVSLt UWVSLt UWVSLD fUWVSL UWVSl UWVSl fUWVSl tetaL UWVSLT FJKff GFJMt FJKff UWVSl UWVSLt UWVSL GFPYf GFPaf XUWVS GFHpUWVS wfpfD UWVSl UWVSLt UWVSL UWVSl UWVSl UWVSLt UWVSL tYtUC UWVSL UWVSl UWVSLt UWVSl UWVSl fUWVS CXHCX ChAhCht xlGhGX ChAhCht SDPDSHPHSPPPSTPT UWVSL UWVSl DGFSf tlthC tStOF UWVSL gfffl GFJYf GFJhD UWVSL UWVSlD GFEzD UWVSt Igfff UWVSL ctWVS tptlT xGDHt thDHt UWVSPX UWVSQl fUWVS UWVSLl HDufG UWVSL UWVSL UWVSL KduuD UWVSL UWVSL UWVSLt fUWVS fUWVS fUWVS UWVSL UWVSLl fUWVS fUWVS fUWVS fUWVS fUWVS fUWVS fUWVS fUWVS tFPHt UWVSLl VUUUD UWVSLl dGFPf xUWVS UWVSLt FHUWVS UWVSLD HUWVSl UWVSl tNHPtGC tNPXtGC tytKD UWVSL UWVSSt UWVSD UWVSl UWVSD UWVSl WVSPt tYMMt fUWVSL UWVSD UWVSl UWVSlD DxxTT UWVSL UWVSl UWVSL WVSPt vfUWVS vfUWVS UWVSlD BFEyt UWVSLD uUWVS cGDGH UWVSLl UWVSLt UWVSLl fUWVSl UWVSLD tnuak UWVSL UWVSL UWVSl UWVSL UWVSl UWVSL UWVSL UWVSlD qUWVSl UWVSl UWVSL UWVSL UWVSl UWVSL dUWVS JXHXJ fUWVSLT UWVSL UWVSLl UWVSLT UWVSL tvtjD fUWVS UWVSLt fUWVS UWVSQ UWVSL UWVSL GFJlt UWVSL UWVSlD GFPff UWVSlD UWVSL UWVSL cgfulD cyfVS tRDSS fUWVS GUfUWVS UWVSLD fUWVSL DwUWVS UWVSL UWVSl kUWVS UWVSl UWVSL fUWVS UWVSl CdshD GFPUWVS tctKxWC tIxUC tBujD LtetQ UWVSL UWVSLt UWVSL mtjUt pdttF UWVSL UWVSL UWVSL cUWVS UWVSl GFHGt mfUWVS IUWVSl hGtOF UWVSl UWVSL UWVSL UWVSLTCD UWVSL UWVSLl UWVSL UWVSL UWVSL UWVSLD UWVSL UWVSL UWVSlD UWVSL UWVSL fUWVS fUWVS tBuBD uiuut DsUWVS uUWVS qUWVS UWVSL GFKpt UWVSL tExVC ufUWVSL UWVSl ZUWVS forfD uEtHF uEtHF UWVSP fUWVS fUWVS UWVSLD UWVSLD qUWVS UWVSL gtRnP UWVSLT UWVSL GFSfD aBtfD ufWVS UWVSPH UWVSL LbtxfD UWVSL cUWVS rktuD libgcc register frame libgcj RegisterClasses deregister frame cryptlib dynamic ERROR OPENSSL OPENSSL isservice OPENSSL OpenSSL FATAL OpenSSL internal error assertion failed pointer ERROR store session method debug malloc gethostbyname getservbyname readdir blinding debug malloc dynlock engine ecdsa store thread number address thread bytes leaked chunks OpenSSL OPENSSLDIR projects openssl mingw devel available built WINDLL DOPENSSL APPLINK DOPENSSL DOPENSSL THREADS ENDIAN fomit frame pointer march DOPENSSL WORDS DOPENSSL DOPENSSL DWHIRLPOOL compiler mingw platform CRYPTO index CRYPTO dynlockid CRYPTO lockid CRYPTO INDEX CLASS dynlock create callback OPENSSL Uplink unimplemented function application OPENSSL Applink OPENSSL Applink ApplinkTable names UNDEF undefined rsadsi Security Security rsaEncryption WithRSAEncryption WithRSAEncryption pbeWithMD AndDES pbeWithMD AndDES directory services commonName countryName localityName stateOrProvinceName organizationName signedData envelopedData digestData encryptedData dhKeyAgreement emailAddress unstructuredName contentType messageDigest signingTime countersignature challengePassword unstructuredAddress Netscape Netscape Communications nsCertExt Netscape Certificate Extension nsDataType Netscape WithRSAEncryption dsaWithSHA dsaEncryption pbeWithSHA AndRC PBKDF dsaWithSHA nsCertType Netscape nsBaseUrl Netscape nsRevocationUrl Netscape Revocation nsCaRevocationUrl Netscape Revocation nsRenewalUrl Netscape Renewal nsCaPolicyUrl Netscape Policy nsSslServerName Netscape Server nsComment Netscape Comment nsCertSequence Netscape Certificate Sequence Subject Identifier keyUsage Usage Private Usage Period subjectAltName Subject Alternative issuerAltName Issuer Alternative basicConstraints Basic Constraints crlNumber Number certificatePolicies Certificate Policies Authority Identifier WithRSA givenName surname initials Distribution Points WithRSA serialNumber title description pbeWithMD AndCast dsaWithSHA WithRSA dsaEncryption RIPEMD ripemd RIPEMD ripemd WithRSA length compression compression extendedKeyUsage Extended Usage serverAuth Server Authentication clientAuth Client Authentication codeSigning Signing emailProtection Protection timeStamping Stamping msCodeInd Microsoft Individual Signing msCodeCom Microsoft Commercial Signing msCTLSign Microsoft Trust Signing msSGC Microsoft Server Gated Crypto msEFS Microsoft Encrypted System nsSGC Netscape Server Gated Crypto deltaCRL Delta Indicator CRLReason Reason invalidityDate Invalidity SXNetID Strong Extranet pbeWithSHA BitRC pbeWithSHA BitRC pbeWithSHA KeyTripleDES pbeWithSHA KeyTripleDES pbeWithSHA BitRC pbeWithSHA BitRC keyBag ShroudedKeyBag certBag crlBag secretBag safeContentsBag friendlyName localKeyID Certificate sdsiCertificate PBMAC hmacWithSHA Policy Qualifier unotice Policy Qualifier Notice SMIME Capabilities pbeWithMD AndRC pbeWithMD AndRC pbeWithSHA AndDES msExtReq Microsoft Extension Request extReq Extension Request dnQualifier authorityInfoAccess Authority Information Access caIssuers Issuers OCSPSigning Signing member Member Member SMIME smime smime smime smime smime smime smime smime smime smime smime smime eSignature smime eSignature smime eSigPolicy smime eSigPolicy smime receipt smime authData smime publishCert smime TSTInfo smime TDTInfo smime contentInfo smime DVCSRequestData smime DVCSResponseData smime receiptRequest smime securityLabel smime mlExpandHistory smime contentHint smime msgSigDigest smime encapContentType smime contentIdentifier smime macValue smime equivalentLabels smime contentReference smime encrypKeyPref smime signingCertificate smime smimeEncryptCerts smime timeStampToken smime sigPolicyId smime commitmentType smime signerLocation smime signerAttr smime otherSigCert smime contentTimestamp smime CertificateRefs smime RevocationRefs smime certValues smime revocationValues smime escTimeStamp smime certCRLTimestamp smime archiveTimeStamp smime signatureType smime smime ESDHwith smime ESDHwithRC smime DESwrap smime smime smime DESwrap smime CMSRC smime smime smime unotice smime proofOfOrigin smime proofOfReceipt smime proofOfDelivery smime proofOfSender smime proofOfApproval smime proofOfCreation explicit implicit explicit implicit profile profile qualified qualified attribute timestamp protocol biometricInfo Biometric qcStatements auditEntity targeting aaControls ipAddrBlock autonomousSysNum routerIdentifier textNotice ipsecEndSystem IPSec System ipsecTunnel IPSec Tunnel ipsecUser IPSec caProtEncCert signKeyPairTypes encKeyPairTypes preferredSymmAlg caKeyUpdateInfo currentCRL unsupportedOIDs subscriptionRequest keyPairParamReq keyPairParamRep revPassphrase implicitConfirm confirmWaitTime origPKIMessage regCtrl regInfo regCtrl regToken regCtrl authenticator regCtrl pkiPublicationInfo regCtrl pkiArchiveOptions regCtrl oldCertID regCtrl protocolEncrKey regInfo Pairs regInfo certReq noSignature statusInfo identification identityProof dataReturn transactionId senderNonce recipientNonce addExtensions encryptedPOP decryptedPOP lraPOPWitness getCert getCRL revokeRequest regInfo responseInfo queryPending popLinkRandom popLinkWitness personalData dateOfBirth placeOfBirth gender countryOfResidence authenticationInfo accessIdentity chargingIdentity group pkixQCSyntax PKIData PKIResponse timestamping Stamping basicOCSPResponse Basic Response Nonce Nonce CrlID acceptableResponses Acceptable Responses noCheck Check archiveCutoff Archive Cutoff serviceLocator Service Locator extendedStatus Extended Status valid trustRoot Trust algorithm rsaSignature algorithms directory services algorithms directory Directory Management experimental Experimental private Private security Security snmpv SNMPv enterprises Enterprises dcobject dcObject domainComponent domain Domain selected attribute types Selected Attribute Types clearance WithRSAEncryption proxying subjectInfoAccess Subject Information Access encAttrs policyConstraints Policy Constraints targetInformation Targeting noRevAvail Revocation Available prime field characteristic field ecPublicKey prime prime prime prime prime prime prime ecdsa CSPName Microsoft holdInstructionCode Instruction holdInstructionNone Instruction Instruction Issuer Instruction Reject pilot pilotAttributeType pilotObjectClass pilotGroups StringSyntax caseIgnoreIA StringSyntax pilotObject pilotPerson account document documentSeries localPart dNSDomain domainRelatedObject friendlyCountry pilotOrganization pilotDSA qualityLabelledData userId Mailbox favouriteDrink roomNumber photo userClass manager documentIdentifier documentTitle documentVersion documentAuthor documentLocation homeTelephoneNumber secretary otherMailbox lastModifiedTime lastModifiedBy aRecord pilotAttributeType mXRecord nSRecord sOARecord cNAMERecord associatedDomain associatedName homePostalAddress personalTitle friendlyCountryName janetMailbox buildingName dSAQuality singleLevelQuality personalSignature dITRedirect audio documentPublisher UniqueIdentifier headings bodies partial message multipart message generationQualifier pseudonym Secure Electronic Transactions ctype content types msgExt message extensions policy certExt certificate extensions brand setct PANData setct PANToken setct PANOnly setct OIData setct setct PIData setct PIDataUnsigned setct HODInput setct AuthResBaggage setct AuthRevReqBaggage setct AuthRevResBaggage setct CapTokenSeq setct PInitResData setct setct PResData setct AuthReqTBS setct AuthResTBS setct AuthResTBSX setct AuthTokenTBS setct CapTokenData setct CapTokenTBS setct AcqCardCodeMsg setct AuthRevReqTBS setct AuthRevResData setct AuthRevResTBS setct CapReqTBS setct CapReqTBSX setct CapResData setct CapRevReqTBS setct CapRevReqTBSX setct CapRevResData setct CredReqTBS setct CredReqTBSX setct CredResData setct CredRevReqTBS setct CredRevReqTBSX setct CredRevResData setct PCertReqData setct PCertResTBS setct BatchAdminReqData setct BatchAdminResData setct CardCInitResTBS setct MeAqCInitResTBS setct RegFormResTBS setct CertReqData setct CertReqTBS setct CertResData setct CertInqReqTBS setct ErrorTBS setct PIDualSignedTBE setct PIUnsignedTBE setct AuthReqTBE setct AuthResTBE setct AuthResTBEX setct AuthTokenTBE setct CapTokenTBE setct CapTokenTBEX setct AcqCardCodeMsgTBE setct AuthRevReqTBE setct AuthRevResTBE setct AuthRevResTBEB setct CapReqTBE setct CapReqTBEX setct CapResTBE setct CapRevReqTBE setct CapRevReqTBEX setct CapRevResTBE setct CredReqTBE setct CredReqTBEX setct CredResTBE setct CredRevReqTBE setct CredRevReqTBEX setct CredRevResTBE setct BatchAdminReqTBE setct BatchAdminResTBE setct RegFormReqTBE setct CertReqTBE setct CertReqTBEX setct CertResTBE setct CRLNotificationTBS setct setct BCIDistributionTBS setext genCrypt generic cryptogram setext miAuth merchant initiated setext pinSecure setext pinAny setext track setext additional verification policy setCext hashedRoot setCext certType setCext merchData setCext cCertRequired setCext tunneling setCext setExt setCext setQualf setCext PGWYcapabilities setCext TokenIdentifier setCext Track setCext TokenType setCext IssuerCapabilities setAttr setAttr PGWYcap payment gateway capabilities setAttr TokenType setAttr IssCap issuer capabilities rootKeyThumb addPolicy setAttr Token setAttr Token Prime setAttr IssCap setAttr IssCap setAttr IssCap setAttr GenCryptgrm generate cryptogram setAttr encrypted track setAttr cleartxt cleartext track setAttr TokICCsig token signature setAttr SecDevSig secure device signature brand brand Diners brand AmericanExpress brand brand brand MasterCard brand Novus JOINT joint international organizations International Organizations msSmartcardLogin Microsoft Smartcardlogin msUPN Microsoft Universal Principal street streetAddress postalCode proxyCertInfo Proxy Certificate Information anyLanguage language inheritAll Inherit nameConstraints Constraints independent Independent WithRSAEncryption WithRSAEncryption WithRSAEncryption WithRSAEncryption identified organization certicom characteristic basis onBasis tpBasis ppBasis anyPolicy Policy policyMappings Policy Mappings inhibitAnyPolicy Inhibit Policy Oakley ipsec Oakley ipsec CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia CAMELLIA camellia Subject Directory Attributes Issuing Distrubution Point certificateIssuer Certificate Issuer PasswordBasedMAC password based DHBasedMac Diffie Hellman based suppLangTags caRepository Repository smime compressedData asciiTextWithCRLF ecdsa Recommended ecdsa Specified ecdsa ecdsa ecdsa ecdsa hmacWithMD hmacWithSHA hmacWithSHA hmacWithSHA hmacWithSHA whirlpool cryptopro cryptocom GostR GostR GostR GostR HMACGostR gostr GostR GostR CryptoPro KeyMeshing KeyMeshing GostR TestParamSet GostR CryptoProParamSet TestParamSet CryptoPro ParamSet CryptoPro ParamSet CryptoPro ParamSet CryptoPro ParamSet CryptoPro Oscar ParamSet CryptoPro Oscar ParamSet CryptoPro ParamSet GostR TestParamSet GostR CryptoPro ParamSet GostR CryptoPro ParamSet GostR CryptoPro ParamSet GostR CryptoPro ParamSet GostR CryptoPro ParamSet GostR CryptoPro ParamSet GostR CryptoPro ParamSet GostR TestParamSet GostR CryptoPro ParamSet GostR CryptoPro ParamSet GostR CryptoPro ParamSet GostR CryptoPro ParamSet GostR CryptoPro ParamSet GostR GostR GostR GostR Cryptocom ParamSet Cryptocom Cryptocom GostR GostR Cryptocom GostR GostR Cryptocom GostR ParamSet Parameter Cryptocom LocalKeySet Microsoft Local freshestCRL Freshest permanentIdentifier Permanent Identifier searchGuide businessCategory postalAddress postOfficeBox telephoneNumber telexNumber Address registeredAddress presentationAddress member owner roleOccupant seeAlso userPassword userCertificate cACertificate enhancedSearchGuide protocolInformation distinguishedName uniqueMember houseIdentifier supportedAlgorithms deltaRevocationList dmdName object create index malloc failure unknown OpenSSL OpenSSL OpenSSL OpenSSL OpenSSL OpenSSL OpenSSL sizeof sizeof ameth OpenSSL method pmeth hexkey OpenSSL yyyooo mRRUR GZZuZ EVnvvv Cjjjw tiiio OpenSSL libdes OpenSSL partial OpenSSL ENCRYPT DECRYPT length BLOCK OpenSSL vSbLdD OpenSSL cidea OpenSSL iciNWqX ySeEI cUYCx npzKD ilRdV XxWcr OlOBB MjGKPb doITH fStUuFa YnFpW QloNV HWynvIe rZLZq FEdlX blowfish Blowfish OpenSSL nrWxzdD PIMAC JXFNPF lbfLTq XLVRf LVvuOx aYwSW XVcNx KoqKl NygCH Soxgc TzWOpA kldMDfd HDLns FYYEE TNoHm kMxnXO OJWdC TLmDl gTzuw HjyZVLj Ifing uOiVA teyvvw SRqDIK TUdpfM STIiFX ciZvt lkxpj nqFnEV OpenSSL Number OpenSSL print ABCDEF blind AYAeAkAwA AAAAAAAAAAA BCBSBUB BaBsB BBBBBBBBBBBBBB EAEIESEUEaEwE EEEEEEEBNRAND BLINDING convert BLINDING create param BLINDING invert BLINDING BLINDING update start branch expand EXPAND INTERNAL solve solve consttime simple inverse inverse branch lshift quick reciprocal range reciprocal bignum called modulus encoding error expand static bignum input reduced invalid length invalid range square initialized inverse solution prime iterations temporary variables nGXGVw COMPUTE ECParameters ECPKParameters ECPrivateKey PRINT ECKEY PARAM ECKEY PARAM DECODE ECKEY DECODE ECKEY ENCODE ECKEY DECODE ECKEY ENCODE ECKEY PARAM ECParameters print ECParameters print ECPKParameters print ECPKParameters print GROUP CURVE GROUP FIELDID GROUP PARAMETERS GROUP PKPARAMETERS PARAMETERS GROUP PKPARAMETERS GROUP MONTGOMERY POINT MULTIPLY simple group check discriminant simple group curve simple point simple point simple point affine coordinates simple point affine coordinates simple compressed coordinates field decode field encode field field field group curve GROUP CURVE field field group curve simple group check discriminant simple group curve SIMPLE GROUP CURVE SIMPLE GROUP GENERATOR simple affine simple point simple point simple points affine simple point affine coordinates SIMPLE POINT AFFINE COORDINATES simple point affine coordinates SIMPLE POINT AFFINE COORDINATES simple compressed coordinates SIMPLE COMPRESSED COORDINATES GROUP check GROUP check discriminant GROUP GROUP generator GROUP cofactor GROUP curve GROUP curve GROUP degree GROUP order GROUP pentanomial basis GROUP trinomial basis GROUP GROUP curve GROUP GROUP precompute GROUP curve GROUP curve GROUP EXTRA GROUP generator check generate print print POINTs affine POINT POINT POINT POINT POINT affine coordinates POINT affine coordinates POINT Jprojective coordinates POINT invert POINT infinity POINT curve POINT affine POINT POINT POINT point POINT point POINT affine coordinates POINT affine coordinates POINT compressed coordinates POINT compressed coordinates POINT Jprojective coordinates POINT infinity precompute ECParameters ECPKParameters ECPrivateKey ECPublicKey ECPublicKey DECODE DERIVE KEYGEN PARAMGEN error unknown field buffer small ecpkparameters failure decode error discriminant group failure field large group pkparameters failure ecpkparameters failure incompatible objects invalid argument invalid compressed point invalid compression invalid curve invalid digest invalid encoding invalid field invalid invalid group order invalid pentanomial basis invalid private invalid trinomial basis missing parameters missing private prime supported prime implemented initialized field parameters passed parameter pkparameters group failure point infinity point curve undefined generator undefined order unknown group unknown order unsupported field wrong order curve curve prime field curve prime field curve prime field curve prime field curve prime field curve prime field curve prime field curve prime field curve prime field curve prime field curve prime field curve prime field curve prime field curve prime field curve prime field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve binary field curve prime field curve prime field curvs prime field IPSec Oakley curve binary field suitable ECDSA Questionable extension field IPSec Oakley curve binary field suitable ECDSA Questionable extension field MinghuaQu MinghuaQuS MinghuaQu MinghuaQu YKUma DIWDh IxBwi jmvHCzb MinghuaQu jFVWsL iCwVgV xzxvT MinghuaQuw JtloaybSr LKMBb lzUOP IyDOr MinghuaQuj ggRcjheT kdRbg UUUUUUUUUUUa YzxUN KMinghuaQuq itNqd UUUUUUUUUUUUUU oMinghuaQu tfjgvmfvxvi fffmfjj wjCQQ VggjeK FgUVVF loaTh gZbmNPs GXqNX check print ABCDEF PENTANOMIAL CHARACTERISTIC FIELDID CURVE cECPARAMETERS ECPKPARAMETERS PRIVATEKEY onBasis tpBasis ppBasis other cfieldType cversion fieldID curve order cofactor prime cvalue named curve value parameters value implicitlyCA cprivateKey parameters publicKey Private Public ECDSA Parameters ameth OpenSSL algorithm pmeth paramgen curve Field Basis Polynomial Prime Generator compressed Order Generator uncompressed Generator hybrid Cofactor Young OpenSSL signature problems SSLeay CHECK PADDING PRINT VERIFY MEMORY DECODE VERIFYRECOVER BUILTIN KEYGEN check PRIVATE DECRYPT PRIVATE ENCRYPT PUBLIC DECRYPT PUBLIC ENCRYPT generate memory method PRIVATE DECRYPT PRIVATE ENCRYPT PUBLIC DECRYPT PUBLIC ENCRYPT padding padding padding padding padding padding padding padding check padding check padding check padding check padding check padding check print print DECODE ENCODE DECODE setup blinding OCTET STRING verify verify OCTET STRING verify algorithm mismatch value fixed header decrypt count signature block block greater large large large modulus small small digest congruent congruent congruent first octet invalid illegal unsupported padding invalid digest length invalid header invalid keybits invalid message length invalid padding invalid padding invalid saltlen invalid trailer invalid digest inverse small octet invalid modulus large public exponent before block missing equal decoding error operation supported keytype padding check failed prime prime operations supported length check failed length recovery failed rollback attack object identifier known unknown algorithm unknown padding value missing wrong signature length cversion ameth publicExponent modulus Exponent Modulus Private Public privateExponent prime prime exponent exponent coefficient OpenSSL method pmeth padding saltlen keygen keygen pubexp OpenSSL version PRINT DSAparams print DSAparams print verify method PARAM DECODE print DECODE ENCODE DECODE ENCODE setup verify DECODE KEYGEN value decode error error large decode error invalid digest missing parameters modulus large parameters parameter encoding error OpenSSL method ameth Private Public Parameters OpenSSL method paramgen paramgen paramgen pmeth ECDSA OpenSSL ECDSA OpenSSL ECDSA method ECDSA METHOD ECDSA ECDSA verify ECDSA setup signature large missing parameters setup values random number generation failed signature malloc failed length OpenSSL Method Diffie Hellman OpenSSL COMPUTE DHparams print BUILTIN GENPARAMS method PARAM DECODE DECODE ENCODE DECODE ENCODE PRINT GENERATE GENERATE PARAMETERS DERIVE KEYGEN generator decode error error decode error invalid public modulus large parameters private value parameter encoding error ameth Private Public Parameters private public prime generator recommended private length OpenSSL method pmeth paramgen prime paramgen generator OpenSSL OpenSSL method compute method failed private value point arithmetic failure CONVERTER UNLOAD DLFCN DLFCN DLFCN DLFCN MERGER DLFCN CONVERTER DLFCN UNLOAD MERGER CONVERTER UNLOAD convert filename filename loaded filename global lookup merge method pathbyaddr filename converter GLOBAL LOOKUP PATHBYADDR MERGER UNLOAD GLOBALLOOKUP GLOBALLOOKUP JOINER MERGER CONVERTER PATHBYADDR SPLITTER UNLOAD control command failed already loaded empty structure failure filename cleanup method function failed incorrect syntax could shared library translation failed filename specification shared library handle filename failed stack corrupt could requested symbol could unload shared library functionality supported shared library method KERNEL CreateToolhelp Snapshot Module First Module symname filename OpenSSL shared library method DYNAMIC DYNAMIC DYNAMIC DYNAMIC ENGINE ENGINE ENGINE executable ENGINE ENGINE ENGINE string ENGINE finish ENGINE ENGINE cipher ENGINE DEFAULT ENGINE digest ENGINE ENGINE ENGINE ENGINE ENGINE ENGINE ENGINE REMOVE ENGINE private ENGINE public ENGINE client ENGINE ENGINE remove ENGINE default string ENGINE DEFAULT ENGINE ENGINE ENGINE TABLE REGISTER ENGINE UNLOAD ENGINE UNLOCKED FINISH ENGINE HELPER ENGINE CONFIGURE ENGINE MODULE MESSAGE already loaded argument number executable command takes input command takes input conflicting engine command implemented implemented implemented failure found engines section error engine configuration error engine engine section error failed loading private failed loading public finish failed could obtain hardware handle missing failed internal error invalid argument invalid invalid number invalid value invalid string initialised loaded control function index function reference engine unload function provide parameters implemented unimplemented cipher unimplemented digest unimplemented public method version incompatibility projects openssl mingw devel engines OPENSSL ENGINES dynamic table ECDSA CIPHERS DIGESTS CRYPTO cipher digest pkmeth asnmth OPENSSL Loading Private OPENSSL called openssl Software engine support engine dynamic dynamic EMPTY default algorithms value section engines check engine cdynamic Dynamic engine loading support Specifies ENGINE shared library VCHECK Specifies continue version checking fails boolean Specifies ENGINE loading Whether loaded ENGINE internal mandatory Specifies whether directories mandatory directory which ENGINEs loaded ENGINE specified other settings buffer memdup clean strdup strndup write write return write return return return return callback unknown STATE accept HEADER callback gethostbyname accept socket nread nread nwrite nwrite write BUFFER STATE LINEBUFFER WRITE WSASTARTUP accept error fopen hostname lookup broken connect error memory error setting error setting accepted socket error setting accept socket gethostbyname invalid argument invalid address keepalive connect error accept specified hostname specified defined specified parameter mismatch unable socket unable create socket unable listen socket uninitialized unsupported method write WSAStartup memory buffer descriptor fopen pointer socket initialized socket connect filter buffer abcdef ABCDEF print doapr SPACES telnet socks https gopher service getaddrinfo freeaddrinfo getnameinfo socket accept blocking filter application syslog PANIC EMERG ALERT ERROR WARNING NOTICE DEBUG dgram setsockopt getsockopt cdatagram socket stack Stack OpenSSL lhash lhash OpenSSL nodes items actual items nodes alloc nodes expands expand reallocs contracts contract reallocs calls calls insert replace delete delete retrieve retrieve comps OpenSSL openssl support OpenSSL RANDFILE method SSLEAY BYTES seeded ADVAPI KERNEL NETAPI NetStatisticsGet NetApiBufferFree CryptGenRandom CryptReleaseContext GetForegroundWindow GetCursorInfo GetQueueStatus CreateToolhelp Snapshot CloseToolhelp Snapshot First ListFirst ListNext Process First Process Thread First Thread Module First Module DISPLAY thread unknown reason error cunknown library system library bignum routines routines Diffie Hellman routines digital envelope routines memory buffer routines object identifier routines routines routines certificate routines encoding routines configuration routines common libcrypto routines elliptic curve routines routines routines routines routines routines random number generator support routines stamp routines engine routines routines routines routines routines system CRYPTO ENGINE nested error object header object expecting sequence length mismatch missing fatal malloc failure called function should passed parameter internal error called function disabled compile fopen connect getservbyname socket ioctlsocket listen accept WSAstartup opendir fread length sizeof encode sizeof digest digest cipher block cipher block cipher block CIPHER length sizeof sizeof sizeof sizeof final OpenSSL LENGTH LENGTH camellia sizeof verify Public algorithm unsupported Private Parameters message digest sizeof sizeof sizeof sizeof encoding cipher CAMELLIA SIGVER DSAPKEY ECDSA ECKEY CipherInit CIPHER CIPHER CIPHER length DecryptFinal DigestInit EncryptFinal OpenInit CipherInit BROKEN broken parameters decrypt decrypt decrypt derive derive derive encrypt encrypt encrypt ECDSA keygen keygen paramgen paramgen verify verify verify recover verify recover RIJNDAEL SignFinal VerifyFinal keyivgen keyivgen broken MAGIC setup failed block length decrypt length decode error pubkey error buffer small camellia setup failed cipher parameter error command supported implemented operation implemented multiple block length decode error different types different parameters encode error cipherinit error expecting expecting expecting expecting ecdsa expecting initialization error input initialized invalid digest invalid length invalid operation large keygen failure message digest method supported missing parameters cipher default digest digest parameters operation function configured verify function configured operation supported keytype operaton initialized unknown broken private decode error private encode error public unknown cipher unknown digest unknown algorithm unsuported number rounds unsupported algorithm unsupported cipher unsupported keylength unsupported derivation function unsupported unsupported unsupported private algorithm unsupported wrong final block length wrong public blowfish CAMELLIA CAMELLIA camellia CAMELLIA CAMELLIA camellia CAMELLIA CAMELLIA camellia RIPEMD ripemd sizeof sizeof quick brown jumped reliable CIPHER length cipher sizeof CIPHER length cipher keylen sizeof pmeth digest pmeth pmeth sigver object INVALID bitstr utctm gentm digest verify mbstr minsize maxsize strex ABCDEF ALGOR ALGORS calgorithm parameter calgorithms cnotBefore notAfter pubkey PUBKEY calgor public calgor digest cversion subject pubkey attributes signature ATTRIBUTE cvalue value single cobject BIGNUM cZLONG ENTRY INTERNAL ENTRIES cobject value cName cRDNS cversion serialNumber signature issuer validity subject issuerUID subjectUID extensions ctrust reject alias keyid other cforward reverse REVOKED cserialNumber revocationDate extensions cversion issuer lastUpdate nextUpdate revoked signature NETSCAPE SPKAC cNETSCAPE cpubkey challenge cspkac algor signature NETSCAPE SEQUENCE ctype certs NETSCAPE cheader critical Certificate Request sVersion Subject Subject Public sPublic Algorithm sUnable Public sAttributes unable print attribute sRequested Extensions Subject Public Signature Algorithm value Negative Certificate sVersion Serial Number sSignature Algorithm Issuer Validity Before After Subject Subject Public sPublic Algorithm sUnable Public extensions sTrusted Trusted sRejected Rejected sAlias Certificate Revocation sVersion sSignature Algorithm sIssuer sLast Update sNext Update extensions Revoked Certificates Revoked Certificates Serial Number Revocation entry extensions Negative UNKNOWN Netscape Public Algorithm Unable public Challenge String Signature Algorithm ctasn ctasn ctasn Field INTEGER ENUMERATED STRING OCTET STRING OBJECT STRING PRINTABLESTRING STRING STRING GENERALSTRING UTCTIME GENERALIZEDTIME VISIBLESTRING UNIVERSALSTRING BMPSTRING SEQUENCE PRINTABLE cDISPLAYTEXT cDIRECTORYSTRING BOOLEAN TBOOLEAN FBOOLEAN OCTET STRING SEQUENCE SEQUENCE EMPTY ABSENT unused EXTERNAL ERROR selector invalid Unprocessed cBOOL ABSENT FALSE cameth ABCDEF ABCDEF string Enter Private password SGCKEYSALT private NETSCAPE ENCRYPTED cNETSCAPE enckey version algor private ABCDEF EXTENSION EXTENSIONS cobject critical value cExtension buflen bufsize ccontent multipart signed boundary application signature application signature application application Content plain BEGIN application application smime certs signed receipt compressed smime signed enveloped Version Content multipart signed protocol ssignature micalg gostr unknown boundary signed message Content ssignature smime Content Transfer Encoding Content Disposition attachment filename smime Content Transfer Encoding filename Content smime smime plain ASCII BITLIST string cBOOL BOOLEAN INTEGER ENUMERATED OBJECT UTCTIME GENERALIZEDTIME GENTIME OCTETSTRING BITSTR BITSTRING UNIVERSALSTRING STRING String BMPSTRING VISIBLESTRING VISIBLE PRINTABLESTRING PRINTABLE STRING TELETEXSTRING GeneralString GENSTR NUMERIC NUMERICSTRING SEQUENCE EXPLICIT IMPLICIT OCTWRAP SEQWRAP SETWRAP BITWRAP FORMAT unknown Error encoding length greater OBJECT boolean INTEGER ENUMERATED BOOLEAN INTEGER STRING OCTET STRING OBJECT OBJECT DESCRIPTOR EXTERNAL ENUMERATED STRING SEQUENCE NUMERICSTRING PRINTABLESTRING STRING VIDEOTEXSTRING STRING UTCTIME GENERALIZEDTIME GRAPHICSTRING VISIBLESTRING GENERALSTRING UNIVERSALSTRING BMPSTRING offset address OpenSSL OBJECT ENUMERATED INTEGER STRING APPEND STRING CHECK COLLATE PRIMITIVE COLLECT PRIMITIVE digest ENUMERATED ENUMERATED GENERALIZEDTIME GENERALIZEDTIME generate object HEADER INTEGER INTEGER COMBINE unpack verify mbstring ncopy OBJECT OUTPUT string unpack STRING STRING TABLE STRING TEMPLATE TEMPLATE TEMPLATE NOEXP octetstring octetstring unpack string UTCTIME UTCTIME verify WRITE BITSTR ENUMERATED INTEGER STRING INTEGER OBJECT COLLECT STRING BOOLEAN bytes GENERALIZEDTIME HEADER INTEGER OBJECT bytes UINTEGER UTCTIME AutoPrivateKey Netscape NETSCAPE PrivateKey PublicKey stream PUBKEY PUBKEY PrivateKey PublicKey PUBKEY MODULE PARSE TAGGING algor SMIME SMIME revoked ENCODE adding object parse error parse error error class object header password bmpstring wrong length boolean wrong length buffer small cipher object identifier wrong decode error decoding error depth exceeded digest supported encode error error getting error loading section error parsing element error setting cipher params expecting integer expecting object expecting boolean expecting explicit length mismatch explicit constructed field missing first large header illegal bitstring format illegal boolean illegal characters illegal format illegal illegal implicit illegal integer illegal nested tagging illegal illegal value illegal object illegal optional illegal options template illegal tagged illegal value integer ascii format integer large invalid bmpstring length invalid digit invalid invalid modifier invalid number invalid object encoding invalid separator invalid format invalid universalstring length invalid string large length error error content parse error parse error missing missing second number missing value mstring universal mstring wrong nested string characters ascii format enough content default digest matching choice multipart failure multipart boundary content wrong length object ascii format number chars private header missing second number large sequence length mismatch sequence constructed sequence needs config short invalid streaming supported string string short value object identifier known ascii format constructed unable decode unable decode private unexpected universalstring wrong length unknown format unknown message digest algorithm unknown object unknown public unknown signature algorithm unknown unkown format unsupported defined unsupported cipher unsupported encryption algorithm unsupported public unsupported wrong public wrong wrong bytes nombstr default strnid PBEPARAM csalt PARAM cPBKDF PARAM ckeyfunc encryption csalt keylength cversion pkeyalg attributes section CERTIFICATE CERTIFICATE TRUSTED CERTIFICATE PRIVATE PRIVATE PRIVATE strlen objstr sizeof Enter phrase phrase short needs least chars ENCRYPTED CLEAR BEGIN sizeof strlen objstr sizeof Expecting PRIVATE ENCRYPTED PRIVATE PRIVATE PARAMETERS CERTIFICATE CERTIFICATE CERTIFICATE REQUEST CERTIFICATE REQUEST TRUSTED CERTIFICATE SIGNED OpenSSL ABCDEF CERTIFICATE REQUEST CERTIFICATE REQUEST CERTIFICATE PRIVATE PUBLIC PUBLIC PRIVATE PARAMETERS PARAMETERS PRIVATE PARAMETERS CHECK BITLEN CHECK BITLEN PrivateKey PrivateKey HEADER HEADER write write callback header WRITE PRIVATEKEY CIPHER Parameters PRIVATEKEY PRIVATEKEY SealFinal SealInit SignFinal write write WRITE PRIVATEKEY write decode decrypt chars magic number password version number write failure cipher error converting private expecting private expecting public inconsistent header keyblob header parse error keyblob short encrypted start problems getting password public short short short header unsupported cipher unsupported encryption unsupported components CERTIFICATE TRUSTED CERTIFICATE CERTIFICATE ENCRYPTED PRIVATE PRIVATE PRIVATE PRIVATE ENCRYPTED PRIVATE PRIVATE PARAMETERS PARAMETERS pvkfmt projects openssl mingw devel private projects openssl mingw devel projects openssl mingw devel certs projects openssl mingw devel ABCDEF OPENSSL ALLOW PROXY CERTS default OpenSSL CHECK POLICY SUBJECT NETSCAPE decode NETSCAPE encode ATTRIBUTE create ATTRIBUTE create ATTRIBUTE create ATTRIBUTE ATTRIBUTE check private print EXTENSION create EXTENSION create pubkey parameters entry ENTRY create ENTRY create ENTRY object oneline print print PUBKEY PUBKEY check private print print STORE STORE STORE issuer STORE STORE STORE purpose inherit TRUST TRUST verify filetype decode error check already table invalid directory invalid field invalid trust mismatch values mismatch loading loading defaults method supported verify public decode error public encode error should retry unable parameters chain unable certs public unknown unknown unknown purpose unknown trust unsupported algorithm wrong lookup wrong unable issuer certificate unable certificate unable decrypt certificate signature unable decrypt signature unable decode issuer public certificate signature failure signature failure certificate valid valid certificate expired expired format error certificate notBefore field format error certificate notAfter field format error lastUpdate field format error nextUpdate field memory signed certificate signed certificate certificate chain unable local issuer certificate unable verify first certificate certificate chain certificate revoked invalid certificate invalid certificate markings length constraint exceeded proxy length constraint exceeded proxy certificates allowed please appropriate unsupported certificate purpose certificate trusted certificate rejected application verification failure subject issuer mismatch authority subject identifier mismatch authority issuer serial number mismatch usage include certificate signing unable issuer certificate unhandled critical extension usage include signing usage include digital signature unhandled critical extension invalid inconsistent certificate extension invalid inconsistent certificate policy extension explicit policy Different scope Unsupported extension feature resource subset parent resources permitted subtree violation excluded subtree violation constraints minimum maximum supported unsupported constraint unsupported invalid constraint syntax unsupported invalid syntax validation error error number compatible Client Server email Object Signer responder request server cache certs files directory default smime client server pathlen bcons value section BASIC CONSTRAINTS bitst value section cDigital Signature digitalSignature Repudiation nonRepudiation Encipherment keyEncipherment Encipherment dataEncipherment Agreement keyAgreement Certificate keyCertSign cRLSign Encipher encipherOnly Decipher decipherOnly Client client Server server email Object Signing objsign Unused reserved sslCA emailCA Object Signing objCA value section critical value extku value section EXTENDED USAGE EMPTY Supported Parse Error critical FALSE false value section ABCDEF GENERAL ASIDENTIFIERCHOICE CANONIZE ASIDENTIFIERCHOICE CANONICAL EMAIL ISSUER DIRNAME NCONF CONSTRAINTS GNAMES SECTNAME string ENUMERATED STRING INTEGER AUTHORITY ACCESS NOTICE SECTION POLICY SECTION PROCESS VALUE CERTPOL STRING INTEGER OCTET STRING POINT string SXNET SXNET INTEGER SXNET ulong SXNET SXNET ulong ASIDENTIFIERS STRING AUTHORITY ACCESS AUTHORITY KEYID BASIC CONSTRAINTS EXTENDED USAGE GENERAL NAMES GENERAL IPADDRBLOCKS ISSUER CONSTRAINTS POLICY CONSTRAINTS POLICY MAPPINGS SUBJECT VALIDATE INTERNAL GENERIC EXTENSION value alias nconf section string value parse PURPOSE PURPOSE address object error integer error dirname error distpoint already duplicate error converting error creating extension error extension expected section extension exists extension error extension found extension setting supported extension value error illegal empty extension illegal digit incorrect policy syntax invalid multiple invalid asnumber invalid asrange invalid boolean string invalid extension string invalid inheritance invalid ipaddress invalid invalid argument invalid invalid value invalid number invalid numbers invalid object identifier invalid option invalid policy identifier invalid proxy policy setting invalid purpose invalid invalid section invalid syntax issuer decode error missing value organization numbers config database issuer certificate issuer details policy identifier proxy policy language defined public subject details number digits operation defined othername error policy language already defined policy length policy length already defined policy syntax currently supported policy proxy language requires policy section found unable issuer details unable issuer keyid unknown string argument unknown extension unknown extension unknown option unsupported option unsupported cOTHERNAME cEDIPARTYNAME cGENERAL cGENERAL NAMES ctype value cnameAssigner partyName otherName dNSName Address directoryName ediPartyName iPAddress registeredID cGeneralNames unsupported othername EdiPartyName email DirName invalid Address Registered cothername unsupported unsupported EdiPartyName unsupported email DirName Address Address invalid value section dirName otherName issuer keyid always issuer serial Before After USAGE PERIOD cnotBefore notAfter cUnspecified unspecified Compromise keyCompromise Compromise CACompromise Affiliation Changed affiliationChanged Superseded superseded Cessation Operation Certificate certificateHold Remove removeFromCRL Privilege Withdrawn privilegeWithdrawn Compromise AACompromise sVersion sZone sxnet SXNETID cSXNET czone cversion sUser Notice sOrganization sNumber sExplicit sUnknown Qualifier sPolicy cpols value section policyIdentifier userNotice explicitText organization noticeNumbers Critical Critical Qualifiers CERTIFICATEPOLICIES cPOLICYINFO cPOLICYQUALINFO USERNOTICE cNOTICEREF cpolicyid qualifiers cpqualid cpsuri usernotice other cnoticeref exptext cnoticenos sFull sRelative sOnly Certificates sOnly Certificates sIndirect Reasons EMPTY sOnly Attribute Certificates EMPTY fullname relativename reasons CRLissuer onlyuser onlyCA onlyAA indirectCRL onlysomereasons value section Reasons Issuer POINT cUnused unused Compromise keyCompromise Compromise CACompromise Affiliation Changed affiliationChanged Superseded superseded Cessation Operation Certificate certificateHold Privilege Withdrawn privilegeWithdrawn Compromise AACompromise ISSUING POINT cDIST POINT POINTS cname fullname relativename distpoint onlyattr client sslclient server sslserver Netscape server nssslserver signing smimesign encryption smimeencrypt signing crlsign Purpose helper ocsphelper Stamp signing timestampsign value ACCESS DESCRIPTION cAUTHORITY ACCESS cmethod location cGeneralNames sIssuer scrlUrl scrlNum scrlTime AUTHORITY KEYID ckeyid issuer serial pmaps value section POLICY MAPPING cPOLICY MAPPINGS cissuerDomainPolicy subjectDomainPolicy Require Explicit Policy Inhibit Policy Mapping pcons value section POLICY CONSTRAINTS Address invalid Permitted Excluded permitted excluded ncons GENERAL SUBTREE cNAME CONSTRAINTS cbase minimum maximum cpermittedSubtrees excludedSubtrees PROXY POLICY cPROXY EXTENSION cpolicyLanguage policy proxyPolicy language value section pathlen policy sPath Length Constraint infinite sPolicy Language sPolicy cache modules parse MODULE MODULE MODULE NCONF NCONF NCONF number NCONF number NCONF section NCONF string NCONF NCONF NCONF NCONF error loading cannot missing close square bracket missing equal missing finish function missing function module initialization error close brace environment variable section value unable create section unknown module variable value group OpenSSL default default OpenSSL OpenSSL default openssl OPENSSL OPENSSL finish module retcode value OPENSSL openssl configuration failed wrong number fields looking field failure OPENSSL malloc failure OpenSSL SIGNED cPKCS SIGNER cPKCS ISSUER SERIAL cPKCS ENVELOPE cPKCS RECIP cPKCS CONTENT cPKCS ENVELOPE cPKCS ENCRYPT cPKCS DIGEST cPKCS cPKCS VERIFY ctype enveloped signed enveloped digest encrypted other cversion contents signer cissuer serial digest digest digest unauth issuer serial crecipientinfo algor content algorithm digest cPKCS ATTRIBUTES WRITE SIGNED ATTRIB stream attrib signing attrib smimecap certificate recipient signature signer DIGEST EXISTING DIGEST dataDecode dataFinal dataInit DATASIGN dataVerify decrypt DECRYPT RINFO ENCODE RINFO encrypt final DIGEST signers RECIP cipher content digest signatureVerify SIGNER SIGNER signer simple smimecap verify SMIME SMIME certificate verify error cipher object identifier cipher initialized content present error decode error decrypted wrong length decrypt error digest failure encryption failure encryption supported error adding recipient error setting cipher invalid invalid pointer content parse error parse error missing ceripend content content default digest matching digest found multipart failure multipart boundary recipient matches certificate recipient matches signatures signers content operation supported signature error signer error datafinal datafinal error datasign parse error parse error private match certificate signature failure signer certificate found signing failure signing supported invalid smime error unable certificate unable unable message digest unknown digest unknown operation unsupported cipher unsupported content wrong content wrong smime smime Verify error cPKCS cPKCS SAFEBAG SAFEBAGS cPKCS AUTHSAFES cversion authsafes cdinfo ctype cvalue value value sdsicert cvalue other cattrib cvalue keybag value shkeybag value safes value PARSE PARSE FRIENDLYNAME friendlyname friendlyname localkeyid create decrypt encrypt safebag KEYBAG SHKEYBAG newpass encdata parse crypt keyivgen setup unpack authsafes unpack verify keyusage encrypt structure content decode error encode error encrypt error error setting encrypted invalid argument invalid pointer error error absent generation error setup error string error verify error verify failure parse error algor cipherinit error cipherfinal error crypt error unknown digest algorithm unsupported FLUSH WRITE deflate error inflate error supported length compression undef SIGNATURE cOCSP CERTID cOCSP ONEREQ cOCSP REQINFO cOCSP REQUEST cOCSP RESPBYTES cOCSP RESPONSE cOCSP RESPID cOCSP REVOKEDINFO cOCSP CERTSTATUS cOCSP SINGLERESP cOCSP RESPDATA cOCSP BASICRESP cOCSP CRLID cOCSP SERVICELOC csignatureAlgorithm signature certs chashAlgorithm issuerNameHash issuerKeyHash serialNumber creqCert cversion requestorName requestList requestExtensions ctbsRequest optionalSignature cresponseType response cresponseStatus responseBytes cvalue byName value byKey crevocationTime revocationReason cvalue value revoked value unknown ccertId certStatus thisUpdate nextUpdate singleExtensions cresponderId producedAt responses responseExtensions ctbsResponseData ccrlUrl crlNum crlTime cissuer locator Reason Content application request Content Length https sCertificate sHash Algorithm sIssuer sIssuer sSerial Number UNKNOWN Request Version Requestor Requestor Request Single Extensions Request Extensions Response Response Status Response unknown response Version Responder Produced Responses Status Update Revocation Revocation Reason Update Response Single Extensions Response Extensions successful malformedrequest internalerror trylater sigrequired unauthorized cgood revoked unknown cunspecified keyCompromise cACompromise affiliationChanged superseded certificateHold removeFromCRL cocsp Verify error STRING encode NONCE basic status basic basic verify CHECK DELEGATED CHECK CHECK ISSUER check validity MATCH ISSUERID parse request request verify response basic sendreq sendreq PARSE REQUEST VERIFY certificate verify error digest error nextupdate field error thisupdate field error parsing missing ocspsigning usage nextupdate before thisupdate basic response certificates chain content public response revoked private match certificate request signed response contains revocation trusted server error server response error server response parse error server write error signature failure signer certificate found status expired status valid status unknown message digest unknown unsupported requestorname GENERAL ALLOCATE BOOLEAN GENERAL ALLOCATE PROMPT GENERAL ALLOCATE STRING error string string input boolean input string verify string result method result common cancel characters index large index small result buffer result large result small unknown control command Enter characters openssl Verifying Verify failure OpenSSL default interface ENCDATA PRINCNAME TKTBODY TICKET APREQBODY APREQ CHECKSUM ENCKEY AUTHDATA AUTHENTBODY AUTHENT cetype cipher cnametype namestring ctktvno realm sname encdata cpvno msgtype apoptions ticket authenticator cctype checksum cktype keyvalue cadtype addata cavno crealm cname cksum cusec ctime subkey seqnum authorization CertificateChoices SignerIdentifier SignerInfo SignedData OriginatorInfo OtherKeyAttribute OriginatorPublicKey KEKIdentifier KEKRecipientInfo OtherRecipientInfo RecipientInfo EnvelopedData DigestedData EncryptedData AuthenticatedData CompressedData ContentInfo Attributes Attributes Verify ReceiptsFrom ReceiptRequest Receipt issuer serialNumber cotherCertFormat otherCert certificate extendedCertificate AttrCert AttrCert other ceContentType eContent cversion digestAlgorithm signedAttrs signatureAlgorithm signature unsignedAttrs otherRevInfoFormat otherRevInfo cdigestAlgorithms encapContentInfo certificates signerInfos ccontentType encryptedContent encryptedKey ckeyAttrId keyAttr other rKeyId calgorithm publicKey originatorKey coriginator ckeyIdentifier ckekid coriType oriValue kekri originatorInfo recipientInfos unprotectedAttrs cdigest cmacAlgorithm authAttrs unauthAttrs ATTRIBUTES allOrFirstTier receiptList receiptsFrom receiptsTo signedData envelopedData digestedData encryptedData authenticatedData compressedData smime smime Verify error CHECK CONTENT recipient ReceiptRequest recipient signer SIGNINGTIME compress CompressedData create CompressedData CONTENT MESSAGEDIGEST dataFinal dataInit decrypt decrypt decrypt DigestAlgorithm DigestAlgorithm DigestedData final digest verify encode Receipt encrypt EncryptedContent EncryptedData decrypt EncryptedData encrypt EncryptedData EnvelopedData create EnvelopedData ENVELOPED final CERTIFICATE CHOICES content ECONTENT ENVELOPED REVOCATION CHOICES SIGNED msgSigDigest ReceiptRequest create Receipt verify RecipientInfo decrypt RECIPIENTINFO KEKRI DECRYPT RECIPIENTINFO KEKRI ENCRYPT RecipientInfo kekri RecipientInfo kekri RecipientInfo RECIPIENTINFO DECRYPT RECIPIENTINFO ENCRYPT RecipientInfo RecipientInfo signer RecipientInfo RecipientInfo SignerIdentifier detached SIGNED SIGNERINFO CONTENT SignerInfo SignerInfo verify SIGNERINFO VERIFY SignerInfo verify content receipt stream uncompress verify signer error certificate already present certificate keyid certificate verify error cipher initialisation error cipher parameter initialisation error datafinal error contentidentifier mismatch content found content mismatch content compressed content enveloped content signed content verify error error failure decrypt error digest error error getting public error reading messagedigest attribute error setting error setting recipientinfo invalid encrypted length invalid length error messagedigest attribute wrong length messagedigest wrong length msgsigdigest error msgsigdigest verification failure msgsigdigest wrong length signer signed receipt encrypted transport supported cipher content content default digest digest matching digest matching recipient matching signature msgsigdigest private public receipt request signers private match certificate receipt decode error recipient error signer certificate found signfinal error smime error store error compressed digested encrypted enveloped unable finalize context unknown cipher unknown digest algorihm unknown unsupported compression algorithm unsupported content unsupported algorithm unsupported recipient unsupported recpientinfo unsupported unwrap error verification failure error pqueue SERIAL SIGNING SIGNING VERIFY TOKEN ACCURACY micros ACCURACY millis ACCURACY seconds CHECK IMPRINTS CHECK NONCES CHECK POLICY CHECK SIGNING CERTS CHECK STATUS COMPUTE IMPRINT default engine STATUS IMPRINT imprint nonce policy create response CREATE failure policy accuracy certs policy signer status POLICY GENTIME PRECISION status verify signature verify token accuracy imprint nonce policy serial VERIFY VERIFY VERIFY certificate verify error could engine could failed detached content signing error signing certificate error invalid pointer invalid signer certificate purpose message imprint mismatch nonce mismatch nonce returned content stamp token signature error signed error failed policy mismatch private match certificate response setup error signature failure there signer syscall error token present token present mismatch untrusted setup error datasign unacceptable policy unsupported algorithm unsupported version wrong content utils Version Policy unspecified Nonce unspecified Certificate required utils Status bounds Status description unspecified Failure unspecified Version Policy Serial number stamp Accuracy seconds millis micros Ordering Nonce Status included Granted Granted modifications Rejected Waiting Revocation warning Revoked cunrecognized unsupported algorithm identifier transaction permitted supported submitted wrong format source available requested policy supported requested extension supported additional information requested could understood available request cannot handled system failure Error during serial number generation Unsupported extension available request format system error request version Superfluous message digest parameter message digest Error during TSTInfo generation Error during signature generation Error during response generation Message digest algorithm supported Requested policy supported verify Verify error unknown unspecified badAlg badRequest badDataFormat timeNotAvailable unacceptedPolicy unacceptedExtension addInfoNotAvailable systemFailure failure codes status status granted grantedWithMods rejection waiting revocationWarning verify critical Extensions UNKNOWN Algorithm Message unable certificate unable certificates unable private default variable lookup failed serial builtin engine crypto device invalid variable value signer certs signer default policy other policies digests accuracy millisecs microsecs clock precision digits ordering chain IMPRINT ACCURACY STATUS ISSUER SERIAL SIGNING chash hashed cversion imprint policy nonce extensions cseconds millis micros cserial accuracy ordering cstatus failure cstatus token issuer chash issuer serial ccert policy cMingw runtime failure VirtualQuery failed bytes address Unknown pseudo relocation protocol version Unknown pseudo relocation LIBEAY ACCESS DESCRIPTION ACCESS DESCRIPTION ACCESS DESCRIPTION encrypt encrypt encrypt encrypt encrypt encrypt decrypt encrypt encrypt encrypt encrypt options decrypt encrypt unwrap STRING check STRING STRING STRING STRING print STRING STRING STRING STRING STRING BMPSTRING BMPSTRING BMPSTRING BOOLEAN ENUMERATED ENUMERATED ENUMERATED ENUMERATED ENUMERATED ENUMERATED FBOOLEAN GENERALIZEDTIME GENERALIZEDTIME check GENERALIZEDTIME GENERALIZEDTIME GENERALIZEDTIME GENERALIZEDTIME print GENERALIZEDTIME GENERALIZEDTIME string GENERALSTRING GENERALSTRING GENERALSTRING STRING STRING STRING INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER INTEGER OBJECT create OBJECT OBJECT OBJECT OCTET STRING OCTET STRING OCTET STRING OCTET STRING OCTET STRING OCTET STRING OCTET STRING flags flags flags flags flags flags flags flags flags flags PRINTABLESTRING PRINTABLESTRING PRINTABLESTRING PRINTABLE PRINTABLE PRINTABLE PRINTABLE SEQUENCE SEQUENCE STRING TABLE STRING TABLE cleanup STRING TABLE STRING STRING STRING STRING STRING STRING default STRING length STRING length STRING STRING print STRING print STRING print STRING STRING STRING STRING default STRING default STRING STRING STRING STRING STRING STRING TBOOLEAN check print string generalizedtime octetstring octetstring octetstring octetstring UNIVERSALSTRING UNIVERSALSTRING UNIVERSALSTRING UNIVERSALSTRING string UTCTIME UTCTIME check UTCTIME UTCTIME UTCTIME UTCTIME UTCTIME print UTCTIME UTCTIME string STRING STRING STRING VISIBLESTRING VISIBLESTRING VISIBLESTRING module print check infinite const check infinite digest generate nconf generate object digest print unpack verify mbstring mbstring ncopy object string parse parse primitive primitive object unpack template template template template unpack string verify AUTHORITY ACCESS AUTHORITY ACCESS AUTHORITY ACCESS AUTHORITY KEYID AUTHORITY KEYID AUTHORITY KEYID BASIC CONSTRAINTS BASIC CONSTRAINTS BASIC CONSTRAINTS encrypt encrypt decrypt encrypt encrypt encrypt options BIGNUM accept prefix suffix prefix suffix callback clear flags retry request write guarantee pending reset request wpending debug callback dgram fatal error indent indent indent chain buffer cipher reliable fatal error should retry accept socket callback callback index retry retry reason gethostbyname indent method method accept connect dgram socket nread nread number number written nwrite nwrite printf accept connect datagram socket callback callback cipher flags ndelay snprintf cleanup error fatal error should retry socket ioctl socket flags vfree vprintf vsnprintf write BLINDING convert BLINDING convert BLINDING create param BLINDING BLINDING flags BLINDING thread BLINDING invert BLINDING invert BLINDING BLINDING flags BLINDING thread BLINDING thread BLINDING update start GENCB solve solve locked bntest clear clear clear montgomery generate prime generate prime prime prime prime prime prime params prime prime prime fasttest prime fasttest kronecker lshift lshift quick consttime simple inverse lshift lshift lshift quick lshift quick montgomery reciprocal quick nnmod options print print pseudo pseudo range range reciprocal rshift rshift negative params ENUMERATED INTEGER value clean memdup reverse strdup strlcat strlcpy strndup encrypt encrypt decrypt encrypt encrypt encrypt CBIGNUM CERTIFICATEPOLICIES CERTIFICATEPOLICIES CERTIFICATEPOLICIES ContentInfo ContentInfo ContentInfo ContentInfo print EncryptedData decrypt EncryptedData encrypt EncryptedData EnvelopedData create ReceiptRequest create ReceiptRequest ReceiptRequest values ReceiptRequest ReceiptRequest RecipientInfo decrypt RecipientInfo kekri RecipientInfo kekri RecipientInfo RecipientInfo RecipientInfo signer RecipientInfo RecipientInfo RecipientInfo SignedData SignerInfo SignerInfo SignerInfo signer SignerInfo signer SignerInfo SignerInfo verify SignerInfo verify content CertificateChoices recipient ReceiptRequest recipient signer simple smimecap smimecap standard smimecap compress dataFinal dataInit create decrypt decrypt decrypt digest create digest verify encrypt final RecipientInfos SignerInfos content eContentType signers ReceiptRequest certs detached eContentType signers certs detached receipt signed signed signed signed signed delete signed signed signed signed signed count stream uncompress unsigned unsigned unsigned unsigned unsigned delete unsigned unsigned unsigned unsigned unsigned count verify verify receipt compress block expand block cleanup default config number section string imodule flags imodule module imodule imodule imodule value imodule flags imodule module module module modules finish modules modules modules modules unload parse default method nconf POINTS POINTS POINTS CRYPTO THREADID CRYPTO THREADID CRYPTO THREADID current CRYPTO THREADID callback CRYPTO THREADID CRYPTO THREADID callback CRYPTO THREADID numeric CRYPTO THREADID pointer CRYPTO CRYPTO decrypt CRYPTO encrypt CRYPTO encrypt CRYPTO encrypt CRYPTO encrypt CRYPTO cleanup CRYPTO encrypt CRYPTO decrypt CRYPTO decrypt block CRYPTO encrypt CRYPTO encrypt block CRYPTO CRYPTO options CRYPTO malloc CRYPTO realloc CRYPTO options CRYPTO destroy dynlockid CRYPTO CRYPTO class CRYPTO CRYPTO CRYPTO locked CRYPTO callback CRYPTO dynlock create callback CRYPTO dynlock destroy callback CRYPTO dynlock callback CRYPTO dynlock value CRYPTO CRYPTO implementation CRYPTO index CRYPTO callback CRYPTO CRYPTO locked functions CRYPTO locked functions CRYPTO locking callback CRYPTO debug functions CRYPTO debug options CRYPTO functions CRYPTO functions CRYPTO dynlockid CRYPTO lockid CRYPTO check CRYPTO CRYPTO malloc CRYPTO malloc locked CRYPTO CRYPTO leaks CRYPTO leaks CRYPTO leaks CRYPTO memcmp CRYPTO CRYPTO locks CRYPTO encrypt CRYPTO CRYPTO CRYPTO realloc CRYPTO realloc clean CRYPTO remalloc CRYPTO remove CRYPTO callback CRYPTO dynlock create callback CRYPTO dynlock destroy callback CRYPTO dynlock callback CRYPTO CRYPTO implementation CRYPTO callback CRYPTO locked functions CRYPTO locked functions CRYPTO locking callback CRYPTO debug functions CRYPTO debug options CRYPTO functions CRYPTO functions CRYPTO strdup CRYPTO thread Camellia encrypt Camellia encrypt Camellia encrypt Camellia encrypt Camellia encrypt Camellia decrypt Camellia encrypt Camellia encrypt Camellia encrypt Camellia cksum encrypt encrypt encrypt check parity crypt decrypt encrypt encrypt encrypt encrypt encrypt encrypt encrypt write encrypt encrypt encrypt fcrypt sched encrypt encrypt encrypt options encrypt cksum random passwords password checked unchecked parity string string encrypt OpenSSL check check compute generate generate parameters generate parameters default method index method default method method DHparams DHparams print DHparams print DIRECTORYSTRING DIRECTORYSTRING DIRECTORYSTRING DISPLAYTEXT DISPLAYTEXT DISPLAYTEXT POINT POINT POINT POINT POINT POINT POINT dpname OpenSSL verify generate generate parameters generate parameters default method index method print print default method method setup verify DSAparams DSAparams print DSAparams print METHOD METHOD METHOD dlfcn METHOD METHOD openssl METHOD METHOD convert filename flags default method filename loaded filename method global lookup merge method pathbyaddr default method filename method converter OpenSSL compute default method index default method method ECDSA OpenSSL ECDSA ECDSA ECDSA ECDSA ECDSA verify ECDSA default method ECDSA ECDSA index ECDSA default method ECDSA ECDSA method ECDSA ECDSA ECDSA setup ECDSA ECDSA verify ECPKParameters print ECPKParameters print ECParameters print ECParameters print simple method method method simple method GROUP check GROUP check discriminant GROUP clear GROUP GROUP GROUP GROUP GROUP generator GROUP GROUP GROUP basis GROUP cofactor GROUP curve GROUP curve GROUP curve GROUP degree GROUP order GROUP pentanomial basis GROUP point conversion GROUP GROUP trinomial basis GROUP precompute GROUP method GROUP GROUP curve GROUP curve GROUP curve GROUP precompute GROUP GROUP curve GROUP curve GROUP curve GROUP generator GROUP point conversion GROUP check generate group private public flags method insert method curve precompute print print flags group private public METHOD field POINT POINT point POINT clear POINT POINT POINT POINT POINT POINT Jprojective coordinates POINT affine coordinates POINT affine coordinates POINT point POINT invert POINT infinity POINT curve POINT affine POINT method POINT POINT POINT point POINT point POINT point POINT point POINT Jprojective coordinates POINT affine coordinates POINT affine coordinates POINT compressed coordinates POINT compressed coordinates POINT infinity POINTs affine POINTs builtin curves EDIPARTYNAME EDIPARTYNAME EDIPARTYNAME ENGINE ENGINE module ENGINE ENGINE cleanup ENGINE executable ENGINE ENGINE ENGINE string ENGINE finish ENGINE ENGINE ENGINE ENGINE ENGINE ECDSA ENGINE ENGINE ENGINE STORE ENGINE cipher ENGINE cipher engine ENGINE ciphers ENGINE defns ENGINE function ENGINE default ENGINE default ENGINE default ENGINE default ECDSA ENGINE default ENGINE default ENGINE destroy function ENGINE digest ENGINE digest engine ENGINE digests ENGINE ENGINE index ENGINE finish function ENGINE first ENGINE flags ENGINE ENGINE function ENGINE ENGINE privkey function ENGINE pubkey function ENGINE ENGINE ENGINE ENGINE engine ENGINE ENGINE meths ENGINE ENGINE engine ENGINE meths ENGINE ENGINE client function ENGINE static state ENGINE table flags ENGINE ENGINE builtin engines ENGINE cryptodev ENGINE dynamic ENGINE openssl ENGINE private ENGINE public ENGINE client ENGINE ENGINE ENGINE register ENGINE register ENGINE register ENGINE register ECDSA ENGINE register ENGINE register ENGINE register STORE ENGINE register ENGINE register ENGINE register ENGINE register ECDSA ENGINE register ENGINE register ENGINE register STORE ENGINE register ciphers ENGINE register complete ENGINE register digests ENGINE register meths ENGINE register meths ENGINE register ciphers ENGINE register complete ENGINE register digests ENGINE register meths ENGINE register meths ENGINE remove ENGINE ENGINE ENGINE ENGINE ECDSA ENGINE ENGINE ENGINE STORE ENGINE ciphers ENGINE defns ENGINE function ENGINE default ENGINE default ENGINE default ENGINE default ENGINE default ECDSA ENGINE default ENGINE default ENGINE default ciphers ENGINE default digests ENGINE default meths ENGINE default meths ENGINE default string ENGINE destroy function ENGINE digests ENGINE ENGINE finish function ENGINE flags ENGINE ENGINE function ENGINE privkey function ENGINE pubkey function ENGINE client function ENGINE ENGINE meths ENGINE meths ENGINE table flags ENGINE unregister ENGINE unregister ENGINE unregister ENGINE unregister ECDSA ENGINE unregister ENGINE unregister ENGINE unregister STORE ENGINE unregister ciphers ENGINE unregister digests ENGINE unregister meths ENGINE unregister meths ENGINE error clear error error string error string strings error string state table error error error implementation error library state string table error string strings strings strings strings strings strings strings CRYPTO strings strings strings strings strings ECDSA strings strings ENGINE strings strings strings strings strings strings strings strings strings strings strings strings strings strings crypto strings strings error error error error error error print errors print errors print errors error reason error string release state table remove state remove thread state error implementation unload strings ISSUER SERIAL ISSUER SERIAL ISSUER SERIAL SIGNING SIGNING SIGNING BytesToKey CIPHER block CIPHER cipher CIPHER cleanup CIPHER clear flags CIPHER CIPHER CIPHER flags CIPHER CIPHER CIPHER CIPHER length CIPHER length CIPHER CIPHER CIPHER CIPHER CIPHER flags CIPHER length CIPHER padding CIPHER flags CIPHER param CIPHER block CIPHER CIPHER sorted CIPHER flags CIPHER CIPHER length CIPHER length CIPHER CIPHER param CIPHER CIPHER Cipher CipherFinal CipherFinal CipherInit CipherInit CipherUpdate DecodeBlock DecodeFinal DecodeInit DecodeUpdate DecryptFinal DecryptFinal DecryptInit DecryptInit DecryptUpdate Digest DigestFinal DigestFinal DigestInit DigestInit DigestSignFinal DigestSignInit DigestUpdate DigestVerifyFinal DigestVerifyInit EncodeBlock EncodeFinal EncodeInit EncodeUpdate EncryptFinal EncryptFinal EncryptInit EncryptInit EncryptUpdate cleanup clear flags create destroy flags flags block sorted flags OpenFinal OpenInit CipherInit cleanup broken peerkey keygen operation keygen alias count param private public assign parameters parameters decrypt decrypt decrypt delete derive derive derive encrypt encrypt encrypt count default digest keygen keygen cleanup decrypt derive encrypt keygen paramgen signctx verify verify recover verifyctx missing parameters paramgen paramgen print params print private print public parameters verify verify verify recover verify recover SealFinal SealInit SignFinal VerifyFinal cipher digest camellia camellia camellia camellia camellia camellia camellia camellia camellia camellia camellia camellia camellia camellia camellia camellia camellia camellia cleanup ecdsa cipherbyname digestbyname prompt string string ripemd prompt whirlpool EXTENDED USAGE EXTENDED USAGE EXTENDED USAGE GENERAL NAMES GENERAL NAMES GENERAL NAMES GENERAL GENERAL GENERAL GENERAL otherName GENERAL value GENERAL GENERAL GENERAL print GENERAL othername GENERAL value GENERAL SUBTREE GENERAL SUBTREE GENERAL SUBTREE cleanup flags Final Update ISSUING POINT ISSUING POINT ISSUING POINT APREQBODY APREQBODY APREQBODY APREQ APREQ APREQ AUTHDATA AUTHDATA AUTHDATA AUTHENTBODY AUTHENTBODY AUTHENTBODY AUTHENT AUTHENT AUTHENT CHECKSUM CHECKSUM CHECKSUM ENCDATA ENCDATA ENCDATA ENCKEY ENCKEY ENCKEY PRINCNAME PRINCNAME PRINCNAME TICKET TICKET TICKET TKTBODY TKTBODY TKTBODY Final Update options Final Transform Update Final Transform Update Final Update CONSTRAINTS check CONSTRAINTS CONSTRAINTS CONSTRAINTS NCONF NCONF default NCONF NCONF NCONF NCONF NCONF number NCONF section NCONF string NCONF NCONF NCONF NCONF NETSCAPE SEQUENCE NETSCAPE SEQUENCE NETSCAPE SEQUENCE NETSCAPE SPKAC NETSCAPE SPKAC NETSCAPE SPKAC NETSCAPE decode NETSCAPE encode NETSCAPE NETSCAPE pubkey NETSCAPE NETSCAPE NETSCAPE print NETSCAPE pubkey NETSCAPE NETSCAPE verify NETSCAPE NETSCAPE NETSCAPE NOTICEREF NOTICEREF NOTICEREF cleanup sorted index remove object sigid bsearch bsearch cleanup create create objects sigid sigid sigid BASICRESP BASICRESP BASICRESP delete BASICRESP BASICRESP BASICRESP BASICRESP BASICRESP BASICRESP critical BASICRESP count BASICRESP BASICRESP CERTID CERTID CERTID CERTID CERTSTATUS CERTSTATUS CERTSTATUS CRLID CRLID CRLID ONEREQ ONEREQ ONEREQ delete ONEREQ ONEREQ ONEREQ ONEREQ ONEREQ ONEREQ critical ONEREQ count ONEREQ ONEREQ REQINFO REQINFO REQINFO REQUEST REQUEST REQUEST delete REQUEST REQUEST REQUEST REQUEST REQUEST REQUEST critical REQUEST count REQUEST REQUEST REQUEST print header RESPBYTES RESPBYTES RESPBYTES RESPDATA RESPDATA RESPDATA RESPID RESPID RESPID RESPONSE RESPONSE RESPONSE RESPONSE print REVOKEDINFO REVOKEDINFO REVOKEDINFO SERVICELOC SERVICELOC SERVICELOC SIGNATURE SIGNATURE SIGNATURE SINGLERESP SINGLERESP SINGLERESP delete SINGLERESP SINGLERESP SINGLERESP SINGLERESP SINGLERESP SINGLERESP critical SINGLERESP count SINGLERESP SINGLERESP accept responses archive cutoff basic basic nonce basic status basic basic verify status check nonce check validity nonce crlID reason issuer onereq parse request request request nonce request signed request onereq count request onereq request request request verify count status response create response basic response status response status sendreq sendreq sendreq single status svcloc OPENSSL OPENSSL OPENSSL algorithms OPENSSL algorithms noconf OPENSSL OPENSSL cleanse OPENSSL config OPENSSL gmtime OPENSSL gmtime OPENSSL OPENSSL isservice OPENSSL issetugid OPENSSL builtin modules OPENSSL memcmp OPENSSL config OPENSSL strcasecmp OPENSSL strncasecmp OPENSSL OTHERNAME OTHERNAME OTHERNAME OTHERNAME OpenSSLDie OpenSSL ciphers OpenSSL digests PARAM PARAM PARAM PBEPARAM PBEPARAM PBEPARAM PBKDF PARAM PBKDF PARAM PBKDF PARAM write write SealFinal SealInit SealUpdate SignFinal SignInit SignUpdate write bytes callback header CIPHER DHparams DSAPrivateKey PUBKEY DSAparams ECPKParameters ECPrivateKey PUBKEY NETSCAPE SEQUENCE PUBKEY PrivateKey RSAPrivateKey RSAPublicKey PUBKEY DHparams DSAPrivateKey PUBKEY DSAparams ECPKParameters ECPrivateKey PUBKEY NETSCAPE SEQUENCE PUBKEY Parameters PrivateKey RSAPrivateKey RSAPublicKey PUBKEY write write write DHparams write DSAPrivateKey write PUBKEY write DSAparams write ECPKParameters write ECPrivateKey write PUBKEY write NETSCAPE SEQUENCE write write write PrivateKey write PrivateKey write write PUBKEY write PrivateKey write RSAPrivateKey write RSAPublicKey write PUBKEY write write write write write write write write stream write write stream write DHparams write DSAPrivateKey write PUBKEY write DSAparams write ECPKParameters write ECPrivateKey write PUBKEY write NETSCAPE SEQUENCE write write stream write write PrivateKey write PrivateKey write write PUBKEY write Parameters write PrivateKey write RSAPrivateKey write RSAPublicKey write PUBKEY write write write write write write AUTHSAFES KEYBAG SHKEYBAG keyivgen SAFEBAGS SAFEBAG SAFEBAG SAFEBAG CSPName friendlyname friendlyname localkeyid safes certbag certbag create decrypt friendlyname decrypt encrypt safebag newpass authsafes encdata parse crypt setup unpack authsafes unpack unpack encdata verify certbag certbag keyivgen PBKDF PBKDF algor keyivgen VERIFY DIGEST DIGEST DIGEST ENCRYPT ENCRYPT ENCRYPT CONTENT CONTENT CONTENT ENVELOPE ENVELOPE ENVELOPE ISSUER SERIAL digest ISSUER SERIAL ISSUER SERIAL ISSUER SERIAL RECIP RECIP RECIP RECIP RECIP SIGNED SIGNED SIGNED SIGNER SIGNER SIGNER SIGNER SIGNER SIGNER ENVELOPE ENVELOPE ENVELOPE attrib signing attrib digest attrib content attrib smimecap attribute certificate recipient recipient signature signed attribute signer signer content dataDecode dataFinal dataInit dataVerify decrypt digest attributes encrypt final signers attribute issuer serial signed attribute signer smimecap print other attributes cipher content digest signed attributes signer signatureVerify simple smimecap stream verify keyusage decrypt encrypt broken USAGE PERIOD USAGE PERIOD USAGE PERIOD POLICYINFO POLICYINFO POLICYINFO POLICYQUALINFO POLICYQUALINFO POLICYQUALINFO POLICY CONSTRAINTS POLICY CONSTRAINTS POLICY CONSTRAINTS POLICY MAPPINGS POLICY MAPPING POLICY MAPPING POLICY MAPPING PROXY EXTENSION PROXY EXTENSION PROXY EXTENSION PROXY POLICY PROXY POLICY PROXY POLICY SSLeay bytes cleanup bytes event method pseudo bytes query bytes screen engine method status write encrypt encrypt decrypt encrypt encrypt encrypt options encrypt encrypt decrypt encrypt encrypt encrypt RIPEMD RIPEMD Final RIPEMD RIPEMD Transform RIPEMD Update RSAPrivateKey RSAPrivateKey RSAPublicKey RSAPublicKey SSLeay blinding blinding check flags generate generate default method index method memory method method padding padding padding padding padding padding padding padding check padding check padding check padding check padding check padding check print print private decrypt private encrypt public decrypt public encrypt default method method setup blinding OCTET STRING verify verify OCTET STRING verify encrypt encrypt decrypt encrypt encrypt encrypt Final Transform Update Final Update Final Transform Update Final Update Final Transform Update Final Transform Update SMIME SMIME SMIME SMIME SMIME SMIME write SMIME write SMIME write SSLeay SSLeay version SXNETID SXNETID SXNETID SXNET INTEGER SXNET SXNET ulong SXNET SXNET INTEGER SXNET SXNET ulong SXNET SXNET ACCURACY ACCURACY ACCURACY micros ACCURACY millis ACCURACY seconds ACCURACY ACCURACY micros ACCURACY millis ACCURACY seconds INTEGER print section certs accuracy certs clock precision digits crypto device policy default engine digests chain ordering policies serial signer signer IMPRINT IMPRINT IMPRINT IMPRINT IMPRINT IMPRINT print IMPRINT IMPRINT print delete critical count imprint nonce policy version print imprint nonce policy version VERIFY failure flags policy request accuracy certs clock precision digits policy extension serial signer signer status status create response status token print status verify response verify signature verify token STATUS STATUS STATUS STATUS print delete accuracy critical count imprint nonce ordering policy serial version print accuracy imprint nonce ordering policy serial version VERIFY cleanup VERIFY VERIFY VERIFY ALGOR print print create index index insert write OpenSSL string error string string input boolean input string verify string construct prompt create method destroy method error string string input boolean input string verify string action string output string result result string string default method index input flags method result maxsize result minsize string method closer method flusher method opener method prompt constructor method reader method writer method closer method flusher method opener method prompt constructor method reader method writer method process default method method result USERNOTICE USERNOTICE USERNOTICE WHIRLPOOL WHIRLPOOL BitUpdate WHIRLPOOL Final WHIRLPOOL WHIRLPOOL Update nconf nconf alias nconf nconf cleanup nconf nconf print print section standard extensions value value value value value uchar extensions print section string value value parse section lhash nconf string ALGORS ALGOR ALGOR ALGOR ALGOR ALGOR ALGOR ATTRIBUTE count ATTRIBUTE create ATTRIBUTE create ATTRIBUTE create ATTRIBUTE create ATTRIBUTE ATTRIBUTE ATTRIBUTE ATTRIBUTE object ATTRIBUTE ATTRIBUTE ATTRIBUTE ATTRIBUTE ATTRIBUTE object print METHOD METHOD revoked delete digest serial critical count match print print default method issuer lastUpdate nextUpdate version verify EXTENSIONS EXTENSION create EXTENSION create EXTENSION EXTENSION EXTENSION critical EXTENSION EXTENSION object EXTENSION EXTENSION EXTENSION critical EXTENSION EXTENSION object LOOKUP alias LOOKUP fingerprint LOOKUP issuer serial LOOKUP subject LOOKUP LOOKUP LOOKUP LOOKUP LOOKUP LOOKUP LOOKUP shutdown ENTRY create ENTRY create ENTRY create ENTRY ENTRY ENTRY ENTRY object ENTRY ENTRY ENTRY ENTRY object entry entry entry entry delete entry digest entry count entry index index oneline print print print OBJECT contents OBJECT subject OBJECT retrieve subject OBJECT retrieve match OBJECT count POLICY print PUBKEY PUBKEY PUBKEY param PUBKEY PUBKEY PUBKEY PUBKEY param PURPOSE PURPOSE cleanup PURPOSE PURPOSE PURPOSE sname PURPOSE PURPOSE sname PURPOSE count PURPOSE PURPOSE trust PURPOSE extensions extensions check private delete digest extension email count extension extensions pubkey print print print extension pubkey subject version verify REVOKED REVOKED REVOKED delete REVOKED REVOKED REVOKED REVOKED REVOKED critical REVOKED count REVOKED REVOKED REVOKED REVOKED revocationDate REVOKED serialNumber STORE cleanup STORE STORE current STORE current issuer STORE param STORE parent STORE policy STORE chain STORE issuer STORE chain STORE current STORE error STORE error depth STORE STORE index STORE explicit policy STORE STORE STORE purpose inherit STORE STORE param STORE STORE chain STORE default STORE depth STORE error STORE STORE flags STORE purpose STORE STORE trust STORE verify STORE trusted stack STORE STORE STORE lookup STORE STORE certs STORE STORE subject STORE locations STORE STORE param STORE default paths STORE depth STORE flags STORE purpose STORE trust STORE verify TRUST TRUST cleanup TRUST TRUST TRUST TRUST count TRUST flags TRUST trust TRUST TRUST default VERIFY PARAM policy VERIFY PARAM table VERIFY PARAM clear flags VERIFY PARAM VERIFY PARAM depth VERIFY PARAM flags VERIFY PARAM inherit VERIFY PARAM lookup VERIFY PARAM VERIFY PARAM VERIFY PARAM VERIFY PARAM policies VERIFY PARAM depth VERIFY PARAM flags VERIFY PARAM purpose VERIFY PARAM VERIFY PARAM trust VERIFY PARAM table cleanup reject object trust object alias alias certificate check check check issued check private check purpose check trust current delete digest email issuer serial subject pubkey bitstr email default default default default default default private index critical count issuer pubkey pubkey parameters serialNumber subject gmtime issuer serial issuer serial issuer issuer issuer keyid keyid ocspid print policy check policy level policy level count policy parent policy policy policy qualifiers policy policy level policy policies policy policies policy level count print print print print pubkey digest reject clear issuer notAfter notBefore pubkey serialNumber subject version signature print subject subject subject supported extension trust clear verify verify verify error string delete count delete critical count ZLONG random crypt cksum encrypt encrypt encrypt crypt decrypt encrypt encrypt encrypt encrypt encrypt write encrypt encrypt encrypt fcrypt sched encrypt encrypt encrypt options encrypt cksum random random passwords password string parity string string encrypt shadow check shadow OBJECT ENUMERATED INTEGER STRING GENERAL IPADDRESS IPADDRESS ipadd Finish GetSequence error const Finish restore choice selector field choice selector PrivateKey PrivateKey PublicKey PublicKey words words expand expand words words words words STRING INTEGER OBJECT check defer ACCESS DESCRIPTION STRING BMPSTRING BOOLEAN ENUMERATED GENERALIZEDTIME GENERALSTRING STRING INTEGER OBJECT OCTET STRING PRINTABLE PRINTABLESTRING SEQUENCE STRING UINTEGER UNIVERSALSTRING UTCTIME STRING VISIBLESTRING bytes bytes AUTHORITY ACCESS AUTHORITY KEYID AutoPrivateKey BASIC CONSTRAINTS CERTIFICATEPOLICIES ContentInfo ReceiptRequest POINTS DHparams DIRECTORYSTRING DISPLAYTEXT POINT POINT DSAPrivateKey DSAPrivateKey DSAPrivateKey DSAPublicKey PUBKEY PUBKEY PUBKEY DSAparams ECDSA ECPKParameters ECParameters ECPrivateKey ECPrivateKey ECPrivateKey PUBKEY PUBKEY PUBKEY EDIPARTYNAME ISSUER SERIAL SIGNING EXTENDED USAGE GENERAL GENERAL NAMES ISSUING POINT APREQ APREQBODY AUTHDATA AUTHENT AUTHENTBODY CHECKSUM ENCDATA ENCKEY PRINCNAME TICKET TKTBODY NETSCAPE SEQUENCE NETSCAPE SPKAC NETSCAPE NETSCAPE NOTICEREF Netscape BASICRESP CERTID CERTSTATUS CRLID ONEREQ REQINFO REQUEST RESPBYTES RESPDATA RESPID RESPONSE REVOKEDINFO SERVICELOC SIGNATURE SINGLERESP OTHERNAME PARAM PBEPARAM PBKDF PARAM SAFEBAG DIGEST ENCRYPT CONTENT ENVELOPE ISSUER SERIAL RECIP SIGNED SIGNER ENVELOPE PrivateKey PrivateKey USAGE PERIOD POLICYINFO POLICYQUALINFO PROXY EXTENSION PROXY POLICY PUBKEY PUBKEY PUBKEY PrivateKey PrivateKey PrivateKey PublicKey RSAPrivateKey RSAPrivateKey RSAPrivateKey RSAPublicKey RSAPublicKey RSAPublicKey PUBKEY PUBKEY PUBKEY SXNET SXNETID ACCURACY IMPRINT IMPRINT IMPRINT STATUS USERNOTICE ALGOR ALGORS ATTRIBUTE EXTENSION EXTENSIONS ENTRY PUBKEY REVOKED prime prime prime prime prime prime prime prime string ACCESS DESCRIPTION ENUMERATED INTEGER OBJECT STRING PrivateKey PublicKey STRING INTEGER ACCESS DESCRIPTION STRING BMPSTRING BOOLEAN ENUMERATED GENERALIZEDTIME GENERALSTRING STRING INTEGER OBJECT OCTET STRING PRINTABLE PRINTABLESTRING SEQUENCE STRING UNIVERSALSTRING UTCTIME STRING VISIBLESTRING stream bytes AUTHORITY ACCESS AUTHORITY KEYID BASIC CONSTRAINTS CERTIFICATEPOLICIES ContentInfo ReceiptRequest stream POINTS DHparams DIRECTORYSTRING DISPLAYTEXT POINT POINT DSAPrivateKey DSAPrivateKey DSAPrivateKey DSAPublicKey PUBKEY PUBKEY PUBKEY DSAparams ECDSA ECPKParameters ECParameters ECPrivateKey ECPrivateKey ECPrivateKey PUBKEY PUBKEY PUBKEY EDIPARTYNAME ISSUER SERIAL SIGNING EXTENDED USAGE GENERAL GENERAL NAMES ISSUING POINT APREQ APREQBODY AUTHDATA AUTHENT AUTHENTBODY CHECKSUM ENCDATA ENCKEY PRINCNAME TICKET TKTBODY NETSCAPE SEQUENCE NETSCAPE SPKAC NETSCAPE NETSCAPE NOTICEREF Netscape BASICRESP CERTID CERTSTATUS CRLID ONEREQ REQINFO REQUEST RESPBYTES RESPDATA RESPID RESPONSE REVOKEDINFO SERVICELOC SIGNATURE SINGLERESP OTHERNAME PARAM PBEPARAM PBKDF PARAM SAFEBAG DIGEST ENCRYPT CONTENT ENVELOPE ISSUER SERIAL RECIP SIGNED SIGNER ENVELOPE stream PrivateKeyInfo PrivateKeyInfo PrivateKey PrivateKey PrivateKey PrivateKey USAGE PERIOD POLICYINFO POLICYQUALINFO PROXY EXTENSION PROXY POLICY PUBKEY PUBKEY PUBKEY PrivateKey PrivateKey PrivateKey PublicKey RSAPrivateKey RSAPrivateKey RSAPrivateKey RSAPublicKey RSAPublicKey RSAPublicKey PUBKEY PUBKEY PUBKEY SXNET SXNETID ACCURACY IMPRINT IMPRINT IMPRINT STATUS USERNOTICE ALGOR ALGORS ATTRIBUTE EXTENSION EXTENSIONS ENTRY PUBKEY REVOKED ECPublicKey ENUMERATED ENUMERATED TABLE INTEGER OCTET STRING OBJECT STRING GENERAL GENERAL NAMES encrypt encrypt encrypt encrypt encrypt options decrypt encrypt delete doall doall insert stats stats usage stats usage stats items retrieve stats stats strhash ECPublicKey pitem pitem pqueue pqueue pqueue insert pqueue iterator pqueue pqueue pqueue pqueue pqueue print pqueue INTEGER OCTET STRING delete delete insert sorted shift unshift value string STRING GENERAL GENERAL NAMES GENERAL ReportEventA BitBlt CreateCompatibleDC CreateDCA DeleteDC DeleteObject GetBitmapBits GetDeviceCaps GetObjectA SelectObject CloseHandle ExitProcess FindClose FindFirstFileA FindNextFileA FreeLibrary GetCurrentProcessId GetCurrentThreadId GetFileType GetLastError GetModuleHandleA GetProcAddress GetStdHandle GetTickCount GetVersion GetVersionExA GlobalMemoryStatus LoadLibraryA MultiByteToWideChar SetLastError TlsGetValue VirtualProtect VirtualQuery dllonexit chmod errno fdopen ftime getch isctype pctype setmode snprintf stricmp strnicmp vsnprintf wfopen write abort calloc fclose fflush fgets fopen fprintf fputc fputs fread fseek ftell fwrite getenv gmtime localtime malloc memchr memcmp memmove perror printf qsort raise realloc setvbuf signal sprintf sscanf strcat strchr strcmp strcpy strerror strlen strncmp strncpy strrchr strtol strtoul tolower vfprintf wcsstr GetDesktopWindow MessageBoxA WSACleanup WSAGetLastError WSASetLastError WSAStartup accept closesocket connect gethostbyname getservbyname getsockopt htonl htons ioctlsocket listen ntohl ntohs recvfrom sendto setsockopt shutdown socket ADVAPI KERNEL msvcrt program cannot rdata edata idata reloc stabstrW UJWVS fTilt PbUiro UWVSLUU aUWVS pUiUM UWVSl EtJUED fUWVS sbViE PTiEE PTiuK LVitw fVitw dVitw ViVit OTiKu DOTiu TiVir EAAAAVi DUTiC LUTiC WiCDS TUTiPUTiSP ViEViE VifEH CHARSET ASCII libidn warning libiconv installed cannot convert Nameprep KRBprep Nodeprep Resourceprep plain trace SASLprep ISCSIprep iSCSI ViVixVihVi ViTViLViDVi ViViViViViViViVipVi ViViPVi Output would large small Punycode failed digit letter hyphen input Forbidden leading trailing minus Unknown error Input already contain prefix Input start prefix String idempotent under ToASCII Success String preparation failed Cannot allocate memory System iconv failed System dlopen failed String idempotent under Unicode normalization String preparation failed Unknown error Success Invalid input Output would exceed buffer space provided String limit exceeded Unknown error Success Prohibited bidirectional points input Prohibited points input Conflicting bidirectional properties input Malformed bidirectional string Unknown error conflict profile Output would exceed buffer space provided Error stringprep profile definition Success Forbidden unassigned points input Unicode normalization failed internal error Unknown profile Cannot allocate memory Unknown error level domain found input Success points prohibited level domain Missing input Cannot allocate memory System iconv failed LIBGCCW MINGW sharedptr sizeof SHARED config shared GetAtomNameA sizeof libidn tables isalnum isalpha isascii isblank iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit strcasecmp strncasecmp tolower toupper strerror ascii ascii ascii ascii unicode unicode unicode unicode unicode unicode strerror punycode decode punycode encode punycode strerror iconv stringprep stringprep stringprep stringprep check version stringprep convert stringprep iscsi stringprep iscsi prohibit stringprep kerberos stringprep locale charset stringprep locale stringprep nameprep stringprep plain stringprep profile stringprep profiles stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep saslprep stringprep saslprep space stringprep strerror stringprep trace stringprep normalize stringprep stringprep unichar stringprep normalize stringprep locale stringprep stringprep unichar stringprep nodeprep stringprep nodeprep prohibit stringprep resourceprep strverscmp check check check check check check default table table strerror AddAtomA FindAtomA GetAtomNameA strdup dllonexit assert errno abort calloc fflush fwrite getenv malloc memmove memset realloc strcat strcmp strcpy strlen KERNEL msvcrt msvcrt hViMH PCTiQ uGTiS GTiLU LHTiS PHTiBV projects mingw libidn compiled unsigned unsigned unsigned short short unsigned signed unsigned float double double complex complex float complex double complex double builtin mingw mingw include stdlib mingw mingw include stddef wchar onexit lldiv string string ptrdiff stringprep mingw mingw include unistd mingw mingw include mingw mingw include types sigset sigset ssize ssize intptr fsize finddata attrib create access write finddatai attrib create access write finddata attrib create access write wfinddata attrib create access write wfinddatai attrib create access write wfinddata attrib create access write mingw mingw include stdint least least least least least least least least uintptr intmax uintmax eSTRINGPREP STRINGPREP CONTAINS UNASSIGNED STRINGPREP CONTAINS PROHIBITED STRINGPREP STRINGPREP LEADTRAIL STRINGPREP CONTAINS PROHIBITED STRINGPREP SMALL BUFFER STRINGPREP PROFILE ERROR STRINGPREP ERROR STRINGPREP UNKNOWN PROFILE STRINGPREP FAILED STRINGPREP MALLOC ERROR Stringprep eSTRINGPREP STRINGPREP STRINGPREP UNASSIGNED Stringprep profile flags eSTRINGPREP STRINGPREP STRINGPREP TABLE STRINGPREP UNASSIGNED TABLE STRINGPREP PROHIBIT TABLE STRINGPREP PROHIBIT TABLE STRINGPREP TABLE STRINGPREP TABLE Stringprep profile steps Stringprep table element start Stringprep table element Stringprep table operation flags table Stringprep profile Stringprep profiles tables Stringprep profiles NORMALIZE DEFAULT NORMALIZE NORMALIZE DEFAULT COMPOSE NORMALIZE NORMALIZE NORMALIZE NORMALIZE COMPOSE NORMALIZE GNormalizeMode gunidecomp decomposition canon offset compat offset result unichar outbuf first items items written result length result unicode canonical ordering string decompose hangul result SIndex decomposition compat start offset normalize buffer start compat compose decomp result result index index LIndex SIndex VIndex TIndex stringprep unichar stringprep unichar outbuf outbuf stringprep items written charlen chars stringprep items items items written stringprep normalize result result stringprep normalize cclass combining class table combining class table decomp table decomp expansion string compose compose table compose first single compose second single compose array toutf ptrdiff wchar intptr fsize finddata attrib create access write finddatai attrib create access write finddata attrib create access write wfinddata attrib create access write wfinddatai attrib create access write wfinddata attrib create access write mingw mingw include stdio mingw mingw include stdarg iobuf charbuf bufsiz tmpfname mingw mingw include locale lconv decimal point thousands grouping symbol currency symbol decimal point thousands grouping positive negative digits digits precedes space precedes space stringprep locale charset charset stringprep convert codeset codeset stringprep locale stringprep locale version stringprep check version version version stringprep stringprep character table table stringprep string table tablepos table stringprep maxucs flags profile table maplen prohibited contains contains stringprep maxucs flags profile stringprep maxlen adducs stringprep profile profile profile stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep stringprep profiles stringprep profiles stringprep nameprep stringprep saslprep stringprep saslprep space stringprep plain stringprep trace stringprep kerberos stringprep nodeprep stringprep resourceprep stringprep nodeprep prohibit stringprep iscsi stringprep iscsi prohibit punycode mingw mingw include string punycode least least least least least least least least intptr uintptr intmax uintmax punycode status epunycode success punycode input punycode output punycode overflow ePUNYCODE SUCCESS PUNYCODE INPUT PUNYCODE OUTPUT PUNYCODE OVERFLOW Punycode status punycode ebase initial initial delimiter encode digit adapt delta numpoints firsttime punycode encode input length input flags output length output delta punycode decode input output length output flags stringprep punycode punycode status epunycode success punycode input punycode output punycode overflow ePUNYCODE SUCCESS PUNYCODE INPUT PUNYCODE OUTPUT PUNYCODE OVERFLOW Punycode status punycode eIDNA SUCCESS STRINGPREP ERROR PUNYCODE ERROR CONTAINS CONTAINS CONTAINS MINUS INVALID LENGTH PREFIX ROUNDTRIP VERIFY ERROR CONTAINS PREFIX ICONV ERROR MALLOC ERROR DLOPEN ERROR eIDNA ALLOW UNASSIGNED ASCII RULES flags ascii inlen flags outlen inlen inasciirange match unicode outlen outlensave tmpout addlen tmpout ascii input output start input ascii input output input output flags ascii unicode output buflen unicode output output unicode unicode unicode SUCCESS PROBLEM STRINGPREP ERROR fsize finddata attrib create access write finddatai attrib create access write finddata attrib create access write wfinddata attrib create access write wfinddatai attrib create access write wfinddata attrib create access write eSTRINGPREP STRINGPREP CONTAINS UNASSIGNED STRINGPREP CONTAINS PROHIBITED STRINGPREP STRINGPREP LEADTRAIL STRINGPREP CONTAINS PROHIBITED STRINGPREP SMALL BUFFER STRINGPREP PROFILE ERROR STRINGPREP ERROR STRINGPREP UNKNOWN PROFILE STRINGPREP FAILED STRINGPREP MALLOC ERROR Stringprep eSTRINGPREP STRINGPREP STRINGPREP UNASSIGNED Stringprep profile flags eSTRINGPREP STRINGPREP STRINGPREP TABLE STRINGPREP UNASSIGNED TABLE STRINGPREP PROHIBIT TABLE STRINGPREP PROHIBIT TABLE STRINGPREP TABLE STRINGPREP TABLE Stringprep profile steps Stringprep table element start Stringprep table element Stringprep table operation flags table Stringprep profile Stringprep profiles tables Stringprep profiles first strerror strerror strerror strerror strerror punycode punycode strerror strerror stringprep stringprep strerror strerror table element start table element table version nvalid valid table SUCCESS INVALID NODATA MALLOC ERROR ICONV ERROR NOTLD strerror table element start table element table version nvalid valid table SUCCESS INVALID NODATA MALLOC ERROR ICONV ERROR NOTLD table tables tldtable tables default table overrides tldtable overrides inlen check errpos inlen check errpos errpos check domain check check check valid valid tables projects mingw libidn ctype isascii isalnum isalpha isblank iscntrl isdigit islower isgraph isprint ispunct isspace isupper isxdigit tolower toupper strcasecmp strcase strcasecmp strncasecmp strncasecmp striconv striconv iconv codeset codeset codeset codeset result strverscmp string mingw mingw include ctype wctype strverscmp state state result dllcrt atexit onexit crtstuff rdata toutf rdata version rdata stringprep rdata rdata profiles rdata punycode adapt rdata rdata strerror rdata strerror rdata rdata rdata strerror rdata rdata ctype strcasecmp strncasecmp striconv strverscmp rdata dllmain gccmain pseudo reloc rdata idata idata idata idata hname fthunk idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata hname fthunk idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata hname fthunk idata idata idata idata idata idata crtstuff ctors strcat strcmp errno fwrite memset fflush strdup calloc realloc getenv malloc strcpy abort strlen memmove assert first atexit atexit DllMainCRTStartup combining class table cclass combining class table decomp expansion string decomp table compose array compose second single compose first single compose compose table unichar unicode canonical ordering decompose hangul decomposition normalize stringprep unichar stringprep unichar stringprep stringprep stringprep normalize stringprep normalize stringprep locale charset stringprep convert stringprep locale stringprep locale stringprep check version stringprep character table stringprep string table stringprep stringprep stringprep stringprep profile encode digit punycode encode punycode decode ascii unicode ascii ascii ascii unicode unicode unicode unicode unicode strerror strerror punycode strerror strerror punycode stringprep strerror strerror stringprep strerror table default table check check check check check check valid valid isascii isalnum isalpha isblank iscntrl isdigit islower isgraph isprint ispunct isspace isupper isxdigit tolower toupper strcasecmp strncasecmp iconv state result strverscmp DllMain initialized global dtors global ctors runtime relocator pseudo reloc suffix sharedptr default unexpected sharedptr object mutex globals static globals globals sharedptr initialize RUNTIME PSEUDO RELOC getenv stringprep kerberos stringprep profiles start tables sharedptr terminate start stringprep libmsvcrt iname FindAtomA stringprep abort stack commit stringprep nodeprep prohibit stack reserve major subsystem version stringprep start AddAtomA start stringprep libmoldname iname strdup stringprep stringprep start RUNTIME PSEUDO RELOC commit stringprep iscsi prohibit errno stringprep start minor version libmsvcrt image section alignment memmove libmoldname RUNTIME PSEUDO RELOC sharedptr stringprep plain stringprep stringprep saslprep start stringprep GetAtomNameA dllonexit strcmp alignment malloc major version stringprep realloc stringprep stringprep assert stringprep nameprep dllonexit memset reserve start subsystem strlen fflush strcpy calloc sharedptr unexpected stringprep trace stringprep resourceprep stringprep stringprep nodeprep major image version loader flags stringprep AddAtomA libkernel minor subsystem version minor image version stringprep stringprep stringprep saslprep space stringprep FindAtomA GetAtomNameA RUNTIME PSEUDO RELOC libkernel iname stringprep iscsi strcat fwrite program cannot rdata edata idata reloc bthEZE vUWVS tfUWVS UWVSLu ffUWVS fUWVS fUWVS ftiED fUWVS Utfxf UWVSE UWVSE buOhfU fUWVSL bUWVS bthtZ MUWVS UWVSE UWVSL LOFUS UfUfUfUfUfUfUE UfUfUfUfU UfUfUfU UWVSE XLtxxp UMPHHD fUWVS UWVSL SDPDSHPHSLPLS PHxDXL CLBLC WMIZv fUWVS fUWVS lUWVS uUWVS fUfUfEU bfUVS UWVSLfq fUWVS EEUWVS ffUfUut fECfEf KfMJfM bPLte bHfEfs bHfEED bfEfs bfEfs bfEmUE PUWVS uHfUWVS WVgfffS fUWVS tptxL UWVSLl bUWVS rUWVS EEMUM libgcc register frame libgcj RegisterClasses deregister frame ORIGINAL COLORS binitscr Unable create initscr LINES small initscr Unable create curscr initscr Unable create lastscr initscr Unable create stdscr pdcurses PDCurses PDCurses Public Domain UNKNOWN BREAK RIGHT BACKSPACE CLEAR NPAGE PPAGE CATAB ENTER SRESET RESET PRINT ABORT SHELP LHELP CANCEL CLOSE COMMAND CREATE MESSAGE OPTIONS PREVIOUS REFERENCE REFRESH REPLACE RESTART RESUME SCANCEL SCOMMAND SCOPY SCREATE SELECT SEXIT SFIND SHOME SLEFT SMESSAGE SMOVE SNEXT SOPTIONS SPREVIOUS SPRINT SREDO SREPLACE SRIGHT SRSUME SSAVE SSUSPEND SUNDO SUSPEND RIGHT PADSLASH PADENTER PADENTER PADENTER PADSTOP PADSTAR PADMINUS PADPLUS PADSTOP PADCENTER PADPLUS PADMINUS PADSLASH PADSTAR PADPLUS PADMINUS PADSLASH PADSTAR PADSTOP MINUS EQUAL RIGHT ENTER BQUOTE LBRACKET RBRACKET SEMICOLON FQUOTE COMMA FSLASH BSLASH ENTER PADENTER PADSLASH PADSTAR PADPLUS PADMINUS MOUSE SHIFT SHIFT CONTROL CONTROL RESIZE SDOWN stdscr pdcurses There terminfo database trace debug Unable debug Console ColorTable FontSize FontFamily FontWeight Redirection supported LINES LINES value value RESTORE SCREEN PRESERVE SCREEN Mingw runtime failure VirtualQuery failed bytes address Unknown pseudo relocation protocol version Unknown pseudo relocation PRINTF EXPONENT DIGITS bInfinity libpdcurses COLORS COLOR PAIRS LINES Mouse status clearclipboard debug freeclipboard input modifiers getclipboard return modifiers modifiers blink color title setclipboard ungetch TABSIZE addch addchnstr addchstr addnstr addrawch addstr assume default colors attroff attron attrset baudrate bkgdset border bottom panel change color cbreak chgat clear clearok clrtobot clrtoeol color content color copywin crmode curscr curses version shell curterm panel delay output delch deleteln delscreen delwin derwin doupdate draino dupwin echochar endwin erase erasechar filter fixterm flash flushinp getattrs getbegx getbegy getbkgd getbmap getcurx getcury getmaxx getmaxy getmouse getnstr getparx getpary getstr getwin halfdelay colors panel hline idcok idlok immedok inchnstr inchstr color initscr innstr insch insdelln insertln insnstr insrawch insstr instr intrflush linetouched termresized wintouched isendwin keyname keypad killchar leaveok longname button mouse mouse mouse mouse trafo mouseinterval mousemask panel mvaddch mvaddchnstr mvaddchstr mvaddnstr mvaddrawch mvaddstr mvchgat mvcur mvdelch mvdeleteln mvderwin mvgetch mvgetnstr mvgetstr mvhline mvinch mvinchnstr mvinchstr mvinnstr mvinsch mvinsertln mvinsnstr mvinsrawch mvinsstr mvinstr mvprintw mvscanw mvvline mvwaddch mvwaddchnstr mvwaddchstr mvwaddnstr mvwaddrawch mvwaddstr mvwchgat mvwdelch mvwdeleteln mvwgetch mvwgetnstr mvwgetstr mvwhline mvwin mvwinch mvwinchnstr mvwinchstr mvwinnstr mvwinsch mvwinsertln mvwinsnstr mvwinsrawch mvwinsstr mvwinstr mvwprintw mvwscanw mvwvline napms getmouse panel newpad newterm newwin nocbreak nocrmode nodelay noecho noqiflush noraw notimeout overlay overwrite content panel above panel below panel hidden panel userptr panel window pechochar pnoutrefresh prefresh printw putwin qiflush output redrawwin refresh replace panel request mouse reset reset shell resetterm resetty resize resize window restartterm ripoffline saveterm savetty scanw restore scroll scrollok curterm panel userptr setscrreg setsyx setterm setupterm panel attroff attron attrset clear color label noutrefresh refresh restore touch standend standout start color stdscr subpad subwin syncok attrs termattrs termname tgetent tgetflag tgetnum tgetstr tgoto tigetflag tigetnum tigetstr timeout panel touchline touchwin tparm tputs traceoff traceon ttytype typeahead unctrl ungetmouse untouchwin update panels default colors vidattr vidputs vline printw scanw vwprintw vwscanw waddch waddchnstr waddchstr waddnstr waddrawch waddstr wattr wattr wattr wattr wattroff wattron wattrset wbkgd wbkgdset wborder wchgat wclear wclrtobot wclrtoeol wcolor wcursyncup wdelch wdeleteln wechochar wenclose werase wgetch wgetnstr wgetstr whline winch winchnstr winchstr winnstr winsch winsdelln winsertln winsnstr winsrawch winsstr winstr wmouse position wmouse trafo wmove wnoutrefresh wordchar wprintw wredrawln wrefresh wresize wscanw wscrl wsetscrreg wstandend wstandout wsyncdown wsyncup wtimeout wtouchln wvline RegCloseKey RegOpenKeyExA RegQueryValueExA RegQueryValueExW CloseHandle CreateFileMappingA DuplicateHandle GetConsoleMode GetConsoleOutputCP GetConsoleTitleA GetCurrentProcess GetCurrentProcessId GetFileType GetModuleHandleA GetProcAddress GetStdHandle GetTickCount GetVersion GlobalAlloc GlobalFree GlobalLock GlobalUnlock InterlockedExchange IsDBCSLeadByteEx MapViewOfFile MultiByteToWideChar OpenProcess PeekConsoleInputA ReadConsoleInputA ReadConsoleOutputA SetConsoleMode SetConsoleTitleA Sleep UnmapViewOfFile VirtualProtect VirtualQuery WideCharToMultiByte WriteConsoleOutputA dllonexit codepage errno abort calloc clock fclose fflush fopen fprintf fputc fread fwrite getenv localeconv localtime malloc memcpy memmove sprintf sscanf strcpy strftime strlen vfprintf wcslen CloseClipboard EmptyClipboard FindWindowA GetClipboardData GetKeyState MapVirtualKeyA MessageBeep OpenClipboard SendMessageA SetClipboardData wsprintfA ADVAPI KERNEL msvcrt umoddi udivdi libgcc libgcc MinGW gccbf mingw libgcc unsigned short unsigned iobuf charbuf bufsiz tmpfname short unsigned signed unsigned unsigned float double complex float complex double double complex double libgcc libgcc MinGW gccbf mingw libgcc unsigned short unsigned iobuf charbuf bufsiz tmpfname short unsigned signed unsigned unsigned float double SItype USItype DItype UDItype complex float complex double double complex double DWstruct DWunion udivmoddi umoddi libgcc libgcc MinGW gccbf mingw libgcc unsigned short unsigned iobuf charbuf bufsiz tmpfname short unsigned signed unsigned unsigned float double SItype USItype DItype UDItype complex float complex double double complex double DWstruct DWunion udivmoddi udivdi libgcc config cygwin MinGW gccbf mingw libgcc mingw mingw include libgcc stdio ctors libgcc libgcc mingw mingw include libgcc stdio libgcc libgcc mingw mingw include libgcc stdio libgcc libgcc config cygwin dllcrt onexit atexit cygming crtbegin rdata addch waddch mvaddch addch addchstr addstr waddstr addnstr addstr attroff wattron attron attrsett wchgat mvchgat chgat flash bkgdsetL getbkgdl wbkgd border wvline mvvlineh vline whline mvhline hline wborder border clear werase wclear clear erase color rdata delch wdelch mvdelch delch deleteln deprec getch ungch wgetch mvgetch getstr getnstrL wgetstr getstr rdata getyx getbegyL getbegxd getcury getcurx getpary getparx getmaxy getmaxx setsyx winch mvwinch mvinch inchstr inchstrt initscr endwin newterm initscrd rdata inopts cbreak noecho keypad nodelayH qiflusht timeout crmode noraw insch winsch mvinsch insch insstr insnstr winsstrtA insstr instr winnstrA instr winstr innstr mvinstrC kernel napms draino savettyD resettyE fixtermPF keyname keynametF rdata mouse getbmaplG ungot wmove outopts clearok idlok idcok immedokPL leaveok overlay overlayN copywinP subpad newpad panel rdata printw wprintw printw refresh refreshDd scanw vwscanw mvscanwd wscanw scanw getwin putwin rdata scroll wscrl scroll labels hidden redrawl rdata termattr rdata terminfo vidattrs vidputss setterm tgetent tgetnumLt tgetstrXt tgoto tparm tputs mvcur rdata touch unctrl filter window syncok wsyncup mvwin delwin dupwin subwin derwin wresize newwin debug traceon rdata pdcclip pdcdisp pdcgetsc pdckbd kptab rdata pdcscrn rdata pdcsetsc pdcutil rdata pseudo reloc rdata gccmain dllmain libgcc vsnprintf vsscanf vsscanf pformat rdata gdtoa gdtoa rdata wcrtomb wcrtomb mbrtowc mbrlen mbrtowc dmisc fpclassify rdata gmisc idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata hname fthunk idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata hname fthunk idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata hname fthunk idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata hname fthunk idata idata idata idata idata idata libgcc libgcc cygming crtend sprintfX curscr errno clock ttytype fputc LINES fwrite memcpy fflush fprintf alloca wcslen fread fopen calloc COLORS stdscr TABSIZE getenv malloc fclose strcpy sscanf abort strlen memmoveP Sleep frame debug aranges debug pubnames debug debug abbrev debug debug frame debug debug ranges atexit first atexit DllMainCRTStartup FRAME BEGIN register frame deregister frame frame waddrawch mvwaddrawch mvaddrawch addrawch wechochar echochar mvwaddch waddchnstr addchstr addchnstr waddchstr mvwaddchnstr mvwaddchstr mvaddchnstr mvaddchstr waddnstr mvwaddnstr mvwaddstr mvaddnstr mvaddstr wattroff wattrset standend standout wstandend wstandout getattrs wcolor color wattr wattr wattr wattr mvwchgat wbkgdset mvwvline mvwhline wclrtoeol clrtoeol wclrtobot clrtobot colors color atrtab default colors assume default colors default colors first content change color color content color start color mvwdelch wdeleteln deleteln winsertln winsdelln insdelln insertln mvwinsertln mvwdeleteln mvinsertln mvdeleteln break break check ungetch ungind modifiers modifiers return modifiers flushinp gindex pindex buffer mvwgetch wgetnstr mvwgetnstr mvgetnstr mvwgetstr mvgetstr winchnstr winchstr inchnstr mvwinchnstr mvwinchstr mvinchnstr mvinchstr isendwin termresized curses version resize delscreen Xinitscr nocbreak halfdelay intrflush notimeout noqiflush typeahead wtimeout nocrmode winsrawch mvwinsrawch mvinsrawch insrawch mvwinsch winsnstr mvwinsnstr mvinsnstr mvwinsstr mvinsstr mvwinnstr mvwinstr mvinnstr ripoffline shell saveterm restore reset shell resetterm reset button request mouse wmouse position getmouse mouseinterval wenclose wmouse trafo mouse trafo getmouse ungetmouse mouse mouse mouse mousemask setscrreg wsetscrreg scrollok output overwrite pnoutrefresh prefresh pechochar smaxcol smaxrow smincol sminrow pmincol pminrow panel above panel below panel hidden panel userptr panel window panel userptr override update panels calculate obscure panel panel panel bottom panel panel replace panel panel panel vwprintw printw mvwprintw mvprintw wredrawln redrawwin wnoutrefresh doupdate wrefresh scanw mvwscanw restore marker version label mouse label label length label touch drawone initialize attrset color attroff attron restore clear noutrefresh refresh baudrate erasechar killchar longname termattrs attrs termname wordchar curterm restartterm curterm tgetflag tigetflag tigetnum tigetstr setupterm touchwin touchline untouchwin wtouchln linetouched wintouched strbuf delay output mvderwin wsyncdown wcursyncup makelines makenew resize window traceoff debug clearclipboard freeclipboard setclipboard getclipboard transform gotoyx columns buffer cursor input keyboard binary modifiers mouse mouse status flushinp check count event count press kptab button restore screen screen curstoreal content realtocurs change color console handle console console color content color console window reset shell console reset resize screen close blink title sysname napms report error write memory runtime relocator global dtors global ctors initialized DllMain pseudo reloc debug abbrev debug debug debug pubnames mingw vsnprintf vsnprintf pformat pformat pformat wputchars pformat putchars pformat pformat pformat pformat radix point pformat float pformat efloat pformat efloat pformat float pformat gfloat pformat xfloat mingw pformat wcrtomb wcsrtombs mbrtowc mbstate mbsrtowcs internal mbstate internal mbstate quorem freedtoa alloc alloc fpclassify strcp CritSec cleanup unlock Bfree freelist Balloc private lshift multadd rshift trailz output format umoddi debug frame debug debug aranges debug ranges udivdi FRAME register frame ctors VirtualProtect GetVersion RUNTIME PSEUDO RELOC GetFileType GetConsoleMode getenv CloseHandle start VirtualProtect EmptyClipboard RegisterClasses register frame VirtualQuery CloseClipboard start IsDBCSLeadByteEx libmsvcrt iname InterlockedExchange GlobalLock register frame register frame abort clock characteristics stack commit stack reserve major subsystem version localeconv start wsprintfA WideCharToMultiByte GlobalUnlock IsDBCSLeadByteEx start chkstk bigtens WriteConsoleOutputA VirtualQuery libuser DuplicateHandle GetModuleHandleA register frame OpenProcess GlobalFree libadvapi iname GetClipboardData GetConsoleMode GetConsoleTitleA wsprintfA start fputc RUNTIME PSEUDO RELOC commit RegCloseKey GetCurrentProcess tinytens SetConsoleMode codepage errno GetProcAddress GetProcAddress start MultiByteToWideChar wcslen RegOpenKeyExA ReadConsoleInputA stdscr pseudo panel minor version libmsvcrt ReadConsoleInputA GetTickCount image bottom panel GetConsoleOutputCP section alignment memmove MapViewOfFile mouse status RUNTIME PSEUDO RELOC linesripped GetFileType GetStdHandle quick OpenClipboard MapVirtualKeyA sprintf CreateFileMappingA RegQueryValueExW SetConsoleMode curses notice COLOR PAIRS GetTickCount start OpenClipboard PeekConsoleInputA GetCurrentProcessId libadvapi FindWindowA atrtab GlobalAlloc FindWindowA fread SetConsoleTitleA GetCurrentProcessId dllonexit SendMessageA ReadConsoleOutputA WriteConsoleOutputA memcpy GlobalUnlock panel ReadConsoleOutputA GetConsoleTitleA strftime alignment GetKeyState modifiers SetConsoleTitleA color started malloc major version SetClipboardData CloseHandle GetClipboardData MapViewOfFile GlobalLock GetStdHandle GlobalAlloc RegOpenKeyExA GetModuleHandleA MessageBeep lastscr MapVirtualKeyA dllonexit linesrippedoff fprintf CloseClipboard deregister frame register frame fclose GetKeyState reserve start ImageBase subsystem GetVersion SetClipboardData strlen DuplicateHandle fflush strcpy OpenProcess localtime PeekConsoleInputA calloc MultiByteToWideChar RegisterClasses RegQueryValueExA localtime fopen MessageBeep trace localeconv GetCurrentProcess SendMessageA deregister frame InterlockedExchange major image version RegQueryValueExA loader flags libuser iname strftime CreateFileMappingA libkernel UnmapViewOfFile minor subsystem version minor image version Sleep vfprintf GetConsoleOutputCP GlobalFree UnmapViewOfFile EmptyClipboard sscanf RegCloseKey RUNTIME PSEUDO RELOC libkernel iname WideCharToMultiByte RegQueryValueExW vfprintf fwrite Mouse status Copyright Colin Percival ArtForz pooler mtrlt Optimiztion Pavel Semjanov Kolivas rights reserved Redistribution source binary forms without modification permitted provided following conditions Redistributions source retain above copyright notice conditions following disclaimer Redistributions binary reproduce above copyright notice conditions following disclaimer documentation other materials provided distribution SOFTWARE PROVIDED AUTHOR CONTRIBUTORS EXPRESS IMPLIED WARRANTIES INCLUDING LIMITED IMPLIED WARRANTIES MERCHANTABILITY FITNESS PARTICULAR PURPOSE DISCLAIMED EVENT SHALL AUTHOR CONTRIBUTORS LIABLE DIRECT INDIRECT INCIDENTAL SPECIAL EXEMPLARY CONSEQUENTIAL DAMAGES INCLUDING LIMITED PROCUREMENT SUBSTITUTE GOODS SERVICES PROFITS BUSINESS INTERRUPTION HOWEVER CAUSED THEORY LIABILITY WHETHER CONTRACT STRICT LIABILITY INCLUDING NEGLIGENCE OTHERWISE ARISING SOFTWARE ADVISED POSSIBILITY DAMAGE originally written Colin Percival Tarsnap online backup system constant constant fbcfU xefbe befffaU define rotate define bitselect define define EndianSwap define define define define define restrict state restrict state const block const block const block const block state state define define define define define define define define block block block block block block block block block block block block block block block block define WUpdate WUpdate WUpdate WUpdate WUpdate WUpdate WUpdate WUpdate WUpdate WUpdate WUpdate WUpdate WUpdate undef undef undef undef undef undef undef undef state state fresh restrict state restrict state const block const block const block const block define state define state define state define state define state define state define state define state block block block block block block block block block block block block block block block block undef undef undef undef undef undef undef undef state state constant fixedW edcbf fixed restrict state restrict state state state define define define define define define define define fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW undef undef undef undef undef undef undef undef state state shittify pragma unroll EndianSwap pragma unroll EndianSwap unshittify pragma unroll EndianSwap pragma unroll EndianSwap salsa pragma unroll pragma unroll pragma unroll pragma unroll pragma unroll define Coord define Coord scrypt global restrict lookup shittify const zSIZE const ySIZE LOOKUP LOOKUP const xSIZE CONCURRENT THREADS global xSIZE LOOKUP pragma unroll zSIZE lookup LOOKUP salsa LOOKUP LOOKUP LOOKUP LOOKUP LOOKUP pragma unroll zSIZE lookup LOOKUP salsa endif LOOKUP pragma unroll zSIZE lookup LOOKUP LOOKUP salsa LOOKUP salsa endif pragma unroll zSIZE salsa unshittify define FOUND define SETFOUND Xnonce output output FOUND Xnonce attribute group WORKSIZE kernel search global const restrict input volatile global restrict output global restrict padcache const midstate const midstate const target global tstate tstate ostate ostate input input input midstate midstate fresh ostate ostate fresh tstate tstate tstate tstate tstate tstate input input input input pragma unroll tstate tstate ostate ostate scrypt padcache fixed ostate ostate result EndianSwap ostate target result SETFOUND program cannot rdata framH edata idata reloc fUWVS EEUUM bfUWVSLM fUWVS IbfUWVS UWVSL fUWVS uUWVS fUWVSLu UmffD fUWVS UWVSl fUWVS UWVSl dUWVS UWVSL UWVSL UWVSL EUWVS MfUVS uFxZD fUWVS rfUWVS CfUWVSLu tLwqK fUWVSL RRMbD fUWVS zUWVS OUWVS UWVSLE UmffD UWVSL UmffD fUWVSL RRfUWVSL RRfUWVS RRMUWVS gUWVS UWVSLEx MUWVS UWVSLE UWVSLE UWVSL YUWVS HUWVS fUWVS EUtLE SSUfUWVS UWVSl RRfUWVS UWVSL PUWVSL PPUWVSL AIbuu lAIbU libgcc register frame libgcj RegisterClasses deregister frame quserex QueueUserAPCEx QueueUserAPCEx QueueUserAPCEx mingwm mingwthr remove mingwthr HbMingw runtime failure VirtualQuery failed bytes address Unknown pseudo relocation protocol version Unknown pseudo relocation pthreadGC pthread destroy pthread getdetachstate pthread getinheritsched pthread getschedparam pthread getschedpolicy pthread getscope pthread getstackaddr pthread getstacksize pthread pthread setdetachstate pthread setinheritsched pthread setschedparam pthread setschedpolicy pthread setscope pthread setstackaddr pthread setstacksize pthread barrier destroy pthread barrier pthread barrier pthread barrierattr destroy pthread barrierattr getpshared pthread barrierattr pthread barrierattr setpshared pthread cancel pthread broadcast pthread destroy pthread pthread signal pthread timedwait pthread pthread condattr destroy pthread condattr getpshared pthread condattr pthread condattr setpshared pthread create pthread delay pthread detach pthread equal pthread pthread getconcurrency pthread getschedparam pthread getspecific pthread getunique pthread threadhandle pthread threadid pthread pthread create pthread delete pthread pthread mutex consistent pthread mutex destroy pthread mutex pthread mutex pthread mutex timedlock pthread mutex trylock pthread mutex unlock pthread mutexattr destroy pthread mutexattr getkind pthread mutexattr getpshared pthread mutexattr getrobust pthread mutexattr gettype pthread mutexattr pthread mutexattr setkind pthread mutexattr setpshared pthread mutexattr setrobust pthread mutexattr settype pthread processors pthread pthread rwlock destroy pthread rwlock pthread rwlock rdlock pthread rwlock timedrdlock pthread rwlock timedwrlock pthread rwlock tryrdlock pthread rwlock trywrlock pthread rwlock unlock pthread rwlock wrlock pthread rwlockattr destroy pthread rwlockattr getpshared pthread rwlockattr pthread rwlockattr setpshared pthread pthread setcancelstate pthread setcanceltype pthread setconcurrency pthread setschedparam pthread setspecific pthread destroy pthread pthread pthread trylock pthread unlock pthread testcancel pthread timechange handler pthread process attach pthread process detach pthread features pthread thread attach pthread thread detach exception services cleanup cleanup sched priority sched priority sched getscheduler sched setscheduler sched yield close destroy getvalue multiple timedwait trywait unlink CloseHandle CreateEventA CreateSemaphoreA DuplicateHandle FreeLibrary GetCurrentProcess GetCurrentProcessId GetCurrentThread GetCurrentThreadId GetLastError GetModuleHandleA GetProcAddress GetThreadContext GetThreadPriority LoadLibraryA OpenProcess ReleaseSemaphore ResetEvent ResumeThread SetEvent SetLastError SetThreadContext SetThreadPriority Sleep SuspendThread TlsAlloc TlsFree TlsGetValue TlsSetValue VirtualProtect VirtualQuery WaitForSingleObject dllonexit beginthreadex endthreadex errno ftime setjmp winmajor abort calloc fflush fwrite longjmp malloc memcpy vfprintf KERNEL msvcrt dllcrt onexit atexit cygming crtbegin rdata pthread rdata tlssup rdata pseudo reloc rdata gccmain crtst tlsthrd idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata hname fthunk idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata hname fthunk idata idata idata idata idata idata cygming crtend longjmp errno ftime setjmp fwrite memcpy fflush calloc malloc abort Sleep atexit first atexit DllMainCRTStartup FRAME BEGIN register frame deregister frame frame RegisterCancelation pthread create clone cancel pthread clone acquire release acquire threadDestroy tkAssocCreate tkAssocDestroy relmillisecs exception services getprocessors pthread pthread destroy pthread getdetachstate pthread setdetachstate pthread getstackaddr pthread setstackaddr pthread getstacksize pthread setstacksize pthread getscope pthread setscope pthread barrierattr pthread barrierattr destroy pthread barrierattr getpshared pthread barrierattr setpshared pthread condattr pthread condattr destroy pthread condattr getpshared pthread condattr setpshared pthread pthread equal pthread setconcurrency pthread getconcurrency threadReusePop threadReusePush pthread mutex mutex check recursive mutexattr errorcheck mutexattr pthread mutexattr pthread mutexattr destroy pthread clone pthread mutexattr getpshared pthread mutexattr setpshared pthread mutexattr settype pthread mutexattr gettype pthread mutexattr setrobust pthread mutexattr getrobust robust mutex inherit CSWTCH robust mutex robust mutex remove pthread mutex consistent pthread mutexattr setkind pthread mutexattr getkind pthread threadhandle pthread threadid pthread getunique pthread processors pthread thread attach pthread features pthread rwlockattr pthread rwlockattr destroy pthread rwlockattr getpshared pthread rwlockattr setpshared pthread setschedpolicy pthread getschedpolicy pthread getschedparam pthread setinheritsched pthread getinheritsched pthread getschedparam sched priority sched priority setthreadpriority pthread setschedparam pthread setschedparam sched setscheduler sched getscheduler sched yield transfer close unlink spinlock check pthread pthread detach pthread create pthread delete processTerminate processInitialize pthread process attach quserex pthread getspecific pthread thread detach pthread process detach kernel DllMain pthread setspecific pthread pthread mutex trylock pthread trylock pthread mutex unlock pthread unlock rwlock cancelwrwait pthread mutex destroy pthread destroy pthread barrier pthread mutex timedlock pthread mutex pthread getvalue multiple timedwait cleanup cleanup trywait destroy pthread pthread barrier destroy pthread clone pthread rwlock clone rwlock check pthread rwlock trywrlock pthread rwlock timedrdlock check pthread rwlock pthread rwlock tryrdlock pthread rwlock rdlock semwait pthread destroy pthread rwlock destroy pthread barrier pthread signal pthread rwlock unlock pthread broadcast pthread timechange handler cleanup pthread create threadStart cleanup cleanup pthread cleanup throw cancel pthread cancel callback pthread pthread testcancel timedwait pthread timedwait pthread rwlock timedwrlock pthread pthread rwlock wrlock pthread delay pthread cancel pthread setcanceltype pthread setcancelstate recursive mutexattr errorcheck mutexattr tlregdtor mingw mthread report error write memory runtime relocator global dtors global ctors initialized mingwthr dtors mingwthr mingwthr mingw TLScallback mingwthr remove mingwthr pseudo reloc divdi FRAME register frame ctors VirtualProtect GetThreadPriority RUNTIME PSEUDO RELOC SetLastError GetThreadContext SetEvent CloseHandle start FreeLibrary VirtualProtect mutex RegisterClasses register frame GetLastError VirtualQuery TlsSetValue ftime start TlsGetValue libmsvcrt iname register frame register frame abort characteristics stack commit stack reserve major subsystem version start start CreateSemaphoreA GetLastError CreateSemaphoreA VirtualQuery selfThreadKey mingw initltsdrot force DuplicateHandle GetModuleHandleA register frame OpenProcess start threadSeqNumber RUNTIME PSEUDO RELOC CreateEventA commit SetThreadPriority GetCurrentProcess errno GetProcAddress GetProcAddress start register cancelation CreateEventA concurrency ResumeThread TlsFree beginthreadex mingw gMTKeyDtor cleanupKey minor version libmsvcrt image section alignment LoadLibraryA FreeLibrary SuspendThread endthreadex SetThreadContext RUNTIME PSEUDO RELOC beginthreadex endthreadex start GetCurrentThread ResumeThread TlsAlloc ReleaseSemaphore WaitForSingleObject index features start SetLastError SuspendThread GetCurrentProcessId WaitForSingleObject GetCurrentProcessId dllonexit memcpy alignment SetThreadContext malloc SetThreadPriority major version CloseHandle GetThreadPriority start GetModuleHandleA dllonexit thread reuse ReleaseSemaphore deregister frame register frame GetThreadContext GetCurrentThreadId reserve start SetEvent ImageBase subsystem DuplicateHandle mingw gMTRemoveKeyDtor fflush mingw usemthread OpenProcess calloc RegisterClasses processInitialized winmajor GetCurrentProcess mingw initltssuo force deregister frame major image version ResetEvent loader flags libkernel spinlock minor subsystem version minor image version Sleep vfprintf TlsSetValue ResetEvent mingw initltsdyn force GetCurrentThreadId GetCurrentThread TlsGetValue LoadLibraryA setjmp TlsAlloc TlsFree RUNTIME PSEUDO RELOC libkernel iname callback longjmp threadReuseBottom rwlock vfprintf threadReuseTop fwrite readme program cannot rdata idata uHxDD fUWVS fUWVSl LUWVS fUWVS fUWVS fUWVS fWVSP fUWVS fUWVS UWVSL fUWVS UWVSL fUWVS fFduv UWVSL fUWVS XYCDP NLVDR QHCDDL pFTFP fUWVS UWVSl XUWVS fUWVS CHSLD hfUWVS fUWVS UWVSL fUWVS PfUWVS fUWVS mGHWLD UWVSLl zUWVS fUWVS UWVSP afUWVS UWVSP fUWVS fUWVSP UWVSP fUWVS jfWVS tgkeE yUWVS KfWVS fUWVS UWVSP UWVSLD UWVSP bfUWVS fUWVS qUWVS UWVSPH fUWVS UWVSl fUWVSL xkxgS XUWVSL ZiUWVSL jUWVS aNuWP fUWVSL fUWVS UWVSl UWVSL UWVSL UWVSl fUWVS fUWVS EUWVS MEUBED ZUWVS PPPpy gfffD gfffD ZDUWVSL UWVSl fUWVS fUWVS fUWVS OUWVS UWVSl UWVSL UWVSt wUWVS fVSSt UWVSLl UWVSL aUWVS EUWVS UWVSL fUWVSLD uNfUWVS Ggfff fUWVSL UWVSL UWVSL fUWVSl gfffD EGgfff fUWVS PEtuE fUWVS OkWVS fUWVS fUWVSl fUWVS UWVSLt afUWVS UWVSLl retsD qUWVSQ nEPUA GHBDDx BDGDG cGDtN lPxqg libgcc register frame libgcj RegisterClasses deregister frame Successfully rolled Failed share Failed share found string miner Waiting miner thread sgminer found Invalid Invalid should Invalid value passed cutoff Invalid parameters cutoff Thread being disabled Thread being enabled BLOCK Global quota greatest common denominator Value range Invalid device parameters Invalid parameters devices Invalid value passed devices stratum Discarded Discarded cloned rolled pools quota intensity xintensity rawintensity worksize kernel alexkarnew alexkarold ckolivas zuikkis lookup thread concurrency shaders threads engine memclock memdiff powertune cutoff overheat target reorder shares balance balance round robin rotate kernel sched socks proxy device remove disabled allow mcast mcast mcast sgminer description groups passed target Generated target Malloc failure error decode failed levels includes limit Invalid value SUBTABLE Skipping config option Error parsing option include https Failed malloc httpinput Failed pthread rwlock errno Failed pthread mutex errno RDLOCK ERROR errno RWLOCK ERROR UNLOCK errno Received message Killing watchpool thread Killing watchdog thread Shutting mining threads Killing thread Killing mining threads MUTEX ERROR UNLOCK errno Failed create restart thread WRLOCK ERROR errno MUTEX ERROR errno shares stratum disconnect invalid nonce error Generated stratum merkle Generated stratum header nonce ntime Switching share Found block stale block mismatch stale stratum inactive stale stratum mismatch stale expiry stale mismatch Discarded stales match current Popping queue Waiting available pools available pools resuming queue thread Selecting Discarded queued responding failed return alive testing stability alive Stratum connection resumed sharelog printf error sharelog fwrite error current Network Deleted block database block Stratum detected block sLONGPOLL detected block block detected network before longpoll block detected network Stale Stratum requested restart sLONGPOLL requested restart Pushing queue false previousblockhash target coinbasetxn longpollid expires version curtime submitold workid failed decode previousblockhash target coinbasetxn longpollid expires version curtime submitold workid Failed calloc coinbase decode transactions Failed calloc hashes build Failed calloc build Failed result Failed decode result inval midstate Calculating midstate locally inval target StratumS Failed create stratum stratum sthread Stratum returned empty asking inappropriately nonce length attempting submit shares params method mining submit Submitting share communication resumed submitting Successfully submitted adding stratum shares stratum share submission failure Lowmem option prevents resubmitting stratum share matching session resubmitting stratum share Failed submit stratum share discarding Failed calloc Retrieving block template Testing Failed create stratum sthread Failed create stratum rthread initialisation failed Probing support method getblocktemplate params capabilities coinbasetxn workid coinbase append mutable coinbase append submit coinbase coinbase append support found switching protocol coinbase append support found using getwork protocol Testing stratum Switching Successfully retrieved deciphered Pushing pooltest Successfully retrieved FAILED decipher Malloc failure active Failed create longpoll thread FAILED retrieve credentials invalid Switching first alive watchpool Reaped stable seconds initialisation failed update Successfully retrieved updated Successfully retrieved FAILED decipher FAILED update Failed calloc merkle merkleroot Generated header coinbase longpoll suitable found Block change detection stratum longpoll activated method getwork params polling activated polling activated method getblocktemplate params capabilities coinbasetxn workid coinbase append longpollid Could convert longpoll Pushing rolled converted stage thread Pushing converted stage thread Converted longpoll Failed calloc recruit Failed recruit Recruited tailsprintf buffer overflow thread hashes khash prepare failed exiting mining thread Driver working changed failure disabling Summary runtime statistics Started Runtime Average hashrate shash Solved blocks share difficulty Share submissions Accepted shares Rejected shares Accepted difficulty shares Rejected difficulty shares Reject ratio Hardware errors Utility accepted shares Utility shares solved Stale submissions discarded blocks Unable server occasions items generated locally Submitting remotely delay occasions blocks detected network SOLVED BLOCK Share submissions Accepted shares Rejected shares Accepted difficulty shares Rejected difficulty shares Reject ratio Items worked Stale submissions discarded blocks Unable server occasions Submitting remotely delay occasions Summary device statistics Mined accepted shares requested WARNING Mined shares requested Attempting restart Failed restart application without stratum longpoll watchdog sgminer Started Connected multiple pools block change notify Connected Block Started share management management ettings isplay options Pausing execution scheduled Terminating execution planned restart execution scheduled Restarting execution start scheduled pause execution scheduled Pushing thread Recovered declaring seconds declaring still showing activity suggesting attempt restart Attempting restart responded minutes declaring stale share detected submitting requested stale share detected submitting requested stale share detected discarding discard Pushing stratum queue Discarding removed Pushing submit thread Failed create submit thread Share above target Shutdown signal received resubmit PROOF RESULT Accepted Accepted accept Successfully mined accepted shares requested exiting Rejecting accepting shares enabling PROOF RESULT false booooo reject reason Rejected rejected sequential shares disabling StratumR Stratum select failed value Stratum connection interrupted decode failed error unknown reason method decode failed Accepted untracked stratum share Rejected untracked stratum share Unknown stratum submit Creating extra submit thread share being discarded minimise memory cache share became stale while retrying submit discarding failed submit retrying method submitblock params workid method getwork params sending submit submit upstream failed communication failure discarding shares communication failure caching submissions Failed calloc Failed pthread Failed delimited Failed delimited userpass semicolon separated quota found parameter quota found parameter found Invalid negative parameter quota Setting quota Setting state disabled enabled hidden rejecting Setting Failed malloc input ormal ilent disable output device erbose debug orkTime details interval statistics Select option other return Quiet Verbose Output reset normal Debug Compact device stats protocol debugging Interval seconds Invalid selection interval seconds WorkTime details cantime xpiry config estart Extra items queue scantime seconds expiry seconds Config filename write Enter default exists overwrite Cannot create Failed malloc userpass Input server details Username Password Alive Enabled Disabled Rejecting Quota Current management strategy rotate every minutes ailover emove isable nable change hange management strategy witch nformation press other continue Cannot remove Select number Unable remove activity Select strategy number Select interval minutes SOLVED BLOCK support Queued requests Share submissions Accepted shares Rejected shares Accepted difficulty shares Rejected difficulty shares Reject ratio Items worked Discarded blocks Stale submissions discarded blocks Unable server occasions Submitting remotely delay occasions quota Invalid negative quota Efficiency accepted queued input original Failed allocate device Failed global Failed pthread Failed pthread restart Failed pthread Failed create sgminer local Options config command Options command Unexpected extra commandline arguments Cannot benchmark scrypt Started Loaded configuration Fatal error configuration Configuration could Error configuration partially loaded Start sgminer failed Failed calloc control Devices detected driver driver devices listed Command options device doesn exist devices disabled cannot values passed cutoff ALLOC PERCENT WARNING ALLOC PERCENT specified OBJECTS WARNING OBJECTS specified specify least server setup failed login credentials supplied Failed calloc mining Failed calloc mining thread create failed Probing alive servers found could Please check details below servers input likely input wrong forgotten workers Password Press sgminer again servers could Exiting watchpool thread create failed watchdog thread create failed failed reinit thread create failed thread create failed input thread create failed incorrect total control threads should update message received providing enough Generated stratum Generated benchmark Generated Pushing cloned available stage thread Cloned getwork sending Failed decode upstream Failed upstream failed retrying Generated getwork Failover Round Robin Rotate Balance Balance thread devices tclear current curses unlock curses switch pools clear restart allow Allow access given Prefix addresses subnets description Description placed status header default sgminer version groups letter groups defining groups listen Enable default disabled mcast Enable Multicast listener default disabled mcast Multicast listen address mcast expected Multicast message mcast Description appended Multicast reply default mcast Multicast listen network Allow enabled listen address default number miner Automatically adjust speeds maintain target temperature Automatically adjust engine clock speeds maintain target temperature balance Change multipool strategy failover share balance benchmark sgminer benchmark produces shares compact compact display without device statistics debug Enable debug output device Select device value range comma separated default disable rejecting Automatically disable pools continually reject shares expiry Upper bound seconds after getting consider share stale failover backup pools primary lagging failover switch delay Delay seconds before switching failed protocol redirect different getwork protocol stratum dyninterval refresh interval using dynamic intensity platform Select OpenCL platform mining threads Number threads value comma separated engine engine clock range value range comma separated percentage range value range comma separated OpenCL device order manually paired OpenCL memclock memory clock value separate commas memdiff fixed difference clock speed between memory powertune powertune percentage value separate commas reorder Attempt reorder devices according voltage Volts value separate commas lookup lookup scrypt mining comma separated intensity Intensity scanning default maintain desktop interactivity xintensity Shader based intensity scanning overrides intensity rawintensity rawintensity intensity scanning overrides intensity xintensity kernel Specify where kernel files kernel Override kernel value comma separated balance Change multipool strategy failover quota based balance Interval seconds between output every lowmem Minimise caching shares memory applications delay Impose small delays networking overload routers Disable display library monitoring setting parameters disable restart attempt restart submit stale submit shares detected stale Password bitcoin server device stats Force verbose output device statistics poolname protocol Verbose protocol level activities queue Minimum number items queued quiet Disable logging output display status errors quota quota combination server balance strategy quotas quiet Disable output remove disabled Remove disabled devices entirely exist retries retry pause rotate Change multipool strategy failover regularly rotate minutes round robin Change multipool strategy failover round robin failure Upper bound spent scanning current seconds sched start start mining without sched mining without start shaders shaders tuning scrypt comma separated sharelog Append share shares after mining shares default unlimited socks proxy socks proxy state Specify state startup default enabled keepalive keepalive packet cutoff Temperature which device automatically disabled value comma separated hysteresis temperature fluctuate outside limits automanaging speeds overheat Temperature which device throttled while automanaging value comma separated target Temperature which device should while automanaging value comma separated Disable ncurses formatted screen output thread concurrency thread concurrency scrypt mining comma separated bitcoin server Username bitcoin server vectors verbose verbose output stderr status output worksize Override detected optimal worksize value comma separated userpass Username Password bitcoin server worktime Display extra debug information pools stats sgminer clear stratum shares stale errors update stats share submit async submit thread entry share result restart thread discard stale flush queue statline entry sharelog queued queued bymidstate clone queued bymidstate queued completed queued bymidstate queue hashmeter disable miner thread longpoll thread lpcurrent current block exists curblock total staged supports resume parse stratum response stratum stratum sthread decode thread blank statline before enable device config format configuration example example configuration default config Specify filename default config Loaded start saving without Print message ndevs Display number detected OpenCL platform information version Display version watchdog thread cutoffs signal update clone available Failed malloc escape false unknown ignored Unknown unknown ignored RESTART RESTART MUTEX ERROR errno MUTEX ERROR UNLOCK errno Failed malloc pooldetails restarting sgminer killing sgminer Socket Error reply select failed failed first first remaining count remaining count Accepted Ignored Invalid Multicast Address multicast listener available mcast setsockopt REUSEADDR failed mcast failed mcast failed Failed malloc mcast expect mcast failed count mcast mcast request mcast request ignored invalid mcast request mcast reply failed mcast reply succeeded mcast request sgminer mcast STATUS command STATUS Description BestShare bestshare queue scantime expiry DEBUG Silent Quiet Verbose Debug RPCProto PerDevice WorkTime DEBUG CHECK CHECK Exists Access DEVDETAILS DEVDETAILS Driver Kernel Model Device RDLOCK ERROR errno RWLOCK ERROR UNLOCK errno Count request gpudisable gpuid request gpuenable gpuid Pushing thread CONFIG CONFIG Count Count Strategy Interval Device Windows Failover ScanTime Queue Expiry VERSION SGMiner VERSION scrypt Method Current Block Current Block Network Difficulty STATS Elapsed Calls Calls Attempts Expire Count Count Times Bytes Times Bytes Bytes Bytes STATS Alive NoStart Initialising Enabled Status Temperature Speed Percent Clock Memory Clock Voltage Activity Powertune Rejected Hardware Errors Utility Intensity Share Share Total Difficulty Accepted Difficulty Rejected Share Difficulty Valid Device Hardware Device Rejected Device Elapsed SUMMARY SUMMARY Found Blocks Getworks Discarded Stale Failures Local Remote Failures Network Blocks Utility Difficulty Stale Share Rejected Stale Disabled Rejecting POOLS Priority Quota Works Shares Proxy Proxy Stratum Stratum Active Stratum Unknown reason NOTIFY Reason Thread Thread Thread Queue Nostart Thermal Cutoff Comms Error Throttle NOTIFY Failed calloc mcast mcast thread create failed UNKNOWN available running Failed pthread mutex errno Failed malloc ipgroups invalid group invalid group group duplicate group Failed malloc group commands Failed malloc noprivgroup commands Failed malloc ipaccess Failed calloc ipaccess running valid specified initialisation failed initialisation failed failed trying again failed initialisation failed running access running UNRESTRICTED access running local access failed connection failed command parameter access denied command terminating failed initiate restart aborting failed initiate clean aborting unknown command group version config pools summary gpuenable gpudisable gpurestart gpucount switchpool addpool poolpriority poolquota enablepool disablepool removepool gpuintensity gpumem gpuengine gpufan gpuvddc privileged notify devdetails restart stats check failover debug setconfig lockstats Invalid range already enabled already disabled restarted first enable message pools Summary disable restart attempted Invalid command Missing device parameter count SGMiner versions Invalid Missing Missing parameter Invalid range Switching Missing comma after number available Invalid intensity range intensity sgminer config Setting memoryclock reported failure Setting memoryclock reported success Setting clock reported failure Setting clock reported success Setting reported failure Setting reported success Setting reported failure Setting reported success Missing filename parameter create Configuration saved Access denied command Privileged access Enabling Changed priorities Duplicate specified Disabling already enabled already disabled Missing addpool details Invalid addpool details Reached maximum number pools Added Cannot remove Cannot remove active Removed Notify Device Details sgminer stats Missing check Check command Missing parameter false Invalid parameter should false Failover sgminer Debug settings config Unknown config Invalid number range Invalid negative number quota Missing config parameters Missing config value Statistics Statistics Missing parameters Invalid parameter Zeroed stats summary Zeroed stats without summary stats created stats enabled error Interrupted system number Permission denied address Invalid argument sockets Operation would block Operation progress Operation already progress Socket operation socket Destination address required Message Protocol wrong socket protocol option Protocol supported Socket supported Operation supported socket Protocol family supported Address family supported Address already assign requested address Network Network unreachable connection reset Software caused connection abort Connection reset buffer space available Socket already connected Socket connected after socket shutdown references splice Connection timed Connection refused levels symbolic links route Directory empty processes users quota exceeded Stale handle levels remote Network system unavailable Winsock version range WSAStartup called Graceful shutdown progress found found Unknown error minecoin switchpool gpuenable summary Thread failed Thread hashes Thread failed queue Device Device Device failed start Device heated Device reached thermal cutoff Device comms error thread restart thread tidyup CONNECT CONNECT Sending proxy Couldn proxy after sending CONNECT Received proxy Error proxy Couldn proxy Success negotiating proxy SGMINER Invalid address specified socks proxy response SOCKS server Failed create hTimer liSleep Failed SetWaitableTimer liSleep Failed WaitForSingleObject liSleep Ntime Ntime found expire Ntime expiry Polling Reject Reason Stratum RWLOCK ERROR UNLOCK errno WRLOCK ERROR errno MUTEX ERROR errno MUTEX ERROR UNLOCK errno invalid Failed calloc truncated failed Failed malloc swork merkle Failed convert header header parse notify Failed calloc parse notify Failed calloc parse notify Failed calloc coinbase parse notify coinbase coinbase bbversion ntime clean target false positive target Proof Target TrgVal protocol request Content Length sgminer Agent Content application Mining Extensions longpoll midstate rollntime submitold Mining Hashrate Expect RDLOCK ERROR errno request failed Empty received decode failed protocol response result error unknown reason failed reject reason Failed connect Failed malloc proxy Closing socket stratum Timed waiting socket Socket closed waiting Failed Failed realloc sockbuf Failed parse terminated string RECVD Write select failed Failed stratum Stratum failed stratum active Failed resolve wrong Failed getaddrinfo Failed socket Failed connect Succeeded delayed connect Select timeout failed connect Succeeded immediate connect Failed connect stratum Attempting negotiate SOCKS proxy response SOCKS server Success negotiating SOCKS proxy Unsupported proxy Failed calloc sockbuf method mining subscribe params method mining subscribe params sgminer method mining subscribe params sgminer Failed initiate stratum Timed waiting response initiate stratum decode failed mining notify Failed sessionid initiate stratum Failed nonce initiate stratum Failed initiate stratum Failed calloc nonce stratum session confirmed mining subscribe extranonce extran Failed resume stratum trying afresh Initiate stratum failed method params method decode failed mining difficulty difficulty changed difficulty changed difficulty client reconnect Reconnect requested client version result sgminer error client message message method mining authorize params stratum failed Stratum authorisation success Failed malloc Failed malloc Failed malloc Failed errno Failed errno cgsem Failed errno cgsem Failed timedwait errno cgsem nettime nettime socks socks socks socks proxy abcdefbin freezethaw create stratum recalloc clear parse notify parse suspend stratum initiate stratum setup stratum socket realloc strcat completion thread completion timeout logging MUTEX ERROR UNLOCK errno MUTEX ERROR errno curses globalThreads hashes Error clSetKernelArg params failed Error Enqueueing kernel command queue Error clEnqueueReadBuffer failed error clEnqueueReadBuffer Error failed found something Failed calloc opencl thread Failed choose kernel opencl thread thread virtual Failed thread disabling device Restarting restarting sgminer Press enter continue alexkarnew alexkarold ckolivas zuikkis initCl finished Found driver opencl tailsprintf buffer overflow clDevicesNum returned error usable Invalid parameters vector Invalid value passed vector Invalid parameters Invalid value passed worksize Invalid parameters lookup Invalid parameters thread concurrency Invalid parameters kernel Invalid parameter kernel Invalid parameters Invalid description Invalid value passed Invalid parameters threads Invalid value passed threads Invalid parameters engine Invalid value passed engine Invalid parameters Invalid value passed Invalid parameters memclock Invalid value passed memclock Invalid parameters memdiff Invalid value passed memdiff Invalid parameters powertune Invalid value passed powertune Invalid parameters Invalid value passed Invalid parameters overheat Invalid value passed overheat Invalid parameters target Invalid value passed target Invalid parameters intensity disabled Invalid value passed intensity Invalid parameters shader based intensity Invalid value passed shader based intensity Invalid value passed shader based intensity Invalid parameters intensity Invalid value passed intensity devices detected Disabling extra threads dynamic dynamic intensity dyninterval Enabled Disabled hange settings threads manage initialised Thread ALIVE reported reported Never started paused nable isable estart ntensity perimental intensity Intensity press other continue Select enable Invalid selection Device already enabled restart device before enabling Pushing thread Select disable Device already disabled Select change intensity intensity Invalid input Dynamic enabled Intensity Select change experimental intensity experimental intensity Experimental intensity Select change intensity intensity intensity Select attempt restart Attempting restart threads Select change settings Hardware reporting number active devices attempt restart reference thread exists Thread still exists killing Thread longer exists Failed reinit Reinit thread Failed reinit thread thread create failed Thread restarted opencl opencl statline opencl statline before pause dynamic threads manage reinit zDMarker found Unable reading Error clGetPlatformsIDs failed OpenCL installed clGetPlatformsIDs returned platforms OpenCL installed Error Getting Platform clGetPlatformsIDs Error Getting Platform clGetPlatformInfo Platform vendor Platform Platform version Error Getting Device Platform devices Potential instructions identified ALIGN Patched total instructions Error Getting Platforms clGetPlatformsIDs Specified platform exist platform found Platform vendor Platform Platform version Error Getting Device devices Error Getting Device Selected Invalid Error Creating Context Error Creating Command Queue Error Failed clGetDeviceInfo trying DEVICE EXTENSIONS media Error Failed clGetDeviceInfo trying DEVICE VERSION OpenCL OpenCL Error Failed clGetDeviceInfo trying DEVICE PREFERRED VECTOR WIDTH Preferred vector width reported Error Failed clGetDeviceInfo trying DEVICE GROUP group reported Error Failed clGetDeviceInfo trying DEVICE COMPUTE UNITS shaders calculated Error Failed clGetDeviceInfo trying DEVICE ALLOC alloc Selecting kernel ckolivas Tahiti Kernel alexkarnew experimental alexkarnew alexkarnew Kernel alexkarold experimental alexkarold alexkarold ckolivas ckolivas Kernel experimental Kernel zuikkis experimental zuikkis selecting lookup selecting thread concurrency Unable calloc binary sizes Unable calloc binaries binary found generating source Unable binary generating source Unable fread binaries Error Loading Binary program Loaded binary image Error Loading Binary program LOOKUP CONCURRENT THREADS WORKSIZE Setting worksize Patched source vectors BITALIGN media found setting BITALIGN Cedar Redwood Juniper Cypress Hemlock Caicos Turks Barts Cayman Antilles Wrestler Zacate WinterPark media found BITALIGN patch requiring device found patched source patch requiring device found patch GOFFSET CompilerOptions Error Building Program clBuildProgram Error Getting program PROGRAM DEVICES clGetProgramInfo Error Getting program PROGRAM BINARY SIZES clGetProgramInfo Binary found binary OpenCL compiler generated sized binary Error Getting program PROGRAM BINARIES clGetProgramInfo bytes begin patching Error Releasing program clReleaseProgram Unable create Unable fwrite binaryfile Initialising kernel bitalign vectors worksize search Error Creating Kernel program clCreateKernel Maximum buffer memory device supports scrypt settings Creating scrypt buffer sized Error clCreateBuffer padbuffer decrease increase Error clCreateBuffer CLbuffer Error clCreateBuffer outputBuffer invalid nonce count error NONCE found Failed malloc postcalc async Failed create postcalc thread lPxqadl MUTEX ERROR UNLOCK errno MUTEX ERROR errno fanrange supported Unhandled error memoryclock supported engineclock supported supported fanspeed supported doesn support percent write fanspeed failed Overheat detected increasing Temperature target increasing fanspeed Temperature degrees below target decreasing fanspeed Temperature climbed while below target increasing fanspeed Temperature dropping while target range decreasing fanspeed Temperature rising while target range increasing fanspeed Setting percentage Number devices Failed atiadlxx atiadlxy Unable library Control Create Control Destroy Adapter NumberOfAdapters Adapter AdapterInfo Display DisplayInfo Adapter Control Refresh Adapter VideoBiosInfo Overdrive Adapter Accessibility missing broken initialisation error refresh error Overdrive Temperature Overdrive CurrentActivity Overdrive ODParameters Overdrive FanSpeedInfo Overdrive FanSpeed Overdrive FanSpeed Overdrive ODPerformanceLevels Overdrive ODPerformanceLevels Overdrive PowerControl Overdrive PowerControl Overdrive FanSpeedToDefault Overdrive missing broken Overdrive found Overdrive FanSpeed Overdrive ThermalController Overdrive Temperature Overdrive Capabilities Overdrive StateInfo Overdrive CurrentStatus Overdrive PowerControl Overdrive PowerControlInfo Overdrive PowerControl Overdrive FanSpeed Overdrive State Overdrive PowerControl Overdrive missing broken Overdrive found Cannot number adapters Error Adapter AdapterInfo Error Error adapters found Found adapters index FAILED index partno version Failed Adapter Error Device enabled assigned iAdapterIndex iPresent strUDID iBusNumber iDeviceNumber iFunctionNumber iVendorID found devices opencl There possibly least doesn support OpenCL feature reliably OpenCL Adapter returns meaning order might confused found devices opencl There possibly display attached Mapping OpenCL device device WARNING Number OpenCL devices match Hardware monitoring match devices Mapping device according Number order hardware monitoring enabled Adapter index adapter partno version Failed Overdrive ODParameters Failed Overdrive ODPerformanceLevels Setting engine clock Setting memory clock Setting voltage Failed Overdrive FanSpeedInfo Failed Overdrive FanSpeed default value Failed Overdrive PowerControl detected thermal cutoff limit disabling Overheat detected decreasing clock speed Temperature degrees target decreasing clock speed Temperature below target increasing clock speed Device recovered temperature below target enabling enabled disabled Target temperature Overheat temperature Cutoff temperature Toggle Change arget verheat utoff press other continue autotune Resetting startup settings engine clock autotune Resetting engine clock startup settings Enter target temperature Invalid temperature Enter overheat temperature Enter cutoff temperature Speed Engine Clock Memory Clock Activity Powertune autotune engine clock autotune Change utomatic ngine emory oltage owertune enginerange supported Enter engine clock speed Value outside range Driver reports success check values below Failed modify engine clock speed Enter percentage Failed modify speed memoryrange supported Enter memory clock speed Failed modify memory clock speed vddcrange supported Enter voltage Failed modify voltage Enter powertune value powertune supported Failed modify powertune value Linux XDisplay Linux Console environment Failed update values Display resource conflict Invalid callback Disabled adapter Pointer error Function supported driver Invalid display index Invalid controller index Invalid index Invalid parameter Invalid parameter initialized Generic error escape failed unlock htarget Failed malloc scratchbuf scanhash scrypt stream buffer stream buffer stream buffer count unable decode premature input unexpected newline control character invalid escape invalid Unicode invalid Unicode allowed negative integer integer saved saved length number overflow false string expected duplicate object expected expected expected invalid token unexpected token expected expected string wrong arguments buffer stream stdin unable callback false value strconv strbuffer value strbuffer length Option unknown entry Option description cannot Option begin Option invalid option Option invalid short option Option arguments Invalid argument Usage default false number range negative POSIXLY CORRECT parse offset unrecognized option doesn allow argument requires argument Mingw runtime failure VirtualQuery failed bytes address Unknown pseudo relocation protocol version Unknown pseudo relocation PRINTF EXPONENT DIGITS inity Infinity ABCDEF abcdef cleanup getinfo perform reset setopt global cleanup global slist append slist CloseHandle ExitProcess FreeLibrary GetCurrentThread GetLastError GetModuleHandleA GetProcAddress GetStdHandle InterlockedExchange IsDBCSLeadByteEx LoadLibraryA MultiByteToWideChar SetThreadPriority SetWaitableTimer Sleep SleepEx TlsGetValue VirtualProtect VirtualQuery WaitForSingleObject WideCharToMultiByte access execv fdopen isatty strdup getmainargs environ fmode assert cexit errno isctype onexit pctype setmode snprintf stricmp strnicmp vsnprintf abort atexit calloc fclose fflush fgetc floor fopen fputc fread fseek ftell fwrite getenv localeconv localtime malloc mbstowcs memchr memcmp memmove perror qsort raise realloc setlocale signal sscanf strcat strchr strcmp strcpy strcspn strerror strncat strncmp strncpy strstr strtod strtok strtol tolower toupper vfprintf wcslen wcstombs clBuildProgram clCreateBuffer clCreateKernel clEnqueueReadBuffer clFinish clGetDeviceIDs clGetDeviceInfo clGetPlatformIDs clGetPlatformInfo clGetProgramInfo clReleaseContext clReleaseKernel clReleaseProgram clSetKernelArg LINES cbreak delwin endwin erase getmaxx getmaxy halfdelay idlok immedok initscr leaveok mvwhline mvwin mvwprintw newwin nocbreak noecho scrollok stdscr touchwin wattroff wattron wclear wclrtoeol wgetch wgetnstr wmove wprintw wrefresh wresize pthread cancel pthread broadcast pthread destroy pthread pthread signal pthread timedwait pthread pthread create pthread detach pthread pthread mutex destroy pthread mutex pthread mutex pthread mutex trylock pthread mutex unlock pthread rwlock pthread rwlock rdlock pthread rwlock trywrlock pthread rwlock unlock pthread rwlock wrlock pthread pthread setcancelstate pthread setcanceltype pthread testcancel cleanup cleanup sched yield destroy timedwait trywait timeBeginPeriod timeEndPeriod WSAGetLastError WSAFDIsSet accept closesocket connect freeaddrinfo getaddrinfo getsockopt htonl htons ioctlsocket listen ntohl ntohs recvfrom select sendto setsockopt shutdown socket libcurl KERNEL msvcrt msvcrt OpenCL libpdcurses pthreadGC WINMM mainCRTStartup WinMainCRTStartup atexit onexit tlregdtor index start callback mingw initltsdrot force mingw initltsdyn force mingw initltssuo force fmode fmode features features fpreset runtime relocator global dtors global ctors mingwthr mingwthr remove mingw TLScallback RUNTIME PSEUDO RELOC RUNTIME PSEUDO RELOC mingw snprintf mingw vprintf round mingw vsnprintf mingw vfprintf mingw vsprintf lround dirname imaxdiv fpclassify strtoimax basename strtof mingw pformat increment decrement strtodg gdtoa wcrtomb wcsrtombs mbrtowc mbsrtowcs mbrlen alloc alloc freedtoa quorem Balloc Bfree multadd lshift strcp bigtens tinytens ratio match copybits rshift trailz gethex hexnan hexdig hexdig onexit iobuf DWORD PVOID FLOATING FLOATING CONTEXT CONTEXT PCONTEXT EXCEPTION RECORD PEXCEPTION RECORD EXCEPTION POINTERS EXCEPTION POINTERS PIMAGE CALLBACK startupinfo DWORD WINBOOL ULONG PVOID LPVOID HANDLE ULONG PIMAGE CALLBACK IMAGE DIRECTORY IMAGE DIRECTORY IMAGE DIRECTORY VARENUM iobuf DWORD PVOID MEMORY BASIC INFORMATION MEMORY BASIC INFORMATION iobuf ptrdiff runtime pseudo reloc runtime pseudo reloc runtime pseudo reloc DWORD WINBOOL LPVOID HANDLE ENTRY ENTRY CRITICAL SECTION DEBUG PCRITICAL SECTION DEBUG CRITICAL SECTION CRITICAL SECTION mingwthr mingwthr iobuf iobuf iobuf iobuf iobuf wchar iobuf intmax imaxdiv intmax uintmax wchar iobuf ULong wchar iobuf mbstate pformat intarg pformat state pformat length pformat pformat fpreg ULong union union Bigint Bigint ULong union Bigint Bigint wchar mbstate wchar mbstate ULong Bigint Bigint DWORD HANDLE ENTRY ENTRY CRITICAL SECTION DEBUG PCRITICAL SECTION DEBUG CRITICAL SECTION CRITICAL SECTION ULong union Bigint Bigint ULong union Bigint Bigint ULong Bigint Bigint ULong Bigint Bigint ULong Bigint Bigint ULong mingw MinGW mingwrt unsigned short unsigned onexit iobuf charbuf bufsiz tmpfname short unsigned signed unsigned unsigned DWORD float PVOID FLOATING ControlWord StatusWord TagWord ErrorOffset ErrorSelector DataOffset DataSelector RegisterArea NpxState FLOATING CONTEXT ContextFlags FloatSave SegGs SegFs SegEs SegDs SegCs EFlags SegSs ExtendedRegisters CONTEXT PCONTEXT EXCEPTION RECORD ExceptionCode ExceptionFlags ExceptionAddress NumberParameters PEXCEPTION RECORD EXCEPTION POINTERS ContextRecord EXCEPTION POINTERS PIMAGE CALLBACK newmode startupinfo mingw mainargs dummy environ start mingw fmode mingw CRTStartup features exception handler exception handler action reset mainCRTStartup WinMainCRTStartup atexit onexit fmode fmode mingw tlssup MinGW mingwrt DWORD unsigned WINBOOL unsigned short unsigned float unsigned short ULONG PVOID LPVOID HANDLE unsigned signed ULONG PIMAGE CALLBACK IMAGE DIRECTORY EndAddressOfRawData AddressOfIndex AddressOfCallBacks SizeOfZeroFill Characteristics IMAGE DIRECTORY IMAGE DIRECTORY double VARENUM EMPTY DISPATCH ERROR VARIANT UNKNOWN DECIMAL HRESULT SAFEARRAY CARRAY USERDEFINED LPSTR LPWSTR RECORD FILETIME STREAM STORAGE STREAMED OBJECT STORED OBJECT OBJECT CLSID VECTOR ARRAY BYREF RESERVED ILLEGAL ILLEGALMASKED TYPEMASK iobuf charbuf bufsiz tmpfname pfunc tlregdtor callback mingw initltsdrot force mingw initltsdyn force mingw initltssuo force mingw CRTglob MinGW mingwrt mingw CRTfmode MinGW mingwrt fmode mingw txtmode MinGW mingwrt unsigned short unsigned short unsigned fmode mingw features MinGW mingwrt features unsigned mingw MinGW mingwrt fpreset mingw pseudo reloc MinGW mingwrt builtin DWORD unsigned unsigned short unsigned float unsigned short PVOID unsigned signed MEMORY BASIC INFORMATION BaseAddress AllocationBase AllocationProtect RegionSize State Protect MEMORY BASIC INFORMATION double iobuf charbuf bufsiz tmpfname ptrdiff addend target runtime pseudo reloc target flags runtime pseudo reloc magic magic version runtime pseudo reloc pseudo reloc start reldata reloc target newval report error write memory oldprot runtime relocator mingw gccmain MinGW mingwrt unsigned short unsigned global dtors global ctors nptrs unsigned initialized mingw crtst MinGW mingwrt mingw tlsthrd MinGW mingwrt DWORD unsigned WINBOOL unsigned short unsigned float unsigned short LPVOID HANDLE unsigned signed ENTRY Flink Blink ENTRY CRITICAL SECTION DEBUG CriticalSection ProcessLocksList EntryCount ContentionCount Spare CRITICAL SECTION DebugInfo LockCount RecursionCount OwningThread LockSemaphore SpinCount PCRITICAL SECTION DEBUG CRITICAL SECTION mingwthr mingwthr mingwthr dtors value mingwthr mingwthr remove mingw TLScallback hDllHandle reason reserved mingwthr mingwthr mingw pseudo reloc MinGW mingwrt RUNTIME PSEUDO RELOC RUNTIME PSEUDO RELOC mingw mingwex stdio snprintf MinGW mingwrt mingwex unsigned short unsigned builtin iobuf charbuf bufsiz tmpfname short mingw snprintf length retval mingw mingwex stdio vprintf MinGW mingwrt mingwex unsigned short unsigned builtin iobuf charbuf bufsiz tmpfname short mingw vprintf mingw mingwex round generic MinGW mingwrt mingwex double double short unsigned unsigned round internal saved required round mingw mingwex stdio vsnprintf MinGW mingwrt mingwex unsigned short unsigned builtin iobuf charbuf bufsiz tmpfname short mingw vsnprintf length retval mingw mingwex stdio vfprintf MinGW mingwrt mingwex unsigned short unsigned builtin iobuf charbuf bufsiz tmpfname short mingw vfprintf stream mingw mingwex stdio vsprintf MinGW mingwrt mingwex unsigned short unsigned builtin iobuf charbuf bufsiz tmpfname short mingw vsprintf retval mingw mingwex lround generic MinGW mingwrt mingwex double double short unsigned unsigned round internal saved required lround mingw mingwex dirname MinGW mingwrt mingwex unsigned wchar short unsigned iobuf charbuf bufsiz tmpfname short dirname retfail locale refcopy refpath refname basename mingw mingwex imaxdiv MinGW mingwrt mingwex short unsigned signed unsigned short unsigned unsigned intmax imaxdiv imaxdiv numer denom result mingw mingwex fpclassify MinGW mingwrt mingwex double double fpclassify short unsigned mingw mingwex strtoimax MinGW mingwrt mingwex unsigned short unsigned signed unsigned short unsigned intmax uintmax isspace isupper islower strtoimax endptr accum minus toobig pctype pctype mingw mingwex basename MinGW mingwrt mingwex unsigned wchar short unsigned iobuf charbuf bufsiz tmpfname short basename retfail locale refcopy refpath refname mingw mingwex gdtoa strtof MinGW mingwrt mingwex unsigned short unsigned ULong unsigned STRTOG STRTOG Normal STRTOG Denormal STRTOG Infinite STRTOG STRTOG NaNbits STRTOG NoNumber STRTOG Retmask STRTOG STRTOG Inexlo STRTOG Inexhi STRTOG Inexact STRTOG Underflow STRTOG Overflow nbits rounding sudden underflow double double strtof float mingw mingwex stdio pformat MinGW mingwrt mingwex unsigned wchar short unsigned builtin iobuf charbuf bufsiz tmpfname short signed unsigned unsigned mbstate unsigned double double pformat pformat llong pformat ulong pformat ullong pformat ushort pformat uchar pformat short pformat pformat pformat intarg PFORMAT PFORMAT WIDTH PFORMAT PRECISION PFORMAT PRECISION PFORMAT pformat state PFORMAT LENGTH PFORMAT LENGTH SHORT PFORMAT LENGTH PFORMAT LENGTH LLONG PFORMAT LENGTH pformat length flags width rplen rpchr count quota expmin pformat pformat fpreg mantissa pformat fpreg exponent pformat fpreg double pformat fpreg ldouble pformat fpreg bitmap pformat fpreg pformat fpreg STRTOG STRTOG Normal STRTOG Denormal STRTOG Infinite STRTOG STRTOG NaNbits STRTOG NoNumber STRTOG Retmask STRTOG STRTOG Inexlo STRTOG Inexhi STRTOG Inexact STRTOG Underflow STRTOG Overflow nbits rounding sudden underflow Round Round Round Round pformat bufsiz fpclassifyl pformat pformat pformat numeric value pformat xfloat width isnanl pformat exponent digits exponent digits pformat wcputs pformat pformat pformat pformat wputchars count pformat putchars count pformat pformat pformat width shift pformat radix point rpchr pformat float pformat efloat pformat efloat pformat float pformat gfloat pformat xldouble mingw pformat flags format argval length backtrack width argval pctype pctype mingw mingwex gdtoa strtodg MinGW mingwrt mingwex unsigned short unsigned ULong unsigned STRTOG STRTOG Normal STRTOG Denormal STRTOG Infinite STRTOG STRTOG NaNbits STRTOG NoNumber STRTOG Retmask STRTOG STRTOG Inexlo STRTOG Inexhi STRTOG Inexact STRTOG Underflow STRTOG Overflow nbits rounding Round Round Round Round double double union union maxwds mantbits decrement increment exact carry lostbits trunc strtodg abits bbbits decpt denorm dsign esign finished nbits rvbits delta decimalpoint dplen break infnanexp notOK undfl fivesbits mingw mingwex gdtoa gdtoa MinGW mingwrt mingwex unsigned short unsigned ULong unsigned STRTOG STRTOG Normal STRTOG Denormal STRTOG Infinite STRTOG STRTOG NaNbits STRTOG NoNumber STRTOG Retmask STRTOG STRTOG Inexlo STRTOG Inexhi STRTOG Inexact STRTOG Underflow STRTOG Overflow nbits rounding sudden underflow double double union maxwds bitstob nbits bbits gdtoa kindp ndigits decpt bbits check leftright nbits quick delta failed digit digits clear trailing round accept roundoff chopzeros mingw mingwex wcrtomb MinGW mingwrt mingwex wchar short unsigned unsigned short mbstate unsigned signed unsigned unsigned float wcrtomb invalid codepage string wcrtomb wcsrtombs pctype pctype mingw mingwex mbrtowc MinGW mingwrt mingwex wchar short unsigned unsigned short mbstate unsigned signed unsigned unsigned float mbrtowc shift state codepage string mbrtowc mbsrtowcs internal mbrlen mbstate pctype pctype mingw mingwex gdtoa dmisc MinGW mingwrt mingwex unsigned short unsigned ULong unsigned double double maxwds alloc alloc freedtoa quorem borrow carry unsigned mingw mingwex gdtoa MinGW mingwrt mingwex DWORD unsigned unsigned short unsigned float unsigned short HANDLE unsigned signed ENTRY Flink Blink ENTRY CRITICAL SECTION DEBUG CriticalSection ProcessLocksList EntryCount ContentionCount Spare CRITICAL SECTION DebugInfo LockCount RecursionCount OwningThread LockSemaphore SpinCount PCRITICAL SECTION DEBUG CRITICAL SECTION ULong double double union maxwds cleanup unlock Balloc Bfree multadd carry carry lshift borrow strcp CritSec freelist private bigtens tinytens mingw mingwex gdtoa smisc MinGW mingwrt mingwex unsigned short unsigned ULong unsigned double double union maxwds dplen ratio match copybits mingw mingwex gdtoa gmisc MinGW mingwrt mingwex unsigned short unsigned ULong unsigned double double maxwds rshift trailz mingw mingwex gdtoa MinGW mingwrt mingwex unsigned short unsigned ULong unsigned double double maxwds carry mingw mingwex gdtoa gethex MinGW mingwrt mingwex unsigned short unsigned ULong unsigned STRTOG STRTOG Normal STRTOG Denormal STRTOG Infinite STRTOG STRTOG NaNbits STRTOG NoNumber STRTOG Retmask STRTOG STRTOG Inexlo STRTOG Inexhi STRTOG Inexact STRTOG Underflow STRTOG Overflow nbits rounding sudden underflow Round Round Round Round double double maxwds gethex decpt esign havedig nbits lostbits decimalpoint pcheck unsigned mingw mingwex gdtoa hexnan MinGW mingwrt mingwex unsigned short unsigned ULong unsigned STRTOG STRTOG Normal STRTOG Denormal STRTOG Infinite STRTOG STRTOG NaNbits STRTOG NoNumber STRTOG Retmask STRTOG STRTOG Inexlo STRTOG Inexhi STRTOG Inexact STRTOG Underflow STRTOG Overflow nbits rounding sudden underflow double double shift hexnan havedig nbits unsigned mingw mingwex gdtoa MinGW mingwrt mingwex unsigned short unsigned unsigned double double htinit unsigned hexdig mingw mingw include mingw include stdio stdlib windef winnt signal mingw mingw include mingw include tlssup windef winnt basetsd stdio wtypes mingw CRTglob mingw CRTfmode mingw txtmode mingw features features NKvYuYvuuuwYu mingw mingw mingw mingw include mingw include mingw include pseudo reloc stdarg windef stddef winnt stdio mingw gccmain mingw crtst mingw mingw include tlsthrd windef winnt winbase mingw pseudo reloc mingw mingwex stdio mingw mingw include mingw include snprintf stddef stdarg stdio mingw mingwex stdio mingw include mingw mingw include vprintf stdio stdarg mingw mingwex mingw include round generic round internal mingw mingwex stdio mingw mingw include mingw include vsnprintf stddef stdarg stdio mingw mingwex stdio mingw include mingw mingw include vfprintf stdio stdarg mingw mingwex stdio mingw include mingw mingw include vsprintf stdio stdarg mingw mingwex mingw include lround generic round internal mingw mingwex mingw mingw include mingw include dirname stddef stdio mingw mingwex mingw include imaxdiv inttypes stdint mingw mingwex mingw include fpclassify mingw mingwex mingw include strtoimax ctype stdint stdlib mingw mingwex mingw mingw include mingw include basename stddef stdio mingw mingwex gdtoa strtof gdtoa mingw mingwex stdio mingw include mingw mingw include mingw mingwex gdtoa pformat stddef stdarg stdio wchar gdtoa wctype mingw mingwex gdtoa strtodg gdtoaimp gdtoa mingw mingwex gdtoa gdtoa gdtoaimp gdtoa mingw mingwex mingw mingw include mingw include wcrtomb common stddef wchar stdlib wctype mingw mingwex mingw mingw include mingw include mbrtowc common stddef wchar stdlib wctype APghwK mingw mingwex gdtoa dmisc gdtoaimp gdtoa mingw mingwex gdtoa mingw include gdtoaimp windef winnt winbase gdtoa tNkYi mingw mingwex gdtoa smisc gdtoaimp gdtoa mingw mingwex gdtoa gmisc gdtoaimp gdtoa mingw mingwex gdtoa gdtoaimp gdtoa mingw mingwex gdtoa gethex gdtoaimp gdtoa mingw mingwex gdtoa hexnan gdtoa gdtoaimp mingw mingwex gdtoa gdtoaimp fmode callback onexit ExceptionRecord atexit lpreserved index hDllHandle start dwReason features image RUNTIME PSEUDO RELOC RUNTIME PSEUDO RELOC precision width stream intlen state value exponent tinytens Bigint bigtens sudden underflow Bigint bigtens bucket bucket internal mbstate Bigint Bigint Bigint Bigint Bigint hexdig Bigint hexdig hexdig atexit onexit cygming crtbegin rdata sgminer jedata printf fprintf sprintf statusy lockp condt blocks urlxI rdata sprintf doquit tidyup WSAbuf mcast message dozero gpuvddcT gpufan gpumem addpoolL dosave gpudev summaryt notify rdata sprintf liSleep thawD pushP subtime addtime cgtime tdiff rdata logging fprintfxp printf applogp rdata driver opencl sprintf rdata sprintf advance initCl rdata findnonce rdata lpInfo rdata scrypt rdata value rdata sprintf dumpL rdata memory hashtable primes rdata strbuffer error strconv rdata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata hname fthunk idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata hname fthunk idata idata idata idata idata idata idata idata idata idata idata idata idata idata hname fthunk idata idata idata idata idata idata sigaction sigprocmask memmem memmem sprintf fprintf rdata usage sprintfx rdata helpers printf sprintf rdata parse rdata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata hname fthunk idata idata idata idata idata idata tlssup rdata CRTglob CRTfmode txtmode features fpreset pseudo reloc rdata gccmain crtst tlsthrd rdata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata hname fthunk idata idata idata idata idata idata snprintf vprintf round generic round rdata vsnprintf vfprintf vsprintf lround generic lround rdata dirname dirname rdata imaxdiv imaxdiv lldiv fpclassify strtoimax strtoll basename rdata strtof strtof rdata pformat rdata strtodg rdata gdtoa gdtoaLR rdata wcrtomb wcrtombf mbrtowc mbrtowci mbrlen dmisc rdata smisc gmisc gethex hexnan rdata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata hname fthunk idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata hname fthunk idata idata idata idata idata idata cygming crtend idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata rdata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata idata cexit strcspnl strcat strcmp newwin ntohl logwin getmaxx errno pools idlok execv strncatd codes fputc toupper nettimeHd isatty cbreak fdopen initscr raise fwrite strncpy mainwin immedok leaveok tolower fflush alloca strtol wcslen strdup nDevs fread fopen calloc fmode realloc memchr wmove getenv wprintw access strtod strchr fgetc signal malloc fclose wattronL strcpy sscanf fseek memcmp devices perror strtok abort getmaxy erase strncmp ftell htons endwin delwin memmove noecho mvwin htonl wgetch cnfbuf assert ntohs qsort Sleep floor strstr wresize wclear frame debug aranges debug pubnames debug pubtypes debug debug abbrev debug debug frame debug debug debug ranges mingw CRTStartup exception handler mainCRTStartup WinMainCRTStartup debug abbrev debug debug debug frame debug debug pubnames debug pubtypes debug aranges debug ranges debug FRAME BEGIN register frame deregister frame frame balance loadbalance enable debug reinit device statline stats thread prepare limit thread prepare error thread shutdown thread enable detect total escape default config default config mcast mcast mcast groups description allow verusage packagename sharelog sharelog width suffix string thread reportout should binary midstate disable curses windows enable curses windows logstart logcursor lowprio thread applog miner thread timeout display unworkable select longpoll priority schedtime cutoff cutoff disable datestamp adjust quota range rotate intrange devices enabled devices enabled display detect stratum remove clean decay ntime discard write config config table shares removedisabled bestshare share default target nonce nonce bymidstate completed reinit device config config loaded config include count parse config array index fileconf setup rwlock rwlock constprop mutex mutex constprop unlock thread watchpool watchdog mining devices queued bymidstate mutex unlock noyield disable curses curses active restart threads restart threads queued queued completed queued bymidstate mutex stats total start tclear restart clear stratum shares sshare stratum shares errors entry total staged clear curses active locked check winsizes switch logsize constprop devcursor devices logwin update clear logwin curses wlogprint stratum block switch pools currentpool update stats current stale benchmark discard stale staged rollable select rotating restart thread resus stratum resumed needed lpcurrent sharelog sharelog current current block blocktime block block stage decode decode stratum sthread lowmem noffset clone clone queued bymidstate active protocol thread pools active watchpool thread rotate longpoll thread recruit entry statline hashmeter total local mhashes statusline driver queued print summary datestamp clean restart initial watchdog thread width hwwidth wuwidth blank statline before submit async submit stale submit noffset nonce submit tested submit nonce share result stratum rthread submit thread sighandler userpass total users total passes total userpasses total quota state poolname curses input curses display options options details input display pools input thread enable curses device enable device sgminer count threads devids devices cmdline table total control threads gwsched input bench block unlikely startup escape string print dorestart restart mutex mutex unlock noyield check connect ipaccess copyadvanceafter constprop pooldetails const constprop constprop restart thread WSAErrorMsg result mcast thread escape string const double elapsed timeval lockstats setconfig debugstate failoveronly checkcommand checkcommand devdetails devdetails splitgpuvalue gpuengine gpuintensity removepool disablepool enablepool poolquota poolpriority switchpool gpucount gpurestart gpudisable gpuenable gpuenable minerconfig apiversion privileged mhtotal utility volts minecoin itemstats minerstats percent gpustatus devstatus poolstatus poolstatus notifystatus CSWTCH mcast databuf negotiate upload socks negotiate stratum debug socket array string array string unlock constprop constprop mutex constprop freezethaw clear proxytype proxynames parse notify fulltest freeze timespec timeval timeval timespec timespec timeval timeraddspec cgtimer cgtimer cgtimer cgsleep cgsleep cgsleep cgsleep tdiff tdiff extract sockaddr proxy suspend stratum stratum initiate stratum restart stratum parse method stratum error realloc strcat RenameThread cgsem create cgsem completion thread cgsem cgsem mswait cgsem reset cgsem destroy cancel completion timeout transf update final opencl prepare opencl thread shutdown clStates opencl scanhash blank opencl thread queue scrypt kernel opencl thread prepare failmessage opencl statline reinit opencl device opencl statline before opencl statline before opencl detect select kernel vector worksize shaders lookup thread concurrency kernel threads engine memclock memdiff powertune overheat target intensity xintensity rawintensity print ndevs pause dynamic threads manage reinit contents clDevicesNum patch opcodes postcalc precalc postcalc async fanpercent Overdrive FanSpeed unlock Memory Alloc fanrange error CSWTCH Overdrive Temperature engineclock Overdrive CurrentActivity memclock activity fanspeed fanpercent powertune Overdrive PowerControl stats memoryclock Overdrive ODPerformanceLevels Overdrive ODPerformanceLevels engineclock fanspeed Overdrive FanSpeed autotune Control Create Control Destroy Adapter NumberOfAdapters Adapter AdapterInfo Display DisplayInfo Adapter Control Refresh Adapter VideoBiosInfo Overdrive Adapter Accessibility Overdrive ODParameters Overdrive FanSpeedInfo Overdrive PowerControl Overdrive FanSpeedToDefault Overdrive FanSpeed Overdrive ThermalController Overdrive Temperature Overdrive Capabilities Overdrive StateInfo Overdrive CurrentStatus Overdrive PowerControl Overdrive PowerControlInfo Overdrive PowerControl Overdrive FanSpeed Overdrive State Overdrive PowerControl iNumberAdapters autotune defaultfan defaultengine change autosettings change gpusettings clear Transform scrypt passwdpad innerpad outerpad ihash finalblk scrypt regenhash scrypt scanhash scrypt array array object object object object object clear object object object object object value object object array array array array extend string nocheck string string value string nocheck string integer integer value integer value number value false false delete array clear array remove array append array object nocheck object update missing object object update existing object update array insert equal string buffer callback error close decode unicode escape stream unget stream unget unsave parse value parse loads loadb loadf callback object compare serials string object compare strbuffer indent whitespace callback dumpf dumps jsonp malloc malloc jsonp jsonp strdup alloc funcs hashtable insert bucket hashtable clear hashtable hashtable close hashtable hashtable hashtable hashtable clear hashtable hashtable hashtable hashtable hashtable serial hashtable value hashtable encode check first check iterate check string strbuffer strbuffer close strbuffer clear strbuffer value strbuffer steal value strbuffer append bytes strbuffer append strbuffer append strbuffer jsonp error source jsonp error jsonp error jsonp error jsonp strtod jsonp dtostr sigaction handler action array sigaction blocked handler pending array sigismember sigemptyset sigaddset sigdelset sigfillset sigpending sigprocmask blocked handlers signal critical factorization needle check first first first register register table parse table stderr stderr invalid argument usage invbool invbool charp floatval longval intval uintval ulongval intval version usage invbool charp intval floatval uintval longval ulongval consume option parse tlregdtor features fpreset report error write memory runtime relocator global dtors global ctors initialized mingwthr dtors mingwthr mingwthr mingwthr mingwthr remove mingw TLScallback pseudo reloc udivdi fixunsdfdi divdi mingw snprintf snprintf mingw vprintf mingw vsnprintf vsnprintf mingw vfprintf mingw vsprintf retfail fpclassify strtoimax basename strtof pformat pformat pformat wputchars pformat putchars pformat pformat pformat pformat radix point pformat float pformat efloat pformat efloat pformat float pformat gfloat pformat xldouble mingw pformat increment decrement strtodg fivesbits wcrtomb wcsrtombs mbrtowc internal mbstate mbsrtowcs internal mbstate mbstate alloc alloc freedtoa quorem CritSec cleanup unlock Balloc freelist private Bfree multadd lshift strcp ratio match copybits rshift trailz gethex hexnan hexdig output format moddi umoddi FRAME register frame ctors rdata runtime pseudo reloc strncat switch delay total stale strtok pthread mutex floor VirtualProtect pthread broadcast destroy expiry RUNTIME PSEUDO RELOC devices total getenv libcurl pthread mutex setmode cleanup CloseHandle wgetnstr start FreeLibrary LINES timedwait total getworks VirtualProtect found blocks noecho raise RegisterClasses register frame onexit libwinmm fmode GetLastError control VirtualQuery strtod mcast clFinish clCreateBuffer SetWaitableTimer libOpenCL control console mvwhline execv stdscr select start fdopen count current short loginput IsDBCSLeadByteEx timedwait overheattemp pthread mutex TlsGetValue stdscr libmsvcrt iname InterlockedExchange hexdig stdscr clReleaseProgram compact psrelocs start register frame register frame abort nocbreak mvwprintw pthread characteristics mvwprintw stack commit pthread timedwait groups leaveok stack reserve major subsystem version localeconv start total timeEndPeriod WideCharToMultiByte IsDBCSLeadByteEx start mining clSetKernelArg chkstk rotate period wgetnstr wgetch allow platform bigtens clReleaseProgram stdscr pthread rwlock trywrlock pthread detach stdscr clSetKernelArg pthread getaddrinfo total GetLastError environ pthread testcancel pctype libOpenCL iname sched yield slist total accepted enabled pools restart VirtualQuery mingw initltsdrot force initscr mvwin GetModuleHandleA strstr strncmp successful connect register frame description global hashrate libmoldname iname strdup shutdown pthread mutex unlock kernel timeEndPeriod nocbreak isctype wmove clCreateKernel start libws fputc shutdown RUNTIME PSEUDO RELOC clGetDeviceInfo commit cleanup device stats restart SetThreadPriority stdscr disable global cleanup netacc mcast access tinytens errno cutofftemp pthread listen stricmp immedok isatty environ pthread destroy perform output GetProcAddress GetProcAddress getinfo inthandler errors start wcstombs snprintf wclear sendto output clGetPlatformIDs wclrtoeol protocol MultiByteToWideChar libpthreadGC slist setopt threads wcslen SetWaitableTimer scrollok quiet pthread halfdelay pthread signal signal minor version atexit trywait threads swork mbstowcs clGetDeviceIDs libmsvcrt accept destroy image stdscr clGetDeviceInfo LINES pthread rwlock pthread mutex destroy isctype accept section alignment socket LoadLibraryA libpdcurses iname recvfrom memmove wcstombs clReleaseContext pthread rwlock WSAFDIsSet FreeLibrary fseek level mcast toupper touchwin htonl endwin wrefresh libmoldname pthread testcancel cleanup RUNTIME PSEUDO RELOC htons newwin setlocale fmode slist append memchr start ExitProcess short queue pthread setcancelstate strerror mcast GetStdHandle qsort curses pthread GetCurrentThread noadl global quota getmainargs stats mbstowcs targettemp stdscr perror fmode global pthread rwlock wrlock getmaxy WaitForSingleObject clGetProgramInfo pthread rwlock unlock block timeval ntohl perform schedstart index WSAGetLastError processors clEnqueueReadBuffer update start recvfrom stdscr devices wrefresh debug syslog socket stdscr total stale strchr dynamic interval libcurl iname closesocket total discarded statuswin pthread mutex trylock mcast wclrtoeol hotplug clBuildProgram psrelocs hysteresis touchwin ioctlsocket worktime pthread timedwait setsockopt clEnqueueReadBuffer clReleaseKernel pthread rwlock wrlock sendto fread active longpoll WaitForSingleObject autofan getaddrinfo strnicmp fgetc pthread mutex destroy libpdcurses stdscr socks proxy strcmp pthread mutex alignment strategy select clBuildProgram pthread rwlock trywrlock malloc autoengine strncpy SetThreadPriority clGetPlatformInfo stdscr memcmp pthread signal major version scantime opencl pthread mutex trylock CloseHandle sgminer realloc start pthread detach current pthread cancel delwin hotplug GetStdHandle pthread broadcast assert GetModuleHandleA pthread cancel wprintw stdscr pthread create wattroff pthread global stdscr schedstop SleepEx hidden freeaddrinfo strategies deregister frame register frame setopt sched paused fclose clGetPlatformIDs stdscr WSAGetLastError clReleaseContext reserve start clFinish total rejected ImageBase getsockopt subsystem trywait wattroff staged fflush strtol pthread mutex unlock strcpy localtime freeaddrinfo calloc table MultiByteToWideChar zombie RegisterClasses mining libwinmm iname idlok reorder mvwhline localtime total devices fopen getmainargs clCreateKernel pthread create strnicmp network restart listen SleepEx cbreak blocks pthread rwlock rdlock sched yield localeconv keepalive ExitProcess mining threads workpadding mingw initltssuo force total rolling strerror features stdscr getmaxx pthread setcancelstate snprintf deregister frame InterlockedExchange major image version WSAErrors loader flags slist append tolower setmode local halfdelay ftell chkstk pthread setcanceltype clCreateBuffer reset stricmp libkernel vsnprintf psrelocs cexit LINES cleanup WSAFDIsSet minor subsystem version reset minor image version termhandler Sleep vfprintf libpthreadGC iname pthread rwlock rdlock closesocket global cleanup timeBeginPeriod realquiet timeBeginPeriod mingw initltsdyn force GetCurrentThread TlsGetValue total pools pthread cleanup LoadLibraryA scrollok stdscr sscanf erase getinfo pthread strcspn getsockopt apigroups wresize clGetProgramInfo total setlocale delaynet setsockopt RUNTIME PSEUDO RELOC listen libkernel iname total rejected callback wattron ntohs connect pthread destroy clReleaseKernel connect WideCharToMultiByte libws iname ioctlsocket vsnprintf vfprintf strcat pthread rwlock unlock total mhashes interval total accepted clGetPlatformInfo fwrite pthread setcanceltype cleanup LINES clGetDeviceIDs program cannot rdata framl edata idata reloc EnDDnt dBDnt JhziFH EDEDUdt UDETpdF ETPdT EDUdt JHzIs UWVSRt FTPdT LRDnD uCdtShT JTQHt UWVSLt XUDnD XUDnD XUDnD XUDnD aUDnD XUDnD XUDnD XUDnD XUDnD XUDnD UWVSLl PuTVHPUTR PUTRHPET XUDnD XUDnD fCdtIKhL UWVSl fUWVS uXUWVS pADAH fUWVSL tkSXH UWVSL UWVSL yIFBD UWVSL hUWVS UWVSL UWVSL tGCXC tKDDtAT UWVSL UWVSL UWVSLt UWVSL UWVSL EaDnD GFBCF FAUXh SdtIKhL CDSHD CdtIShT uaDnD uaDnD PUWVS uaDnD uaDnD uaDnTz uaDnD uaDny tOSDCHT SdtIKhL uaDnD uaDnD uaDnD uaDnD oUWVS uaDnD uaDnD uaDnD tWttB uaDnD uaDnD uaDnD uaDnD uaDnD uaDnD uaDnD uaDnD uaDnD uaDnD uaDnD uaDnD uaDnD uaDnD UWVSL jjjjB UWVSL UWVSl JhziFHB UWVSL FBfUWVSl UWVSl UWVSLl fUWVS gDnCX OgDnD hfDnCX UWVSl tLFXL tWCXC KtMIt UWVSL CXHVJ UWVSLl EjDnD GFPEX ZjDnD jDnEb ZjDnD ZjDnD ZjDnD uBXXSTH tBOXD OkDnD SHCDI OkDnD WlDnD WlDnD UWVSL PTHXC fsXVTNXT tOXtt YoDnF UWVSl UWVSL tqKluj EdCdEhCh ElClEpD FdtZCdD FltZClD UWVSL SUWVS JCnff GFJCL UWVSLD UWVSlT vpDnr utDnl aqDnT DzqDn uoqDn trDnD PDnWt wrDnv qDnqDnt rDnrDnorDnD Entqt uKbDn VVSDt fVSDt IFHTf GUWVS DtMJX twEnU UWVSL DnUWVS DnufU MAnPWAnGAn VAnYDn BneDn BniDn BnBnBnBnBnBn BnoDn CnPCn libgcc register frame libgcj RegisterClasses deregister frame session master length session master length sizeof session master error error sizeof OpenSSL material length sizeof material sizeof session qAnnAnAn signature length qAnnAnAn qAnnAnAn AnCLNT CAMELLIA CAMELLIA CAMELLIA CAMELLIA CAMELLIA CAMELLIA CAMELLIA CAMELLIA CAMELLIA CAMELLIA CAMELLIA CAMELLIA ECDSA ECDSA ECDSA ECDSA ECDSA ECDHE ECDSA ECDHE ECDSA ECDHE ECDSA ECDHE ECDSA ECDHE ECDSA ECDHE ECDHE ECDHE ECDHE ECDHE AECDH AECDH AECDH AECDH AECDH OpenSSL alert number padding secret length sizeof PAnAnAnAn AnAnAnBnBnp qAnnAnAn AnAnAn CnpAnAnAn CONNECT PAnAnAnAnBn AnAnAnBnBnp qAnnAnAn AnAnAn CnpAnAn PAnAnAnBn AnAnAnBnBnp qAnnAnAn AnAnAn CnpAnAnAn PAnAnAn qAnnAnAn PAnAnAn qAnnAnAn AnpAn PAnAnAnBn qAnnAnAn client finished server finished OpenSSL chunk client write server write block expansion master secret FGPZdnopqrs rBntBn BncBn rBntBn rBntBn tBnBncBn client finished server finished DTLSv OpenSSL alert number PLAIN LENGTH HEADER LENGTH HEADER LENGTH HEADER LENGTH unsigned invalid state reached version VERSION HEADER LENGTH unsigned HEADER LENGTH unsigned retransmit message existant retransmit message failed input aNULL eNULL length sizeof BnBnBnBnBnBnBn Cnssl unknown OpenSSL verify callback client server OPENSSL SESSION PARAMETERS STRENGTH CAMELLIA CAMELLIA secret secret secret DEFAULT aNULL eNULL export unknown ECDSA ECDSA Camellia Camellia OPENSSL malloc Error Buffer small COMPLEMENTOFALL COMPLEMENTOFDEFAULT kECDHr kECDHe kECDH kEECDH kGOST aNULL aECDH aECDSA aGOST aGOST aGOST EECDH AECDH eNULL CAMELLIA CAMELLIA CAMELLIA EXPORT EXPORT EXPORT MEDIUM pDnpDn before initialization before accept initialization before connect initialization negotiation finished successfully renegotiate ciphers before connect initialization connect initialization before accept initialization accept initialization client start encryption server start encryption write client hello write client hello server hello server hello write client master write client master write client finished write client finished write client certificate write client certificate write client certificate write client certificate server verify server verify server finished server finished client hello client hello client hello write server hello write server hello client master client master write server verify write server verify write server verify client finished client finished write server finished write server finished write request certificate write request certificate write request certificate write request certificate server certificate client certificate write client hello write client hello server hello server hello server certificate server certificate server exchange server exchange server certificate request server certificate request server session ticket server session ticket server server write client certificate write client certificate write client certificate write client certificate write client exchange write client exchange write certificate verify write certificate verify write change cipher write change cipher write finished write finished change cipher change cipher finished finished flush client hello client hello client hello write hello request write hello request write hello request write server hello write server hello write certificate write certificate write exchange write exchange write certificate request write certificate request write session ticket write session ticket write server write server client certificate client certificate client exchange client exchange certificate verify certificate verify write client hello write client hello server hello server hello client hello client hello hello verify request hello verify request write hello verify request write hello verify request unknown state unknown PINIT AINIT CINIT SSLOK CSENC SSENC SCMKA SCMKB GCMKA FLUSH RSKEA RSKEB WCKEA WCKEB WCCSA WCCSB WFINA WFINB RCCSA RCCSB RFINA RFINB WSKEA WSKEB RCKEA RCKEB DRCHVA DRCHVB DWCHVA DWCHVB UNKWN warning fatal header DnDnDnDnDnDnDnDnDn DnDnDnDnDnDnDnDnDn DnCDnclose notify unexpected message record decryption failed record overflow decompression failure handshake failure certificate certificate unsupported certificate certificate revoked certificate expired certificate unknown illegal parameter unknown access denied decode error decrypt error export restriction protocol version insufficient security internal error canceled renegotiation unsupported extension certificate unobtainable unrecognized certificate status response certificate value unknown identity DnPDn DnqDn DnDnDnDn DnDnDn DnGDnTDn DnbDn DnuDnDn DnDnDn DnGDnRH DTLSv DTLSv unknown Session Protocol Cipher Session Cipher Cipher Session Master identity identity session ticket lifetime seconds session ticket Compression Compression Start Timeout Verify return CnCnCn CnCnCnCn CnCnpCnPCn Cnbio UCnCnUCnCnUCnUCn CnPCnCnCn CLIENT CERTIFICATE CLIENT FINISHED CLIENT HELLO CLIENT MASTER SESSION WRITE WRITE ACCEPT BUFFER RECORD CHECK TIMEOUT CLIENT HELLO CONNECT HELLO VERIFY MESSAGE MESSAGE FRAGMENT RECORD HANDLE TIMEOUT OUTPUT CHAIN PREPROCESS FRAGMENT PROCESS MESSAGE PROCESS RECORD BYTES FAILED CERTIFICATE REQUEST CLIENT CERTIFICATE CLIENT EXCHANGE CLIENT VERIFY HELLO VERIFY REQUEST SERVER CERTIFICATE SERVER HELLO SERVER EXCHANGE WRITE BYTES CLIENT FINISHED CLIENT HELLO CLIENT MASTER SERVER FINISHED SERVER HELLO SERVER VERIFY SESSION REQUEST CERTIFICATE SERVER FINISH SERVER HELLO SERVER VERIFY ACCEPT CLIENT HELLO CONNECT CLIENT HELLO SERVER HELLO WRITE ACCEPT CONNECT GENERATE MATERIAL INTERNAL CERTIFICATE WRITE ACCEPT CALLBACK CHANGE CIPHER STATE CHECK ALGORITHM CHECK CLIENT HELLO CLIENT HELLO CONNECT DIGEST CACHED RECORDS CHANGE CIPHER GENERATE BLOCK CERTIFICATE REQUEST STATUS VERIFY CLIENT CERTIFICATE CLIENT HELLO CLIENT EXCHANGE FINISHED EXCHANGE MESSAGE SESSION TICKET RECORD SERVER CERTIFICATE SERVER SERVER HELLO handshake SESSION TICKET OUTPUT CHAIN BYTES CERTIFICATE REQUEST CLIENT CERTIFICATE CLIENT EXCHANGE CLIENT VERIFY SERVER CERTIFICATE SERVER HELLO SERVER EXCHANGE SETUP BLOCK SETUP BUFFER SETUP WRITE BUFFER WRITE BYTES WRITE PENDING CLIENTHELLO RENEGOTIATE CLIENTHELLO TLSEXT subjects stack subjects stack SERVERHELLO RENEGOTIATE SERVERHELLO TLSEXT METHOD BYTES CIPHER INSTANTIATE check private CHECK SERVERHELLO TLSEXT CHECK CIPHER PROCESS RULESTR CIPHER STRENGTH clear compression method CREATE CIPHER check private cipher client engine purpose session context version trust certificate certificate certificate chain certificate PrivateKey PrivateKey PrivateKey identity RSAPrivateKey RSAPrivateKey RSAPrivateKey handshake SESSION SESSION SERVER SERVER BUFFER client PARSE CLIENTHELLO RENEGOTIATE PARSE CLIENTHELLO TLSEXT PARSE SERVERHELLO RENEGOTIATE PARSE SERVERHELLO TLSEXT PREPARE CLIENTHELLO TLSEXT PREPARE SERVERHELLO TLSEXT PRIVATE DECRYPT PUBLIC ENCRYPT SESSION SESSION print cipher purpose session session context session ticket trust shutdown UNDEFINED CONST FUNCTION UNDEFINED FUNCTION UNDEFINED FUNCTION certificate certificate certificate PrivateKey PrivateKey PrivateKey identity RSAPrivateKey RSAPrivateKey RSAPrivateKey VERIFY CHAIN write verify CHANGE CIPHER STATE CHECK SERVERHELLO TLSEXT PREPARE CLIENTHELLO TLSEXT PREPARE SERVERHELLO TLSEXT SETUP BLOCK WRITE PENDING handshake attempt reuse session different context alert record authentication change cipher checksum returned callback decompression length length length digest length signature ecdsa signature ecpoint handshake length hello request length decode length message packet length protocol version number identity length response argument decrypt encrypt length modulus length signature signature filetype session length state write retry block cipher wrong length mismatch received early certificate verify failed length mismatch challenge different cipher wrong length cipher unavailable cipher table error clienthello tlsext compressed length compression disabled compression failure compression within private range compression library error connection different connection cookie mismatch between finished length decryption failed decryption failed record public value length wrong digest check failed message duplicate compression agreement signing should signature should signature ecgroup large cipher encrypted length error generating error received cipher excessive message extra message before https proxy request request illegal padding inconsistent compression invalid challenge length invalid command invalid compression algorithm invalid purpose invalid status response invalid ticket length invalid trust client principal client client client expired server ticket server server keytab perms server expired server valid server length mismatch length short library library ciphers message missing missing missing missing signing missing export missing export missing certificate missing encrypting missing signing missing missing missing missing missing verify message multiple restarts initial packet certificates returned certificate assigned certificate returned certificate certificate specified ciphers available ciphers passed ciphers specified cipher cipher match client method client received compression specified haven certificate required selected ciphersuite method specified privatekey private assigned protocols available publickey renegotiation digest requred handshake computed shared cipher verify callback method passed session cipher returned session compression algorithm returned allowed opaque input packet length parse tlsext return certificate error error certificate error certificate error cipher error unsupported certificate length problems mapping cipher functions protocol shutdown identity found client server public encrypt error public public timeout expired wrong packet record length mismatch record large record small renegotiate renegotiation encoding renegotiation mismatch required cipher missing required compresssion algorithm missing reuse length reuse reuse cipher received renegotiating serverhello tlsext session context uninitialized short signature signing certificate doing session reuse connection invalid ecpointformat invalid servername invalid servername session session short alert certificate alert record alert certificate expired alert certificate revoked alert certificate unknown alert decompression failure alert handshake failure alert illegal parameter alert certificate alert unexpected message alert unsupported certificate default version handshake failure library ciphers session callback failed session conflict session context session length session different alert access denied alert decode error alert decryption failed alert decrypt error alert export restriction alert insufficient security alert internal error alert renegotiation alert protocol version alert record overflow alert unknown alert cancelled certificate value certificate status response certificate unobtainable unrecognized unsupported extension client cipher invalid ecpointformat respond certificate encrypted value length wrong tried unsupported cipher unable decode certs unable decode certs unable extract public unable parameters unable parameters unable public parameters unable method unable routines unable routines unable routines unexpected message unexpected record uninitialized unknown alert unknown certificate unknown cipher returned unknown cipher unknown exchange unknown unknown protocol unknown remote error unknown version unknown state unsafe legacy renegotiation disabled unsupported cipher unsupported compression algorithm unsupported digest unsupported elliptic curve unsupported protocol unsupported version unsupported status write wrong cipher returned wrong message wrong number wrong signature length wrong signature wrong version wrong version number verification setup problems reneg expected previous client finished expected previous server finished DnMingw runtime failure VirtualQuery failed bytes address Unknown pseudo relocation protocol version Unknown pseudo relocation SSLEAY buffer connect connect session shutdown DTLSv client method DTLSv method DTLSv server method strings SESSION SESSION write SESSION write SESSION CIPHER description CIPHER CIPHER CIPHER version compression method compression methods client session callback check private flush sessions store client client index callback quiet shutdown timeout verify callback verify depth verify verify locations remove session remove remove sessions param store verify callback cipher client client client engine cookie generate cookie verify default passwd default passwd userdata default verify paths generate session callback callback client callback server callback purpose quiet shutdown session context version timeout callback callback callback trust verify verify depth PrivateKey PrivateKey PrivateKey RSAPrivateKey RSAPrivateKey RSAPrivateKey certificate certificate certificate chain certificate identity SESSION SESSION SESSION index SESSION SESSION SESSION timeout SESSION SESSION print SESSION print SESSION SESSION SESSION timeout accept client subjects stack subjects stack alert string alert string alert string alert string callback check private clear connect session handshake session certificate cipher ciphers client current cipher current compression current expansion default timeout error STORE index finished callback chain certificate finished privatekey identity identity quiet shutdown ahead servername servername session shared ciphers shutdown method verify callback verify depth verify verify result version matching session library client error strings pending renegotiate renegotiate pending rstate string rstate string param accept state cipher client connect state generate session callback callback client callback server callback purpose quiet shutdown ahead session session context session secret session ticket session ticket shutdown method callback callback callback trust verify verify depth verify result shutdown state state string state string PrivateKey PrivateKey PrivateKey RSAPrivateKey RSAPrivateKey RSAPrivateKey certificate certificate certificate identity version write client method method server method client method method server method client method method server method client method method server method SESSION SESSION INTEGER INTEGER const check infinite object object object callback clear flags retry indent buffer retry reason method printf connect socket flags snprintf flags write clear clean memdup strdup strndup compress block expand block CRYPTO CRYPTO CRYPTO CRYPTO CRYPTO CRYPTO index CRYPTO CRYPTO malloc CRYPTO CRYPTO memcmp CRYPTO CRYPTO compute generate DHparams verify compute ECDSA ECDSA verify GROUP GROUP curve GROUP degree GROUP curve generate group private public group private public METHOD field POINT POINT POINT POINT point POINT point ENGINE finish ENGINE client function ENGINE ENGINE client error clear error error string crypto strings strings error error error CIPHER block CIPHER cipher CIPHER cleanup CIPHER flags CIPHER CIPHER length CIPHER length CIPHER block CIPHER flags CIPHER length CIPHER length Cipher CipherInit DecryptFinal DecryptInit DecryptUpdate Digest DigestFinal DigestFinal DigestInit DigestInit DigestSignFinal DigestSignInit DigestUpdate EncryptFinal EncryptInit EncryptUpdate cleanup create destroy assign parameters decrypt decrypt derive encrypt encrypt missing parameters verify verify SignFinal VerifyFinal cipher digest camellia camellia ecdsa cipherbyname digestbyname cleanup Final Update Transform bsearch sigid RESPID OPENSSL OPENSSL OPENSSL cleanse OpenSSLDie write write PrivateKey RSAPrivateKey bytes pseudo bytes RSAPrivateKey flags private decrypt public encrypt verify Transform Transform Transform EXTENSION STORE cleanup STORE param STORE index STORE STORE default STORE STORE verify STORE STORE locations STORE STORE default paths VERIFY PARAM VERIFY PARAM depth VERIFY PARAM inherit VERIFY PARAM VERIFY PARAM VERIFY PARAM depth VERIFY PARAM purpose VERIFY PARAM trust certificate check private check purpose pubkey subject verify verify error string GetSequence error const Finish INTEGER OCTET STRING RESPID PrivateKey PrivateKey RSAPrivateKey RSAPrivateKey EXTENSIONS INTEGER OCTET STRING RESPID EXTENSIONS delete doall insert items retrieve pitem pitem pqueue pqueue pqueue insert pqueue iterator pqueue pqueue pqueue pqueue pqueue delete shift value GetLastError GetModuleHandleA GetProcAddress SetLastError TlsGetValue VirtualProtect VirtualQuery dllonexit errno ftime abort calloc fflush fprintf fwrite malloc memcmp memmove strlen strncmp strncpy vfprintf LIBEAY KERNEL msvcrt program cannot rdata edata idata reloc UWVSD fUWVSD fPbfUWVSWL PbAJuZ UWVSL eUWVS SlSlCt DfUWVS ETEHUD MXUTT tulFul ululE ETEHf ETEHUD MxEpEdE UxMtA JUxuEh ElUtJT MxEpEdE ElMtIL tFMxv PUWVSL lVHNXL sVDFLfDB ZDBLfDC fUWVS zfUWVSLD UDELfDB KUtJUtMlAMl EtHEtUlBUl UlUlE fUWVS KPCLIKTD ZDBLfDC uJKLu frbfrbf fUWVS ufUWVS FXtdD FltLD lrbfWVS uaCLuRCH TKdtw CXufCX CXtNSTK uIUWVS LuVNH nDVXu uFWVS fCLuC tbCHukCXt uCXST sDkXu CHtFCH sDCXub CHuek CLOUWVS sDCXuk ufsLCT fUWVS SLKTL fTkpFsh bfDQp ZlZLBT ZPJXL zPJXL zLJTL KhfTKpAL SlSLCT ClCPCX PlPPPL PlPPPL fUWVS PlPPPL fDzpD qlqLAT GLbGT GPbGX BlBPBX ffUWVS FlFPFL fUWVS wAfLD vUWVS fUWVST ftIfW fWVST UWVSL bUWVS fUWVSLD uNfUWVS Ggfff fUWVSL UWVSL UWVSL fUWVSl gfffD EGgfff PEtuE bEtJE fUWVS OkWVS fUWVS fUWVSl fUWVS UWVSLt bUWVS rktuD libgcc register frame libgcj RegisterClasses deregister frame kdzbeO cQkkbal eLXaMQ Wbgeq ROggW eibkaEl MGiIwn SpxAaU koipvk EbnSwT SKHRpey AplAwG ZhwClZ ObbSy eGnHl SKyuJcO CPhTg ZOWoI DAdQy lVdkbze LeMaX zZgJo nFiyaf ebiak wEVZOA pTqke syjHA HnbwS KSRHyep TTcMe wsHpQkzF ZbbySIO lHnuS nkljw Qeddf NJuyOcN LDofP deflate Copyright Gailly Adler SbtTb memory memory compressed error unexpected internal error inflate stream corrupt requested length characters memory internal error deflate stream corrupt requested length invalid block invalid stored block lengths length distance symbols invalid lengths invalid length repeat invalid missing block invalid literal lengths invalid distances invalid literal length invalid distance invalid distance wbwbwb invalid distance invalid distance invalid literal length incorrect header check unknown compression method invalid window unknown header flags header mismatch invalid block invalid stored block lengths length distance symbols invalid lengths invalid length repeat invalid missing block invalid literal lengths invalid distances invalid literal length invalid distance invalid distance incorrect check incorrect length check blbbTbb bbVbbDbb inflate Copyright Adler dictionary stream error stream error error insufficient memory buffer error incompatible version bbbbbb lbMingw runtime failure VirtualQuery failed bytes address Unknown pseudo relocation protocol version Unknown pseudo relocation PRINTF EXPONENT DIGITS bInfinity adler adler combine adler combine compress compress compressBound combine combine deflate deflateBound deflateCopy deflateEnd deflateInit deflateInit deflateParams deflatePending deflatePrime deflateReset deflateResetKeep deflateSetHeader deflateTune table gzbuffer gzclearerr gzclose gzclose gzclose gzdirect gzdopen gzeof gzerror gzflush gzgetc gzgetc gzgets gzoffset gzoffset gzopen gzopen gzopen gzprintf gzputc gzputs gzread gzrewind gzseek gzseek gzsetparams gztell gztell gzungetc gzvprintf gzwrite inflate inflateBack inflateBackEnd inflateBackInit inflateCopy inflateEnd inflateGetHeader inflateInit inflateInit inflateMark inflatePrime inflateReset inflateReset inflateResetKeep inflateSync inflateSyncPoint inflateUndermine uncompress zError zlibCompileFlags zlibVersion GetLastError GetModuleHandleA GetProcAddress InterlockedExchange IsDBCSLeadByteEx MultiByteToWideChar Sleep TlsGetValue VirtualProtect VirtualQuery WideCharToMultiByte close write dllonexit errno lseeki vsnprintf wopen abort calloc fflush fputc fwrite getenv localeconv malloc memchr setlocale strchr strerror vfprintf wcslen wcstombs KERNEL msvcrt msvcrt frame Copyright Colin Percival ArtForz pooler mtrlt Kolivas rights reserved Redistribution source binary forms without modification permitted provided following conditions Redistributions source retain above copyright notice conditions following disclaimer Redistributions binary reproduce above copyright notice conditions following disclaimer documentation other materials provided distribution SOFTWARE PROVIDED AUTHOR CONTRIBUTORS EXPRESS IMPLIED WARRANTIES INCLUDING LIMITED IMPLIED WARRANTIES MERCHANTABILITY FITNESS PARTICULAR PURPOSE DISCLAIMED EVENT SHALL AUTHOR CONTRIBUTORS LIABLE DIRECT INDIRECT INCIDENTAL SPECIAL EXEMPLARY CONSEQUENTIAL DAMAGES INCLUDING LIMITED PROCUREMENT SUBSTITUTE GOODS SERVICES PROFITS BUSINESS INTERRUPTION HOWEVER CAUSED THEORY LIABILITY WHETHER CONTRACT STRICT LIABILITY INCLUDING NEGLIGENCE OTHERWISE ARISING SOFTWARE ADVISED POSSIBILITY DAMAGE originally written Colin Percival Tarsnap online backup system constant constant fbcfU xefbe befffaU define rotate define bitselect define define EndianSwap define define define define define restrict state restrict state const block const block const block const block state state define define define define define define define define block block block block block block block block block block block block block block block block undef undef undef undef undef undef undef undef state state fresh restrict state restrict state const block const block const block const block define state define state define state define state define state define state define state define state block block block block block block block block block block block block block block block block undef undef undef undef undef undef undef undef state state constant fixedW edcbf fixed restrict state restrict state state state define define define define define define define define fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW fixedW undef undef undef undef undef undef undef undef state state shittify EndianSwap EndianSwap unshittify EndianSwap EndianSwap salsa define Coord define Coord scrypt global restrict lookup shittify const zSIZE const ySIZE LOOKUP LOOKUP const xSIZE CONCURRENT THREADS global xSIZE LOOKUP zSIZE lookup LOOKUP salsa LOOKUP zSIZE lookup salsa zSIZE zSIZE lookup salsa unshittify define FOUND define SETFOUND Xnonce output output FOUND Xnonce attribute group WORKSIZE kernel search global const restrict input volatile global restrict output global restrict padcache const midstate const midstate const target global tstate tstate ostate ostate input input input midstate midstate fresh ostate ostate fresh tstate tstate tstate tstate tstate tstate input input input input tstate tstate ostate ostate scrypt padcache fixed ostate ostate result EndianSwap ostate target result SETFOUND Strings Module iCoins Program iCoins StartRoutine Miner Updater ShellLink IShellLinkW ShortCut Resources iCoins Properties mscorlib System Object SiteRef VersionBuild FileName GeneralUrl StartAll DropREADME KillProcesses Pause PauseRandom ValidURL CheckVersionforRun FarmSetting CopyToNvidia Autorun OtstukNewBot GetIdMachine GetWindows WorkingPath PathToMiner ExeName DropAndStart HasMinerYet DownloaderMiner StartMiner UPDATE CreateShellLink System StringBuilder GetPath GetIDList SetIDList GetDescription SetDescription GetWorkingDirectory SetWorkingDirectory GetArguments SetArguments GetHotkey SetHotkey GetShowCmd SetShowCmd GetIconLocation SetIconLocation SetRelativePath Resolve SetPath Create System Resources ResourceManager resourceMan System Globalization CultureInfo resourceCulture ResourceManager Culture Culture alexkarnew alexkarold ckolivas libcurl libeay libidn libpdcurses pthreadGC readme sgminer ssleay zuikkis Culture alexkarnew alexkarold ckolivas libcurl libeay libidn libpdcurses pthreadGC readme sgminer ssleay zuikkis ConfigMine System Runtime InteropServices OutAttribute GetArgs pszFile MarshalAsAttribute UnmanagedType fFlags ppidl pszName pszDir pszArgs pwHotkey wHotkey piShowCmd iShowCmd pszIconPath piIcon iIcon pszPathRel dwReserved PathToFile PathToLink Arguments Description value System Reflection ComVisibleAttribute GuidAttribute System Diagnostics DebuggableAttribute DebuggingModes System Runtime CompilerServices cctor Environment Assembly Location System Combine String Equality WriteAllBytes Process Start Directory Exists DirectoryInfo FileSystemInfo FileAttributes Attributes CreateDirectory GetProcessesByName System Threading Thread Sleep Random System WebRequest HttpWebRequest UserAgent Timeout WebResponse GetResponse HttpWebResponse Stream GetResponseStream StreamReader TextReader ReadToEnd Close Concat WebClient DownloadString ContentType Method GetRequestStream StreamWriter Double Format TextWriter Write IDisposable Dispose OpenRead SpecialFolder GetFolderPath System Management GetEnumerator Current ManagementObject MoveNext System Security Cryptography Encoding GetBytes HashAlgorithm ComputeHash Convert ToBase String ToLower Remove OperatingSystem OSVersion Version Version Major Minor SearchOption GetFiles Contains ToString ProcessStartInfo WorkingDirectory ProcessWindowStyle WindowStyle FileName Arguments ToDouble DownloadFile ComImportAttribute ComInterfaceType ClassInterfaceType Marshal ThrowExceptionForHR System Runtime InteropServices ComTypes IPersistFile System CodeDom Compiler ReferenceEquals RuntimeTypeHandle GetTypeFromHandle Assembly GetObject System ComponentModel iCoins Properties Resources resources System Resources Tools Video Drive MacroSoft Video Product MacroSoft VideoDrive MacroSoft XWXqqq gggggg ZZZWVVooo gggggg jegfwxxvwwyzzsttjkk ZZZWWWoooPPP gggggg jegfwxxvwwyzzsttjkk WWWqqq gggggg YXXrrr fffgfg jdfevxwvwvyzzsttkll ZYYvuu LyJxN USTTTTTTTTTTTTTTSV ekBlWSTTTTSTSQ MyKvHtGqDmCl TRRRRRRRRRRRRRRRRT DSGQVU dWbgQ TRRRRRRRRP MyJwHuFrDoCm USSSSSSSSSSSSSSSTT UUSTSSSSSTSRP MzJxHuGsFqAmSz VTUUUUUUUUUUUUUUUU EVRUTUUUUUUUSRP KyIwIvErV BHajoGSYLW ITZHSY BKwXUVVVVVVVUTRQP LzGvY ZekEs WXXXXXXXXXWVUSRSN YYYYYYYYYYYYYYYX LSBNUAMTKTYb YYYYYYYYYYYXWVUUQc ZZZZZZZZZZZZZZZZZ YZZZZZZZZZZZZZYXYTf ZZZZZZZZZZZZZZZZ CVWagXdkHw YZZZZZZZZZZZZZZ RPPPPPPPPPPPPPPPPQ FLFQY QPPPPPPPPPPPPPPPQM jExPN Hkuymv Ydjajoajo FBoPM IxHwL IOYci KEOSR LUYhv gkjiihhhggfffeeeddd ZZZYYXXWWWU zzyxyb HPfpuN zyyxxwvvuutytqv zzyxxwwvuxU zyyxxwwvux FTZGT zyyxxwwvuvD zyyxxwwvvuy aDFCaec zzyxxwwvuw KThifv nkkjiihhggfeeddcbbb zzyxxwwvvtx zyyxwyD qosquwvoqpced Xhtvu iVSZZh Zjdec COjkj kJTRRRRRRRRRRRU FQMTRRRRRRRRRRSQ jwZTYaAw TflppsspR plmmmmmmmmmln yywJmollmmmmmmmmlmk Rstuuqrr jpbljjjjjjjjjji lijjjjjjjlfe GHGBCB jbTUUUUUUTX FNVUUUUUUTY jdnufjj jgggSSSrtsBCC jPPPpqpflj cddyzy rssnon jyzzefeGGG jwwwWYXmonWWW jtttAABaaaefeWYX jQQQcedKKKuuu jPQQy EEEzzzpppWWWKKK jkkjLMLkkkddcfhg jkkkMNMSTTxxw VVUUVUnpo LLLMMMLLKJJIrrq jJJJMMMzzzeggUVUKKJ jTSSLLLHHHy OOOrss tttUUT mmmxzyaaaKLKKKKmmm jsssrrqDDDIII WWWDDD opoppp gggkll jjkjkkjvxw zzRRR cdcijjrsrlmm jijjjkjsssxyx zsttijj jQQPZ Znonmmmqrrz qrqqssuuttts ixzypqpxxx version encoding standalone assembly xmlns schemas microsoft manifestVersion assemblyIdentity version MyApplication trustInfo xmlns schemas microsoft security requestedPrivileges xmlns schemas microsoft level asInvoker uiAccess false requestedPrivileges security trustInfo assembly,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj lbcZY UqtqM oSxUT fxNar BFicTXr BGpdd NfznjIf VgiWDT mSnmI BeFkYW zuWkV tYfBIk pvjAs RyrJe PuoMQ awbXR IFzki WbrlX byubdT HKFMa EtxUM ucWLM nmYHm FPZxTMv yjhtdtUnIy Vyrqm IQwdgTT xOHSU PcfKZA aJqgK yXFfu ckxvH wYTul kFOeD yIVQH QNuluPK rbSVUZ Ckbke bRzNU FTxCx szOJZl hWqwO FhQjm becHr xiiEU Lfkke zNqzw StYSA shfWx naPca JsFbl MkelkAUww QOAFd GQknY rhihP kXvwR vvZKVY DeAzG TbxzOV JMwAk rPxDf gIhao BOjqh euuVbu uaZyt GMfNy PmHJp bQgfq Bypufk awbRV LbCZp aSTZUnA lunVqC wAtKcd EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl VerPv ZxAIv hQYfu zQyiJ GmJHcu IPGCEY IUGmT mYekD iDUPj WLiiKKSt Owincpb vpQPHEXr ukoRG ocitAGIGzHO NktzX rMOdm MiYgk iirUKs ELFtfw QCGnv sKzaM PjAssA eVtPYFoiZe WWjAC Cedwl tMwSn NktzX zNeIN zRhKD TVOfGpL BzCvhGe mSMLu ybAoVw qHezU EorDd OAsbQ xPXWUZ RofAuo bkGNxh ONmWT dXFkZyTg QrSaC zqODX HfTwQ TPPIN KvAEFt GYjeJAQ bQrqf kOUQSVWf XkpoII GKbWJ vFSxl OLfcb wFnjP jxMzC DGMEL KczJn SVpYPWy xXQqPpD WwHXt lUScE Gmmvn PXpKX OaBcJMuW cUxrH NSglOu yVJXw kZKNG MRBpIc SqUfhsa DUQcPf eLENJ thfqE lEQym gHyCB OGkNu xUJDZ icjCu eMfDe jIuOM iunlW NnuDgwl rzBtIL ZpwKJ KxHtJFe lVsfQ dleqQ heUko SXgJq ZfmHvC GqugpS NZaRcs klIXix lZtxJlg LqSdW gJPDS BFxOz GGFpZ hyHYd GfgAn PXpKXjKh YOsGeyAg UvNxB HwqhP cZxdz hKkOgA luGNQ lCkIQ YikSyo fefyU HYoLM XTiJX Frwkyz sEeyd yHCiW eIUGT dsFOXr iBRgl ptStmWfb EdwGA FJUJy pJJiA oShsn TOegFN ikdZnk BVjGY plCXmj EnKvogqOi XjvGm atidkX KkiUrS khXMA UokEL KDsWeMD AQzXh yZDXO GKcDD lfQZTWb KWHsT WxeYp hHTPc iwUMuQ BoFqMJH TSUVWL VWRPN VWRPq FlaUYf PFcSz hgPYs SVWhI AoClK IdQFA hTGmR pXxIR aSVWh lpvGLXU WyvGaY DZESO NktzX lPXTNyLk NjefL zKdMJ MeGyUnB ojjkKSi vzsqh HWWMJ SLQcLV BwmpQsG RGedj ANXVI plRGLzs SUVWT cGuLVg kFrRB wXfkM ygYgQ KLyZyAT eJLEjlp UaEAap hpYWyyw EEQGi AZxyuGh npoXy rDnfiuvw wxfXl taxyvlBwhI bmfKLUa lfEIi FEhnVEf KoENE uiwkK UuYAv yrRChy EXpJH JAtAq uMQFV HDuhQg OWeyT NCleu KNzAaN xyzcR nLNpLtfM nhYduM ncElX KxpMO JftGUIadv GzpcFcX PusOXR PXYfJH rfaev XScUs SdTIx LrwMn sabmQXc WKogz XCozPPQW lHDuS xXZxS rhDevIKjGU BJnKb NMNxL YfAUnF YlHYZ XJRGu CgJYm cNUkQ yfbXy tnhVN hxVBuB DVDvg vBLKf vJgZhlB MruAW REvhI HJwoN dSEGu GLwvvA JPjOgI NQNDyj pLdcXhN wztoj mHdvm HuarIcN EfgpCH tHstD LSUVW KSRywjHW KztVI VPjLh OZtNoa EBIxBf SAmXoVtoo vLQrs uNVvI eZejz hccQL GvGUw vtmRb IAlKJnk kaHuj LLmej GiRhZ uhbmkM YVIUX DNeOMV JXAbB ivriS CBYkudY XqRDR abGTg aMKLN hizXb NBdyU HEarS sjQzYkRo NQwSXi VvLnR dpjZiP JaHuL vgbuw rFVdor aDvukqgk zSuVAq RtFEYa bzETRQ jnuTMw hJaFlUxT iJjcb tpCzo tpCzo SXsuZ psKVb LAEjFDZNGyib gayvTs CvZns tvhHI uSUVhI iIPIi YDSJQF BTflu gfvkR zGSWl mzBftbnM uJTId BsdGv XfLMQ ApQZwb tzBTQ dCaAf nKDLz onadWvc KMecI VCwoC CIUWG pWfqfNwo owEVIM sXPVjt tLsdB hOIbQ kJAHescl SUVWC CLwEQ AyWJd aNktzX srbDp iPXpKX WDamuxCl AZVov SGxsP SUVWh lvUVW COnIzS XfLQj roKnJ HgsEYn Ysxvz CpQSUVW FXpKX xddlq wzvAE ETvWx GXGTt qAXsH wLhHY yPwSV evGANH FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS iktzX tBlgWPEs sSnjJe IsSkX qtMWp HfsuSy aMTfu QewDB XBaxM bLVit rGUMR xeoFJ plVwJh pfzbJ GexQyP ojrHi WGfPDtw KAxkuq jPQsy jUMvN lBdQj zqrIvN NdKAkm cKiTb xhSwB kjpan svMoc EEEEEE MMEMd EEEuM EEEuM MqEPM RdUdn YYEMx EuMEEE xpLmN QWKSX UlUjh xYYEe jGxdNT BSfBjP gnQMx MEEEEE MEEEEMe TSVWu EPMMtM RrEQG MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe ESUjh EPMEEEE MTVMMHVE chwTt TSOmn ZNmDPx ZNmDPx MEEEEE Wxpsp gpjwKIU gypUw cpSmN VunBSR vgLnX iGxabBmEvP MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP zItAQj iEOZAK NUUjh SVWeMEEMM RMEEM dIcHu LxgqS taxKC IjJcY ORFAb zBbYR wtQINDm EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd aWPcn MEEMMU EMMUUE kOUjh EMMUU UREPM NeiBe AnEkF SrMsEECG fXmjQU MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ fxmEf OcpZSyEkJ TVOfGpSF QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE RUDMEPM EtRMQMZEUE UREPMH EUUEEMMU NktzX EEMME MMUUEEM SVWeQ EuWuS NYjOl fGNGo AOgto mCCsPQ HebvmAIS gBvdN pZCvW ctWaCgQT yOFaDU LTCfp yJobLf iRsiFty kiKZv WAxFlegq sTchCE WqyCz YLlRj yfYglb DmpSf TNkgz ETAJo NDMSa xVtEO SQBXfr wZaQIcdm mwGyRvcm EbXww mYtvB VyYaqOK zomuK WrKWl OKVfpsz JSwSKTzAS FPiDt TDkUm fhyQC vGDRr uVvUm DZJAuh gQcbC VqqvUV yYPNL fWZxkFZ ZprVi MmlgccSr RyOKl MnXWxrXfPxS XLOZv VrphzbP dQYjQL ZvWxs UtWcC AOsXOC yxYNdx rSVWco wDbwI ulQQCo EFPBEX nKcCm lLlkq HLWRC eIDyI gsBTpx ypEfmP aEUBSRPjs TkLGCf TuikS JHtej FjzcB qvvsgy lrkBr OpPPse FfgIp xIEbzHd DfxpD GzATB kAhYh BxaLglK sbYjc GDeLp cjAkfaF lScHd HWLVGeA IXcZp QdipFDGr LsvBz uPmcav gHVCL xUTOel yufGs FyOfiDWy cHoeVcw yyhbx YvzLKU YyuAY ZHUAef rTIYez qSLjb aFgqUd hHwupR foIZl NsoQo MTKiF kVOoD icrYA yxjRJ kjDGg LcFjTf rVqet VrWeO wLZBl qGRMb EaozA bBEpY WqEAzd fnvfFLWJiN pKZih Yuzre tHuwlF VKHIDt xsetz gcLVszQi OZQsZ AESvLV YKSHJpYv ryfFh pLYZj mqGyz SUVWj BABABA AgbKc YiEmV ATvdg wZqAg aKbNjk DIinJqD LaUgR SjYFK PQYYt QYjPd BKKHQ uYSWu BMWDc KADvIRmhr kwLxT EntelE ineIEE GenuE afyOBn PeuEEEEd RJUyU loolSV QPEPh QPEPh ZdSwzlC cWYolS PYYug PYYug YYEPV UQQEP llUSF YobYPqQ mNbKX VVQYn JKydFe LbNII OUQSVu iSLDp HICYA HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY CuiYM csmuP FOrZM jPqJnW FVYak XDfhUZ tPtLw PQYYPV fNjHI Ujhxj qSVWT URPQQh USVWj pkAycLX wTYMUmHyM PPPPPy MeEPj wpDivn FbQEnOR fCghg cpCab hbRxqi EQPjjM VPuus Wcnrnt UQQVu ksmNe nFJcN MgqqBr uzoWA OuPhvl WqWtMg PTucf USVWN hcxSj lDvYF QiUQSVMWj VZHMf wbnShG PmAEL HnShG ItOLt EfGpmHp aKIZG XxTut vQzgJY ZHzFKe CQpOk jAZjX UQQVWjgYjGN PQPPESPW jsXfF TUSVv ABvPV WUQQVW WHjBf nSExJ lcxPl DWCtOZ Kdafld udyIj RPQQE VQuuH VJuOYU uEPEPWSY YPVWSu kPVWSu KVBHDa dJDwwn FGvLy PGbJe LrqIZ hFknKa CCXyXDs HhMmIo ZqGzM UmXgR tZkAB XyGTZ wsmhQ Lppur NKFsc AvJtPk kMzTcR leBXU lHnPAIz KkPKf ivnNOU wrYxiO mTyaG ykHib ttvkC uPuSW EEwPr UEHEu blgSl ZMAly vfPeC GFbZTgwI HUQVV ZiShVLac XfEFhP EPEPk AlVpu nrxzHv PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu UqSklO nAEWH QvYsCn vfQJGIB eWeFmDMru uBjAYjZ Nkkve jAZjZ UQQVWO qAycy SVWtdAu PmzkayB MTHhV ynRyE zoNfp LFkJkR BRPVA qKfrWl lpcXb oEOwW CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp xVaAJ hmfdSrA iiKaq lVaAJ ibSkA PLdfS PFZZCl MEEEPu YQvxY fwXcV Fcaef SOGYu PPPPPt PPPPP HLMMQP whGvNIxwa koeaWXc YYtVWh EWWPb uCYYt uVWTb WWWWWS aWPYG YtVWj PPPPPPPPU erpGY kAPSaN VSYYt BkjwDB EAEfEEj EPQEPEj AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP nWgtR fRqzi UQQfE fEEPj PwXGx cmOfoJ tldCB EGWVj yJSeJzJi TtCVz AFBpB rtaYx MSVWu MQWPVk DQlTm MEEEPu pBhRASPl PPPPPWSu QQQPu VWuSu PPVWPu UWVSM lszmD aTjRg GfhAY nUlXZ HWyFz oPWCbPbCs KJwQe qLcOS WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj tHhaE wHuhjj YuwHu fMdFX czQZo ymiiO sVodK fSfFsnP mpzLL QPLYYMt DbgCFc VeZqP ePziy PiJQDz AvSzy NoWhc eulcyiIArG VIgGG jPnoT brwvk nktzX PxeKKGfR jHmIx vwfcbUl PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj PTLwu TVcOAd SkHbPR doyrL yOYFc HXQqJ lDFzK DIKtW SErjMl XWfkG rssvXm NAjhl gSuMt WxxVL WvvVL WHtAtVL wlWozJc vLWppn ulfwJ OYVgpI fwrUU mPHcH tXMSP JFzRU DPnARGcr eoDXS dsMDl gVgOs ByxhNP zNQYC CvDkFh McyKX RiEErlDSP uuoNe QQQPu MEEEPu EEPVYY odMnB WWpIM BdATKM yAuKF qumsgK cxAvU kWfym ZHdFu XfCtw EPeuEEEEd csmuu UEcsmE PEEhg oYNOx eNhsR FhBpCb VWlCv GUQQSV HDaPS AFjUid QssfG hfVxuk qFqNUIO gWuhlV McfdRzc eUqMD pkoNF fEWgX NXMan jqARm LxRKU fcfdt zXQgcp FdGzP rKoqR jaTRp OdKgNO gBiLx kENekRdm jhXmf XVeMzW ZYfoa XLFnlI wTXHPt MJJYz KLpzB OelEh pDdwr ZdCVW CaRSkiN yrBzwB FeXwQV TwAmZwpV MWusKZM KgPmhqC lxaho XWiSvBh AyBhnPO WODmk eAaVnzm SSUDzPk BAZjKO AuJkR Uwlis ebEIW kOpYO oNrZw CkhLw PLiLL EDSBNm QMthm DdSmAPXJ ixSNM PPduPK ZgwDz sXoKM adEsw QhqwIAd AGRyrV oernM HKVRf LkLEh zNisNK lPwDCD tlZLN JRuMI dfxWF tjCVR etpFb oBpwZ TVzoaN EJCpDa mZQdXeLVOp WXdRw hXpgksHp zOkOmNl PwmEy QEeoTaVnE gyhue vjRrZ BzybM AGgTmLL eiRYRF YKcirZL ByfLJ WthLJ HyJIAJPq zzMGF oIHslP xaHhv kOjxEPD gvWgtN iDiLel pDeUJ yQmvJ RBGAc SnMTx MXMPxEHC NAKjC tApQKCB JAdQS amNvL VfNRMY SZqDM ApXMR EYpPX yyojw MRxHbv EExRgM mmKbf PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH BDUjh fxWWq KaJiw SXWDeM MuUMEIEPML UMEMd dRiCu EEEMEME HnEMI MEEEE ntJETE EPEPM GaoJdv UQQMEM WSDdMe bRpBkx WCZBnXM AHyjPF BBLAT QehGp tpHmo vrmZv KjonkIVaj bzgmg MRaWKY EDPIO swoBA yCAbQR KKbDL WHuZL NusJiV nTXtf AnPqI OZPaj qzBGB HnjviQ ljzbH FPRkd nqrbk mPVRw GkqHE obaFUl tTApd wZxji iiwuF VwrRE JqUkt EBWlq VoPXD oZmgo EMMUREPMMM EEMUQ UQMEH MMEUE etzSc EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU lQHRx MQMUU fDXfL RfGBn UQMjE vVvUQM EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd NktzX chrTt uAJUd ULMEH MUUEEMM UEEMMU DrZyXo glMSP cyhNX AFznN rPWtx TyInX eNERUBo BaInk GeGrXa GNwiwb oEPUST lpjhh AsEiDtq pURFB lkwsf YOwDt hyeHl XukHZ CvHhog cTatR oRSdT YMRYl BApDF LgpID sCYAGiU RdIHh upwaIWGn locale QDbqiostream badbit failbit xPpRdA nredIe yTkfm mWymnJ fkUzs jjyyXyH RyoioziXA erbVx elXkBZ Hhzgk pBVjO yPbNw pCBvk pBaWGn RzXpkiIrz qAgBT nJiXl UDQhAbqN array length qunknown error address family supported bAyalready connected argument argument domain descriptor message cMconnection already progress QEAyP Jidevice resource directory empty afile large function supported unreachable illegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process pqbqDaN message available message space device XJino process supported rUsiQ IhhSJ operation supported rUsiQ owner protocol error state recoverable files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx gzBpT radyu gzBpT VGiHk vGvgDr AoDNI qswBMU caAyf AgBTY AgBTJ AgBpT gbBnT advyLua akyLuGaj avyLu atyLu gbBoT abtyLua gbBQT gzBpT akyLua abyyLu uaAyRua yBkAy MkFOrzzY vtgLN cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable VqqUbTo placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor flKDB Class Array Complete Object Locator xpxxxx jOSTk XIXwu AatXE ZRnPnC gnBNT eJJiS AgBasin AgBsin floor Tqtldexp hypot AgBfrexp rAeJs PaDpyOu TDrOyo xpgAw DDThOS FiCpW Monday Tuesday EBMay January March April awkCar December gNBNTq gjBpT ayfua DAgBUT vtgLN DrTyo OVoRe vtgLN vtgLN gEBVT aLCIDToLocaleName uaAyua gQBNT adCyXu abyyPua Dpryo cakyyu yuFaJ aeAyXu raWAys aityXu aiyyu GRiOKl LPPIl YYABXP EfJiXfShK byYFa JzqPe yarIH FJeCp HYxXZ BLaUR LtmYE cBPrw gCoPk twUMc jkeFC Ckncvn DfXas tJWct kQWhOwe kmPrZ OhEmw GATwe FEhUeR ltpAp acmzPE zGntH DMKwsBTo lgdRr dUPBw ContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey aAyou xeJJixS ZfUUU bYQJQ TJmcJ gMfJFD KCsPA UObfe IROCcKWF zfPEAy tGucpu usage usage quiWs lOXWEh pgByuYz nicehash prXQq Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ bYOTC bKNYQ xAsEv SurdPj pvQwj nfueQ tfUTy FagXi JLXCM mNlVez LxWkT MPhgg ZGUTsE LZmYl DoAQn ChasPx XJzOe PtoxsMWt ZIInJn ZPiaI KUidb ABCDEF GHFiw Agjym WCmpP eJJiS BQXGz pvmUf ISnEM YaKWHGhJ rrfJLhE kSbox VIfSY sZLCQgY nFiwAHA rKsiV qAgBV QGiKhE eFSKJ Gvfxl GpJikf vGCeQ fTXHx QnHnD arINn sMECnt yFkBS syXNR icEpb WwqaUG wDuWt YdEKPcL QGiKhEj YQqvOx XenmH GTXxyWR IXZjj eJJiS wUTiu LnJhdY sWnFzR CUHpY treJJiS dgBgt qAgBZT KSeJJiS gBuGtt qOgBT dgBGtmAe GieHA oFSKP VYeYXz aXlbh OpkzU xyXNH nhDei sQiDtJ FrCccHA cmIDhc ozaRLP hyeOn FYRFY ZLwYul ZxDKGShoi XpTil YAMbY VqnfA PEyGB vdOxA dwJOHaKIOB HkHHze yWtBN eaDQh KSeJd DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven RiseRiseRise Geode Geode mgBOPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION ltPentium Pentium Pentium Pentium eJCPU pyNgN Mobile Mobile Celeron BPentium OSVyc ObTpd IRWIN WESTMERE PENTIUM MOBILE MOBILE WOLFDALE MEROM ntMORE QUADCORE aPINEVIEW CEDARVIEW tCopyright Plauger licensed Dinkumware RIGHTS RESERVED wreJJiS eJJiS lVtyP Unknown system error Unknown system error kgBEACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME etEAI PROTOCOL SERVICE tEALREADY EBADF gBECANCELED ECONNABORTED yEDESTADDRREQ EEXIST VBAyEINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE UobBnnD ENOMEM VBENOPROTOOPT BENOSYS ENOTCONN RBENOTEMPTY ENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE aUNKNOWN UYENXIO EMLINK EREMOTEIO permission denied NhbwK address family supported temporary failure permanent failure family supported resolved protocol unknown service available socket yconnection already progress RCaoperation canceled connection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected imessage network unreachable buffer space available device enough memory machine network space device ysocket connected directory directory empty DQkZkF protocol error result large system process vYGTe across device permitted unknown error links async bgBfs event signal unknown error malloc malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent ReleaseSemaphore bwymC CreateEvent CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress AyCrB kernel GetModuleHandleA CreateSymbolicLinkW CancelSynchronousIo powrprof ysocket closesocket qMissing after object member aMissing object member escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected YtSee Syntax error value object array expected ZAGuj Content Length AgBfalse VEUbi cnDhv nTqesR UOkjq lRocqXk aMtcs QzfDVu WeyHfr yqFgz EKAtl adQQJ aDIyz zTSKahq yePaQF JruQo gdVhHzx BZwNux snUgg kMsHOY DmPfAV VuUsHW JdEBE fYEEYvo IUvfLUR FZfUr yzyuGd PiYSeu YauJH hHDOU pmfYJ sTpkNwjE AFkLB QjBPF rLtrz EKPRXB WvrWfq fafyxijfhkdanfrzz eJJiS OWfdU arInz yyXNH QpLzN IicEpbr GNwib lqlRyF MKHRf sQiDt PkUeqr KqgSb lXNkRZ sWlcC MYulQ QocTLRN mPejy vFXDk AXDKC gfebWGq qqCvU pBJaW ltpNv RzOpkirX bVgNZr eJJiS OWfdU arInz yyXNH QpLzN IicEpbr GNwib lqlRyF MKHRf sQiDt PkUeqr KqgSb lXNkRZ sWlcC MYulQ QocTLRN mPejy vFXDk AXDKC gfebWGq qqCvU pBJaW ltpNv RzOpkirX bVgNZr eJJiS OWfdU arInz yyXNH QpLzN IicEpbr GNwib lqlRyF MKHRf sQiDt PkUeqr KqgSb lXNkRZ sWlcC MYulQ QocTLRN mPejy vFXDk AXDKC gfebWGq qqCvU pBJaW ltpNv RzOpkirX bVgNZr eJJiS OWfdU arInz yyXNH QpLzN IicEpbr GNwib lqlRyF MKHRf sQiDt PkUeqr KqgSb lXNkRZ sWlcC MYulQ QocTLRN mPejy vFXDk AXDKC gfebWGq qqCvU pBJaW ltpNv RzOpkirX bVgNZr eJJiS OWfdU arInz yyXNH QpLzN IicEpbr GNwib lqlRyF MKHRf sQiDt PkUeqr KqgSb lXNkRZ sWlcC MYulQ QocTLRN mPejy vFXDk AXDKC gfebWGq qqCvU pBJaW ltpNv RzOpkirX bVgNZr eJJiS OWfdU arInz yyXNH QpLzN IicEpbr GNwib lqlRyF MKHRf sQiDt PkUeqr KqgSb lXNkRZ sWlcC MYulQ QocTLRN mPejy vFXDk AXDKC gfebWGq qqCvU pBJaW ltpNv RzOpkirX eJJiS GiiKA JProx sMUnx LrWtL YhpUc sQiDtf oluwu yPkmz winOpvj UOjeL MeQMY eQKlc JJeKp OWfdU OTyIX yIyZXNH IicEpbr GNwib lqlRyF MKHRf sQiDt PkUeqr KqgSb lXNkRZ sWlcC qqVvUp LUtKOBn kwyuinB bUYNKT lJipp,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj atlhLJ EIDSC jCmCGpUqv JlcEWk DvmJu BRMQd nwlEOF FOLKF OJjKY HnBuIGt yJcxX IpPuLH VLsSL zfXVN hidRd uVzvBG cxOdoVy dTlkbUu BMsjwh XIpLB tiXHt BoAgq nFCNd CYdzQ WSmCK ozYbJr olCOTq kqoDlim vBmnDv KDQVuX wczRSi olBJft VXXoL ZOvRB Axkna ygTTTqqo BTfJPON ddUBM LCYdf WOXtR NkcQw HuAxX RFmgq igrtCX wsytS ayrdV cqutJO VUzvv mWKAr VzDVt Wilsc ocdUc yeCIJh VRCZU rwrPE eBxkL nJwfxAp omFOpb tLirD JIahI chKBi OpNLQB yjdah pZXQQi NWjyrwo Kgogyq XUHks jfKpFB vLyGl Acaeeu jhKxyN ZyPGb pgieA Clfyt rYRhT Xfxsk zEupI hpGDqL OexdC AxKfe rLSMz CTBRJF ODxwGSxb cEyOq aiguO sOCkt NHfzl EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl LpdkUh dgJhct rlSHP aFnOLq OVCMRto prFEk PGwUz VBFNt twIvDOM cyWbF ZeNeCZ PvGcExT FDFbZuhF xiDugze wTHFiUtH tWhiR kFIXA QBohi WSVWN fFvIo nqrCmCG UvQtO CsubJ YKDcx CnSsc dbUUz uKJrwk ldNJeLAi UQpdcq bfnfVw ASNkw xAoEj awexyZ YffuK aczrd veTmT JRwyL cMqSeJvo KQnnp JQqbDU xZzUj CReAe UeOYQ JVoWK jBmoG SeYDn UQSVWf Syuzq aDgpE FSTFuw ezXSX HUjDe xOZmOr DDLAR SVpYPWy xXQqPpD WwHXt RaDZY ELKOF VqYyPh oGEVqRMw vHejFv LGUcxn ByuiC qvRaR ViVdk fMDqo RlToNE ZJBth cPthh ZfKNN psMYa tctrB EUsfu fFgUK srxbP FWMgb wjVFL SUeCuDXh zgNYM tzmSu KElRY nogsj AFiGj iElGd xwOiM fKfrYo SvTyw YTTRg wjctD dCqyB LONFl wScegJwnS KaJZuTID izJcgC IXZLa bnGDO AjuhvM nBteQp XoFqY CKKPF SmKNF FVmFZg sfitR RzFnGW iSGfh AhnFon oBQUKU YNpSu vYjam qFGLXdI sNxIpMS BvLgU EBRAMJ lmWeapo epvDZKK uCLMK bUKIGcEr oiPls eUqeKu PQMvS JuzOAo ZHXOt yNFHk LXLDB FyQqi sOuKoW KIxbJy jSUVW BZlxOSjJl xqUjh JPFBY BJNGMR ZDdWM FhTOhD tZYtB QBnbBc zgGQDSG qIEth idWvD TIHAcP jUTRR zXZLfn vPdOYPDC hJksYj RknSM TSUVWL VWRPN VWRPq TDXNUD JFxpqwgi gHQed lfuwHZ NVRwd sytVDy OobNl sSQDm SVWhI mAFlK AhWIRR PeCCrk ksfcTD TDXNp ZLFkjU lxRBjpA RknGI SyAFOT npMQr SxCCLC VztRO rmNMo YbPYo vxJKOm AdKcrf FNBrcC SUVWT jrYzWSF mODwBj ycokkZRj JCaMy NNUyX EpjgM SuGQs taeVG tkZlB PulaJ GQCSk OvBpA uTjDVX ywnGX YTVXRsH RagFV LLANqpB BlFKDd tlFJr IoGrlG esZyx Tcwwyl IemuZ JKyQlBj xcwTO Cjfrr NwCEL hcTib THJhZ AyjlmPuxHk ntlrmAop YOsUh qHGvDeqIq BgZjnJi PuBUO alNnZ aDyHh STFuw pabIx kCtDG dnAzSZ FMOMX gEOoT NMSQj BLwSou TteeT AeoBW UHmcd FefMD ODFJS VFzyf HEJKi VhDgb Ioowh qXSttCr GDvjXu vgEbzH WesCEb qeJVpNqYj biuEN yDDRjKlM CbOAWDvsK APuun qzqsC rqOFd yqUMom eMpZX kPkcH HBSJb mmEpuf vczVV wVMsy NYIbX IYLsn MCroS yQfrx jcTRUL kKACYf PZkRk jKCkFb BJljg Fotza NOrEw Dldnp FjTek VPjLh BDKSy DGppb oNDYB COfJOS ytxaMmC PWsaXy mHwAg LswMk CGyiH esIpo pWUTjy nWKGB gyYmN wPuxaR nIgil yeCUw ETqlf YOUxVW XqHgHR FLvpqu ufPTa MXjAa ZQLfl PgLyW OoEyDEtB bRKlPa CcWYU jiUud EMkTJ vlnzcn TUYyy IZXoxr gFlzc tvhHI uSUVhI jVVgxow ytcwY Xotws cYuEeS qSAfE bEoeQ cFgKw MAYoQ qeBTT RNXTd cBXXy hkoVTH uTHTDE sXPVjt tLsdB erCfMir SUVWC uWBQWYX XpbgTJu OBenD GqSUO OGPXl lxKGkd SUVWh zYMaE qeYRm rWGcEyD MQSUVW nJXauF Ttfgt GXGTt PTDXN ztKDA siEzVx hUiaQoh FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS nmNZbGW XOQcuiw bRLuns Qskjj nbhXI HVQZm bumUDP bvuOF Xrrxf XOOsHR haNoge ZpCXyY qcjXZ FGfINR tyhNzNyo bimIz XanWh OBKkY SgsJf BPBOe imgdY EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE xYYEe DFXSF MrKTbx yUQME MEEEEE MEEEEMe ktNFLw TSVWu EPMMtM JGZwpu lMJUV QBklB qpOSy gbkbd IqsvS ulDjg MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH KteUjh SVWeMe cSUjh EPMEEEE MTVMMHVE GUxYvG kJTGw GSxYvG kJTGw MEEEEE lOSyR Hwnno ZFwyw xOmms gimVk MEEEEE MEEEEE EEEEE LyFLm EMMUU UEEMMU SVWeMM MMUUEE MQUREP SVWeMEEMM RMEEM AMHrSc aEbdi aQsun FAtec qWBJQ MWopsQ kYkXS DWMjMH vnmhU zOone hZShM EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM vBFhe jHuaK MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ MeWCees oJzIj LxaIw QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU clrhF MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE cwcWL UDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS yJxrdg xcYdwp jjlhR TvZkp KNcHdi DZGBykU dkzVPB SZfJI sOrYr GWqetBmcol GNOxoa QRHVtl cLmUjY XuSbl wmozj bjqKX sUGzz emgqOXVv nlwILyhva TTrDU ecPeZ cxwMY wntAH qIkiy YtBHu DSkEb kYhfwzsZ nYqqUoB VsRou MdZnJ bHoLz bpxci AxfAn zdurl dQhpke UBfWN PHYok liupJ ZazLef OLwRK XFqxvx uFvsJl LLDrm zdjie DqZNQgY DhXExB vcUKr GKkOeME myVQp NkwGY GBgCAT lBXtY lUebg defGe SxLaok aDLPK FVdCGqAYn opsTF zZRVn IagrX mpYEhMf tHPTH Pukzn YhcjA KqMRJ IJTra RwNqaXs AlQtsPf knooWy cvddmw BkaUy czjOnE UqpYgC LOtcyG aXYsp FnHSH TrmZSG wtnTI eTMYAVu LWGrz ywzAiO KUmlxR KcFIf xvmeJeo usJme jwuwb uanmQb LpKUM KnIGcUGH ZHkyhM MwFaL zZtPc jflJY wZBAmxnQ KtuhE SwkVB LkASmWxY oKyuY XZPYI Jrmspxsy xGkTu eKlMPO WxCHNf KinZaWU Zephj QFrvPd pjhrd ydeOE ogfpgX hJjhVHTF abbkO akmBqr tjWIU kGnSjfNsq CYhLIl gBUGNfcu pdvVG XxPMXl iEYts vSHVr jqAWr WtRZF NPTaf JQVEe iVJmqa aitCu qOowat SUVWj BABABA VMEyDO bAYQs KpGnp nIMnFl bwgtZ gIhNMl nFGJO nbCcW NdJEjaT UWvTKt TDXNv PQYYt cKwNWOn CjWRwKUv qDgYf uYSWu CqqaM EntelE ineIEE GenuE wXXoG PeuEEEEd fUQVu QPEPh QPEPh SojnP EUjhJ zWuqF pNhbqJp PYYug PYYug YYEPV CUQQEP drCXldFvb jmLmi JCOFI hBRSu KCvKXu IgKZA JUQVu wqFVF VVQYn NOMKZ rNyaH UQSVu SwTufJsFL lEUVu HuYUV EPuuu AwsZX SVWUu tfVUk tLxXj USVWUj UQPXY syjGQC CuiYM csmuP hLEWY qKCQaV tPtLw PQYYPV Ujhxj URPQQh USVWj MMUDH MtpCz bqJsf PPPPPy MeEPj ypcZZ OWopWub DwVUI btiky aTdjCK cFloz EQPjjM VPuus UQQVu eZyDdNYJ FSrjo FGnTo coUJr ZzLlC VFtWlB eJKRY HzMZa CvkYeY USVWN UtryD QUQSVMWj BySzP ItOLt FPMzn jAZjX PBIpEo ZUQQVWjgYjGN PQPPESPW jsXfF uUSVv njIOhUM DRnYyEg HbHyg UQQVW KuxAy NUQQE hlcuiN vGcEx TNjgJKo XtVTv zKGXJ RPQQE VQuuH vRBaG AtUdR uEPEPWSY YPVWSu kPVWSu LZeADx KzrZIWNqJ wLWzTW jeWPd gEXnC yWVIsF ocvjti cKfgv bPgkA VIoBZ lZnky LLZBH lwxWD bLNDVf LQFcU WKRQxOx pCYPV lYhKS rCZux POFvUV KGqODaB TSOrkh VZGRc NzzQV YNAcs uPuSW EEwPr UEHEu zLvgbBsGL cGbxA qbUQQS XfEFhP EPEPk AlVpu LiFLN rmpQfeL PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu yaoVV uBjAYjZ jAZjZ UQQVWO SVWtdAu qAZAeV AYNVZ lwuorr MKoPMm XcdAU CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp ouHif yUcsm cAxGp suvOpTx QBCImG XljXk hsadu zEAUA LTftt CcFuE iKzci MEEEPu eZyDdNYJ gonIqn uCzSpDUu HIrhr GFNam tqvUE SOGYu PPPPPt PPPPP HLMMQP jAplB aVAlnNATP YYtVWh EWWPb uCYYt uVWTb WWWWWS jgkhc YtVWj PPPPPPPPU qMmJHP VSYYt RkDHF GJsas EAEfEEj EPQEPEj VhqzrAsY eZyDdNYJ LhAVbAMY AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP OglPJ TAuRaaN UQQfE fEEPj eZyDdNYJ ksQuvOpTJ rfVth VMpUxJ wwryCBu DFIVqa TFAYa icnHa EGWVj tYfWY oCgkJ bmtZawz WfUGyF MSVWu MQWPVk jvzNtN gSxCf ykgNxShG EAqbe huemCmG uKwuoQQ MEEEPu fcMpO PPPPPWSu QQQPu VWuSu PPVWPu UWVSM ogcUU NgNWmS doViO FwJve gweUBk DFhhZ VKDQXX cQSTxGX WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu HhuHcK dAPDvI HVsrN YjZvW mAEDBu QPLYYMt xspIF fYEoZK jGoju Yzbuc dPrKmKtxi msbxd EyCzUc DaKGku KwRnO Auchn egNYL jmEag NrcEx UukBR zbrckh yTkIX GMbsiA RMNkHn pcgyOGC PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj wUBDg fcGtG wTETH unQLv zykwZ dzQvH WxxVL eygXV WvvVL WHtAtVL sNUQM ihwYq myhEPx vUsYi gCHuR aAzgR OZMluE MRiLR BXtiU PQpQh VltNr MhXsVj QrFJK XzasQ SmdbZF WfgtO LTrFv WvGgt EgjbO yCBsa QQQPu MEEEPu EEPVYY icnFuN gwtHs jlHid lBCwGB PVDpZ WJNdu EPeuEEEEd csmuu UEcsmE PEEhg Qydlq VWlCv eUSfE UQQSV kugFs RNLQh uWyxf LDmMHw Uhuri gqnOv vxgsRFbG OTSiov aubcu SAziU wnWryx vmBqGboh dwUSPfWWPj UxasT bKNaMF FSeJo LGrYNt cRBSV LJSjy GMejsYP wuEHDdv NjTjt NGuvI pedpH poshr ackHz SfPXY CqhCXhn lLAmZ nsZzyEG KXnjb FNsQB JJUGb leEyM kSjcSeBSC kAHnR FigVjdABy ZXYwtseV Pjcme laUUic YUEVc sgJNU cOvKh zSGRFf lXSAi LUOPhxSq Efxmla cdsxVtV NnMBQ WfzgJM pGlmvni IAVyx WdqRQW hofebR TJNbS wgEZjz QiMyfQ juobpvyK nJyPE HEXgd dJIQh poXMm kGXeYy CsiVR wNUjAR DSFwy NinUDZ JkfTH zaEYe YDiVaB hkcPVI bKEWPFkp BPBDzC tktaH MYAOw JkJUzjFO gAAmiHYNJ ETkIPt gOIfm EBNhPKs yfDvkR RhWYxZBJ cBKxk GBtRI LmFof sZWBk fDSXB TUCncz xkmIB DNoov fJeMB joHEM VyriJ LOCHAIo NvYEcqZ MzCrHQC kbbhOr hflSz mTDkF bKVTIH penLN PunLs EibZX mdRoSK CJZBn zCGLn aTSja nmxHHx gkSqo TNImzFjS ifexVn wbVlW jxEPD vIuBVB uWETV eaKOy SnMTu odZBU FRIVwB wMNKlf jyrqn CanTt AlZBbJ SsDyaz TLEaV kCxkZge pKgabz gHmCoE XeboM pOaeuu bxCrG ZziAK QgHMAE PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH RUQMj EzmPMLY RzdVQ niRRkn ncOSyQA nGSJH MuUMEIEPML UMEMd yvrDb BHddu EXAfg WAWBsw OWKGD UILur EEEMEME HnEMI MEEEE ntJETE EPEPM UQQMEM zksnk uhNIM SPjZU IOhYK wiYts OIPMth WCnWGcN KjNWg hkofO XZnEH xWEGz MsHoE jkRssp EAeue aWfXu zdbBwS CQpaZ llhgLt DPNzGOO XlICY oyWKo eAYiE REumpfIN SIrJb DpYZX MxUCeHM ZZYkq Hvcbh mvJPU DvsXKpR KfVcz cUwYT swnBw NJLov IqIma cwoxv EmltX LrSYW zcYOdKgV nbhXI EMMUREPMMM EEMUQ uAbtC UQMEH MMEUE CKevU eQzpX tWhiR EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU xfSaR YsGHxn fZTHFdF SXoFN MQMUU SPOaz UWsci HDViY xqUQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd lhLcwz ULMEH MUUEEMM UEEMMU yRkpmy GcEZD QYzQp XxCXK ukkgTJ HnsXyx ZZVmM lxftl OWryn squUf zxrGF JAZyl afKNR VkkVk YLDKXz NGDRlHh ofiAg gCVOX xrbET JsrJc kDxlN locale AXBlaiostream senrT iVzios badbit failbit Siuqd JROSpLF OYsKa QYzQp SOTej vHCSp hyqtz jNPnr IAoVcz OrynE rKzxdr qgPoR JcOfmBf fKNRpC GSNge vNDgR WFQhF AnWUq wdaGB XDPzSVqb JVkiMP JUopS PypbI array length Eunknown error address family supported Ealready connected argument argument domain descriptor message Yconnection already progress VQdevice resource directory empty large jgudr vCpdfunction supported unreachable dillegal sequence inappropriate control operation zYinvalid error directory zYnetwork reset network unreachable buffer space child process message available message space device QHQno process supported operation supported owner pdprotocol error iWpxs state recoverable files system files YFwrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx zYwvzwET NyKUs bnRRkCJ LJQwT idsmDu pxCcWRB DMCGO FIENk gUMuF cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable BPgse KsVHU placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx Ytseou ZDIznc TcwHU sEBoQ hkRudKi zYlEGV yRpwr floor ldexp hypot frexp Monday Tuesday YhgjXS January March April December vzGkA BvGHC cqlXW EnumSystemLocalesEx LCIDToLocaleName DENpd gdprwV yKHURs RRknJ RmhtZY btppd QkdnW QDnDms eCiZJ hRuAJx uUGrM DhZMVp wVnMV MCOEQ LtmYE poHjC bQyiJ thmaKi nciRl ifcDI zDyTF paAZWP VSVYX iiEdA tfINx AJZMe JbHjQ bBMTx oFcUZ isuhi BeRgz qODnT ycOuX tVVgB hZxxks rwuoE HgJkyG YCMXcv vXxPJ zGntH GlVQw elyXJ tODBq tiiVV ContextStackSize ContextPriority SchedulingProtocol tQogH dyRpp ZfUUU HDrKFCX Opzdm usage usage aOsse cAeuf OzEta yXagh XfzYd nicehash zaRFtOEd fqhivh WGcEDS Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ HVfQf dYUKCDI CCcuQ jqwtVJe mgjHq FVbZxb LtfoX FhhUx tVWYP lIRUc YUniGY JLXCM mNlVez Ykkjn iikmV ASlhk xRBTt YCnVn qIsBv XhmtgG AjfTsFnj ybXkQQ ABCDEF uNBpdu SHYsJH umNbl CqDXxT WGcEyDS RRknD OIMzL zzEUlt eTtzNsE SQEDc BGTAGVm BIhkT hTKmrR KvwfMf DznAw JFfTw eAeuG ORxBj tkAZB wgheE dJPLVx viCSwJ dhHji GnsaXycF jtRGX vNyCeiQ fhobs KtUsfG YAyDS RRknDB rtZdRV DEVOc aVQWq UTcAeuG AyDSy Hhife gJpdC zYyzEw SpLzPCL zYnDzaw noOCL PAeuB gkAZto fCVKI HFifce ZgCyk GnsaXy ptuTT bxzUk SvJVx MIhczF RIPmC CzvRC WlQCM FasGV tSRck ecVeF HDEAH NvEDB lsCKp uQoHS KxvSo bbOhgqT uizJlj bLfRN llGMs aJIRT qsuGQ BSRwu IOyeR TcAeuG RRknD zYUzEw DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso zYAuthenticAMD zYCyrixInstead NexGenDriven FRiseRiseRise Geode Geode OPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION Pentium Pentium Pentium Pentium RcMTw Mobile Mobile Celeron Pentium IRWIN dWESTMERE PENTIUM MOBILE MOBILE WOLFDALE MEROM pdDUAL QUADCORE YPINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED pFZWzC cAeuB bpRapBHCn Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF ECANCELED ECONNABORTED EDESTADDRREQ EEXIST EEINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM MBENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY ENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK EREMOTEIO permission denied address family supported temporary failure Fpermanent failure family supported resolved protocol unknown service available socket connection already progress Yoperation canceled Fconnection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected UTQmessage FgYnetwork unreachable dBJydno buffer space available device Lpnot enough memory machine network space device socket connected directory directory empty UfQXB rprotocol error result large system process Ycross device permitted unknown error links pdasync event signal unknown error malloc malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent ReleaseSemaphore LCreateEvent CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress dcNdW GetProcAddress GetProcAddress kernel GetModuleHandleA CancelSynchronousIo powrprof hgjEZf flYsocket closesocket EMissing after object member YMissing object member escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected DgContent Length false FBNMfmrz bKPWx Xxfsx rxChv gttXZbi AFCIWWjk bGSXv CHfnv GHcigtsT WXsywd QRWYct pWkpYaL yWgpI LBvTZ ZAqDHN zsoUov EjNvY kglivg bpqxW WTNQIb mpouQ UtwUt rCYqD kjSXQNzK vDHNw IPfdzqjn wIufQ oYEgX HccRaB sDOjt RIgyh vPQgvf sAZNS NeQAQF vQKnoD nLkzO mLnTc euFjJe KUjIf pNpzbV TwqML mtsUbX sfUWLyaeY fafyxijfhkdanfrzz cAeuG WGcEyDS RRknD IhNME gBOTj eavTKE ZgCyk GnsaXy mOeOJ LYFtRGq vNyCeiv iiETq CfINQ OwrPn ZXyQl NGSNk YDKXzh hOCCz ayIZa XwgRJXs MwdGB slEWOF YMBDaoL uizJlj JUopS PypbI OrDAHB vaRqS cAeuG WGcEyDS RRknD IhNME gBOTj eavTKE ZgCyk GnsaXy mOeOJ LYFtRGq vNyCeiv iiETq CfINQ OwrPn ZXyQl NGSNk YDKXzh hOCCz ayIZa XwgRJXs MwdGB slEWOF YMBDaoL uizJlj JUopS PypbI OrDAHB vaRqS cAeuG WGcEyDS RRknD IhNME gBOTj eavTKE ZgCyk GnsaXy mOeOJ LYFtRGq vNyCeiv iiETq CfINQ OwrPn ZXyQl NGSNk YDKXzh hOCCz ayIZa XwgRJXs MwdGB slEWOF YMBDaoL uizJlj JUopS PypbI OrDAHB vaRqS cAeuG WGcEyDS RRknD IhNME gBOTj eavTKE ZgCyk GnsaXy mOeOJ LYFtRGq vNyCeiv iiETq CfINQ OwrPn ZXyQl NGSNk YDKXzh hOCCz ayIZa XwgRJXs MwdGB slEWOF YMBDaoL uizJlj JUopS PypbI OrDAHB vaRqS cAeuG WGcEyDS RRknD IhNME gBOTj eavTKE ZgCyk GnsaXy mOeOJ LYFtRGq vNyCeiv iiETq CfINQ OwrPn ZXyQl NGSNk YDKXzh hOCCz ayIZa XwgRJXs MwdGB slEWOF YMBDaoL uizJlj JUopS PypbI OrDAHB vaRqS cAeuG WGcEyDS RRknD IhNME gBOTj eavTKE ZgCyk GnsaXy mOeOJ LYFtRGq vNyCeiv iiETq CfINQ OwrPn ZXyQl NGSNk YDKXzh hOCCz ayIZa XwgRJXs MwdGB slEWOF YMBDaoL uizJlj JUopS PypbI OrDAHB KvUsi WGcEDS DukDm kHgAM EqcoM IlhSrd kZrfUy KwsvR vgWen WuUfX NjcRG YImzx CZAeu nHRRkt XSLPM PNLIc AUgSTcP gBOTj eavTKE mOeOJ LYFtRGq vNyCeiv iiETq CfINQ OwrPn ZXyQl fveZhB dWoKdIW kpyour SaJOccl tAhiMZ,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj xsERI PJMzSh NVUqZ XBfKY AdcwT BnCXkq kECvfQX HclxW Sthrg xcaoa rpHHanJ XoPDA LiFuCl vIInCZ ARHPTBB qeTDF tTACEH TjgMCvb FKMlk KUeXJ yphCg iROqq YmPAm jFbCy TpXId HYLprc kUzXY vDuKo Cexqi gKtRRB AmPfw WDPIo cjkxURs ZmEdt ZwRqW fgtRmw RxtIqIq IidQkd ztfAnl kSqkA wABiSf DFdcK NQSBe kzgFs LbtyY xHYUq MzkqD HAcWA HbtvMEy mlaYBG nrGUg uTOmdz mwAoP SZLIFE iWOWl LyILzQdu KZJrF zHwaxE YItPb mvapqxz JRckH hLDBxj UfTYR EXkVr cvYuY mccGKlp lpkwM gNicC wZGphW pBcGt cGxfV MrKYxiwM EBcKp TAsQC TohlMD YEhmwd jZIep llvmj wmcYL HmEvMQw fHyZz joLZr jEFaZm IRKQEf PoxfWO cZDsB uvRVq XaqaM vhWZl NXkhd LXVLN VzvBd TWglb dxOIMt YPCok EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl YXEhP lRtOx kNXEILho aoIbt hvYGh yhTdZM giMgh hDodj VgIve avzCF SpzkT BCXrQ RCaHWBA abgus KIXNIx SlSDe lHhrUc owslR nOhTW sDBlWN VPokg AGdPa sDBlWy puySA DpfJq Xogkl BiANXod PovPuTi XFHzj ydSDL ApYTR RYQKan lZnZO IPUyU HjkeW TTQSNB Yigmtn SaXKZ OwSJd mAdqv SKXnAEA yzkcAel UUuYDFYV TtPJO WemRk YUdkt CYdTc nNvwI XmUKC ZwPQu wIukY JVvWan sKmva oGgUx YXEUQSVWf eQSIW mlHGH fRrRCT SVpYPWy xXQqPpD WwHXt aINHOI Kivtt cZeLE GVmDG InzxsN POnhw qBlEZTq HTiNYI Erzxp DczvD UqzJshp Xskyu fKRnH kmLbj ORGOF vnHePtQmhO yKshTYCG feOBH tRCJO wbTxsz hNMVe cqxfPfwQk wTfrx nlond DTHctoO hJranD iFqGr YFHDme zkcyT xVSFnQ afEGw asocf fCOWA GynzW tVyqC dlbzBb cTnhMRUx WvNxGC IGxgv fUvwK SRBhTt gpNGWm iZVWJY weDdM Zsayo AsAzKeU hscNHg YYQBSl oePQkfKRXq tehxu ggcbo Tvxsf DxbuO LUoYZ JyCQcsgQl EwXMrRN YTLDO Utiiv dDdIf tPuDKq uRayo wIgdL hpXTf SBQcx NVVIA uNwgv sWFnC zdaVrLj QDmylM eHRxD ghuguQjr kyARun CpfsW uoyfNB sDBlWN CVzTaQ JAWzd vZMkD ChlHd sJGHB qRRjfDg sDBlUjh NBMlqp sbuaV LmvLc nbqQX Csvge mmGmIj XninH QtkNpr RpQExYE aswni GHeRu cpegfhef SeGGE bsZGY uJCTL Nmeof uKBXk hnDWx wrjCiJJIU TSUVWL VWRPN VWRPq kuonW vOaCqN bBVLP wLUCe CHxBR sEzYTCH SVWhI xsERI njvoGt oEuuC ICsCEg fSVWh xsERI EAqAKg WtLES XHzmg QrNcH GSCNE GYmME YRkJw CJGLw FZqRL iJgzN OVAPJ SUVWT mUPoA wTExpFugG MgkKvA RetWd ccNgt XrUCY ngouRc LBCJYV iIZQUk fQMhx fYqLGW cdCAe FYQVy ZLkucvI nRzOiK eFGSD PyFVe wGWBqk EymXS TInVA uHlmwg qSRxsm odmDKE dDdHL KflrJ ZBHLuDj PyvjK fTJjc BwcYh tpTabP DrtJvLL hjyYf xXiaXmt jEbOdt MpPom UUpaz wMBtd LZsOgfb ziHXL yqXtEnW Ulkzn dJYgw DCgJMv WNyqu XSnekc Ekeay wnJCZ XjMZu VnOjP efrRF Kamcm iUQBI fFmkRj vfcwTn kgVLj pMORQd pROOt cXSARj hhXzf Elxvd BlvYFU PmlHQ oZgveg BubUH vPdLQ YJmDL lFXFc pijkxU gJMpkDgF ACQoz inDwU pOjYG TjLUd dMoGC OHOax tRiiNG poMRkh zwIZK FNLcvejh IpvPy wJjbw MJHdS uccBdbNjKH xdIZy OnmXs MZJPJ egemf NydPv NOXfv NkHll HsmwLn nlRhS mHlEt HZSnC mYxThF VPjLh EslUOk cunSF jztYe oqbaikc oqbJQP PcpDX zSnYQ EOHml bggYUG GtkfAP etbWkl GzunxZ YYkSR pBVTy vamBkCQ MVjkb aRyEC PdnBRrw MQWswJ ySuVV APoyO OfxNIY dlpuOKM YxGjz mpfUW yKCvLk NIYdi QhcPR XaOCT SGFVX JgQFZgv kEOHa itZDG ZGGnv viOBh ElCBf JFBOCW GryVN qouQv Vetmvg tqHtN qqexJ iehDE HOgaF zrVrT HRYto SdvEBqk dkGLm dkGLm nsFXb mxzMOk cVbPK nEhFR UPoPLw xqfRqS tvhHI PhIxi yzTis ERseECg uSUVhI MTiPuM kXOjOwf ooTiSI GUMmg JEprh DkFBr niRjFpZ wCNiLM ZxYkOK vUMbT eXIIos xtRXpGN VabPhc wKAtC mUXGw PJMzSU sXPVjt tLsdB IaQQnC UiVnL QyXly QGgQV SUVWC dskDk gnRcd HZQySIdu inJEHg PdmqKHj YLmuE ngllE hJLRq ANPry pQohC paMOM ovjlKH HbpYbe SUVWh shTLVbtO VQSUVW sDBlI eRNtR XMHYW mFbgcfakOqN GXGTt bQSIt JVoPl ncALBM xSKWaz FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS vbGDTU lVRBw inOCK MofLr koeuZNIe OlPIXf gkAVP ljpfTw ehbtx YcurQp hbwMr UBKIwZX DekeX fqKwv pxjUP LujlC gQUNM jEmaSp oduQY TLass acBGz OHNks EUVUh Zfqvp KMVJW iUjyt vtGDcR EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE YwTeC THKPl nGcYcL xYYEe eSRKAj XuibP xsERI taQezUjh MEEEEE MEEEEMe grXfwb tydsc uPQaL TSVWu EPMMtM xsERI xVUjhZ nuofD PVffb CHlkegwqJ MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH TJUjh SVWeMe EPMEEEE MTVMMHVE HxsERI CSlwa MEEEEE aXBbTt YIkyP RLqfTh BzKEK CAwBp JSzZF sLgHCn ZsLEQi MEEEEE MEEEEE EEEEE xsERI EMMUU UEEMMU SVWeMM MMUUEE MQUREP XhxMl UXTsn umuZBG SVWeMEEMM RMEEM HJxsERI QaQmd xWHGaB MlLaQR JGRyrM kAawf pCHdl iJmaBi GRCLA XgWTJJP DeSOc rzcBW EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE YXEUjh EMMUU UREPM xsERI VmCkRugZ SbVIX MbZfU xsERI MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ sDBlU XjgHH qjuPh ubDlF ZGmpOQ QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU fbyTt MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU MJLTNbk EEMME MMUUEEM SVWeQ EuWuS guoIgVD tZVHbALA EEdwl mjzkD HKPlo QUiibwC eStzNi WQNhHgN LzQduYHOH RURSI Kjksv NxPUA YlMTB SusNMk uWhIu wFbkW TLveys qaqCro KDLHeBiR pUuEI cjBXcl etfAwTw cGGsZZjGu tMuJIy ituiP uBSOQ YdQjOLNQg yrRnk hwMVW JpkVUnrV oIlSi KIqMb gbWhk yVYNu TWbqnG tfCZQ bEiSS vIqZXt HYkYD tpesRkd xBeeq CERKYXa lbADE sUdhH ClPqa SPYjz oPUYfv SEPdd VfEGKZ TdKuY cSaca VSpBgp iSEHah oAPIc FiiJD jxbZvh bgFGhY wMBehK ufEie lZGWK JDlOB IXNTYZ tyLlVe EIExaI fEzAo laFgW YHtNo DPjpb jYhPid ZTQGBHkW rdmlf mixBM JCiwa nAyyhwQ XYUuu wsLte lnZCwa rwmqS GKkwe VgIRm wpTSiq otqnC YkUIm RTGwwB NSGTB ecfne QDRKsZr fKJWD gSEUiC oZClR bHwOTP NPjBad Pdyfw PCEIccI fvSWx qJfSqpsU jxwoO VJKRf SJMlC XiRFpl lIudg dIsoH liVZU JHtMDEe jOxVQY ZzYtX MAwkeU XMnOa HUJMb UoJvv OLFDx OTBBR aFtkW Njvqr ReXAB WOiZGR nSMsH CYmuc tHwcpR Sdhutsx wCKRFf TOEkCO ykxwz RbTOF KLooqO ziqjH uFIZB DTjNc wXARO SUVWj BABABA xuNuoOW cUxXZ GgbEpp KGAHjk bycoX jcnCOl oIgOz vCddg xNjbo GEOHi YXEhx PQYYt rtlOV uYSWu EFMine EntelE ineIEE GenuE PeuEEEEd QPEPh QPEPh nuofEi anbPoaR zJNMI PYYug PYYug YYEPV UQQEP YQTZt soFmWs ZCrvI pIAgj VVQYn YFUQSVu abCDhFp HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY fdsem noYXfWU SBItP ozedCo PZUVh Rfspr XrvHQXo mVWIr CuiYM csmuP RXeNV fZjnE ZEJPiOR QQNhm WueeEKYH tPtLw PQYYPV Ujhxj ESVWT URPQQh USVWj toytX GIuEOe PPPPPy vmYaO MeEPj UfQdg bpXvt xAuqI ANAvoU XrEYm ewutZ nBGCI lMeOP jTWJL mgzpu EQPjjM VPuus bSvUQj UQQVu kYKOS dukrm GCVZhO WupGIBygBMM USVWN UQSVMWj nMHYr SUywj SRxHW ItOLt oBsdt TduUBzY axONY bFduxg KRqAZ pUQSV jAZjX bnRDIrV UQQVWjgYjGN PQPPESPW jsXfF iXGHX zqCzZ vFygu cIxkxYyD UQQVW kYKmO xJyzrF VfvEw eiyqI PbnapgE sxOIw gdzbmNz igHgI pOdgjrVT QfBlXi RPQQE VQuuH QCJrtP zjlsr uEPEPWSY YPVWSu kPVWSu pSSaH EkOwQN RmJLB DwvoNgiTz ZxYFY GXKhp iPXnG aDypm emHwv DPspL nrtkPIWt rgveO wDxFAbwg MLTOQTIM gwgsA angZG ofxOs yvZLO KcSDWAIakubJB gPdmC xCutd nrjcU aNVAI wnpOy kpdQi uPuSW LpWWEGr EEwPr UEHEu XDzsL LpWWEGr qHQXicw tHDgG fWSJG YcERIdC QAStK wUQQS XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu zmyqj oGXCZd SdPRo uBjAYjZ jAZjZ UQQVWO SVWtdAu svlwM aCUVu TztyGVDPcH GEBVTH HojuB nNicT NAuIRa YMVbR tvqxZ lhcUExy MfvwT CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp UPPec EJHeP DTQpp IanYA RFcvPx XLvrkZ MEEEPu kYKOS xPgcf xzQhd yqhHzFiQg okMxt jUSRY LERor blYAW LmvOw NOzRA VjQLr vlAVm SOGYu PPPPPt PPPPP HLMMQP UecLe YMoIS YYtVWh EWWPb uCYYt uVWTb WWWWWS YKFxx kYajsT JcXPR YtVWj PPPPPPPPU VSYYt sDOXoIm CwqQyHFlG kYaCSm ZLbwED EAEfEEj EPQEPEj kYKOS XCgqo YkvXB PIsCo AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP olUanv qUQQfE fEEPj kYKOS kOdLe FaQimHgIE AGSZgAY blYAW blYAW vHsIclrw EGWVj FzXNI JFPDe MSVWu MQWPVk iGVTs MJXqs lsUijf GxbTL rNyyBOu MEEEPu PPPPPWSu QQQPu VWuSu PPVWPu UXBNGn UWVSM nznrsJA evwHF VIwfS TEaZgH YewVi gFKFT rapvxx wcEqIj teIfT BhtRT WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu dmYryTS YcMHP elFrX zQgnjiCN sfWIr hNbQqWJ vCRLd sJmyW blYAW blYAW JsruW SIrwV oGiQb QGVSJLbV HjNma QPLYYMt DWsend DXXpV xRGlnf AlCPk bIrlhte OHBQX EuyJUKy YfwPQ HWYEQ dHuvQa WrWWHHr hTCUCDh jWhIY pNlEY PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj rkcnoI NKafRPx MdVAMt EQNmSf SloYasU mqpLU ARXub VDSfvhBHHp CIDmJc asbzU BHpYQ GyajM WxxVL RqByGZ WvvVL WHtAtVL AVVDS ttMES tHyFY zxjPkt SNjPw yQJxAN AbnkUjXypF yxRUz PMObih KjSQGx sRkYOFAuZCH FEVNf ngdBLp VkJCqj yzaTpC QQQPu MEEEPu EEPVYY blYAW DiafgPcl xEugF chPhHf guhSDi xMSVod tIkYt kYKdXE xBtaM qmyuaz iTZTa xysbGF EPeuEEEEd csmuu UEcsmE PEEhg lgqCKR VWlCv UQQSV vySId bNpuL fogbEC kWObHL WtogvWd XIQHf JkIfRc KeGRHqd eJITvy lqImR ewalun VCNfUh oDYuF fkrohs Jhtef vBFvO NFPuNB wRGOt LMsgMBU tbRNo YgekG fVjbp dKrcr DOLRL iXNJo Tkbvwo IXprT JoYQz UZLyJ dFTNj rIEDJTGq cpHiU KMIwXn mSalu GHhlrii hwrQhj ftSybr iqUcV lsbFUA xSRwf ZZXpNLi UZPsC JjrPC QvlCU glIwC ZTTlb lopaYk KRDin hNhdrtN nDsjm LlUMfsY bLxGKzY QidcX RVrOr KuwfX Jdkxb lkLViEzBZf tnVWs BPevrfJ FlHvF KVllbB tPYkW KHWtjK xNYNg msAkNaC oERFd Rhivi veBWa zRmDNh xMtvz alZKZ DXRyrl loAwDz UxWoB gDVsP smtbC jpWCSM BwohTx SNvKm xrTlL xbCVFr XZEct UZYgn roUTC ACtoW KPCnU MscQe QPjqvP wXrKVD lnZiE AfFLE OHjue sTnDe KTiwuz DCejRZ PEptE BYUOv wCmOn RguhP ZoVrwd fnAfwWcp VKhhG Kincz BWCXq hETGR fIlvx XEjxEPD bNbEm lUanY tWTUOhKC SnMTR JYnMqW HtpQM fuMXMPJR ROPbMSM WPVjQW oFQWt sinJz SwoZT YBbeZ WRGrH GeWyL zRUKa KtqeC KtXQx ANfEx PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH xsERI xgPlLNbm hadJe eEeUQMj LmvMc YCkgFJ nApWx MuUMEIEPML UMEMd xsERI lkIsDo KoPel araBb IHxEEj WUOrQ mRBWh EEEMEME HnEMI MEEEE ntJETE EPEPM xsERI rZnNg IzmCe CUQQMEM xsERI YRSENH RVcbR xsERI oCRpT OOHflD ErTbb YehUs wcvAs IxAEYv fQbTX KJNKuB yCNQF ADTsec dtdqA eSvjs FiEaJR XKrCU LfpIQ NaIjz YZhXj bPevrT GlvvKObM QoiRKtB OrPSH qJNbaw amWoH ufFIK IYJRb MQYkt ZletNM ctPQmg NwfpS tShcr HYZsbzFYi CDDcv yQdbGtqwK BPwRfr xAHne wKyeYb YBBsbMi YKOnz EMMUREPMMM EEMUQ asVbytrgdsV UQMEH gHzIr sDBlW MMEUE gHzIr sDBlWN EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU EALmM lWmGU icxhWr dpaNT GHXNs mgqbk xQSNeNT NjTSd Zosps YdYFkugJ LdgFPf MQMUU UKsJt sDBlUQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd fUQME xsERI WpWkf ULMEH MUUEEMM UEEMMU nWAOR GgBYr LeyNm kJlflq WubEZ NJjgoSdIA xcaJvj mXsgdF kEIGZ frNgHYx bgvFP UkrTT eVDNHG fgrxy FENqU dkYpk YIqXL KVDWU locale Riostream badbit failbit dLvnF LGAUsu UKKDQ nlKZjMYl irtRBN MxkjkJ rhOyu JbgOFPR ZfMcF vZrACM RCoKW Kwdyf YxApO kzZfcg xLyaM sLiFaQpg FGEjq PUUBdykDYI zplNKm xMpTb IGWhX kIfHW EVHxnz array length unknown error address family supported already connected argument argument domain jqbad descriptor message connection already progress device resource directory empty large function supported unreachable illegal sequence inappropriate control operation invalid error directory HFERI network reset network unreachable buffer space child process message available message space device process Ntnot supported operation supported owner protocol error state recoverable RItext files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx eiXsb BXwtg MogQQNjpQ sspcz XjaHAh VQfvh ERICi KERICW ERICW nuoIs nuoIK nmIJrf GQabri cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor RWGoit Class Array Complete Object Locator xpxxxx GPxdsf WCDVl UovYcJ KGlxM KSxCv drcWq PAatB YROVU fWWjRj yceil floor ERIldexp hypot frexp EaFiH JeAdB yLFEm HbHsXo fqwbIbl xAuAX ffPli Monday Tuesday uEMay January March April nDecember ERIHC PAWdqaa WIitm ioiYja EnumSystemLocalesEx ERIgC LCIDToLocaleName iKbFERI WxNAN uaERI mnoXI EKUHnM qKfBj ALpgt oWTEc QinfF fjaNt cfWWv vOEpru ZZwqeccAX dHADcmv WzCHC oShaW ZZNmDWBaZB jgoDIAU mAwcj veBzaJfUk CMuQl FBlXI ARIFZ LtmYE drmPnw XPrXX gdild gzrHs JAaxN oymJk CAxEh qUDNm OrEMJ UCemOL aVRJq fiohvZ aGUNM BaCUkKVTt pXcrf zDQVP hxkjS eBKVH xaUJM AHZpn IBBjW UAmAoYEqC AiNmJ NWYLBS zGntH nuoIW ContextStackSize ContextPriority SchedulingProtocol nuoIW rWWERI ZfUUU usage usage frBNt qJjNqp rxERI jBywwW lgZEA ZCIoo nicehash FSItKSR WzCXcl eeHIg rxERI Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ wsHoD BYyzOj ZorKD kVhSQ Yucog RRCPb gTjlTir JLXCM mNlVez fukNx AkiLlX PpAcL BAYVhyh oQaJn xKRpv tJXHdeZ uzyDX ABCDEF xhHEL fWWRG MoIxgNjkvqr wgGHE SVWBU nuoIW XLrbo IdgNe vzQXZ RmAXck LILHu SNhsf rSwiw LjMba Gvcga TKCjj NstgO dNVXVm bqDulP WyprWW ZcALm fWWRjG ONxgNjJ XrpAh UTLUl Wjmrir QIFQE JPLYX zcaJdjM AVDbuL zmXsR QMjEG MMalAa WHFHv ISGahNs AlgFY mlWvEBWg ufjEJ fWWRjG IrYLN BXwmg KObsM ivQar ZoKdt qPFbrF cQQWz nEprL ufjEJ IdgNA dABXx NAQdC AeyNm KOnSa mnroDq jecfpym prWWfK OVrxl prWWr uprWWCZ prWWr prWWERI prWWERI ERIMYV ngoIW prWWERI prWWERI prWWERI ERIYV ERILYV ZcALm vNGEprZ XSheM aDWGd zeHdT dyvOS clFyc NxJjgo veKzaJJ TcmwEy YZffF JOkEu fiNgH KXfGeOTM vBnxH zZfaMcF jTBXK odwYdxp mCdHy xLyCz aOwbd EqjNY DPBqXL hpksa Rckhi VlvyR EJnjm YJZFf lJPTai fVvAqW bbUmO ERIkV fWWRjG zrWWERI CddDg prWWERI Hdddg rWWERI rWWERI rWWERI rWWERI jqcAL rWWERI rWWERI jcALr rWWERI rWWERI DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso ERIzi AuthenticAMD YrHdg CyrixInstead NexGenDriven ERIzi ADudg RiseRiseRise ERISiS Geode Geode OPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION ERIPentium Pentium Pentium Pentium Mobile Mobile Celeron gPentium IRWIN WESTMERE PENTIUM TCORE MOBILE MOBILE WOLFDALE MEROM QERIMORE QUADCORE PINEVIEW CEDARVIEW ERICopyright Plauger licensed Dinkumware RIGHTS RESERVED nuoIW nuoIW IdgNe nuoIW Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN RIEAI AGAIN BADFLAGS ERIEAI CANCELED FAMILY NONAME ERIEAI PROTOCOL SERVICE ERIEALREADY EBADF ECANCELED ECONNABORTED wERIu EDESTADDRREQ EEXIST PjERI EINVAL KwkRI EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY ENOTSUP EPERM EPIPE xESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK EREMOTEIO permission denied Yaddress family supported temporary failure lKMxS permanent failure family supported ERIJU resolved protocol unknown service available socket connection already progress operation canceled xUfsnW connection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected ufmessage LLERI network unreachable buffer space available device enough memory machine network space device socket connected directory directory empty protocol error tAqkp nresult large system process cross device permitted unknown error links async event OAERI signal unknown error malloc malloc tERIToy malloc malloc malloc QueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore uoICreateEvent CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress RIkernel GetModuleHandleA CreateSymbolicLinkW CancelSynchronousIo powrprof socket closesocket Missing after object member Missing object member escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected ERISee Syntax error value object array expected nUrBPf SRContent Length false rqfosQ kHVvqF hnNuJiw nwGDY qZhyO ydWRX BVqeG mexNAa ibTma KJxgF vNXyR xesvM DwmsE MiqAS Thdld ZEutvah ZUvUHc GifQK nzhVj KWEDb VwWtP CogoI ePAkZ YVmdpr UvevrVEbDae LiUYM fafyxijfhkdanfrzz nuoIW fWWRjG IdgNe MoIxgNjkvqr GgBdpr AeyNm KObsM kgsif uKEZT KZjOUY lFzNea NxJjgo tRRNCn xcaJdj JOkEu fiNgH ajkxdU JXIlT LbxgFP ISCahNs MmlWv zZfaMcF PRHCo dwYdxp jrlSvOxLO EdhWEG WJhHV mjusia YIqXL NaqxsZ zyixfH kIfHW YJZFf HWeqC fVvAqW bbUmO nuoIW fWWRjG IdgNe MoIxgNjkvqr GgBdpr AeyNm KObsM kgsif uKEZT KZjOUY lFzNea NxJjgo tRRNCn xcaJdj JOkEu fiNgH ajkxdU JXIlT LbxgFP ISCahNs MmlWv zZfaMcF PRHCo dwYdxp jrlSvOxLO EdhWEG WJhHV mjusia YIqXL NaqxsZ zyixfH kIfHW YJZFf HWeqC fVvAqW bbUmO nuoIW fWWRjG IdgNe MoIxgNjkvqr GgBdpr AeyNm KObsM kgsif uKEZT KZjOUY lFzNea NxJjgo tRRNCn xcaJdj JOkEu fiNgH ajkxdU JXIlT LbxgFP ISCahNs MmlWv zZfaMcF PRHCo dwYdxp jrlSvOxLO EdhWEG WJhHV mjusia YIqXL NaqxsZ zyixfH kIfHW YJZFf HWeqC fVvAqW bbUmO nuoIW fWWRjG IdgNe MoIxgNjkvqr GgBdpr AeyNm KObsM kgsif uKEZT KZjOUY lFzNea NxJjgo tRRNCn xcaJdj JOkEu fiNgH ajkxdU JXIlT LbxgFP ISCahNs MmlWv zZfaMcF PRHCo dwYdxp jrlSvOxLO EdhWEG WJhHV mjusia YIqXL NaqxsZ zyixfH kIfHW YJZFf HWeqC fVvAqW bbUmO nuoIW fWWRjG IdgNe MoIxgNjkvqr GgBdpr AeyNm KObsM kgsif uKEZT KZjOUY lFzNea NxJjgo tRRNCn xcaJdj JOkEu fiNgH ajkxdU JXIlT LbxgFP ISCahNs MmlWv zZfaMcF PRHCo dwYdxp jrlSvOxLO EdhWEG WJhHV mjusia YIqXL NaqxsZ zyixfH kIfHW YJZFf HWeqC fVvAqW bbUmO nuoIW fWWRjG IdgNe MoIxgNjkvqr GgBdpr AeyNm KObsM kgsif uKEZT KZjOUY lFzNea NxJjgo tRRNCn xcaJdj JOkEu fiNgH ajkxdU JXIlT LbxgFP ISCahNs MmlWv zZfaMcF PRHCo dwYdxp jrlSvOxLO EdhWEG WJhHV mjusia YIqXL NaqxsZ zyixfH kIfHW fWWRjG AeyNmS KObsM nasdol XrJxR gXxtA YlCSp JOyEuH aryTH YQXMh RQUhu YwHsf kkvqw ANYtwv yZqgGT sdQHE QabKr nuoIW MoIxgNjkvqr GgBwrn KOFbsa nUTnP kgsif uKEZT KZjTOAYm pRGxg NxJjgo tRRNCn xcaJdj JOkEu fiNgH ajkxdU JXIlT LbxgFP ISCahNs MmlWv zZfaMcF PRHCo fPgrxy OVzbh jzpyKm PAFvZ IfpSu uPviE TDCnN,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj ojeFer EccTB Avwos ErRWP IRUrQfL blUej bnpFN wcMtn iDnvC RsLVb JeylJ ByqweMR wcVbs XtEVU aGwIS wPIMyV AsXLC DgawbO KHiQk JEpbsv RwtCSuMJx gZvTz EYhFT SWzPF ihxtsyB bfTwW gWNRu PQqzurkL BRDwG yolRG STdpr qCNQJ vtpAY cSrqNX xICtK ibIaxa poQFAs KJBOsxu ytJnt cJdOR QatHb RwasZyw CzDJsRo dfngQ lwbHte ssOobaP cYnWs TBcAS XhTnX vDDELiI UPiwAn NBLoX YNTRNk eSngN tHFXk UYDNsVw AaLzoc LvIWFg EGYqDtr Klnpi MDdXHGSFGx jIFMd KkACc GyOtf fnTyB FiFUaVSe zeodrz azHaqo HDiqKv BlweXu ilYjoJE Yrdmbl RTWlg wHgxZA UXDlfm EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl RdCygA eFiIbjj KpLuu cIxWqZ wkYCQ EfhbNwU WqePe hytqN pXtwc RrqUI pylaPT Mimnt FjRrHG wZWBV ttzZU Xmavf MwXLIrW WlTrN guxGS vxlgl VEEEvPoP gAXTho Vwoszs oFxbHN JQOuy gWcrWZv nsUNZ zEBxD yiRlFY AFoHaz HVnUqQG XDfFQx tIkmk AAwUQ AUCgF fIGTo BFUCSp FDJGlJ hvCdy VGnyuQz wklxc bQtMI yiEDA TslEm JIxaw kLXqq vJVOUQSVWf FuxwlkJG BfHpn xJkinD GDXAE FtFxn SVpYPWy xXQqPpD WwHXt MtWnV eASQr Qswwl VeVlgAcN pohdLN pdbsi jJMkwj HPtGd HuNxdL qtrUs CwnbSou TInCuIp BygIGTW PTtCPz OAcJY rwehKo RPWqodn QQQwJ uykPS WxijK PljVn AMfQH jWYxbc lYwUoD fbOVIKn WStzf pgDDQAX eOwxVo FxuGWV iimOL JclUOQ mslqKrZ IVgIk Ikdtk QMsVPs mQcDW uPcUl zTNyDAU OehPI zuEVCz lKoLsA ZZBLjyk myKIB LQhqmv goaojmU qofXy EWKUo vFFoX AZlrCja IEtxb BmxVW qqedf NOFgbS HYeiCr BjRlK Hfxal BCNlfW xyukl LOEPdXC aTmeL VMPRj DKMylA iPSdH hKdjO xpoYJ iFCzc jFMYZ tcxUl LJhQKdv QeeSUVW gJBVB aemZk BwMrJ UBUUU VBcok eZdWhA VnvRY QBzAXkT YuqzI SlVZs rASEt yVRti TSUVWL VWRPN VWRPq iqdcEa CxLRW HBaHLh uqEQqD SVWhI IAepgUGf vSVWh lcwEGc wUBMa NHZnl sEqbgxG duqrYC FcoxEIl vtkwQz WyCJdmA aPzKm gyPwD eXfQNr nZQzlA RzEqGR JxbcGJ HkDTd SUVWT slSFkO tyHGy othUA CztUzH Ptuyjr znvgZ SwOuJ yEJMz OOumb skrDR lnsvw ATpFyD JkPxMz iolXeWR eafPl kPBJG aKXQPo dEFEC JBZRt MRvdl WUGKk KpXYvT WeGLWSr UxgHa lOzOnd TMWKik MxZqilyo dBLOm mWJgx NRbOr fUmDeBK jyJvP LLgzA ZYXtR HbvQEXSI eLOwCn TBHNQR yOtwq HULbA EoGun BJuGz cWVkT WsIdA vJtGB xbcGm RTcVT DLIZdTD Zgovm ufYoE aWuQa QxauUKx CxXcyUU SDeiy xuysS NtgboP dMJYr GTPGD WoCwA AuIZP TNxdqz kipgd SxPjF oOSuxh kOFuRmW oayTs uBNqw iKtxL lXLya FMylK ApgvJo fcxXc JupIML rTOvD cByqU EvAZC VjuoWW DZyrE HPxUMWt IuteZ ClHRMB hKxEb JOQmG QZiUL VRyqL VmGkD papaM dETyPq NAcGJm MZhyE GZzjEXDl xHLdCoi HpSYT qKDgn VvSUVW CPYyp vrRCE LXgTGY NsolN XazUqd VPjLh QYBcM DUUwK wfRog llbGf SIUHy SxJBaW uenUB NvkAyHtM rvvAJ bboclG fYycl Uolyw mJHFs SoHbR smEaI WWVEDB mewhAvJ UbuyNl yiBUxVW nSbXfm kXdnmqfo ZYvdQr TCfFdcj TiLtV CoeVU zfCEW meCDyl BvoZPS eJczR DqvJCAL PTxiMt gXSNjG OCUpd QLHParC pMaWj ENuHD CSlCVM DsHaM GactD tjknH KuFNc HhIAN ydvpSe Nxhsg HhIAN tvhHI AUBMt vJVOW uSUVhI owMJE wJsIbN huszA iINxN PAxNg Tarvl FIAmg PFGGp NlnpJtP LEJVmt NeUCc korLYS rXSre CVJfHH cvdYEIvIC clMjrE LBTsU pUNxm YigVO GxiqVy dJUFcV sXPVjt tLsdB KThBd yKlFngD zxKcR SUVWC YCUvR hAbisGwW OKOCV sFzMj fGhUBUU BYuESb ZYVtu wrCoq trCWdmj YrptV SUVWh jouUVW zoAxm ncRYESZ QSUVW sqMIAc WSKuO hczxpc gIePA GXGTt twKrC HSZLrX FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS hCHIL BYBhD cDWgF yOsKAz pZQsS kkdTpm XrmYoJSk wWQbS pKRVqs etcHe fvooY NYTWu kTYdP dvzEsrw GfHrQ cQZMy uWpIs tiOpN KENFKkn NHVQc upPTq wsHFs ENHhc Znofyh wxEjBIN hWVMB EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE RLSvr xYYEe mALWfp abJPj XSzUjh MEEEEE MEEEEMe xacRAO TSVWu EPMMtM vVtSt AQHPUE gAInw MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE UDmKTeo jouUE lndSlWW lndSlU MEEEEE jouUA UwCJfF zybli yAbvTx LLsSg QFRPT zvrsT NRZmY MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP SVWeMEEMM RMEEM iyBtQ NTtLZ qmkceX kJhxat deAoP VVssCOlp GUljO EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE vJVOUjh EMMUU UREPM OnMFY QANiw JIqIt MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ tiQlcG WSoQZq UHVSl QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE gXSbe UDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS Fkike KKUkOrA WDxLC TQnsrp vIREpF bGqYL phnjqS NlRil EDiWi czDlfC kBubb ZcDdIzv jsXlYpQ hbLRWl muTPR HHXRY KIluXqb XgbJicVq FZlGu pXNuUT rsiIc xDVNpK FgPwvFiX eeNNS wzlTb lRFGP dEZfGk tRDiM vcxFC VoxDP ypmjkZ vjKhU EgMpj isuvX jInnlK YnbAp glZnp sjzkmcy nvabn oqyPNz RTQEH ueaLt ZOdNC SxbCT BApiN igwrGZ jmCHPV PLgmA HEJVb DIhNsi hXNvf GNtOul WkxUx FXjWmS vAFxeg eYcwj CeitU mLXela ZACYp lFYcJ zJqqN KztVp wNors LXYBK xDhGe vtPnMKo MCLKMiWi fxVqB eaaoK ClDYb ebiqLy OqGPgu fSfMUuoo pmVNI UgNZg Buuky Wesah Largn zasQP CCHAj QAqkx svWJp Wlbld zpNuKQ saiRZL TQzsrz LOdryKQ clwHL VifjddhN TwCzM ldSGb qURGn tIYhej HdYdR ejquTsK LOfBn Kgqrm HocJKhQ hJIqd opmHO HqzDk AVLoo DavHHy fLFuXM IzIub CHwhGq mCOSO MuAqP MNrGlj ISieIO QsYCe DrYsx udSQp eMrfQE UBvqQ MqERK JqjkOE qttFV leGaj nMkvm GdPXQ ItLRq tUPMzl TdxxR YUTNM cqQVV MLMfZ GkEFYW vZNLWr XDSIgmqb tmFer GDgvB HtFAwVU SUVWj BABABA UPOXC bNilYB mrwEv xeQVtU xsohwHE PorDb WUsimXb PQYYt pEcqUH uYSWu ojhlzq eKaUra EntelE ineIEE GenuE PeuEEEEd QGSNi jmKTS QPEPh QPEPh oUMVvfp PYYug PYYug YYEPV UQQEP KcASM rvHVNiOwf NrgFQ ZRltXP QdMUV VVQYn wGtou eQEBo xVtZrk UQSVu HSWHI HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY GzGFF oRUxb EBMltKXP aGgsJ CuiYM csmuP NzmTeM vjEso HjQaa tPtLw PQYYPV wBSUU YSwwyC Ujhxj HeuPDGOSVWT URPQQh USVWj hzwRz PPPPPy MeEPj AcwhS SYYxv lNVrS CuUty AEPHl GUhjgR gNtwDn KxwCK LWEXdUv casLLs EQPjjM VPuus rmmbwKJbNIMx UQQVu zxVZTZLMl TAWiQc USVWN zUNTY DkmFBa RBtClC UQSVMWj eiznr ItOLt ZqAMOf GMqko JJLaX jAZjX jOKrdHQ VUQQVWjgYjGN PQPPESPW jsXfF PSkUJ UQQVW jLLhwS vPnsiQ wahlGy rubkY vwEKh nHeJp BcQwUSV RPQQE VQuuH uEPEPWSY YPVWSu kPVWSu TxoDUpL YfAVY YCAty JQxVbf sHVZW jUtKzq rhhFKYb zuHwNb POwaF naqKn TJzgdz kedDPw saGoZN VcCqa bQcGzr wDMiew BYMxa oksDY vMPuFN uUQQE uPuSW EEwPr UEHEu OwNqe pTzUo QEWeTf KSYsj HaUOn tLsojTzL XfEFhP EPEPk AlVpu oeYUV PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu lLllo qUGTD wuiSIP BLtVV uBjAYjZ jAZjZ UQQVWO SVWtdAu Tptbt jlzujO EPUfG dVWtp RahlhX iCAvkzR sEXbyfAxR CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp nyxhw zrbDg Snngt nUcsm MzdEw vzhXjY fWuQm hKjdWn XAIiD zZRJN DyPCSY VlPOb MEEEPu SasrLaBBK eFejS PZaBG ASwYW SOGYu PPPPPt PPPPP HLMMQP pgaiMPf YYtVWh EWWPb uCYYt uVWTb WWWWWS YtVWj PPPPPPPPU VSYYt rQFaM vgZkN EAEfEEj EPQEPEj GoPDo AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP tLARi HtJqc UQQfE fEEPj cUkBX mXgxa ljDwu EGWVj iAAOy PwmHt Sgfpmt wfxQFuUTxQ jMZqwE MSVWu MQWPVk WwjPbA MHbWk MEEEPu aKWOt PPPPPWSu QQQPu VWuSu PPVWPu UWVSM KzuOk RaysfC CTLAN DDWHZLv tBxIy iZHGH oGzUS WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj vUUgx wHuhjj YuwHu kPLtGxgzjN nrOKulF hIRkR DxUkcHi NacoV bBkiv sEDmD gjpZWs QPLYYMt RQXzHe xIDMro CYlCpH BESUWu GitQOt TqMdKY GTtxcC DvxZN gLXKa ZtVuC GFRHs jmVzfc CePHc jHWQo PWfvkt ZfRmZ eEXyqE vJijC ClqQTCE sYRQMUd PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj XkIPE BmAHW nTNtE hHTxG vyKdJ OCIqy pTUYCwoK kwzFf WxxVL MDpCj WvvVL WHtAtVL qBGwC zLFwP ceifS QdVEP uydQd OhgVt oEZty oIgVTl xcddqu TfkgK clOUI AcBRt IIbuL RzgQL GQgLlkn SslZc uSsaB ancUO JsPrH QQQPu MEEEPu EEPVYY TPGKHU isFLlJ YHadd aSGlvNA NJpnv iUJPY EPeuEEEEd csmuu UEcsmE PEEhg JgovKt oDOXlU VWlCv zpUqd UQQSV MzXhz RPAGuK kcMcqYMW snVkg bNjUDfLe QSVie xPOcU zMvLB MvgvB bTwjf zAjKe TFMqQ vFXOmS ewQoww VyDMO KPSdlQspjrz SNkBY JvLFf doEXfE xVtitkJ lIhQR VsZkzi TjDHgk ZbnUDH FBZBj hTMFN RpByH RGtOM NUzFg IODjsz gcmis kOdxJf LmrmR oshyG xssoPb alJFE SaQwEYJ tUDUE aGIsEPbrYzS UjpDT pCyAMB PKEHd WmxDu mLxxq GbhNj zgxUG FzhfP bbJhM MqscuNN kfighh sljXO nZvkI jodLzM zogeei MTZUs VspaoD KjsdwEUYK WHcNb iHmicKAGf obwYyx IPxwi DkYCdf lQFwHw wOeJa WYSiq rKrAce RMeGGO exOxS hATWY fqTDh BtPAa LrTYn JEIMlg KUIwp VeIFgQ Qelsg hDKuk FAsJJ fDhQj ipCFwCh XqckO kePaR QMXvWQ jouUl hlFbs fhPdV xjouUwp VOjxEPD xUJdz zuvKbD uEbjE gMGCR uTLCq SnMTN udMXMP Peftdc Qrbhi ibfhl jouxA xjouA jouUpZ Jeftc NJRvoi RvSMD VrRXaKdCW aDatP eiOqU mpcXw VrIsN GGEQR hzBnyjE wugOK tXpMRf kgnSk zingVPo nxlIy MFaboY NFUylr PCejY uWqHN PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH NgIrSQC kUoil gpUoYg DOUjh MuUMEIEPML UMEMd jLOsye kpNoD LVFol fMSUjh EEEMEME HnEMI MEEEE ntJETE EPEPM UQQMEM LCkwO BCziG TfllPF ItiNUi gNikFH vhKcI HHqdD rPjAhK aTRrX zMVbi yAsyz VneWv GYSQFG uBdCV smtMy qQEDF vVTnYr CklYpXVtp ekKvh vfEEx ptwIl VtmWgF NFsvl wojpSQ tnbKR GCtTg rKQLEI APtnyjw bpTRKDg lhiyA ihIGH pSIdB xLYHsz DvuyCp SWheV jJmuM HfDil lWRvCy EMMUREPMMM EEMUQ bUQMEH MMEUE EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU vzaeN DsFwu eMkAr wBtelXO uTUjh MQMUU ornUtrzG fUQMjE NmCuUQM EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd bULMEH MUUEEMM UEEMMU itzsr lTjnp OLUBc fuCNo cKeCP OOemB wzhGSw wqAfxJ JPtxB fiFyJ KLRRwg ZLxTR locale iostream rkPios badbit failbit KrliB UQvVE rpfJhEj fCexxYP OUcueLx tGmxV TsBPo vsUPh cPepCTg kVUxdI OqNsOi PzWFiL oPTsP array length unknown error address family supported already connected argument argument domain descriptor message nQepNconnection already progress hOTUDbd device resource directory empty large pUfunction supported unreachable pUillegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device process avRkf supported pUGbH operation supported owner pUprotocol error ubOiO state recoverable gtext files system files FPQwrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx GYmsu lczDt jIZsxEk cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx HmfxREvuV uDRKDstu TNGOve iANhmt lEWYB vTFqi szsVTK KFFkvN OzRkj yNrgR OkAeH IFCMa aQmIc QbcVt lceil floor gldexp hypot frexp pUdnGp yXsinh AhrstMn WyuHyPM dgXMonday Tuesday tgOct January XMarch April hDecember mgUHH srFtP uDfAa EnumSystemLocalesEx LCIDToLocaleName JXNAN bjhHK uxAAa hyKQl zTbviZeI lntTRR QhiuZ ORISk WeywXP vjlhG uBRjQ HcZbamSg SJEVU LtmYE SlNhA OlbFL pSexo RixpR EktIu qYwfg ViSDv qiTco yzKGmo DXIwy kxYyc jgonyU CuUgUR kterj fbWAD RrCbW awXNvhrhQxm dqSZj xgRfx nvrRL zGntH pwPhn EopeO ContextStackSize ContextPriority SchedulingProtocol ZfUUU jDQcB usage usage MnTpD nicehash MCNIB Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ LkjmVYi UgaTSj tKQcs duiVk BuzxJ JLXCM mNlVez sYNzL FGlWU mUvKS cYseCY qeJptWO pnnmw wDTvAG DNnhx WNKVZP ABCDEF pGeFty bbQcUI myPKTHi PZaiI xTHixx nNcTmI hnjLl ataPk oDzXw NhVXdQ wUrGCH uHJEW fJJwcnB AfmGh IrEiG VfMmL WhQJoc XiaMlD BZwIh uwnZa BUuKR HkfTceI gdpqy gUuMI tcVtdP DlnSc eSlTD bVePo QrJPE pRtHqj yRZihb oQvao tvXtx mXuwnZa QhqCYUC omxVZ gUuoD QAchH ifNWPS fiyJc qPVTp vdMBm aTZSHzv Dlfbs xSlHR NNoImu WameO raPeZ efWdf MWQef BoRdf rVBsl zLtGgY MCZIMj tNDQI QcVtn OckUB igOaM pUbIFr DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven gCnGF QRiseRiseRise Geode Geode OPTERON PHENOM PHENOM XFUSION FUSION FUSION FUSION gPentium Pentium Pentium Pentium Mobile Mobile Celeron ujKjdPentium IRWIN pUWESTMERE PENTIUM MOBILE XMOBILE WOLFDALE MEROM pUDUAL gMORE QUADCORE dbmXFf PINEVIEW CEDARVIEW gCopyright Plauger licensed Dinkumware RIGHTS RESERVED HBHRe cVtWN Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY nlEAI NONAME PROTOCOL SERVICE gEALREADY EBADF ECANCELED XECONNABORTED jEDESTADDRREQ EEXIST EINVAL gjEMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE jhOENOMEM ENOPROTOOPT ENOSYS ENOTCONN JENOTEMPTY XENOTSUP EPERM EPIPE oHuoq bESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK BXEREMOTEIO Fvpermission denied address family supported temporary failure Qpermanent failure family supported resolved protocol unknown service available socket jconnection already progress operation canceled ikagI Qconnection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected sabdzO message network unreachable buffer space available device enough memory machine network space device jsocket connected directory directory empty protocol error hresult large system lHQpXj process cross device permitted unknown error links pUasync event signal unknown error lnrlTX malloc lnrlTX malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent ReleaseSemaphore KCreateEvent thalP lnrlTX ngCreateEvent CreateEvent lnrlTX bJhxKPQ iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress gkernel GetModuleHandleA SKdMc CancelSynchronousIo powrprof CKjmf jsocket Xclosesocket Missing after object member Missing object member escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected SwpWb Syntax error value object array expected PiXull Content Length false VDTGH igqNIY eiCYqk siYAK ITYITE JTMpp MTiFq ukQTG fjtiL zZMWLFh JvynJ NTRnMz zUamZ Oxvobo BEdTY Ktpne ZiICi wNcdpS NAWDH fafyxijfhkdanfrzz fhBJf oQvao wIheGXS uwnZa SXVKRjQ QhqCYUC BjMab vGmxV mbzJsgX wYycg JPTxk ngolUJ gUuoD sfiyJc gweTP Dlfbsy KRRHwgd sfrlM RrCkgP roZjd lWZDp gepCY xSlHR hqNseOi OZCaI ZQOCe oPTsP vCZIMj AJvcq rkcjK fhBJf oQvao wIheGXS uwnZa SXVKRjQ QhqCYUC BjMab vGmxV mbzJsgX wYycg JPTxk ngolUJ gUuoD sfiyJc gweTP Dlfbsy KRRHwgd sfrlM RrCkgP roZjd lWZDp gepCY xSlHR hqNseOi OZCaI ZQOCe oPTsP vCZIMj AJvcq rkcjK fhBJf oQvao wIheGXS uwnZa SXVKRjQ QhqCYUC BjMab vGmxV mbzJsgX wYycg JPTxk ngolUJ gUuoD sfiyJc gweTP Dlfbsy KRRHwgd sfrlM RrCkgP roZjd lWZDp gepCY xSlHR hqNseOi OZCaI ZQOCe oPTsP vCZIMj AJvcq rkcjK fhBJf oQvao wIheGXS uwnZa SXVKRjQ QhqCYUC BjMab vGmxV mbzJsgX wYycg JPTxk ngolUJ gUuoD sfiyJc gweTP Dlfbsy KRRHwgd sfrlM RrCkgP roZjd lWZDp gepCY xSlHR hqNseOi OZCaI ZQOCe oPTsP vCZIMj AJvcq rkcjK fhBJf oQvao wIheGXS uwnZa SXVKRjQ QhqCYUC BjMab vGmxV mbzJsgX wYycg JPTxk ngolUJ gUuoD sfiyJc gweTP Dlfbsy KRRHwgd sfrlM RrCkgP roZjd lWZDp gepCY xSlHR hqNseOi OZCaI ZQOCe oPTsP vCZIMj AJvcq rkcjK fhBJf oQvao wIheGXS uwnZa SXVKRjQ QhqCYUC BjMab vGmxV mbzJsgX wYycg JPTxk ngolUJ gUuoD sfiyJc gweTP Dlfbsy KRRHwgd sfrlM RrCkgP roZjd lWZDp gepCY xSlHR hqNseOi OZCaI ZQOCe oPTsP srgnp xybPF jLcpJ tvjaP TtbVj obAey cjSdr XXOsATAE vDiSw lUuahL tIGSc dtapl QgvsoSr mBjml Ewbfv FyTjVp fhBJf oQvao bhtLj kwIhq SXVKRjQ QhqCYUC BjMab vGmxV mbzJsgX wYycg JPTxk ngolUJ gUuoD sfiyJc HlCsL KvlWQp ovUZLx FidyI,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj meMnQJ pyOxO nidiH qbUKEy txWWHTX mPRzD oehLA aZjbptp JjLaxT oZLidcj VEtqdU QElTniLJo odjeKS ihNvs HcALY WXqWG ygMbdwky YqTpBb fKRsSZ lJPfT FwcJge qvygM tNpDmUb REKaey YisimM LRcfsb RTtLICFR LNMPW xuNvOF hhcUO SzZxYT xxMFiMG WDSvs vfqgW zxeBI zszMh dBSic zIWdqY Meunp oFkXs MUjzph dwjLuos tOUJI WiQXZ iZFHM gitCOI yySpKS ETJtOH dkndN BXzDe TqcTn BvpFC XgTIeTQ GCJVm DPBLSh rDiHv BhIaSJuq VuZHIVS hJXENq EdrYZ FAMqp JLTIR jeWYq gpfgz EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl vCPtD KUTzyc ColJTs XXUKR wsICv oSPHR IOqou pNTPya sVRWD ZtHXFd PUFWTo fcrKsZWeR OjXpT DIHyYv Jxojo bClmX eKUdl zcmXrEL WVfMAx JbDEh wWWzHh vNGxM XsAosL bVAIAK ryWZC BbVTZ VquvMttcl WohGmGa eggrF kebrEL iUCZq QfXmVK YBrylU mjGCI DlGJr AXpScN MMQMb rovNL OdIFKsCb OxlDKK GJnuc DeJVB cEqyw RDzfqcaS syumm spMkE UQSVWf PIGHMq FLTDGpU XqJNar SVpYPWy xXQqPpD WwHXt TEiJv AMaEa sSpNXE XgYRDy GYRCai PKbag iGckJ pVmXJ cFFlM NYFIjKV gsEdMvW QroeO OdmhQR nsGxo aukaZ iZyqJ gdltm mNLXFKM wSSbOyS zHkffm oFfYH cXTjbp csHCc bCjtsv AcbhF XorcE cLwCHs mZVuj HONmcU NNnrf DhJMY pRVxVAUXI LJTQf nMjctC XUpuk ctbzy oFvxO oAuKM xtocnk AjUafE JjjLW NvaVr NbBWMoZjA SKypAZGi fsXNcm DJJBi ZnEatLj igHia RPLnf NcmMtdS waDOI tXToeF yuVlDv udVGy hlPCJh WMLTYn zcWjV GYtpc BvCQYh eQevmG rZrHo yReeG NfFIj LneFB NgihYqVJ dwRRG Ikkrg csbCNw KBycdOr EruXI SsbzH XWLhyo cYFmbP biSVG nNiqe sQqRf btGUH rTUrr mQYOgz fFIXd ubUzT XRuFy xPHir pvwsB TSUVWL VWRPN VWRPq SVWhI DUcVQA cGylG CFIAH CwiSVWh AszQF RGQuA CYttflD NfgRKIZ FSciS TdtUqU zYITtXV QZMsB XbRDcu dqStj SUVWT LkfpE VcOJU KwFwU PeMjdl pjFjc fQPLd zBPqG BGJam ATYWbi XfBQm qScgmP zgfEh yZjtGYmF FiUXR wHfTYSZA JimhUNx iOzDz VrSIa zQsIws avPRNf ZrVKa uvRfl tvIsKPh wjaSW ujVcl ndwgk UdhuST ymhsf KVmbK IiZoTEe HQQEld gdemDM Lmazi nukPT SBZVi VSLFDC HKhffg EzsPR JnkyH ORWun ibfMW tPfxx ZIMoER JgTgC vPFTn PygNl htemw YjrJD etlZd lBcEw rjJbn HyNdH KQyWW SuCVEh ZzSOk aJWDz TXtSa IsIvVa NylYu uMYihq XsViT AjIgH BFVlBSHRA WPELo MViOL MnPwT lzNem YcNvyV pmLpr pySbQc MjYxD VdxoY WOiTBK NuFws UtdZH dOgwa uFcKv IskQr RRTgY VPjLh Cklzqt fYATZ hXLKD UGiAVd sTazha EpIeF MUIGI ORfVV hjjQVY hmGyO SAUhjb zIVcps XlNkW mIAxd bTSHs QdYDuo Jvcjb WnTRx QoTha ihHpK OHQwQ pmkFx vmemqSjB rLVWP LzoaLO jYUHY HVlBP CfQLMe yjbRaEj veAudPF juDlOR Sphmv uQqgp VnFXB SKRfK VkgxC ukJblBX iFODI DjRsxR oWSgzr WPqpss tbZjv tvhHI XtCQwP uSUVhI kYXIg RQuDg EHgVq fSkjDq JObVVK aCmfl LYWWKkXF PnAEmq Bdueqx nVXyY XLhuh IPZNN rOEyb zHoAb YoidLiZkOgO jqasAoiT sXPVjt tLsdB QnKvTi SUVWC NsRlhRd VAGYL ByEnBvA EtoSZ vgyKU jBVte KqkUO LpCSR OWpTE SUVWh tEDxzr aKPny goIgk jKVmupp dzHTo QSUVW hEIOp QbtFM IuCZG GXGTt GgIFa lnazpD VAcFf KaqmD ysCxv YdMNR oguSWs FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS kPuBsOg vCwnK hEakd uZOXs XPVxi OKFnT MHtcP kFjLH MpXkA jRJaL LkjNK UOUPy OlLdSV qeNumD lRhQG aPrIN APTFUMFupSixomo oejBS BIyaQ pOjXT rHjRW cNLURV ZGYVPJZn xiYmg aWfcK CjjOC hSUBx JGxxGe ZSnPm vmpbS ZtKSU EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE xYYEe QPpIZNS NUQME MEEEEE MEEEEMe TIilNZj TSVWu EPMMtM tRgQrX BxWvE MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH bUUjh SVWeMe EPMEEEE MTVMMHVE mUSVbVf MEEEEE snFZdr mBsTfgS VQFwVs AVHdioy jpCxYR WrZsI dGoYQ iqAQfC jEGeageUvs xJONP tQOgeU nKlJk MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP NGamnp iWyWx SVWeMEEMM RMEEM BWaZqx FbCVA HOlSqy tdUbJ EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM qYaIP cZfrc MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ zvKXT QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU mXrEL mlwyC vfWdj OYXKs azlzU EEMME MMUUEEM SVWeQ EuWuS IssSg uEgyo iZvRp EMDNxeM medkW ZWMdh CRERo lmovd kWsKcV RtQXa ebdSDl DQJVn ZyDMy QCEMi gIPCR IpAie gejcb oUFkSj clhPU xezQD OYhnLTB PFILk pQtYr KMksB mlGfVQb FZdNQq BjoNCQ sNJGr Nomyey SrrWWvd klRnU tdhFTL fKOZd NTFRTn UeUMw NJzPH YdPKn FOVUsL PfSlAF obrTn nFxMx dPbAZ aJgQWl mEdEl bSPKZ TgyMv IlsjFY GgqTh cIePwL CNUhv nmcMUx PSgeF ACyMOTYl xDSoI GVfxN kXBdUu GVRGTei GwbgL fydDf kpoxE BdUcQ MaBGY ErISE yJNri uAQRc JbComNi SCsZrNHd xFInp xjrdFx sJCPRQ pLqHr sgFRy kmhLH FcMJO DKsIAI klDZVWZ qyGKuav AOxtG HeGnf mimdHv SmheN LBgRG KJnCN GAsSX lRccd aqlQk dFakp BlBog QjhpCOFJ gjXAts fkxZY RpxzGwEcv yBkrxV WLuWi GjpmzF FgSijE nApUoH QAjytV IyazIg IgUhO qSiVp MPqBA UFDcK eJJsb KGTQW cqxSt ZeiDW zKUyi fhNOv addWX qlXyfia lFmhfuPt Huthp ZtwAbX ioeyg VqETPQ JmlSf tdxdQ KBsCDjO DDbFqK kTpXR hJqAh YWjlE kymXG sMJqS SUVWj BABABA AVHQG HhAec VDXEC JuqQOt RSiHi LdAvMG WenBb mAvwZ UzsDhv eKUnD uGgpgSo PQYYt JvjPd XIJBa uYSWu EntelE ineIEE GenuE dlhoo PeuEEEEd QPEPh QPEPh jNMwe UeJfp BuxqRO YZUSW PYYug PYYug YYEPV fUQQEP UMChX tvtLgS GeKmj rIskg oEDUQVu VVQYn eQEJx UQSVu dBGHK rhICDW HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY wZaqI zgCEH CIwUJh CuiYM csmuP UExcr ComUv bKDFW LjvUj wqImfb zpvog QREvZ YBrkRE tPtLw PQYYPV DWsFX Ujhxj eSVWT URPQQh USVWj ReMYQ PPPPPy ebndP MeEPj oPhfA YbETe PbocV EQPjjM VPuus aajKV dUQQVu kaFvz qADkf JWHrOKV kscKwQ SycVffX iTBttI USVWN MVJlv ElnOIjkQ QmqRkX YlvbG XgXXMn UQSVMWj ebdQQ EYlevF HfykK cVwXh OzExG RkCzVW KfhzILu ItOLt WdXRx wbNUn PzxLdZ QCMHc WwIlO lTouKk PskNP ydMeaxzKDm jAZjX UQQVWjgYjGN PQPPESPW jsXfF TUSVv VguOo AlQrL UQQVW xvLNjUu fmAjw JyDZw QtXGc ZUQQE rIYwi pAEyWt hUhcH lRzBb XrUSV sVaMA RPQQE VQuuH JeDPXxh uEPEPWSY yZKmUP XPqOY YPVWSu kPVWSu mfTFX pVvLK XNzZC QJEdoH qwANU IFWuMA mbsBF ieoTTza LXrxSIMGHtM TFPTLsc lChYL FKHDB ISGpc ighwlYw lHRBz Orkrr NjsZP GISKK wxiUH fdPJq bzxJVX EjOlq uPuSW EEwPr UEHEu yXTFcevi JGrYV VHYUE cPTSuUqXC MpkoI XfEFhP EPEPk AlVpu RkvPk PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu tixEq vswOYnn luFCJ uBjAYjZ jAZjZ UQQVWO SVWtdAu Gvopu sSKcR XYrekl vtNlXo YmyJq fobPhk nINEvM WZEmG MNExwe HkMtu cUebn CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp oSYdH xejjT ZmyTiJ qEyVSnJ fmUmJmYFQI rMMxZ Hiiwp RrEnC MEEEPu gWRIb gjfFb jAxKI MTiTM SOGYu PPPPPt PPPPP AzGNj HLMMQP whQZY WVxxFhu fdrMSltqG VbMAC YYtVWh EWWPb uCYYt uVWTb WWWWWS ClYsLV YtVWj PPPPPPPPU VSYYt EAEfEEj EPQEPEj AFgYv YuhvcU AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP VEmQHfVHx LWobl UQQfE fEEPj XBnZRS ptxDd JWUQH EGWVj ilnUO InPVwn ejuUm RLniy AVAEor MSVWu MQWPVk DqjLgq KhUVT MEEEPu tzvQUl cFFJw BkqpoWH PPPPPWSu QQQPu VWuSu PPVWPu UWVSM ailPs USPTJ wKIwRQ tUUVu ndVeC iKbsP lposgW EkfzM RAUjgm WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu oDuxhLlPGN aiLEOOdH MkAzmc Uqxxj bhHnJI ecfDn rjDIG hewJmN QPLYYMt QwMnt yMONc IjrIJ lndSc ZGuiW qbLKIZ cqdys CkeYg PTVhl yCLsR ueqvX YnuDPJ kAkfv JaWaW FwldUVu PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj Dsqjbg VDAKuJK qwvUnjT RnIMF AVktC PfyCP DwZNm VFINn kjEJHKj MKDyNd BHICN ZXQVkZ mvjfj WxxVL LUeuP WvvVL WHtAtVL spSiEl aWUQM zUhnB pXDLk JOsUU bdRRrX Baaqx ldugjj bXWcKE JrTlEm YPeoK RElKR YZMFVIZ fUrVVk yKVjlX vPYeJe QxmIM QQQPu MEEEPu EEPVYY ZlWiu ENgzA hnLxAAh VCQQn XVDZSf EPeuEEEEd csmuu UEcsmE PEEhg VWlCv TUQQSV zVHJN tmnwp exxBuON NVEvu jkKci pyqxl pfzrw zMoaB rCnZI iVubiv EfXDT cRWnwUJW TxsHJrMQfy PnmLf dAroXxm gYDjK lzzOWt xujmM mGLgA hFvxoB nZXRr swKSf TAiMca byXCBD yANig wQfXs OsymQdxw aMAlK DzGol wFFvU vgBTP YdmdBeA hxwzvH rBztP nYyhTm iuUMZr UDhNCV EsNes mgRudRNO FCqxb PeHth Jgzif ZwECd kGHFI hGmoc JasvM MFUsCHV eKjNLi OaBoN BHxKic CLKqT nwWbIy oGVOn gHcNI MzJMRM jwVDoi ikpSP waTeMo uIYSYDX ffXNI bAOty HyBKv ODnCqRE NIJat SfNbz WNfTrV wJpFL mSfHv rzIsi QMXLu pdwJW YmcFSGj VgKCT pavwE EdXcVtGp jGecU aRldKP DrPfeQ gXSsaVo ZPXep ZSfvL kSGTUH rxScoc Jcajn JrBqEmQ cUMyv apRuGt RzLqI FCTry dNrfK nyiHbu lDGlR EWUHM raFjD ZxXzB pwPYc wzOrE rrlnU bEqYn MXvlzJ hBvAlaG WUkVw wJoiT yMoPiW abVjE vrpMW jxEPD RmGyu blZTC BFBViB mTATja SnMTlc AMXMPl vxpgMSM GZvQiO orQDR HiRoo VHuMF XdXnD DVHdMfz qbodQ LBMVz WPXhGv RVQSz uCywtu BxAVW nAtAx jwJuZw MHgSQ ULOHuFjv Wllet ReNkvCS IctlLAl WnDrG Yklco PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI qcJdayM uHEPu uEHPo DYPEYPhH BUQMj JEYcZ sYZQPHb AWxhf vYNVcKkT LcnYI MuUMEIEPML UMEMd uADqt BIyyQ PSlyDVZ EEEMEME HnEMI MEEEE ntJETE EPEPM ZReIj epLUQQMEM NHTAJGgd xKdCW AVkAh lXDCoT KzJNLhhGo swfMTl VTdXC MhyWt QzBOPxm GxrJd svyJF zUyCa SuOWhCAp gSGZKK WPxUY UdmDSu YvtjETST tjVRp VIdHQWH XaUCd pYoGD JbcSn MBoFk fmine tRESG WBCQL vYkhW BtlIr OLosN aQEWl fJiWjS yAzNA EMMUREPMMM EEMUQ lPnXBko TsUQMEH MMEUE tUFpR ljjnmhW RQYZN oWGnH gyMZq OdcUgw EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU GWhmA kwQgv qbYac uWtJZOV MQMUU IyWtmLQUBJ UQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd mLXrEL sULMEH MUUEEMM UEEMMU QRmzOV yuPgK MWnBb iTWAfYFs TNUaz cSZzh hZtOg MEOIv TozAe JLFoME pJJzb bLzAtc lmStTm uHPcQ KwuhQ dBegEL Lkpqh HAJvi moRHXs rqRqO OnzqL JrXHeE EEFmn HjXvR locale riostream badbit failbit OFdOb FmwZA bMZhQ RRGSJX TNAfYy liGoB BcDpV nFuSeXw gWoDa ynhxA YEqAK IinEIhi WzeDoCR wBSaNV ecnwL oBXPU LBjLkxOnzkLs KFDNt EJPOz xATiV array length unknown error address family supported already connected argument argument domain descriptor message connection already progress device resource directory empty Ifile large Vfunction supported unreachable illegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device process supported Uoperation supported KVfpf owner OGmLgVprotocol error CgZfo state recoverable htext files system files Jwrong protocol FlsAlloc FlsFree KLIZDvb SetThreadpoolTimer InitializeSRWLock ttOAO CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx SbtSdH rxrqC gwWzh sphqU nkHZa iFQMw cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor Class Array Complete Object Locator xpxxxx OHGTt vsfnZA IwVTb vdKGO UkQiv Pdeff xRTrEGb AVHoh mDjbdO floor hldexp hypot frexp HsLMYb ZNZPUj OCSCC hRZif Monday Tuesday GhOct January March April DDecember GhVgO cJUvd RTTEGrsb RThEGbe EnumSystemLocalesEx LCIDToLocaleName zmMZA JPvdc cZUDa kFqLWVQM ftaatLodH BbiHSC vIELO QCZGRb CdZKkQAv fRDIT cvBTaN wJEMj vLmkzn zjlmf LtmYE adYUuCYW LZSajf UJbeH ixnEK fXyfe ZKBnhs IfXKZjN XksZo nWlHo imyAT VfexQ jEYol NRsYt zGntH DxVXK ContextStackSize ContextPriority SchedulingProtocol cRTEG vMcLV ZfUUU rTmjFFULbXqC MMVMid HNiqM usage usage ggqNn JmRmCHm zXIppW OIcXe zZAplU IsFzV BHVfY nicehash Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ SNxFd IKOePI enpYH utqKiR qRAGu BWnaH zGitDSnK JLXCM mNlVez CVpPVw yjMGJ jWPJKo RVqSW ebPgO XxRpXUbm OOHWNa BbUHK OqBBk PpkapCy JGBto crapIjy QxzvP dwPVI ABCDEF LQHnx IjdGZ RakVg mCuxOA bzThz LdZXET xiTTU AydnOYV DXaYxl CbZIhij tPXxe QJRLa PiKUs biOpGnEi ZRTEGb IYRFo pBRdB gSWzhBfY pKNXTh FRnuJb URFdq NPBPV mFlPql SYXFdH LsBXJ GvFjUq mxNWyV wYcva GHSWAc JjFKgXukHbJ LJSwNn drPYLYsBp mxWVf ygXiV RTEGbY tNoYw Fvmkb QnxCS IXIyTh nDdog JuSwJn taasd GXiAU Wavyj FVAjT mxbFR pJJbH pjZRZ mXGznGl diqog rxLph CdgXw SfnKHsMcmzmI MwBSaNx jybEI tRtNCM yyVkV rYZLEr COweO ZyCLr cJNoY pimUR cJeyNj WlLkX XoFvXb WlLkX DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven KDpRP cJRiseRiseRise Geode Geode OPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION hPentium Pentium Pentium Pentium Mobile Mobile Celeron Pentium GwgBdF gUQVcS IRWIN WESTMERE PENTIUM MOBILE MOBILE WOLFDALE MEROM EVDUAL hMORE QUADCORE dPINEVIEW CEDARVIEW hCopyright Plauger licensed Dinkumware RIGHTS RESERVED klgccX RTEGb ecjQE RTEGb Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE hEALREADY EBADF ECANCELED ECONNABORTED EDESTADDRREQ EEXIST EINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY ENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK EREMOTEIO permission denied address family supported temporary failure cJpermanent failure family supported Xresolved protocol unknown service available socket connection already progress WNkoperation canceled fOUDd DkUJZ cJconnection refused connection reset destination address required nMEDV jhost unreachable interrupted system invalid argument error socket already connected message network unreachable buffer space available device enough memory machine network CgZfo space device wCgZfoQ socket connected directory directory empty Fprotocol error CgZfo Dresult large system process dcross device permitted unknown error links Vasync event signal unknown error malloc malloc hJzIz malloc malloc malloc QueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore CreateEvent CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress hkernel GetModuleHandleA ttOAO CancelSynchronousIo powrprof socket closesocket Missing after object member dMissing object member cRJBad escape sequence string Column additional characters expected parse unicode surrogate nXBad unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected Content Length false bXfAW xKvAH QamsE hgRQyjQ pnsiN nhlZi UcJnS ZXZDf iWDAfC oOKIQ EGMKI tgtNXpo pdyOpq vHqAjgZ lEsxhnP QgsEl xpeQl TUjmH YnlAK labax MNdwM ffGEf FjaCnh tErndI bRWFF OiCzd fafyxijfhkdanfrzz RTEGb LdZXET kIkEm gSWzh gXukHbJ JIyYh PTDIv mxbFR aVoDeC ORKZKB mBOsZ NPzPV YEAoK JxoSU rxLph lmhsL wBSaNx eWnwL QroXe JqHjevP PaznT aCtNj yyVkV rYZLEr KwPBzs ZyCLr RTEGb LdZXET kIkEm gSWzh gXukHbJ JIyYh PTDIv mxbFR aVoDeC ORKZKB mBOsZ NPzPV YEAoK JxoSU rxLph lmhsL wBSaNx eWnwL QroXe JqHjevP PaznT aCtNj yyVkV rYZLEr KwPBzs ZyCLr RTEGb LdZXET kIkEm gSWzh gXukHbJ JIyYh PTDIv mxbFR aVoDeC ORKZKB mBOsZ NPzPV YEAoK JxoSU rxLph lmhsL wBSaNx eWnwL QroXe JqHjevP PaznT aCtNj yyVkV rYZLEr KwPBzs ZyCLr RTEGb LdZXET kIkEm gSWzh gXukHbJ JIyYh PTDIv mxbFR aVoDeC ORKZKB mBOsZ NPzPV YEAoK JxoSU rxLph lmhsL wBSaNx eWnwL QroXe JqHjevP PaznT aCtNj yyVkV rYZLEr KwPBzs ZyCLr RTEGb LdZXET kIkEm gSWzh gXukHbJ JIyYh PTDIv mxbFR aVoDeC ORKZKB mBOsZ NPzPV YEAoK JxoSU rxLph lmhsL wBSaNx eWnwL QroXe JqHjevP PaznT aCtNj yyVkV rYZLEr KwPBzs ZyCLr RTEGb LdZXET kIkEm gSWzh gXukHbJ JIyYh PTDIv mxbFR aVoDeC ORKZKB mBOsZ NPzPV YEAoK JxoSU rxLph lmhsL wBSaNx eWnwL QroXe JqHjevP PaznT aCtNj yyVkV rYZLEr cJkNj TfXbP zXIui OZLsY rrkgF LdXET VsPOz gSWzh xIlxS NBskQ iuySQU dKUPB sMVzy bRTxGxb AVHXnZ pPKZd IaMpN LdOZgr BdhtOkH QRTSEGG vQowq gSWzh gXukHbJ JIyYh PTDIv zDGCDr mxbFR aVoDeC ORKZKB mBOsZ NPzPV YEAoK JxoSU rxLph lmhsL EJPNB jQxEmK goqTl oBpni OiBep cToCO aKwVY,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj yCdbs tshTh IdKMMw GpbuF HcMaQ NYvfPvA nUsCl diUHJi fWqEY UppwgIQ VyIIR oWStaL SVuBlFmlM TPTTq lBrEKlm visZn nfZVc JlmPP lwUgUtmm UECkIqq pjPLYs qqObo NOHpS TKLGtKX GysvXT OSZWOtsTQlhRFy FfRsQ LvezI ERVLh tgfUl KXXEB ToVSX IXQBk sXrlrn kLvsL azkuU PVVEoPN UQfMIZK WdHTp jhUhSb tCbCu dgtmx mTEBL VVecg kMLctA PQwGW XIvwLH nhWhG ZRxgEa gMxGsi BZyQAUM zSHjK rNAMTggQ TCXSA WTrnPk tBlIGXy tlvqT jjDZr ZYDIE UYNcoF mkUfM oxtbT zrHHHQC pZiuB rWvRS vZtze haVQE fgfcA ZzgOu fAXXKg zvVJCj hZHNon OAVMj JikSOXQ eWFAX CFMdQ SxyCo YDsTa wqYaBq CXTvw czDQbf vebMB lnPHHf jfJjHzrlWW LOPyv tKnhj IvxpN Glhnt fXGqP EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl QJybj SpkbhpD Lexkk uQRYb zZAdv CLOTm yJMPm ywYUjh NefBN KeAkz sahXL jcNWy dTbedWy AkRYs eWckxU MUwnd tjwQEM cqHUg GaZoS bwxNSTv oRMbRr ODpqZy wdHHsXO hyWNMI opmVcWq QvIEuL xtYgM KUKadX weeVH yQqEX iHAprAB YPDhBJ OOnpg SbAnj aEytPKhyR mMuDS riwsBQcMa gTwzra VqPpiNk xfYawT JkjYO kYhNBL ERVht KeAlkz DfPgKt yTUQSVWf gpFBih HaUKjy bpYJFe IXwKv hGGoNh SVpYPWy xXQqPpD WwHXt AMFSVxB MyKEb iaKTm cxqvlF qvwaWZ qXPch eQWtG HVwDPzpXy TgqOv kMNzX nJMIo OLwLx AsrcXC oeUmel xAkZd DqlQGRtwC xfYOv WZEuR tyJPL scKFL jNKgfe dIzDa bZxnp ZDFub zVhQs YIkbPpN fxpbV jIZBc yyjtUvYX iIGgaJtl twIae ZIQgOh OOvRYzHT fdHiQ QoycsU OyBrRIel Lyzcv EWdQF nZlAkv zGfqphp MSQdf auUdFk ESsOn cJIOf eWntLR buOyE hkqzUMWr cnuaF KVVJR cxLIW ACWfHq zZpGf dcFfG nQUeOM fkAxh JLOhc PSgjOM NGSqN EuqCVW keezAk vodNsP OcqYM zQeeud jpXlT UnpwF hbRnJQfmzy QBjUC kMcFv KTUqwP rIROK iMtfu jAUWFt OAwlCdt lcvKR OlKmJ XmtMn FixqI nblvO xpTLb NmMAW oKSkI SkFNEWT Eutuu Gnkge SjXMpw MGfSY hpbuFx nifsY wFGbhC vHLim dQGVWztaS lYFZJ QedYj kNjXz TSUVWL VWRPN VWRPq FEqgltss zykUGbx KeAlkz obvUC ljKWx SVWhI hkWPwEqH nXDBsnG RtEMWj DBpZT yVfAIeWm UuooZ YjQfG MDlZS SUVWT FMOJm jfyOrq dguMP KzFHu JAWwk iwEqd XISdx ohHLJ BhUqkUYXk aQjRJ nzkjqu StgeX JuOHw KNbcQ ouRkCAC ytXoRQ WYvJz NwAGS TKgcZSh kirfD kdEEr KsDBmk FLBXD GAslS gDzgJ ghRLA estBW EuGha hmSYJ SqGTg inFZkmT MwCYuM GoCPt SIQCeY MUxzH YpRSwcw iZCFY esDdP wJPJg yTghR EYPel eACpP HAFVS NfFTDz OQOaM paSHE QUINGy gmLMKf PWjHeo OfdbF MOvXRo gkHkqkN XNmCUloZ tXouu CkTNl EdvnT CZJhC msYNs hNpzPo WcMQrG XUpWw OyPZueA iwqot IolBj rCTuq cKXoedt zVBegP DHqyy cIOvPV gbIMDF qlsgn XGsbC qaawuET sVWRXLME EiMaqp DBGoNxD CziNB TfUKaIC wsVUyyPRBN hhKWNu eLoNVui PgKsl ytTYX zfMXed Pwcqm rRUUy SMuHA ohSCt yoyUm UKautFYi LCAHC DWSUVW lJvhN WaJEEKI lhAZbs VPjLh fpewQ ZYMxD tAIIp gUEkO HnUhVeY ZLnuV JstqU qAYGaK XbEPL SlfDN skKesJ yxEky RLHrq bfPxf pGpMH XCmXE wXeXR INExl Cblkv lINgul DGMFt tfKHovR tqPOJ BSfCX QoKZI XaNSumKE navbD VLdSf bcjpdur EZkya pjAlqE tGRmM RdvIA lojCqU wfHyEX kbGwzh cfamB gOlWm YdENu uzCIPW QJSVW gOlWm YdENu VHKysB tnCWz EoBIp nMgimv tvhHI gvlYUt uSUVhI lTsBi bwJWI jxONEUp QDUbu CqAzR mEIVv sfVYU bwAOJ oVKnenw qzlgb JBQYV SfWoh ucrNVcr PcBTQ sXQDw zVAIAPdEz IVaEWJ NMUWG Mtiyn EUODq sXPVjt tLsdB WjXWBkF SiCsz YChXOc SUVWC TWFdr bKHmUd WYPxe ZwKSH WoAcac SUVWh dQSUVW WdXYY KWWQp VAIAfd Mglow GXGTt BnMOA bMYXx mlTkT hKFFEMx FVtnF FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS uwMFP bOlUc ocTKg yOzVE dsnbN GVYjCqAY ljOOE GCJWra NWtYx YzGdM QApTWFBdc pbdMLi WGUkwiq xcuyQZC QHltA BQCgz NhHjE cROpUAuWc HhxmrumQ YXyDZ gdXVwPD yuTGzibA hBmxyek EEEEEE MMEMd EEEuM EEEuM MqEPM LsiyG YYEMx EuMEEE KrRbj xYYEe NUfrFDyF ZsxkBr Ggybx UQBik hUQME MEEEEE MEEEEMe JUobH xjrGi kKZuwM TSVWu EPMMtM SUjhZ fDCbu xlEcd IlxxmM HYRGJ sOMNf MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE oTSfU MEEEEE TiNUd AFqDc ZYzCNHn NKjXn sbzmv kWlRF GZJLB RBKnq VDOWl zefYqBq MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP qIWslXX RjzKaZ YapCE ZPgKe SVWeMEEMM RMEEM qYTFG ilRsy PFDBc lyyDs DyQGQ JmZucJ MXmAi EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE puGUx yTUjh EMMUU UREPM aMxWh fCROf LhdOsA aBXPXv aBGWYa vATNa MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ wYQVL QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU JgJED MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU aEcoIS EEMME MMUUEEM SVWeQ EuWuS pjZaD aAewZ ZqkFQ xDShE lvatK eaiFIdY LZsKDpFHZ hdKGGR oOKzo WSyct DTwvz HCnNz nfzuk EVEwZ qGGYo UECQdr vnqLy YattW AHhRCQqPc Wybrr Issek SYddZ lVqEM unrsTvA Tkcot wHJXzu gTZGn mlyZP QfZjd WLBIQRt WXmDV dyjZTMJ ufgNlO vPJOk ejSaV AetkiTS CRISLn ineoNW vcMrF yvncF cwnJZ TBBNIl NQDau lFqBa PNlbWy qBqisUH WCZUmG qEEVU HDNnRwV ljgnlR yetMTf sdfPT UlZGYa HNinpr oMtEmme cQWTjw UagVa nJHYre beQjAS MOVZI vuiME PRGEG CnjejN rRPQY MeAuu tsshsOC lwBEfTVX DMWeN lcswPo Jsvms HWVfa GzTDxQ sjuGtos ggpOR cEXCHY MabMF eRvrz dFaOY aDmZt SLOUu QMahMX QIODu mWylNR lSLPrr tVzqWw codSsz MqFiI DrZKV QCyKvP DrVYo woEEM lzuMAB QbGEG Lnysan KzRbp ZGfTVFXd qNzGc pAiWt LGAPIK rGAAhW XIfslxV RmWFFJK OKIuc iFBtM YmTwq gmPwF NrCfLn xCnBc UhNleV VNLrgz kTeNMI GTeCw TJsblC JBBCz fgXaMjP IKLZi gXLay epkqI awYpuIF cwtBcn HefLB KpheX EWXMh jbgYa ltiAjdLmtl YNXpv aOZDW nxpRVs MkvAB LMZRx lOXeD wmgdr vBYOK HwJig pVqyrR Cdftn dJTYj pSXXt WvppIk jSNOB HaBCUla DbPqjP EXSVN bvVWYI myoUt KLGtK iZXeu RYSkZ FzHltv cZKuq AGwhCJx ATpOh WckfnV dMspQRR eIYJH QpqQXMec rOoBKnq UIkSe HRIGJf IwuWz wAkEiUF SUVWj BABABA kHGtM ldxUS mbVbZxMG CBrnLjV vjOYT qvuiw yCnmACj GiwcqdZ mCieH jUlyR YYQLiy KxZBqS aGRCm PQYYt uYSWu FjFawiW EntelE ineIEE GenuE PeuEEEEd lbLjX QPEPh QPEPh eehIN qLEcEcd pQEcC VjKZc Ivxsi PYYug PYYug YYEPV XCFUQQEP GnefmMrr EHUwl yttBwQ igHan xlkNUV RyxZFH VVQYn LTfXa ypuMhQxb UQSVu vbXZIe HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY Pycuo aWsUVu CuiYM csmuP bQjYo iHLkUN XAiHI qjpmNO JIdWg tPtLw PQYYPV pZqnI Ujhxj UQKxf MVTSVWT URPQQh USVWj OUUjlM PPPPPy MeEPj wndwfoF rhUpiN whfJvpe ntKLJ kXxIqc jfVha lzRFsaTiH EQPjjM VPuus jNOoy UQQVu BpThL GZejIP gNYQI fbxiFJ Hhflh akavF CcBRt USVWN QPJbr dfPoI CbjwE IUQSVMWj yDCEd ItOLt kFEqKP qAXbo jAZjX CKIsea mGWLR UQQVWjgYjGN PQPPESPW jsXfF RUSVv shaMT YFVHSVWF GWLpA bUQQVW uGyEG lwjjFx wCPYN fwaRb FUQQE wNoeRe Nwcef woKwER qOVrzp tEKUF xGDZj FbUSV RPQQE VQuuH jEBrxUV uEPEPWSY AjhZo MgbHtg YPVWSu kPVWSu tuhJC UusPv JUGhmdy zUxwHo jeatZh iMRDf oZYUA QUoPQ ktnor DlEuyn AvOXv VufVP yADvRH pFipk fJJGP STbJHN NKvSfo CGUVntP CHEZB RMyiT fPqZSS uPuSW EEwPr UEHEu YnImeaB XLaUE ABVCeW XfEFhP EPEPk AlVpu KdmyH UIUhZVWsA PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu wNoKj FfaUu uLUiQ lwjjFt UyBNCU hFSGM uBjAYjZ jAZjZ UQQVWO SVWtdAu XeTfP PbUVu RNlzTR jFVQB eUQVu twOnN dQCvp LxYgb CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp rGEPM jQdnTF gGXXX XswEq glkzX FQuEub eCEJS bUedqkX MEEEPu TnWRDE JEEtwWJ gYVOn uNOVkg wXaLf aMdHem SOGYu PPPPPt PPPPP yWUkE NIFUVu HLMMQP qDoWNP PJZDx jZSGKS XzSEA YYtVWh EWWPb uCYYt uVWTb WWWWWS URrfj YtVWj PPPPPPPPU VSYYt sOhJJga QnHsk EAEfEEj EPQEPEj FFUoXld YfIwdDK AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP pQdQz psyCA KUQQfE fEEPj NyfMv IhiUQH EGWVj IShlYVkP CDURT QCvgv rOxArYRff JPIvQ QDBwfE AVVTl NuXxJ erTyA MSVWu MQWPVk auVwn XUHIQu MEEEPu lbxTYj bwlXf PPPPPWSu QQQPu VWuSu PPVWPu UWVSM FdYrUUpCF PHhRP laRONQ PeDvSn CUEol WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu BWJIX IyorsQdh mljKaH GgVFM AxCKRon gaoZG iRxSw QPLYYMt mhDTl qBwEq AkMdUm SeoUt PbEcX LsJQy INUSX RycjGI Yglps ahlJvy QvCDjZ EBwBsemQ EeDXUE RMLNcD uZmhY PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj DeXVrt ayvssZON wnyYo IxRDS AKNNHH lWzoxje MGqSUd DRoth hRnlgNmlmNG lhSPM eMUlr wjkhyP xrvZZiQ KUdOwRQ QONvV hqEZL WxxVL oYWif WvvVL WHtAtVL cFaEh oQWDR ecUQM LYqAK IMLYX ChtzL xQEFaCscuG MTyZG hWuJeA yvoCP BRthS dQokq JWdAn OfrAx EOWaordFp lBAZQq tViOb Jzaknm ceVMd QQQPu MEEEPu EEPVYY iyGSe oWifvJ ljKaH ckTnJ nvhqy RJbfL WtNcD pNEAl MARBH hpbWVU EPeuEEEEd csmuu UEcsmE PEEhg oLQVuy ynftvu VWlCv PUSfE UQQSV lGVBqd jYtIMsD zvSEgmNN BlAXr ZivHk TTrYZ aDULV XhFnOI oCjZcB xocee hWVUd iIDTAOK lsvAdWq Vtuex cfNfv IMTEwY jNFlAK yFenf Dkazz kWkWm wzPoe QJFvP IrbKR JWISaqh LpPxK TzzLG YaOHF GDAmtsmN zCigpxCc GWcbx vQmYy obiDgW efuak gedkJ DyyrlQ xIoWr VJzWk ARvFHT NZURiW uwbygI jTbDO NwvYy PLQWB QALAt evHPtcVbOj kIpRP iVpNN Pkakb QtaTTkag joklc sdNqw JlzUe XGMqxJT PlejMNTg JGmwa XDTRFqvx jryoI tIoZjUM FrXQn oHuTx qlrazkBQT xFRRq rckQMv ZTWrcf FhRUI ICYPp ZGyIl Tsadtfy qeDfP nuhUKt cyXai XyOQlGln cmwsH EDWwJ DDtLafgm RbuUS clqhi xrMpv BgOjt jNYDU YkgGa pliJP wCsHi RMbzV skWbU yTjxEPD BDFNy RAykM oWNajW IMSMp iNYFh pqYhHH dcKLn DJRUi HHXpUv gXfEsr EvDUtU wdOLc AKXMAE PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI AConn uHEPu uEHPo DYPEYPhH xlHvIp PUQMj vdaUjh LrHipfR OnOAX MuUMEIEPML UMEMd xApMz EEEMEME HnEMI MEEEE ntJETE EPEPM UQQMEM wLOcd HNTGVm iwzLN NNVNb tApbt EDAoj TVRat YjIpES fBPrlI fDCFu CrKcS MUoJj sosUQ EKKjnH WPDlDte JIERmu qgckfR LnpVPH irzHEC XieQz itvFE XVCvm lyAjs rxNHD PGWRI QyTYHp teMYSe NuqNs TxdmmR xKoESd Iehgv EMMUREPMMM EEMUQ UQMEH MMEUE NiwEM uheGV DpPXTsDtXL EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU mYEXrt LPUuC MQMUU KiCsz NUQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd teWrX ULMEH MUUEEMM UEEMMU CrxCfz TkzMR LkZwst Lnqcs YHtJAHs vGfFC btfeuq kDTbN csGjH GqdifO AHqMC dOmwrBX xvqBxrQBY qjXDVj JorGcZ JVMvS WMXgU LXZlx bmkUZe oyXgv cObKE MpavQ locale iostream badbit failbit FOVPMT boFzM hHuGtS MVaHr FYuHltAHw NlZWq YYJXVI ivnJB MrBmX XjVKnD LXlxj Yxmkr dVWRKn ZeiHEe yyBHW eRsET qKMcaoQd mFwDi vYvzJM VaPEe array length unknown error address family supported jZUPcI already connected argument argument domain descriptor message connection already progress yRdevice resource directory empty large function supported unreachable illegal sequence inappropriate control operation invalid error directory network reset network unreachable buffer space child process message available message space device iMZRY WaPyRno process NRZinV supported operation supported owner protocol error state recoverable ojZtext files system files wrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock SGAVGX CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx GliwE eULKL HlTLq zYJXj daQVP lYWzO jTLiT KRtVo eJlgh igzhm paiXp ArjZe cdecl FQEaG stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable RuYIq placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor VYzJK Class Array Complete Object Locator xpxxxx CIQteu RnOYR mFBdXiY HtOehIC PDJjf xVgKcoVD aABxd iwEXd oKceil floor jZldexp hypot frexp RoYLM hDlkTzTR Asinh OjGBP DkaxU dARvWy xWZtk KwExR RAMonday Tuesday January AMarch April EDecember WMXrO jChdPM HmJzKU VnREWMS JnRWMWC EnumSystemLocalesEx ApjZi LCIDToLocaleName AyjZc WrMMC WrMMC iFyRoQr XcHWP dcgio ATmqX FbEwac OMUgRRkdHo erzvB GVNqtul fpmNf WDXeI hjHvsX QAxwI LtmYE nqfZu VEYcu rPPaF SRJmX cfHdd hImVl vCUZz eopIU gaXSrFFh eEQod LLjKbG gQEsL PlCiq ZozJa RNOzt bMdix sqfZIYlX rBnLBNC DPFhG wBcbc NzJir VeMRs SoNBl zGntH ContextStackSize ContextPriority SchedulingProtocol WMrDC EwEMd ZfUUU jRmlZ lbyYk sTNQU YjRTimi lFSVO usage usage SfxxS RtlBn uTkGB nicehash NYcQY Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ kvuqG HvOfgHjI PnhrA aTOpl srvVvw LltpJ BmePC zTHEZ deLfW aKJHW JLXCM mNlVez ivrrUAe TBxkiz UYsff zkfROo asVxt PTdzf CvsjR NdhJS xvKgzm hkxgV MPexw aYNTjyMd ABCDEF jIFRq faqusz hHIuGtS ZwZst QTruW bimKvNERZ RtkoCN jRWJv KeEvX pHuHxPVn ohGNL vkxuCft JaRzp hrjZM hlcOITTRC xYNZT exhFA dCQgVtgl vHltiA YcATUp tHSxFt ldFOT sCIeh Mrojix oAIRY mboFMJ txFWaU YwoRh RkHLO PmpYd XhjHCe XhHCe XhCnT ACjZn MrLiF XhWCnT Aokupy BKRRE KRgyRu KxieS hBZSa vYHze uFBYD Hvsub kHbzX TrEKB etboN qcIfU StBKa hzkiBQ rRjZM iwEqd kpAiG PyScd DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven RiseRiseRise jZSiS Geode Geode OPTERON PHENOM PHENOM AFUSION FUSION FUSION FUSION jZPentium KUrjT Pentium KUrjUi Pentium Pentium Mobile Mobile Celeron Pentium YAIRWIN WESTMERE PENTIUM ACORE MOBILE AMOBILE WOLFDALE MEROM jZMORE QUADCORE PINEVIEW CEDARVIEW jZCopyright Plauger licensed Dinkumware RIGHTS RESERVED iwEqd iwEqd sWzyD iwEqd Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN jZEAI AGAIN BADFLAGS jZEAI CANCELED FAMILY uNunvA NONAME jZEAI PROTOCOL SERVICE jZEALREADY EBADF ECANCELED AECONNABORTED EDESTADDRREQ EEXIST EINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY AENOTSUP EPERM EPIPE KPESHUTDOWN ESPIPE UNKNOWN WENXIO EMLINK AEREMOTEIO permission denied oLxDmDK address family supported temporary failure permanent failure family supported YjZicbX Mresolved protocol unknown service available socket connection already progress operation canceled connection refused connection reset destination address required oLxDeX Rhost unreachable interrupted system invalid argument error socket already connected message network unreachable buffer space available device enough memory machine network space device socket connected directory directory empty protocol error Eresult large system process cross device permitted unknown error links async event signal unknown error malloc malloc uAjZZLt malloc malloc malloc QueueUserWorkItem malloc CreateEvent AjUCi WaitForSingleObject ReleaseSemaphore CreateEvent tGANwF CreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress jZkernel GetModuleHandleA leZYm CreateSymbolicLinkW CancelSynchronousIo powrprof iPyEj socket Aclosesocket Missing after object member lCrEN hKMissing object member lCrEN escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected jZSee aZBYZ Syntax error value object array expected Content Length false xsryp JPohj xhPhIs agUax SxGWM UvIJK OKPHdj QPZlwM HiOjp BttMN fmgvT emYsm UAwwq vnFRO ltAPF yNdPxE AFSny JmWpnn HThPJ uuUOiP FCBPcC PvvhJ smxBa IledO RyPhn BapWu ZzhSYc MYFnf fafyxijfhkdanfrzz iwEqd mboFMJ yCqAX ZwZst gyLRg YzHltiA nJqRx OwWOQF IyGEX LXKlxEY usdWL NBgyU eilQGR RBfYO aFDpbV vYvzJM VaPEe BbgSM iwEqd mboFMJ yCqAX ZwZst gyLRg YzHltiA nJqRx OwWOQF IyGEX LXKlxEY usdWL NBgyU eilQGR RBfYO aFDpbV vYvzJM VaPEe BbgSM iwEqd mboFMJ yCqAX ZwZst gyLRg YzHltiA nJqRx OwWOQF IyGEX LXKlxEY usdWL NBgyU eilQGR RBfYO aFDpbV vYvzJM VaPEe BbgSM iwEqd mboFMJ yCqAX ZwZst gyLRg YzHltiA nJqRx OwWOQF IyGEX LXKlxEY usdWL NBgyU eilQGR RBfYO aFDpbV vYvzJM VaPEe BbgSM iwEqd mboFMJ yCqAX ZwZst gyLRg YzHltiA nJqRx OwWOQF IyGEX LXKlxEY usdWL NBgyU eilQGR RBfYO aFDpbV vYvzJM VaPEe BbgSM iwEqd mboFMJ yCqAX ZwZst gyLRg YzHltiA nJqRx OwWOQF IyGEX LXKlxEY usdWL NBgyU eilQGR RBfYO aFDpbV vYvzJM VaPEe POaELo UpWDi mboFMJ WSyEq vDedHlt FGiBz RMlzyT APyonn lDgQh zTRxp uWWvN ERXXl WWNRG OJsmAT amAAJ mdKpy uITRSC VFOcE mboFMJ yCqAX wfljErvEWYe gyLRg NeCyK YzHltiA nJqRx OwWOQF IygGVE KVJYaoNs Lgvbn usblNWL McCsT QtBqw KWiot ZcnyRt jEeQA QrktVHes SaDFH IEMtB,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj brpPE TBUCt mjlvAV BoQjRyiT UjtGf XtrowW VUYvll iwJzO GmtwN PRuDCLg BSMgcJ CdqbYM uLgoH sKCEx xQVrkB TzfRnxvt YsuRJK GawMb pgnaY VXdmvd qmelL qIWswau mDBec UNisRv LUfXLH KDEsw aPMKO OCWlCN UHnnyNs RHDqTV KJnwJ sEBWQ mZkXow dHIHY qqtRO Oxgpn prKjWsO ElkudCE yIgZb YkCDtT Dfursjkz ugzbs sdnuA aXaKGp fSCjg cnAZQ uIWVl bOpWcHS QmaoT bgAQmSY OFBED TkXUb zppHW aKprK MmvGuA FgRws suVdA cXmICh TUKMp zuJME RgaTJqhDa eqGEI psnhF dcZqQX OxrCbW dQkBi tXONV cdrEp EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl CVyFs lSlnq nJxBTr FtmzI xXtpE qrytnf UHBVy SKJYh ecWBQ IFylU fUULRXM QXquY xQnATK dEcPW GCYkc ZHZrIx oMyLOYn TcnEPQ eJLLk DUcGm QatSS GmGlQ izQZj ZrvfvoBb KzJPU QxgRyW knDtC RLMxiq SBQKcf jWwYj qJFXN uUMQl SlnBq ejzeL BbXZg xlRLM AIkvs oUQSVWf uMNwJ SWVWN peOom lvsQuN xpNaDZic weISo Zvatg mYEUp aweXv UFSRL lWmap zJdeh nEHHalfc NppOix SVpYPWy xXQqPpD WwHXt qpaYC HYZBF jnNbSb tKpQIUg nNFMB qbkHq tZHsPIGY rJuio npctN HwxtG MeAMN jdXwd HxObHN MXVbF jzqpI Tpjib ItFbu TeqrVf FLiMR PnNjR ydqpj qWpTw TbTaS sQQVJ HdsSG PRntV MsQjKt VFhDg jpICA qWsOhY qsKSVC hVGLmG MvMEXW wVKpttE PlMiF fiGqg DSLXs KmEGfZ SaQmkil qFJfr oRGnDH xdyWkSd YMnwH QtUnT VfXBz aimYS TdfvxE KDmcm YdANG xTPfK RaGzs RXmaS yNxmE cWNuuL pYGza WjscD IaDtYh HFAfb dPBJy OcBuMX EzgjsxF Godqo DAgIw VTzvx wQwOY OtAnY PSkdz FZknT nNCvX QQDsTO ncYoD UfYog VKpVa hgELN QvUjh EcNhg ebJeG jGhbv oZfcE vDCBBb nWhPj uGrfth SMxfvWIB gLCeR rAxaMIM KoMHti PIZYf fnovW EXMHP lHMWCAc TSUVWL VWRPN VWRPq hwNsANds rdxFUqAN OOdBQd SUIXq pSVWhI FJXeO Cwbjbm eGbOG FxXeO IideZo cNjJc ZzwdUn rmZZI KqKmjn vebEM KzUNs pwtsR HqFAh uoxPD UBnPqY sHlDYUw SUVWT iujAi GSvMTV TvkjD fVSgtC yiIlo aAVFsr jWHuHQRLiV OWYKzX EYQTs WTcORxqj vJMnT PzvtD LwrPHFTd PmttZ pmjre PqIMB DAaYhi NGkTVXLmPa bxolw BafLx MxkSR aQyyj zkpUv auefb XSGTR DCTTsHPd nVCPx psLpVZt dWWcM xTEOr pjeNG synvl YcPfyk vtClK FogJf CLrxUu jYZGNU IMSJr KacXwUej eMeaw zaObw qtrak INvwgs yrkMPt VVBWC mMUEq OTnfI TQEbveH ioScxj JksSg GXNDr TLrvn sFCEa rAOpF NZBvrUO xoibi FSrTu WfjsA vfSDc LwDqmdG ZKOMwUO WCcSVe Tuwxekz EVkof UBGyi OdZSVWjdk PbHGn yawgP EmZtCGb iyyTpyR CLlCsXO GEpvp Lqtyh kdDwR rXooCUsdX nGBAQ qpotO hKAJEt uhFFz qdxgP AJTWk sNrSLs iSUVW cIOyf bRsIT RiJjtJ GpHLt pBtsu VPjLh pBtsu BbKzfXZ ClMnf XXdhx AQXymR aqyOxuz VnqLCfR Rjuxo GDOWe hrGTy aDcZR kGXzv VNjyI OxTFA CMtse DOXeb GnYDK zpiAe aYWPeI IdbVrHySysU pBPPo GHSMq UwRGd AUPlUd zLfhY gZRJQ Fwwtx KchjR OaGRfTvJ Tmbdu eXHUku xixWs KplDrj rYYfYJy MjNis wsfYto WybEk SSwbR fEkhr tvhHI XloGtKyhby uSUVhI HscQJ kJEtr UmAgl qtjCGP xFUSu GRfru Fyaer nrLNB KnXsQ ieZhR uMwrX VRiVq OSnFjir zVnbw SJDfr WocoE sQmEN xvfpq RfNUn TXIQy sXPVjt tLsdB WQjGZ SUVWC vsiyw MpSAd KJZIsGrRWw rZVYSB SUVWh QVUVW oNtRAyoN huyOf QSUVW GXGTt WwQsAbE LZcyF byciO FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS zClFa VdNYA miuVK hzphU XhNjH KfshR uPwSsi RATgWV aXDnO igrTu wVVmD LkOKw yTJMPz VquNy xtvixwS aeOZv HpvPTH WrIiX HksjB EuDdgJiDD TxUjh EEEEEE MMEMd EEEuM EEEuM MqEPM BnqPtzu AaVydUh YYEMx EuMEEE itZhDpU xYYEe eDEyDhz zXiTs YKLnm lUQME MEEEEE MEEEEMe GPsoz SGUjh TSVWu EPMMtM EwWxw bibUjhZ YAUiEK MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE MEEEEE EKLAQ gIXSV oZDmS aHLbA vBXca QqMJf VArbr MEEEEE MEEEEE EEEEE zOWIk FuVXeO EMMUU UEEMMU SVWeMM MMUUEE MQUREP jzuop xkysd MdRZF SVWeMEEMM RMEEM udzyXw TxidmEIl hwexu lttgn eZPbV zgbXI EReaRWnRO EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EMMUU UREPM FRXeO Cskqm lAxRV qVSdnRn MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ PvbyJ QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU RbDGM MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE UDMEPM EtRMQMZEUE UREPMH EUUEEMMU NlSrz EEMME MMUUEEM SVWeQ EuWuS GOmsC peXPl TfPjw UchIX GAsTm UmblBLd JXXjsi iGXoYq sJhUx YFZAN tRUeX hvcYD WgIWu gRwrV rWvqk JWtHDoa ZqcGZebae QSXWa elGlI TShkg bjTrZ pHoxZf vEzjC YHobW DCFTl FRwNL wHbMyl ZgjJKXb uNkAC VDrMS lOMsBe tCULo nYOMx CBEiZY LJeWU lKFCQ ubJXhh qPYum iJfXLj hbSxM aTVby lOgeu UwhzAj DfgPs FFmiTe voqQc vsyWnP nfCCas TXjRl FGwfg TxidE ioMmA zoEXEhT HoBge GgXmXm eIPnK kgfrrtz mbfqJ KhPGMhw qCucr ImnBm vOblkB yrUeb wUBKZZNKLH SQLYTc jVdZIf oRqVz zhAIr NIHcLuiFN bUmhKD cpCBu TBvCV ZWGiP aFdebI nndkh iUjeLr iFDiXH QwuHiec rvxgvwa VdmuIzUl QnEdMI SlBko KHcEj CEUfSm heWka fedmoC NAejdy szpza SvCnF PytBD NNGUY BsRMlT eBVaP CtguG OYnqk Stqif JaQcC HIhsn rGrne iOfrO nBkok meClp CjYUVX PdFxTOY SHaMWd dLMmA CQyzA wRlsJu iraKX muakO nesXnV IpaKV qvrFG eeGrz eUkbX SNBHK ADIrPz wXcTCmI yMmmh EbdFVq dsNyi hLLarr OlAmj fAlnG bYRYOk LCNqZV qgvuSV kOjCVS YNoJCp XYEdZ uxQreLwK gRrQXjl SUVWj BABABA YEdxzV yNSbU mODPDn SsWXChnCxsT PQYYt uYSWu EntelE ineIEE GenuE TmAWKr PeuEEEEd QPEPh QPEPh xIXpD KMOWSYL niNVWj PYYug PYYug YYEPV UQQEP TDWQxe CsscJSmK rQaSr vjgLu zxaoT ELRgHm nKEXs VVQYn lXxxMAa tZPNq SHMvs GBehC FRCQV arQcqCa YUErhdVH VfBWs UQSVu xlYYj HuYUV EPuuu LkWGHiUW SVWUu tfVUk tLxXj USVWUj UQPXY CuiYM csmuP QCrsjNB hZtJizkPH fMczw LuEEa tPtLw PQYYPV Ujhxj oSVWT URPQQh USVWj uAhay PPPPPy MeEPj Esbim YhApC JubgI noswZ YbiDI KKkomhtu zzxBr sgxxRo EQPjjM VPuus OnukP UQQVu Onukm YOnuc bYmOWU GbcnWS Usdrh USVWN Onukm GkUDRM UQSVMWj tcPEWO XSzUdoK ItOLt BOpaY VuJGbkL dUQSV jAZjX rdLifQ DWzfq FUGThe UQQVWjgYjGN PQPPESPW jsXfF hcbRi DXntOR NaBsC BkoSK UQQVW shdRh CDLWbiM FbJrK zBWgNpR ULGwM VWuztk SkzDuX RPQQE VQuuH KhxuK uEPEPWSY nXgjg PCOiRS YPVWSu kPVWSu FPdmlV WJtucFs SLKGg UAFyV ndwaPv KhtMC cYzjL cmWlg Rsooi nsonINi hmkdf DsEAopGBKfS SSzQs wHIkRzeZ FqqIl pEdpnoI MMBHGq gJaGe wREZr htMrIn yJxomrc cmQYF nUQQE uPuSW QVVoU EEwPr UEHEu dQNwIm Ytdhd Rwqqj zpqqgjgBs qwziyV Onucs XfEFhP EPEPk AlVpu ySdhg PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu GNoUu OnuiX hlswHF aitepI ZBSNN hCKwJ uBjAYjZ Onukrr GMyQJU jAZjZ UQQVWO SVWtdAu Onukmq tfSXBC YOnub qXqLq QcUQVu GcjTdks fjAQu cUOnuc pifHt CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp Onukmko kXBbBvgF YqHvPzP PlFiGXT ffkbyL HFgQem MEEEPu pdMZDz DjiNC DsoWpG eWxTOV imsPz QTfDG SOGYu PPPPPt PPPPP HLMMQP tUXibL ihDXabUG ksvcqIw kLIJEy anMSV DhNSa jdwmir YYtVWh EWWPb uCYYt uVWTb WWWWWS NCEHiV geFpf YtVWj PPPPPPPPU VSYYt QGVaS Egvaw EAEfEEj EPQEPEj YOnuc fSWOtDH AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW hFaLU PPPPP PjUHPh PPPPP AUpwi xRdKCt EYGTA UQQfE fEEPj YOnuc sgrmX KCOiU uMUQH avJpF EGWVj GGZbi oQIxJ mkvCb MSVWu MQWPVk Onukmq HdEzdu MEEEPu gqByQ nvOQWx yvbUWZ PPPPPWSu QQQPu VWuSu PPVWPu YOnuc pUWVSM Onukrr BHDAS Onucz JVuoV YQpsICf Rksxh Mgjcr XhsIU fpmmq OJZTq WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu sbgNrg lQHWj oMyAWkfL MqrBBWp roTjjLs XwZRRU QPLYYMt YubKU CBRoh NSUkTu roTnO MCYhqM JMjvJIxG YNLDd uopIe HGvBvy JnvkpJp aeOLas wTUykj FIJmu Dlizt xgUVu PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj plFyse cSbYclECwscm HZkSBJQ iMmNNnSc eAYjL TcEQP cCOsJ xHZMN PtmhIk jqMpA OLHJL fdSgYUm sejDdz WxxVL SdYza WvvVL WHtAtVL ngHZFoK laPevYE ULNhgl spCUz XgbnG JvCEFPQ SkDHv AYFcx hZHtnhcla ioUSZ mrRJFO CTtBR KVzbGr criff eMZUd QQQPu MEEEPu EEPVYY Onukm oxNkLB dNVPJ fpbTx tmdHD wwgJG EBtLH zASrmU EPeuEEEEd csmuu UEcsmE PEEhg bbGySn EyYnvnT YXfuTH VWlCv YUSfE jUlcd QUQQSV vKNXS HfWVJc MHGIO GiMUZ iWEBqz oCHrDTRuY BPmjmK tjyuh ohadX eijJMD smOta IFsPR cyYEJw glQAa TrLSI TsslAO wCjVvFe ozBUE OorGIJLV Uvzhbsd wtSBpP KjupK wxBuGIU bUwpd arRpa ynDaVi lVNAX QKrgyGF yFWOa TfBzK fxXxp gcpUyWKNpc dkIzd tryDG QmGeW evYVxq fsglt HQbvVGQF FLdNU HAZsy wBmEW oCrtC xTZbA KzZUN fkyMiL nNxAOw wBzWG FqwaVR ELQjP XxBFGXHt vInnx UQQkTe IPbXzmU gDLBJ jlwuR hJCEfw MYgWZ gDKpRWT vnahi aBBFQ UKVPC ZttMuW FMQnm YTZjGtt oUCjT opMUv YnCxr WCXcY ECqMsXZ VBWVH kRypR FPKiL ItDjp tkAcb pmzhG KKMCK FfYARE bsuzU MXUAo NekpX TlbiJ eqgiV cWxmv ctKvS dUbfC Xehuh qCKbI nnpiaH XkjFu MXvFJV zUncLAh fAkNR JGssV ojxEPD EoYuKg SnMTF uzMXMPF GLMHy AsBmytz AUgUI fzBGE xrRdw WdsYgW dVegLt AYdMv NMurGs CCilG GuXZulw BeTrd rReEb GtsRY qyleGxvPJ nNENA PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH avZeBr EElNk JhzdZt fihQnh MuUMEIEPML UMEMd xDUMS nfRLUyjE yiwoc tNiuI EEEMEME HnEMI MEEEE ntJETE EPEPM FVXeO FdajV qNepZT UQQMEM FVXeO ARXAp WpUxuDef KSrtkt NNBtS GUlKLc rwNAv ZmYuTtN SRIiu AKUCb jLGODCY LIcTx acUqiL Wnlmw jRdTv iJWZpgC NLbVedD zFrce PCNVE DxpFy afLIS BvKnbV ngYZQ OlmLY GGETtmo NxquT BLUucw mOlOL PXgKNz EbHbXv UALcq bHRjx hHLpt EMMUREPMMM EEMUQ RUQMEH MMEUE TLJQNV LzoWa SUQMM EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU wxFfr MQMUU MhlKi nWosKw QvUQMjE AVUQM EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd LUQME RULMEH MUUEEMM UEEMMU pomXKB CIHIs dlYsIPTe lOZhsF ReESJ urIwRvzn PtTJb LvLhhGFw sibeCK IbKan ZfnSks fuxMV reMGz cabad locale iostream badbit failbit yfcEFU axpcIP gGaYv DeceRLc rwNxv EpZnY wPAML GBRPx YRlAV yiDpg ZSkms rtOjph ypRqt jwDJy WEWRc wJRTU array length unknown error address family supported Hialready connected argument argument domain descriptor message RtpJBNpR connection already progress EbwZHb Fdevice resource directory empty large function supported unreachable illegal sequence inappropriate control operation Ainvalid error directory Anetwork reset network unreachable buffer space child process message available message space device process supported operation supported owner protocol error state recoverable files system files FpAwrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx ntsDz BDHCy brWRP DfgtW TuTwfJd IHbcNT WjsatGl BsRGi jUdeEM Xvcsm AmIGH cdecl stdcall clrcall restrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor wpPrXI Class Array Complete Object Locator xpxxxx AgTyc lRiWN jWQJpH kCrWE xWJbA ltqYkIQ NAuvNG BPVIxd nrmkI zDrcy wasin floor ldexp hypot Ofrexp psinh WigPW cjFZW HSpOdL WIWed pMonday Tuesday January pMarch April December pupLO AOTIT AIZQHyNC aaSnAD IbxHk EnumSystemLocalesEx ILCIDToLocaleName peOVo peOQD IHkvNF BQYdv fAOIOH AOIHiv AYIKHQ wTaUOx sPzIN CGTIE exECDN fRxtzic nWnjMD kOLSAw LtmYE kVPwS fGUwOD YBnjHy VsZYq KwHct yjgtQe chRGD FUdFcTFZO EjyuaLb siMAUl AOtTg VVVpsTIuZ ZeOIT BIYCU IqiVL gwDfz YYHrv XyGPgS lXMca nnpQW AqnEpF FeIhg lAeND aHfAQ GIysn zGntH iIpWZ ContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey sgxBd IsHiA laley mGTkI AyIHi peOVo ZfUUU unAGiy ZiBIW CWnjc yeGonC usage usage pJBNp MXqTA CtFkU OgulZd nicehash bpiau rCxJG Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ SBWdB FGYMz afLzI dnmcz EjRld JLXCM mNlVez SvXzv uojlL UEwqwVA yZchA ABCDEF iYPqQ sJIBP tAaQX yfcEU zsKsj mKOPK DAUuP lfKGBr HHawL pInJM gAITHp KvPImY CAvAK OQZaMGB CthWUp qjZgD HCKJB edoXG oWEXZo AIuPY YEdvz xUfdHdS RgfcEU uTnhIu DfKtW mShIrc zYTkay badvz owPJs xOdHSS BNuEE DTzCG NulmE LfaHJ erGnn uZTrN dsTGA ugcEp SBUKBU wBxvG aVAeZ OqLWtkAw RibIg HqalVyinp fVqzO opMsr GVamx QKcxZZVGs TokNf wIWph IAaMG IQBrR ifWQbCO vkuWDj XMGTw EpFLz rOtpV xgrHvv vkhIp EGXQZcT SrmkIffzF xdHHKm VdGeO PIwwd ypMWG sREGw DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AAuthenticAMD ACyrixInstead NexGenDriven ARiseRiseRise Geode Geode sOPTERON PHENOM PHENOM pFUSION FUSION FUSION FUSION Pentium Pentium Pentium Pentium KdCPU Mobile Mobile Celeron Pentium pIRWIN WESTMERE PENTIUM iDpCORE MOBILE pMOBILE WOLFDALE MEROM QUADCORE NPINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED fEdvz YEdvz OxmSR YEdvz Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF ECANCELED pECONNABORTED EDESTADDRREQ EEXIST HiEINVAL EMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE ENOMEM kHuENOPROTOOPT kHWDENOSYS ENOTCONN kHXENOTEMPTY pENOTSUP EPERM EPIPE fbAtK ESHUTDOWN ESPIPE kRgdCEprL ZxnIUNKNOWN ENXIO EMLINK pEREMOTEIO permission denied address family supported temporary failure Apermanent failure family supported resolved protocol unknown service available socket connection already progress ByoTn cNoperation canceled zvcHs Aconnection refused connection reset destination address required QMhost unreachable interrupted system invalid argument error socket already connected samessage network unreachable buffer space available device enough memory machine network space device socket connected directory directory empty Gprotocol error result large system process EbwZHb Ncross device permitted unknown error links async event signal unknown error malloc malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent ReleaseSemaphore CreateEvent CreateEvent CreateEvent AxDIF iphlpapi ntdll GetModuleHandleA GetProcAddress GetProcAddress GetProcAddress kernel GetModuleHandleA CancelSynchronousIo powrprof uuQqZsocket pclosesocket Missing after object member NMissing object member escape sequence string Column additional characters expected parse unicode surrogate gdhwR unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected Content Length false NYRIC ugsgB ZQJDW XXJOB ysmgaUQ lZeYLT yZqHF vmiVLRT mMIxp dcXVW Avugj Tugclq HbaQL ayeQLw EJZOhQ nSIXhpi QqrvI qApPJ alHMx xdNad YuIGdeC ZZpzJG pNWvim DJkuN NeNlh PpWeMIVZ OviUtYHfb BgEsJ MsASo JRssTl vYbXs qBHJmzl pAhaQ kRaxG bCfUX PoofSmm YKimj DkqNF LsEmeOx DFQnLMw uNZOANk TmjkY ARwOA SZZsOEy fafyxijfhkdanfrzz YEdvz yfcEU RxpcI TrNistB ZaEGBh CthWUw nqmIqjZD wBxvih AEhFZn MAUBsT fVqzO qTsMV tvxgZ QKcxM SiThZ KbdoX iuQMw iENrkKb xgrHnvv YEdvz yfcEU RxpcI TrNistB ZaEGBh CthWUw nqmIqjZD wBxvih AEhFZn MAUBsT fVqzO qTsMV tvxgZ QKcxM SiThZ KbdoX iuQMw iENrkKb xgrHnvv YEdvz yfcEU RxpcI TrNistB ZaEGBh CthWUw nqmIqjZD wBxvih AEhFZn MAUBsT fVqzO qTsMV tvxgZ QKcxM SiThZ KbdoX iuQMw iENrkKb xgrHnvv YEdvz yfcEU RxpcI TrNistB ZaEGBh CthWUw nqmIqjZD wBxvih AEhFZn MAUBsT fVqzO qTsMV tvxgZ QKcxM SiThZ KbdoX iuQMw iENrkKb xgrHnvv YEdvz yfcEU RxpcI TrNistB ZaEGBh CthWUw nqmIqjZD wBxvih AEhFZn MAUBsT fVqzO qTsMV tvxgZ QKcxM SiThZ KbdoX iuQMw iENrkKb xgrHnvv YEdvz yfcEU RxpcI TrNistB ZaEGBh CthWUw nqmIqjZD wBxvih AEhFZn MAUBsT fVqzO qTsMV tvxgZ QKcxM SiThZ KbdoX iuQMw iENrkKb xgrHnvv yfcEU TrNistB yeLFp kWlTU IgmRrS JQXgQ ladey VzRhSje TbBzf IxFkVH ZMwkI dvWBrL RIMRbu paYqSs TrNistB ZaEGBh CthWUw TYFsz nmIejwZND MAUBsT fVqzO qTsMV tvxgZ QKcxM naoqgS MBJuS AMXaOve LYyVw jwyHmoDhO dammJ jMuZc,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj AEani PQRAn wHYTMj JbGXr qDYIM rcYTc sRZNmA YIOWDhQ yirJY Qkrea ZKQaqB USSkj UrzSDD FDuSqP DIooDKs yCNbL Zvafw DafDSCp eHecx TzBql fUOge wajZoW MSDUn yhZeo gCZOl LCbPPH HMscW IozwzVzV nSRoh ErnlePHE fZlkE qvrnWD otfUj bYdpK CzAtz rrfgl MyWMqoN BOYNk qZlQRo hXLWCA wlgdq eoJWK OCsvj HPscu kAeOZ wIqNILqDd HAdOyx KHVvv CfNLFr OPirU gQLmZ NlRbHX jIAVh USBJIf lLPnN doWse LrRUDG RBgag VbstNa TPvEj echmXC oZNAsLq yvQWR RBodAX TgWpHl IdXTI jIwbQa kSIAytl AStlRfT mcMYI KwhBJ GDiGF eFQtK qcjoT LPohY dRbol ypyIJE HrxoWVN FLQELN CSqFf jNANQ kiKWs FplsJ hTCqv LmaIk gcBIc aYoPBl RTioyM varUl EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl UawkhI DCYwE Agqno Trgwp qYrzP NdfDn vaxYk SYWBj ecJcP IXuXgR UiBiuG CoDmAW duMUjh dTclFu XnSRayC RORGuf EmEDouSN XRcnN ygyEu kStvG YJfpt fyKof IuvvpgM bAZDn YkOEH ctVZA bbXvmh OWHXP wMpKy dqyEl AwOTz LNhWXb CkbZc ViSKPow nJDJb fqyIPh kwwvfx SLkCN mkpbQ xlZmNW pmEaf YiKjs zGyph WpFVe fDzPvv CgKZy EaUQSVWf PxDChQ MuNGf uJebtZt fGxzO eAbsubR SVpYPWy xXQqPpD WwHXt HuQTW HoURy MaEHZ ysMNM YlFdmf pAOEDI ZaJVa opBvk qfGfV pyVfKC JNblDX GtlMDf rTTre SNxnr beQHs lxyhTiT DDoLN SROqWe KBkRt YILhhDdi oCEFAc LFjql sGaYhy gXcZl RXrsC hImHN gVmNBA cCgRK YsKOH AxrRA fPlpE vtYKvy LNcHYkyD LJNjU SrHKI gwHGELQM NNHET kyWMUo HWdIJQ oIrphq EiNYK FlFmO KfCVEj arOwMT yDiQesx LWYrP oXSlg uWxiJ UUXyVXy zdzDkMI vVrjYg ayXPl JdVJT BIxpBwp riWhcW wEijvDz QgBWU ucrFyh TkrQr ucTOhoFO LNaEdRY wSDIT ZePor cQROx tVvgNF gzcMi vBaQa yIzhl ZRjWd dyjQl wlhnC EaIno AqKcZ oqDBE gFXZN adQDT rcWRX TVPgr crBCYxF wYBrk XTctzAB oVnQv hOfUwC CdsHyf rUlOC EmBDw GocaE fIKVNO cphJw cIAlVV xNKjll opDmQ jentS qYUXa FvnSD ahfsvG jHmkh crSNm TSUVWL VWRPN VWRPq XVJJi wtzkMS VxDbM ogmFz gleaY vrnWB epUZlc hZRMG Wdmgx NSVWhI gmvfZ ejUhbf bsKUvs jFEMosw llEcR Oekcdq NaZpA JVZFZBk nlLccs FzboPQI BkCYac KYbLL RNPNI HVBuDPx xIuMWwD OreCT xWpXrVd wYStT SUVWT mkvyg vYKFQ MHDwv YaRCry zAUof fybaQ CqUEPZl GqPaOBs QeBONH kStTy GMiRj cJSVkv GsgKv uozQEs CzMJUk WQfXD fpPjOb MoSzew OloaP XGQxm YFgrP qmZkr DbUKFkv iAdhTU phRfj QEpDL XeNxC RfyyC uDzwc rLoKEhr FVaFf vySKc tETswb NjIwS xFwuQ CguTO jRHiDCBeFf EdWTTlX zExoW yuqBx noSlgKVm eHtfQ qgSPNL YHKfdW IFsmzc ftJWlT hksNB IrIxFc FjvII NtKZPIUVh RyNjTa cnNDgv rrnHBG GfUpeNB yxLsD PlwwO INVKW FnvFU qHvPv yNhGw rmgYL rLpUJ QYgmcT bzIwIsP xCdvlWwR FQLum EjtYA MCCOG bOeUy SFrXGU WmiuN BLABjVnW mIuUb WPWTA OIETB zAQhJ vUATBc lgpsK MuSzm KHxJf QPFpU bEHQs zILun DRgVFMo rEsxt nilHw OpYbYf uTjcP YByiWx LlAksF miDEZ qYfqh nVvOQS kCLejc MxBxY vbaHE xjZSUVW bWivw MOOeK BQHci VPjLh LdkUF VMDUN TVecV kyWHo hAWut OyAnN JXRLQ RjeyvKq JgHMoCA raxBiDr IuVCfbkgN kGBlLo mwideLZ wvwzV RigCx WVVkE wMuRv OmYtv xwHge bXbOOL HCkDU uSuuy tCeBpq OMtqrO OMQgV PgICh hOrMq kjTkq mBwFO pSUrKKCO XeitsU XeitsU zexSq NykRnI XxMnO NCRbq tvhHI uSUVhI sIYfi AZTla lIrjSokU Yucjz sMIzPuq QOqnLm NtZOt oQVgwCW pHAbxP srvRH afsAz UXHvtZ dYjPMK bTUjpP wTnlUFs kxaawaB vJCKEq jjZfUJ vZHFc sXPVjt tLsdB SUVWC lOIInBm WplSo xbhshH FZBkd FareE oGSFG ORJxQ eEcZLn SUVWh EXFswL QSUVW riRNM udOAX ZRkyp GXGTt fwnnJM RVDgN fbWER FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS eoedh lDSXL SfFzW mNiKQ whZVuO CZyfr yEYOJ SNqnR VBrDy oUJCE Xyadi KJLyY HNoAx EGJAb NKPPQ DfyuMG AOuRw RWMMQ pgVHr LNMqIT cnuJAO maofDw HVIBVajC MnPai RyxPJem EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE xYYEe wIqQi MiXRUQME sIUjh MEEEEE MEEEEMe srAFsy TSVWu EPMMtM Epuxv eghRlw cUjhZ Ypbxm weaOyNAY NfGGn MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe MKUjh EPMEEEE MTVMMHVE zlOWwSj MEEEEE DyWxzb GkvOq Ikdfz iHEKP cGGvO MEEEEE MEEEEE EEEEE OEhWM EMMUU UEEMMU SVWeMM MMUUEE MQUREP TtEHDh IjcXV pSvKb EhaPz NWixkg yVnJc SVWeMEEMM RMEEM oaxWQ QJbEg qjpQtdC cvQIf dOovA rClmO PmzCl EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE EaUjh EMMUU UREPM nvVSq PbIpR MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ iCVPpSvcba NBJSfS QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE oUDMEPM EtRMQMZEUE UREPMH EUUEEMMU EEMME MMUUEEM SVWeQ EuWuS NEzWo fhvEW YEJcP pTCly ofCYnP vTxAb cnTvB jWluv fEXSwYD xCScF AQhjtQ eaKLwyM dylFaY BdQGF APZjY CrFqy wOAQHL gMRap MSxXlH IRarsv RwkYtx SUbOW OWopMIqC aAVVN NuxYI gFJgl SaDcU AnmJPzI LbAws xRDAda JGEhX nIHugd INgMY DYqZR ocreW GniQb IeSkp aFLUP xnieM fUreq kAOSNZ kGult DdaJF AaXcv VMEtxI DGGdS phEuo uBXse XxqektZ ZqglNh QzkZNj kZgFv Bzilz KAoav xQAark xdgnlm XXrZPGY ANgIn GGsuP xSfgR HpLfIX fKjujF pWRlb oyszf oUjvs TWrBpF KFHRQL oBezyUZ xXNPH fBhWo eQolGd eXObd PjeMOzT aKnmf qulSFs IsGoe nisNB TeaNX GAqDa UCdWN iZbPgMv vJfgp iWDMG kPSNy zbwzW qDLOD NLNTgKO IbOuQ jdGnc lSZWmSSa FNqao feekm pMHXj PurGdH jxOHl PVKLfo uqbLi waNdDQI pnAPs hZABNK usMRj EoNdpc SNfPLz XlfHf fZHMVAwJM oRipa rdPbb ncizC zmLSi bCnqeSu Nbooe baJwhn pBZpv Onberm iBRtQt VCCfv ofEHb IRlfd Ttnvw DoNrM DQbCj dfoIX WoGosVq wKuKW YstRA EshNJl QnYTMvKz MRzpyKAI PTJND EVwkw fKfboH jIQhDa mWPZCQ UprjHP aIkZz qqZunQ OmiHy QKFLwc zbuHQ nLRXf ajSbFgK XRqJu jTEOt SUVWj BABABA jDCSE JtznnRz BlXri sMmHF XtUlBo LEvQw eSVOT gJvgu JROVA kRTSN Xetwc AtVkA EcpVTf TeFEuq HlzmsO XQeefgl qucFy PQYYt yxOUh HIIJK uYSWu KNwqK uhnlXCT EntelE ineIEE GenuE jRLAo OVYmEA PeuEEEEd QPEPh QPEPh ZxXkA scJjaU PYYug PYYug YYEPV BoUQQEP jlBQbJ ETskE YQIwjDm HTMwbkD VVQYn kiIERW UQSVu WnaXs JPiqBv HuYUV EPuuu jPgWm SVWUu tfVUk tLxXj USVWUj UQPXY JxFCS DGNAvE nUdMd MNFEm gUQlWD mVWEC CuiYM csmuP SNUrYR AZuWq YybFQ BPxQTv zSDsGdu vckRU tPtLw PQYYPV Ujhxj URPQQh USVWj KTxKx gyaOu PPPPPy MeEPj pZQcn AiMFw FlBqUD ZELxE RoaMd HnIAi EQPjjM VPuus UQQVu VAipx lWmxbXz IGORg kErRI YyifYi TylEu aAeHmE fUSVWN OUQSVMWj mnnBz ItOLt rpfJUgB vTuOt HJCpCN jAZjX AYtxW UQQVWjgYjGN PQPPESPW jsXfF pSVWF lRomIF sjRjJ frAip UQQVW RAPDhU vZEYAA deXHfZ VnLdb ZlRNytk pkMhbI hRJKyZ RPQQE VQuuH uEPEPWSY YPVWSu kPVWSu oYornt MmWcT ctUexB Ujjphmg cyxdEFq hUOPYw DaJaD OQljOwHy XkGqW ENSbjOz mduGJ YuajT whQOQo jTqDB DRWuX femNeG iGLbVXDe YhWRw ThUzitt BXOnV mqCjU sbDuS gRRbAfS uelgQ dBkKv WUQQE uPuSW EEwPr UEHEu icokE hUQVV cNhJeY XfEFhP EPEPk AlVpu BHcaE PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu tzneM PbOVll RqhLY vSrCU uBjAYjZ VKtPUbz jAZjZ UQQVWO SVWtdAu UrECRPDFaf PMtmo QADDcs FTkrhwoSf OSEIPQ QDbgnt jmrOTN RZERh czYnG ZVtRLU CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp oWakd GTbNk vvZmbF exXizgv NbBeZv LQWdW YUrzke MEEEPu YYtxW oNrvl piPdn RJRlrW rTCSE SOGYu PPPPPt PPPPP HLMMQP vbDxFJx vTkiV OQGaUQ YYtVWh EWWPb uCYYt uVWTb WWWWWS YtVWj PPPPPPPPU AEAYM VSYYt ksQLIMIb EAEfEEj EPQEPEj dNZAl krCie KEwaQ AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW PPPPP PjUHPh PPPPP IVKIP zhqcB SSDhgx TBbLfH uWwrEf ewXSf UQQfE fEEPj AZXyv eQTHq BPDnU GJsict EGWVj OiEqBkc DUNdkE rnqfS elKowFnp RaSJz MSVWu MQWPVk gBOti MEEEPu rJaiF PPPPPWSu QQQPu VWuSu PPVWPu UWVSM xYPABmco ChkxY vEXbY wYKnn pYPLP IkBZD FnJLE VJdAzf TdoWVW cRZmbg XsILu WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu HLYDdh nlwoE yfbzfT APwAp DyklN LnkNJS cKhtl QPLYYMt omlUE KJEWt LSwbAjMH TyWBjH HSjBE mIaLZ qsUaPr WfDBc NqBkx PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj UkPxjbr OMOmS DGsvT LrwJmz OQdeiaNV PCHpn DmvOws BKXUwS FPIqi Muyhw iovYU IuQNFq xjCaoLP WxxVL WvvVL WHtAtVL tXqyNw IoigZ nCjlE EIAhfqUb hFyMF maYpf pPHZoWB OzLaN NhcMc DKsQjYZ vnoiP tUpha UpfqA wRUEM Dznug QQQPu kXcCA MEEEPu EEPVYY KksgV AxLRo rJpbDc TILxGcN DwACEKi tfPZQt EPeuEEEEd csmuu UEcsmE PEEhg pywQqN vDbKZE qrDcc eCoUBIk ETKlJ VWlCv nUQQSV fJZwHsr zOEeM Slnbv lYcsfI znnDC Mucbmk JxVQj HfUFr kUojLdd RxHcy wgdmrL BSFci LQvls rUnos JFltn TUjxy RHqKBL pGPuEG gkZKXgTmr StTWS NmoyHcG cNESF kjPiiS juSkjQ NHxjm NBQwh SLyozW uToxam KsVlB RpFzI WbgFRk eMCxa taVgS tqXZV oyerl ecRvL OZxKK oqOSY JoihB ZJRvC qPCIf rQjsV nECqF kXbnSZBz mrmzG NcPAWP Gxjrc kHtPb UVbQm OroQU marUJ kfUGw MlOrkezD dgANH RtUes hqyAdGCq szWna byQad jKmLD nOcFmcco CErjq tHZWDAU Xvckq jxZGatC uVtJXj WMdNn QzGaKB YUBse DYWDq qjeXG mxJJF icJvBbmGBA CNyVEb lRXCw awCpWyP XgfbPiACQ GBNBAE ypnHmk slVZJ eVODn TaUSI vrSKR HYCPK kUTeb xyvtz ddwsxx RtAdI IpOqv tBgbawM jMUlLSw XGpRRIztx eqwTJI uUJVqrC BaEQZI dJxzd nqRKI lfSZKIUtI xTCJf NelNQ NCyQex KYkOEM UajxEPD GBBVQAy SnMTk VkKbg nwoWh eolYm MIqWt tNoSnd GTKoNBy kPlQXmlcD fEFzZ mJIKPJ bQcxQ JltdSYa dMJUXuU lHsqTG VjxKfx kmxpk ONhWS btdiMK PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI uHEPu uEHPo DYPEYPhH KMVOEAF ZZVXq NfXHj xjWYgWms ZMjIA DXeWJ MuUMEIEPML UMEMd aavlNl EEEMEME HnEMI MEEEE ntJETE EPEPM DJOVyAoO paPZgQBR UQQMEM JzSNG EqBkcl csoEyO rTMEbVA HYlfnP advOd UfWwn jHORn puLEvy YcbmgO HAHvJ gDwgCa RxHzE MrkMe OlLEJ ZaKRuV QLRxM DyRVz luxOIDzZ kkwhU oCofe RjqeR lOQAS HYlVx DDIPN jeEcmZ yuUENwpE NlwvZWkrRX jdfXIb HEwUPJZ qcExPQBm FKGaZCR dJjNe EMMUREPMMM EEMUQ ONzNw UQMEH MMEUE qIfonJn qeUQMM EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU oyNyqo YwRQH MQMUU TMFrWK BlPpI BHmCmX wUQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd xqgXCNp ULMEH MUUEEMM UEEMMU pdiri PUxiSoi rjJfl MpbCIQ vQibfn nxfgDU NtHBvn IXDFku ANTWa JtWTe qYCFun qLCRihPD locale rDuTy iostream Cpios badbit failbit fgfRR wrvbBFTl qpOlWp MxGpo xBLFs HSPNVN HoCLe guyAZJl FJKux uWkkDA YtvoI XxDku WPRqPiQ pfxejL HdbeAb rAoEtIdB ugNIL VdSXy OcWcx array length unknown error address family supported xswalready connected argument argument domain descriptor message KEconnection already progress Odevice resource directory empty large function supported unreachable illegal sequence inappropriate control operation uYEinvalid error directory Enetwork reset network unreachable buffer space child process message available message space device process supported operation supported jowner protocol error state recoverable files system files wrong protocol FlsAlloc FlsFree aWrfMz SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx jDCQXL FIWxjGu cpPsw vPgMO rokYXl ZICTf mjSCE EQjwC hjxuC yGOfNq QEckv Zjewo cdecl stdcall clrcall jrestrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor xAmTh jsnlnn Class Array Complete Object Locator xpxxxx OFCntZk vsisIN RYNUK QRWMOq sCnLf wokxWl floor ldexp hypot frexp RaYlmc NBjea iUMiI UeQZTJk gmcZT Monday Tuesday January March April December YVDDx HgBOJ oCLjf EnumSystemLocalesEx LCIDToLocaleName jDCEcU mhgjv vjxuCk jwuCEe iCfhI DMUOs fggIED qsOGp ovIzt dfAVfJ MzEYU PgOKr EyXbn ihJKW YhGsb icONL IpTSv arNctBzEL PHvAn TqwCR iIklVQdbaOst xfgLJh ASrPA LtmYE GsjBDe yOueVs vVVDsUj qbxiiJ cJsHHA XyLDh CrsIK zYVFV zjRHg tqRJDg urkyY GQQMt FMlEOf ZjNSsbx Qrkfm kGjWa ZRMlAqL FNInm NAQCO WLhbxcB zGntH bmktm eMuQz eVQnCkn mQjContextStackSize ContextPriority SchedulingProtocol TOVAql ZfUUU xrmWI ACTDC usage usage tuEHx UJTNUZ qMTJw nicehash QRyhW jeEheT Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ wEsiJ QrExF Ytxgr DzxUM JLXCM mNlVez GthIMh TEHiRH QjJYq wziWjMswd BjLSviG jKHAxoeqSl dwdueZ ZhgSp cxzDktY wXXsY ABCDEF lcZgoF gwnZja wDTNC pdsir CJtUSR tJLFVXM HRtMAr gfkfcB nBENgj zcWjDC PMOqb RARbY pdsir DzcJhG guLZqU INOVU PHSPNaN NFJYx xaTHj WLWXD TnTTQl EEQpsw gcurKM QRMOqb aDrBH XerJfl cWjDCE PTMOqK ARbWz YTfKK cWjDCE MpgzE kcWjDCE kcWjDCE ucWjDCE gcuMO cWjDCE cWjDCE sUuMds Enbjmi pKvypNn pmTyW LZNRe ecIAH RCvanU gyAZJgl dBoLhU nYnRy mHPJWX qDaUQ KPiRu iElSd sCLFvRTzWXt wbjMg FRPiTh cgURR vjheW NhqvC SOgSk TaDBi hIkWf ANILx wuXkF rVEpZVdeE IbTZn nVLTXl WjFvUEukpswV PTMOqK pgzEpsw DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso EAuthenticAMD ECyrixInstead NexGenDriven EHwMAE RiseRiseRise Geode Geode OPTERON PHENOM PHENOM FUSION FUSION FUSION FUSION Pentium djeuY VPentium jPentium Pentium Mobile Mobile Celeron Pentium IRWIN pWESTMERE PENTIUM MOBILE MOBILE WOLFDALE MEROM QUADCORE PINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED mlpKRK jDCEc jsgpi QRoTMOAqYe gDEWW pIwsg QRTMO Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF ECANCELED ECONNABORTED CEDESTADDRREQ EEXIST hXswEINVAL jEMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE jENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY ENOTSUP EPERM EPIPE wYESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK EREMOTEIO jpermission denied Jaddress family supported temporary failure permanent failure family supported gresolved protocol unknown service available socket ICconnection already progress operation canceled connection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected iOmessage Znetwork unreachable buffer space available device enough memory machine network space device fDCsocket connected directory directory empty protocol error KFwqu result large system process cross device permitted unknown error links async event jpoll signal unknown error malloc malloc malloc malloc malloc QueueUserWorkItem malloc CreateEvent WaitForSingleObject ReleaseSemaphore CreateEvent jCreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress OmQQjGetProcAddress GetProcAddress swWlxE kernel GetModuleHandleA CreateSymbolicLinkW powrprof tCsocket closesocket Missing after object member Missing object member escape sequence string Column additional characters expected parse unicode surrogate PmTUTBad unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected Syntax error value object array expected Content Length false iWtax GsavHHo PkwIIp kkfOr CujhJq HPdbLbw YqNTw ypaGIa bHssx HmUlguI aUNAOxCOZ PtWKu sWYWns xonDI UJQkA kvXkj cXTYYV JQRUPTMOT rPKxk FOJcPW fafyxijfhkdanfrzz QRTMOqK pdsir pOLWp XerJfgl qanGc jHdXt gyAZJgl jyudOl mHHWX xfgMDU NtHBvnJ JDTrZ hJjeh PJLtT ioZMzj cSpfxeS ugNILf rDdiqw qLoCEP rVEpZ VdSXy tgoGoit YBXoU QRTMOqK pdsir pOLWp XerJfgl qanGc jHdXt gyAZJgl jyudOl mHHWX xfgMDU NtHBvnJ JDTrZ hJjeh PJLtT ioZMzj cSpfxeS ugNILf rDdiqw qLoCEP rVEpZ VdSXy tgoGoit YBXoU QRTMOqK pdsir pOLWp XerJfgl qanGc jHdXt gyAZJgl jyudOl mHHWX xfgMDU NtHBvnJ JDTrZ hJjeh PJLtT ioZMzj cSpfxeS ugNILf rDdiqw qLoCEP rVEpZ VdSXy tgoGoit YBXoU QRTMOqK pdsir pOLWp XerJfgl qanGc jHdXt gyAZJgl jyudOl mHHWX xfgMDU NtHBvnJ JDTrZ hJjeh PJLtT ioZMzj cSpfxeS ugNILf rDdiqw qLoCEP rVEpZ VdSXy tgoGoit YBXoU QRTMOqK pdsir pOLWp XerJfgl qanGc jHdXt gyAZJgl jyudOl mHHWX xfgMDU NtHBvnJ JDTrZ hJjeh PJLtT ioZMzj cSpfxeS ugNILf rDdiqw qLoCEP rVEpZ VdSXy tgoGoit YBXoU QRTMOqK pdsir pOLWp XerJfgl qanGc jHdXt gyAZJgl jyudOl mHHWX xfgMDU NtHBvnJ JDTrZ hJjeh PJLtT ioZMzj cSpfxeS ugNILf rDdiqw qLoCEP rVEpZ VdSXy QROtPTMO pOLWp qFUKxqwIs GmtpaD ZbgEU PoEzOAM JkEik mtcZh Jnbuw uphYPJs eHhwv hBeeio fgzKC mxNudR fBvak PHAVAN IFarF jHdXt rriBro vLBkMo vftrf zwCao BTwPX XerJfgl qanGc udgOl cvQbbU mHHXSlT xfgMDU NtHBvnJ JDTrZ hJjeh PJLtT ioZMzj DhIkbd iGLgNIL VXDoLK qcxiU KsZlKf,1\nprogram cannot RichH rdata reloc ffffff fffff EEEEEE MQURj xCUoyB ddvqA deLBXvzL yOpMO DVZoG qmfBA STXbX szfPJ ioSFz CIKNhz NCNonG HuYuVq iRsjeWwNFFYD qIBOI VNfLk LIJuG ZHgdC JvCFY jDcdK XLsDY obQGJY rfXnRch wkMJc Ubiya mRXch zZiJt BxwgOp bmUvQ pAWHyV uhBbr iisUi vOyXjwR geMww XqxuM dxwTJ BPKWcd irhTFgkG wAjiwk DKlkj LPlQI QYTAch ZJbqgo zFtZa NZLOiJ IECmRD azuztkYH ckYMA AqBtgI ZNnsZ kofkI zfjre dDKwv LPoYS YrDFjEX tVTEO GcavaX Lzsia Ddhod OhUGpDgCb KeKhs TIBSV TDOeF ogyCzZ XWlbD EkAEm afjvQ BikxM mlCspop GYIIA BRGWQC XwbrI invQP OSATtH AZHEh LliAy ERdOV QiiEGa GnuOSH ujHRsm fNrxmlI jWPEO BNOKT IgVTt IDPyJo GbVAS ZVZGi DUjCA fIRtQc ARJQTH bYrlcs htTAmT tssGP KPcxu jsdoj Krply EPTdE EPMPj ELELEHEH uluhu EhUled uluhj EhUlEhMl iJqzM tytGY yJIqe bRkrS KAMQo JHhta BlyLs YvQZwQ vtScsqxAPW heIvj gBoMI IXUwN EXUzB TGnPM JaInT KQpmM ukPgOw Bgziyh pXdDf BgYql IoVtA JUAlD IFEwOss mHnxrcK mEckMIb xdyqS ydFRz DVbJU WCqIc lSVWN dXsLGgM fzsLow lokzMp TXwQT sbShdv VLrmL UxPeC gtByt bbYcGV NjXflg ZGrnn acTsmG Wdxdv IbLpL FeuiT dOLLt KWFBOq UQSVWf YZWVWN kLSvO Mvvnd ohlXF iOHFGd pUjyo SVpYPWy xXQqPpD WwHXt MaFJz brqBeAxQl dCwCo WshbhDR QjwbJg mdjAw gMqRYt ituIb xdLwi VjsBcuT TNQiZ OBWQx UKsOqs ThIuw mRjXH OrZNG VlVoQJ fwpOi cWOdRW ElYfov fXlijq LTnGgU CMrBh iOTrDU kFWNaDIW OaHUr QxxnI pvhrzUo bvErm fjYXiteaO CDLRq OrcVY IqHREl hzzwwy zxauTO abOldfCN BPGzYLm eOvlz qYDwx CKYuk NwSijC pzXxq tsxuuV tXwpf pBURM ZOUlO jJtkjHjB yzdyR WOkFDSu AGucjez lvGFA mdYBT cgBqj GVzNUYLzr jJjYJ Enoaf CHVsE yDdTxW ENVwe uAbkA FrDYqw LFkQl MEBuO vDBLJ aXvDdJ Cehcf rGVXe SqYImy sKONM XQaPqup iJlst RRQTjI UJNIRl FOlKLX owThewecZt oqitF aXBoO wxtdp GrCeZ qCZMxA wVZMgH pNkzw ijMvO uODAwVb sfLmDh MDEnkb gDCwkfW MySUVW FzMqy dIklb rdNLd wpPBHz ySUjh TncLr wdQEc moLpJjB eSxMRSa effWY OzPwW CrNyQutd zZzLo TxiiG WAVsR WNlHV NIKfpQs JjRbLinzd TaphR ztBTA sWVEGe vhGxR INNOs WnLGf cYnCe TSUVWL VWRPN VWRPq XiqAf Sdwjq UzwdC sIGYa SVWhI tCpLH IRCsy vUivt hboSVWh niKsj ZttZwfy NxrhH tWYmp XRilG XlobtsU xyDyaa AWvJn YYXGFt poTLm XGBFofC SUVWT LzDbxS gEpyc ZwhbbFb SaAdc NpIKh YiBZiP ZUvyA fZVfSdv TICol HDgaL UMLko CJFkL eigXGB GLsAY jkXfK GOvzA aIYgOd oOllL xlocYhg xAACI Ixyhc aRpJT ylNHDH RYzgfL jkzkY BRJGFv GzWIlzl hVrBEVG lNoDzR nVqByN JqtmbNt xeUOt iLgYq MaGcX fLqpD iRbqY LksHM gnYASmAbyK NZpgzLQ YAVcb TFbIVQd DdGdZdA ShlUH CnCEGZ azYLV GOhDU eeeyK pGNfC eeSyk XuAHlK ojtWiy VSkSYM lQMDu dgmBa YMZnL PRxnDrg pthAo biodu SChZr jsBdE JJOij tdCxjO gcbMA yWbYa UvpMzuB OZcGvx LklXRu xJLny PmTJCI ATYnT TYNLL gzpZnF VyZsM HRqeCZ vNDGTn ooxZS TscHb MmllSO FbIwE LOVAU xnHxl pyPPXkoj xkcuLa qFKRotH imrQctXD wSbfZU fQxpU ySKJOrfn LBpKBtVP lEvze VPjLh NlEvze EhVnu zapCeSfV DjnHm TszRJwv ENVVRR dioIg ZcghSr xodYS CbrKW TSTAA hxzCR beEZs vDVnF EmolGNPL tbOyDz TpZndhZ DhCORl jkSci YThyIH uRoey swlwf GjQhk GYZkV JAMsVCV vTIPw VNqTa bfFZdG ZipZt DCkXH oZksR DBvMY XGEbp IGXnj KecEQa RSUvA RsvtD koegW ESfAODA uNCROyo TGqXc ODaTu IIBaUt zOVow gGJiO zOVow gGJiO FwulE CLPCv mcUOe nnCMn IPtVK mwuyZSI tvhHI YZWVFS fzsLow uSUVhI xssDY rpPyfJ zejFq glWrn grkjT YXrza IvFrj kmEOOjdY XNIZYk rxeEaLd ScYFi sXPVjt tLsdB rELYD BmOoEASqgH SUVWC VlbMz fAkfJu RmVVtk rbRKj WjkgM OhtVjx KOBRUm ajcrq GlWVak SUVWh iQJwc cBYLz zpjfv SuZnT QSUVW HoSgX GXGTt hOUeG EIqoOG FPAdFTA VDrMw TxTVPHP YUQVu FLNHPQPQvXVS hQymE cEIDk qOCmn vZRjI rgbHu aHeJH coNlz quIDDRd mPaMA aBQFV sNoYyd vWeaQn RXoAV rXwVA XCveJ jGGmlFTTTALod OJKxmz ojvyc gZIoBOX WMDMt NqnqU LMjgS VyGNa lVVAZ pFodJ IzrAI iuiSI rpyjX OnuumD KljFS KSmUA EEEEEE MMEMd EEEuM EEEuM MqEPM YYEMx EuMEEE xYYEe kCaDu IsLJBy raBXd MEEEEE MEEEEMe jCEOE YVMfZ TSVWu EPMMtM lbrPR MEEEEE tZPEP UQQME MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH MEEEEEEEE EEEEE EEEEEEE Eppll EEXXTT EEHHDD hXEdE PPEEEE LEELHH SVWeMe EPMEEEE MTVMMHVE lestJm MEEEEE NILFT lMpqZm wDQXmcj OmuMDA cljzG MEEEEE MEEEEE EEEEE EMMUU UEEMMU SVWeMM MMUUEE MQUREP VzAtbLBQ FMCPB SVWeMEEMM RMEEM lKCcw XVfBi AwXnI TPMViog cyHLDC SuIaeSqLMm eZwwhTX lzMJeg ZvVQp vPyCZS hDHxe tjFtG lcDEI EPTQM SVWeME MUUEEM MMUUEEMMU tAUUE QUREP RMEEEMMU EEMMUUE PtQURj PMppllhh QXREP RMTTPPLL MEEMMUUEEM EMMUU EMMQe PMQUREP MMEMd MEEMMU EMMUUE IHOuJ EMMUU UREPM sIALr wFPBY oWnZx MUUEEMMU UUEEMMUUE EEMMUUEEM UUEEMMUUE EEMMUUE xxttppll XXTTPPLL EEbMQ YDFXU QUREPMMd UUEEMMUUE EEMMUU MEPMk EMQUREPM MEEMMUUEE MMUUEEMMU MEEMMUUEEM PMVMM MMUUEEMMUUEEMMUUE MMUUEEMMUUEEMMUUE oNUDMEPM EtRMQMZEUE UREPMH EUUEEMMU FPsCeW TJKMbZBbBjP EEMME MMUUEEM SVWeQ EuWuS chRzJ QqtmX tSCjdT JAxfq UaUvx bKjXKNTo AGgWG IwlTeb OgTGP nRIrg ejEJl FQhvm hrLnC xbxXp lBOFwu wIfIsHQcO xXQKn kxYpO WiMSp NqEtVS zsuKG FxJWn IcOaqn edInP PjvuINO olXPW qNWDv dAbZDMl Hqjtc MbRWBG FirMdD IHQbq VUbrqM Gkqig WMbke INIcT PNRnm hEOxrc nxxLi ZfDKiNS xHTJW bHXEoB ZClYO KGQUa GKmFPnK MkcZj tcKLR aOfJoV ENxVs iZgeB nBfQd PMzwc rKCNo tftwa rHwHL NqWGdx pLQsDk sHvPY XISYxJ JXFzYIxc IatuW MNBYB rJObBd CrYSpO XLOsp KPOay JoHDttC kRDbCyB zCbwU NBtvVcU tWFVE uZFbCd tDybWu mjsKq ToDGR ZFlprNk aDkMKj pfFwc OoaNo LDPLB wBRXU ppvQH VeOif VDshlLUA pMWIY bQsXBxhyO DivSG aITqg MOxha mifkw tdhFv FyppCvOE HdlquBV rlZHS ZoYOx HZsIJ gfhXpP UchBb gSqDq bWtPD qalJrl lzPgY SbGcGV KGcSU doZWpn DDgff OobLaUM WkBPx Jcwfvb aYeUMNY AYoRnKVM BbMHD ODtByt XbmkZQ IpUIKs TUCxc kHfrtm TWogK FXYBlX SUVWj BABABA nTEBB MJiqyb lOJJs vvyxF PrsTQ AIXPd FoYGd swopx gMjEm PQYYt iiExq uYSWu NwRpk EntelE ineIEE GenuE HkuAKiy PeuEEEEd FEWoT QPEPh QPEPh KzdZr Lctde gyfqz UeUspa PYYug PYYug YYEPV UQQEP ObMDb GrKYLY pTtJZ iAECi OUkcPuiRz sGlQYL nUUQVu VVQYn WFkxnWw XdrZI saLNC EQpGbQ IUQSVu ZlfzD HuYUV EPuuu SVWUu tfVUk tLxXj USVWUj UQPXY RtKUz mRUVh gIKKC VLFDIldw JCrpBS VVMlG mskGh CuiYM csmuP chhGs FpFQl PhoWtO BcsEY aDIlWG tPtLw PQYYPV Ujhxj URPQQh USVWj mdvwD PPPPPy LInEu MeEPj cNJKm koSHYGUO eRxFO jFaJVCr Nhvte FHVfqp FCHlg NPfgYM FYoMu EQPjjM VPuus ZsoIWKK hUQQVu enpOn HIVbmK yPbAUl TmKLr RYhlj DDcCd kkZXbek Klaqh USVWN mckCk FiSFSy OliUE PdMgf UQSVMWj yVpJS UYnkm QuBmn MicFX rvtqj ItOLt vSsCcS bxJJH CVuca IanANW uAxAv jAZjX lIXrSN KjBRZ GbIGV FCUUQQVWjgYjGN PQPPESPW jsXfF JivFt OmASVWF jUoYD UQQVW thlZrTBN bQMUM RjxjOLEd KKChU xjyEc fJFfj ZsYyZPTf vvTLsc Jzfoa RPQQE VQuuH gGnEs eAPMA wGZAM uEPEPWSY QqKKC MomeWB YPVWSu kPVWSu xiYiB VXKXb hKZSk EkRUEDYxxt nuXYu mqoqMi jldAJ PFlWol DdMvK Kimvs QAbedQ IuBZu PPaZeY uZuIk TaKQgXt xUZhTLuV CBNZu bJXBz WFwdU DPBWO audQS hLkjT JUsWJj maxDX uPuSW EEwPr UEHEu BFZBf LFxxw bGGlHr zNNeeCZs TJcEK libELL sUQQS XfEFhP EPEPk AlVpu PPPPPPPPU sKEPS fEEEx AEfEUEEj RQMQu RUpmz GmLAqQ qHYaw uBjAYjZ dfnQN jAZjZ UQQVWO SVWtdAu luJDP MXUQVu wYDKXGG jGsoE wDLdK MDJyYv uNhuD npVeWf RYPznl CEPVSQSWVr EPVSQjWVr SVQMQj MQVVVjWVp gBNeVp VptuUQQ bpOBw CrYjn rYfaZ qePAk KTpVF vwFVMnz ojqVN nyhsIC TnibJ ODsjK MEEEPu PDTpo weCyw GTXXhH Jchzk XbwnYd nqeyYV BAQKR BbxRMIW SOGYu PPPPPt PPPPP VnJxUkE HLMMQP kJcgL oSUtbuc Ysohrm YYtVWh EWWPb uCYYt uVWTb WWWWWS UTRrroY YczTA YtVWj PPPPPPPPU VSYYt ADeVwK EAEfEEj EPQEPEj oxsUVu AYYUr PPPPP VVVVV UQQSVW tyPVj tcPVj uCPVj PPPPP SSSSS PPPPPV vSVjU SSSSS VVVVV WWWWW VvGps KRJGo PPPPP PjUHPh PPPPP bhTYV DTIvV LGjtp UQQfE fEEPj AuQpg nNurr SVSry RgYJT YuINMJ EGWVj znivY DKwBL auOphjq eXrYW MSVWu MQWPVk CiTdl SIJcE vgIiZ MEEEPu bKzwz gicqV PPPPPWSu QQQPu VWuSu PPVWPu XGUWVSM vCVCA HSygu QZvFXbE xykCa xwtBNu ZDxTf WUSME WPWPW WPWPh wYMEIH SSVWh ExHxH uEEEPj wHuhjj YuwHu CYXPdf QvNJgI MsRzV EHJjPB KSFYg AfVUuyPH DZEsrla zVSryfz QPLYYMt FICpnqo vivTKaV RrxiH ItSLrCT hdemNhH UAKTEG FoqBK vXuvK IHWYL nWxJUs PjPWEj PjQWEj PjTWEj PjUWEj PjVWEj PjWWEj PjRWEj PjSWEj EHPjPWEj ELPjQWEj TBWAtc gIKbzp vlltyL jtmYI vNVlZ ypAfH WxxVL WvvVL WHtAtVL wRRVoU sGlUQ EQYlAb IYHau gMJZg vttMw zVzQx ySyqKorgq AuDur uCFuS xuYfPQo SYCZo KqrvN zUTEACn QQQPu MEEEPu EEPVYY jKWUE RiDzr ztwPH tlgZzL tmogZk dFNUz JFzNn shqMG kyTtn NIZYk EPeuEEEEd csmuu UEcsmE PEEhg VWlCv WUSfE UQQSV jwROs VeLkX LEhgAd lYEfb uldAj iabap gDMRudy AKBPA YhuYc WCoMECMt KRmigDi cAdcCMID LgKEW qKfjg gzRlD EcWie kFhRFcf CoTmH yuyea JKYMc lCqXL yPEpo IRVPK WTAclD qUijS hfWJU mbSHqp QBTkD JNNhAz VQBNi XhoXZyp Rnodn WRUPxo SoQGc ZqexSS JtGZEo znZOC StAtW zZIVfZ rWixt UZFAN Efrqb QaLOj HzkGNd yDQIJ OwKsy tOjWEr fYVEs wxVbW ifNPu KbrLX QYFQJ xTGBf TiCpW vBhLg WAXsiM hCPCr ougfJ mkHVN AtYMO sVBiR yRegxL tgkIgt DIzfW raRVl cZsUr LNofArw eTirI WGFxS kPdGqkE MJXhCU ebaTW pZgyY wBGHLAP Etywg TdlsngeCVH yOePU akSTf GPzqB dZZWiJ NfovI yoCwz bptWpT MuIWI qXBvEm gbzUfv LUTIs htHqu MLyvil QQdqU PJuXg ckxVmqv IUiyl eWlNR tuWUo xoEHn XMnLb VdMNeh vDnWc BTpvn TorkKp ofVcNR FItEJ KjHUZs pynTAQ DChHiO CwqKp jxEPD FBkkh XTRwG qybBWhC qTLMG dmsBI kkEoB STkJEU PRyrOFx pPrbI uoDAfbF BAmPWC nBItF veLArZ FxekM oAhBn CqKHDk PpJjDQa nxwAQFN juHLh EHKzc PuNYY SMAuuxNYY SuuONYY eRUSWV USWVI TbUjh uHEPu uEHPo DYPEYPhH cngOk yUQMj bUGUjI nEiQJ UXyjUjh MuUMEIEPML UMEMd muKtmu GlpBNQ bZPYo kcpdM lblrPX EEEMEME HnEMI MEEEE ntJETE EPEPM glShB erOQI DlLcqr UQQMEM KEMmK mkifGV yOrZz VbENq jKWMFc VHcWiu wOxfsvU KZSMu JnvDnD HSMDALA mNTmliYG RXtUJB TsUaG NyOvXdDEO uKpuEC bUyAd CBkwy TPhzIXKSV azGon JPcXi tiRLI XWsPF LBgFF VbSTf Lbjes zwnAWJ GGyJS cNtbKg LcWSe Vkwkb mmRCwf aczWs EMMUREPMMM EEMUQ UQMEH MMEUE EPMlEM UREPM xEMMURM QUREPMMMU EPMQU EPMQU tkElaw jLbAZ VpPqt WWtuG MQMUU XKQEm idQbs vxAPS IndEtOf aDCIz ySUQMjE EPMEp MQURE UEPMZE MQMsE UUEEMQM PMQURM MJMEMsEMd ustZQ djZJw BlRfF ULMEH MUUEEMM UEEMMU liqyN eSZna RnNQP wANOs QYGEDW KBPvl Fihua ioqNa JyFDs FtjLo QLFDVSfhK tzFUxPgZa CXgRwq SdepT BOVSY JUAgi NzeqX swnFT fJaUvr locale guvkr iostream xRQios badbit failbit guuvk qrTbP uBXtt ddvlQF kBtUtW WJyDMs Tgeirk OmVEO qOLdacA FuBjC YyYgRD HsQKV lTKpuq PTIxbdg VsEZj PEjyV CVQOld gLFnJZ LTCDn zgcjlR fAKWY oIagH FPJaP UxoUcG FVUiO array length unknown error address family supported already connected argument argument domain descriptor message connection already progress device resource directory empty large function supported unreachable illegal sequence inappropriate control operation invalid error directory FBeRv network reset network unreachable buffer space child process message available message space device stFmX process supported kWwTY Toperation supported UVlKowner protocol error state recoverable files system files kMmTkY wrong protocol FlsAlloc FlsFree SetThreadpoolTimer InitializeSRWLock CloseThreadpoolWork CompareStringEx GetLocaleInfoEx LCMapStringEx qLuEN KosDp fVpFp dUPRA kTkBa wElbM bTtUg bmrcsm cdecl stdcall clrcall hEKrestrict operator vftable typeof local static guard string default constructor closure scalar deleting destructor vector constructor iterator vector destructor iterator virtual displacement vector destructor iterator vector vbase constructor iterator returning local vftable ypGdH placement delete closure managed vector constructor iterator managed vector destructor iterator vector constructor iterator vector vbase constructor iterator dynamic atexit destructor mJSdYz wIyDCjIP Class Array Complete Object Locator xpxxxx pQMuXbN WWYsEGLwn tFqKz yFTTCX gAzJgjXN liNqy floor ldexp hypot frexp ZfnEqy eqmLu lsinh kkJkMf EzINn tOmfa wLlMm IvWed SlMonday Tuesday January lMarch April meKGx nDecember YztZa nEBsms EnumSystemLocalesEx LCIDToLocaleName lbMXT xlQKw fnliqy kaRfeRfd YzZpf fnYkqyG mDssa uNQNN RwNad jOqhKPhf cisJj AUfiPIEcc AeOLS nUUIK LtmYE DaYGtW tSUXG BtmIp tWkVl UNNwqsq efxLl Cnjrk ArmYGnA SQKfK UTBwFF WYhkD ylfjrA JSsws yqoFK jujcq aoYfIZ pSYeA MYYvE qLaNV nBmpX QkISP wWIBWO zGntH uBYGty plKContextStackSize ContextPriority SchedulingProtocol MaxPolicyElementKey Tsqrt ZfUUU JLqzfN CIJiD usage usage xNpzo JlKSg bFNlh nicehash iUtun SddvQ JlKSg Windows libuv LjjLlZZl sMsbSSb RFeeF SvMMv ppgrKKryy uEuBccB memUL UazGGz DffDT dVVdtNNt nanCi CnYYn dydmm ddosJooJ RRsdQ JsGWS JLXCM mNlVez DLiIY UovhB aotYy IaVDY EWPbae nUdLV eMHta fTebY ABCDEF JwjGt ulcZp IGxRCQ xCvOj tSuZnT SddvQ vDeWB DPGbA nRBsjNXZmy NAwvam lveQi CjRhF WYhIfdea gdazuBb BRQLd dcuWJy bFcqQ fZRdT omdSp LsGYA fiPSD hRVzK QczcWD HnRVlTGpm QdppTI NjTJr lHDaB wINAs lIooyLMgz YVmLs btrzZ zkYtS mvmss tSuZnT LiuTD wXTaO fnQyaqy CXzkWKag ddvFh kcGnoy yMeUiu LtbqV vfrjW Rzsbm nSWEi RnYXG fiPSD oBvpg kGggT QuVcmsqEit mhAwu VIQkzWgn nvVeWGAzH NlSwbC GVuaY lnAjSIBk DglwS GiiZz eWain GLmnE bOdFo akKReJF usZpc DllInstall tXKiq yRHHH yonnU OySlP EhdRyw VFzvFHU rMZdr WGYuUe zqgXx tuUIV REYeE xgamSQ zzKwoU OqlEY goZEg oVYPz XcHDV IMvEXQR rIPyO DKFXF zMdxw RdpZN ODSGB qCgzP YhCIM BLVBO hvanN mysTYCqzH vpEzbsi vaSnO ngNRu YPzhGS cNsDw XLgpN yHYnH JouuK skolE zulpS RoOfm gKpiNK KRHjc ZdDnX rPaOQ MgXNF JXzab nkCPQ QiQtUvR ZJZANA sIKBT tnQqP luqmiKGjX sOKtB iIyoF ojxNUK zGkXrw NvqkK jymOdn RSkSO WvcbE PNtCyb dlGND EDcdn aCMpyW TMhfr BCcAAr KxasIKW wZYHFV hAnvh YiNDM qUmPS EPTLHGUwM zJuHPKGQ EYgvUvL qpWPKn CHvrlZ KuNUFHqr AjwOveK EQSliy YyYwT XpDhQ BjEJY HOORa TNnowh IDOSgqg wrNQwW TJKTmI LyISs NYEJR puNbL khIXk xzhye fGitG YfaSE zClzhl fmNgQlMtW PsCHKves qZmsI BbXLAk OtZgVvz xqrdNH RmFapt uLCsw Gjpxy cFWdk vWJmy uAIbI KnLWHm VAHnwPbEN kOUcU jVgVh qYKqxw hWrMxT LwNMM yEOCD xTfOb NbBHhQU vURHERdc GZZiw qItBC oqZrF qvBqWC LUrdd PqoEN eAZxj oREly vCafyj ptkqou RnKMK vChnB XhrcWC PPPvfa blLHcwK byxJKIv IQxxw VQuAgp WccsV PMOLg UlMms vTUVU TEPIh VGeRLq EuEdJHy WoIfKw CloxtQ RPrSIKbA QLFqN JYpTWs SXMFC wOoBFXr wXlxYXm hEuVe eolFu UzwVHe dmLCV SLmBg pjzoN oGAVk SIbCgVL vlfja byZlA WQaHz NgODC qOuBr xiwHv KzjsOXp QHzpFa hRcnrn xMLwBD MfqiN eCUcYw AMuHr vaHmL QrEkTncArQD aBBbH PLuJB WWZOy eXGWFR KCiGK xTlYu idsVI TYiQcL pCCEW iwKxuQi tKTMRK fuirA rSjifeFz atEur UyxyfPWfASJ GvqsoN KAboK wbWGV CxwsiKQ PdugOH kZAbI YhVrv MbjkE boCLzG mSFCwAJ rrVSGi DMosQ woiOt nmtQs tXyhl GxWcZ eynhPzct svGFD zAKzA umfnB WewafE ZdGSZh kgWwI ptDJQ YdTDcx iimuuu YiCRU IMotZKo Ybgcx PHuqwq rsDjk mXOLvzI UJKPfMDI aloIaT eJZwR DiwkX CJRMmg APNYBc TnvnF IumXh xHJnC elQkP qrPkA opHpM KggjqRA Kvsso AuthenticAMD CyrixInstead NexGenDriven FRiseRiseRise Geode Geode OPTERON PHENOM PHENOM lFUSION FUSION FUSION FUSION Pentium Pentium lKPentium Pentium Mobile Mobile Celeron Pentium lIRWIN WESTMERE PENTIUM QalCORE MOBILE mDFlMOBILE WOLFDALE MEROM QUADCORE SPINEVIEW CEDARVIEW Copyright Plauger licensed Dinkumware RIGHTS RESERVED XoLzZ liqyH tSuZnT Unknown system error Unknown system error EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN AGAIN BADFLAGS CANCELED FAMILY NONAME PROTOCOL SERVICE EALREADY EBADF ECANCELED lECONNABORTED EDESTADDRREQ EEXIST EINVAL lKEMFILE EMSGSIZE ENAMETOOLONG ENETDOWN ENETUNREACH ENFILE KENOMEM ENOPROTOOPT ENOSYS ENOTCONN ENOTEMPTY wlENOTSUP EPERM EPIPE ESHUTDOWN ESPIPE UNKNOWN ENXIO EMLINK IDlEREMOTEIO Kpermission denied address family supported temporary failure DybDX Fpermanent failure family supported resolved protocol unknown service available socket connection already progress operation canceled Fconnection refused connection reset destination address required unreachable interrupted system invalid argument error socket already connected message network unreachable buffer space available device enough memory machine network bhKno space device socket connected directory directory empty protocol error fresult large system process ofScross device permitted unknown error links async event lKpoll signal unknown error mGMbM malloc malloc malloc malloc malloc TQueueUserWorkItem malloc CreateEvent iUDXlx WaitForSingleObject ReleaseSemaphore CCreateEvent KCreateEvent CreateEvent iphlpapi ntdll GetModuleHandleA GetProcAddress xlKGetProcAddress GetProcAddress kernel GetModuleHandleA powrprof socket dlclosesocket Missing after object member SMissing object member HwBad escape sequence string Column additional characters expected parse unicode surrogate unicode escape sequence string digits expected unicode escape sequence string hexadecimal digit expected MTSyntax error value object array expected xContent Length false tgMBxe fQVCT VlqQh McEgW WRAuV MMIpsUyp LnsRY BYXKjHYc JPeMh HSWOJ XXbfn XjGOD qSuue NPMvn KUYgw UZjyd PXTBu bcDcUvBQ ySgNWSiQc loVyi rVBLa UHweni vgzVr CzWdl XyLDjYpX HdixRv HXgZz JlOyoR fafyxijfhkdanfrzz tSuZnT wINOs SddvQ yFkRw ildpuK ZLsGY fiPSD bQxlZ zUxPZa qOXdc HsKVf lTGpm QdwppT DUTIB AlTDO edkYF CDRno fKzYXF WIRUNh UxoUcG kOyBM lcDLm TcCvO tSuZnT wINOs SddvQ yFkRw ildpuK ZLsGY fiPSD bQxlZ zUxPZa qOXdc HsKVf lTGpm QdwppT DUTIB AlTDO edkYF CDRno fKzYXF WIRUNh UxoUcG kOyBM lcDLm TcCvO tSuZnT wINOs SddvQ yFkRw ildpuK ZLsGY fiPSD bQxlZ zUxPZa qOXdc HsKVf lTGpm QdwppT DUTIB AlTDO edkYF CDRno fKzYXF WIRUNh UxoUcG kOyBM lcDLm TcCvO tSuZnT wINOs SddvQ yFkRw ildpuK ZLsGY fiPSD bQxlZ zUxPZa qOXdc HsKVf lTGpm QdwppT DUTIB AlTDO edkYF CDRno fKzYXF WIRUNh UxoUcG kOyBM lcDLm TcCvO tSuZnT wINOs SddvQ yFkRw ildpuK ZLsGY fiPSD bQxlZ zUxPZa qOXdc HsKVf lTGpm QdwppT DUTIB AlTDO edkYF CDRno fKzYXF WIRUNh UxoUcG kOyBM lcDLm TcCvO tSuZnT wINOs SddvQ yFkRw ildpuK ZLsGY fiPSD bQxlZ zUxPZa qOXdc HsKVf lTGpm QdwppT DUTIB AlTDO edkYF CDRno fKzYXF WIRUNh UxoUcG fnkliqy SuZnT RWoSB yFkRw ildpuK Jfsff wUIOW HsPfB WmUxQs ReMhF EOpno HypFr ZDVHw ediCd cVbnbbHz Bmsni CaSur FKtpUIzK WfZRe RnYXGB fiPSD bQxlZ zUxPZa qOXdc HsKVf lTGpm QdwppT DUTIB AlTDO lcCZv YWIMR wDHmaoH pmWFQ kWDHo ZAwro,1\n"
  },
  {
    "path": "data/peutils/UserDB.TXT",
    "content": ";  By BoB / Team PEiD ..\n;  1832 Signatures in list ..\n\n[!EP (ExE Pack) V1.0 -> Elite Coding Group]\nsignature = 60 68 ?? ?? ?? ?? B8 ?? ?? ?? ?? FF 10\nep_only = true\n\n[!EPack 1.4 lite (final) - by 6aHguT]\nsignature = 33 C0 8B C0 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? E8\nep_only = true\n\n[$pirit v1.5]\nsignature = ?? ?? ?? 5B 24 55 50 44 FB 32 2E 31 5D\nep_only = true\n\n[$PIRIT v1.5]\nsignature = B4 4D CD 21 E8 ?? ?? FD E8 ?? ?? B4 51 CD 21\nep_only = true\n\n[* PseudoSigner 0.1 --> Anorganix]\nsignature = 90 90 90 90 68 ?? ?? ?? ?? 67 64 FF 36 00 00 67 64 89 26 00 00 F1 90 90 90 90\nep_only = true\n\n[* PseudoSigner 0.1 [32Lite 0.03] --> Anorganix]\nsignature = 60 06 FC 1E 07 BE 90 90 90 90 6A 04 68 90 10 90 90 68 ?? ?? ?? ?? E9\nep_only = true\n\n[* PseudoSigner 0.1 [ACProtect 1.09] --> Anorganix]\nsignature = 60 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 EB 02 00 00 90 90 90 04 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90\nep_only = true\n\n[* PseudoSigner 0.1 [Armadillo 3.00] --> Anorganix]\nsignature = 60 E8 2A 00 00 00 5D 50 51 EB 0F B9 EB 0F B8 EB 07 B9 EB 0F 90 EB 08 FD EB 0B F2 EB F5 EB F6 F2 EB 08 FD EB E9 F3 EB E4 FC E9 59 58 50 51 EB 85 E9\nep_only = true\n\n[* PseudoSigner 0.1 [ASPack 2.xx Heuristic] --> Anorganix]\nsignature = 90 90 90 90 68 ?? ?? ?? ?? 67 64 FF 36 00 00 67 64 89 26 00 00 F1 90 90 90 90 A8 03 00 00 61 75 08 B8 01 00 00 00 C2 0C 00 68 00 00 00 00 C3 8B 85 26 04 00 00 8D 8D 3B 04 00 00 51 50 FF 95\nep_only = true\n\n[* PseudoSigner 0.1 [ASProtect] --> Anorganix]\nsignature = 60 90 90 90 90 90 90 5D 90 90 90 90 90 90 90 90 90 90 90 03 DD E9\nep_only = true\n\n[* PseudoSigner 0.1 [Borland Delphi 3.0] --> Anorganix]\nsignature = 55 8B EC 83 C4 90 90 90 90 68 ?? ?? ?? ?? 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90\nep_only = true\n\n[* PseudoSigner 0.1 [Borland Delphi 5.0 KOL/MCK] --> Anorganix]\nsignature = 55 8B EC 90 90 90 90 68 ?? ?? ?? ?? 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 00 FF 90 90 90 90 90 90 90 90 00 01 90 90 90 90 90 90 90 90 90 EB 04 00 00 00 01 90 90 90 90 90 90 90 00 01 90 90 90 90 90 90 90 90 90\nep_only = true\n\n[* PseudoSigner 0.1 [Borland Delphi 6.0 - 7.0] --> Anorganix]\nsignature = 90 90 90 90 68 ?? ?? ?? ?? 67 64 FF 36 00 00 67 64 89 26 00 00 F1 90 90 90 90 53 8B D8 33 C0 A3 09 09 09 00 6A 00 E8 09 09 00 FF A3 09 09 09 00 A1 09 09 09 00 A3 09 09 09 00 33 C0 A3 09 09 09 00 33 C0 A3 09 09 09 00 E8\nep_only = true\n\n[* PseudoSigner 0.1 [CD-Cops II] --> Anorganix]\nsignature = 53 60 BD 90 90 90 90 8D 45 90 8D 5D 90 E8 00 00 00 00 8D 01 E9\nep_only = true\n\n[* PseudoSigner 0.1 [Code-Lock] --> Anorganix]\nsignature = 43 4F 44 45 2D 4C 4F 43 4B 2E 4F 43 58 00 01 28 01 50 4B 47 05 4C 3F B4 04 4D 4C 47 4B E9\nep_only = true\n\n[* PseudoSigner 0.1 [CodeSafe 2.0] --> Anorganix]\nsignature = 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 EB 0B 83 EC 10 53 56 57 E8 C4 01 00 85 E9\nep_only = true\n\n[* PseudoSigner 0.1 [Crunch/PE Heuristic] --> Anorganix]\nsignature = 55 E8 0E 00 00 00 5D 83 ED 06 8B C5 55 60 89 AD ?? ?? ?? ?? 2B 85 00 00 00 00 E9\nep_only = true\n\n[* PseudoSigner 0.1 [DEF 1.0] --> Anorganix]\nsignature = BE 00 01 40 00 6A 05 59 80 7E 07 00 74 11 8B 46 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 83 C1 01 E9\nep_only = true\n\n[* PseudoSigner 0.1 [DxPack 1.0] --> Anorganix]\nsignature = 60 E8 00 00 00 00 5D 8B FD 81 ED 90 90 90 90 2B B9 00 00 00 00 81 EF 90 90 90 90 83 BD 90 90 90 90 90 0F 84 00 00 00 00 E9\nep_only = true\n\n[* PseudoSigner 0.1 [ExeSmasher] --> Anorganix]\nsignature = 9C FE 03 90 60 BE 90 90 41 90 8D BE 90 10 FF FF 57 83 CD FF EB 10 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 FE 0B E9\nep_only = true\n\n[* PseudoSigner 0.1 [FSG 1.0] --> Anorganix]\nsignature = 90 90 90 90 68 ?? ?? ?? ?? 67 64 FF 36 00 00 67 64 89 26 00 00 F1 90 90 90 90 BB D0 01 40 00 BF 00 10 40 00 BE 90 90 90 90 53 E8 0A 00 00 00 02 D2 75 05 8A 16 46 12 D2 C3 FC B2 80 A4 6A 02 5B E9\nep_only = true\n\n[* PseudoSigner 0.1 [FSG 1.31] --> Anorganix]\nsignature = BE 90 90 90 00 BF 90 90 90 00 BB 90 90 90 00 53 BB 90 90 90 00 B2 80 E9\nep_only = true\n\n[* PseudoSigner 0.1 [Gleam 1.00] --> Anorganix]\nsignature = 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 EB 0B 83 EC 0C 53 56 57 E8 24 02 00 FF E9\nep_only = true\n\n[* PseudoSigner 0.1 [JDPack 1.x / JDProtect 0.9] --> Anorganix]\nsignature = 60 E8 22 00 00 00 5D 8B D5 81 ED 90 90 90 90 2B 95 90 90 90 90 81 EA 06 90 90 90 89 95 90 90 90 90 83 BD 45 00 01 00 01 E9\nep_only = true\n\n[* PseudoSigner 0.1 [LCC Win32 1.x] --> Anorganix]\nsignature = 64 A1 01 00 00 00 55 89 E5 6A FF 68 ?? ?? ?? ?? 68 9A 10 40 90 50 E9\nep_only = true\n\n[* PseudoSigner 0.1 [LCC Win32 DLL] --> Anorganix]\nsignature = 55 89 E5 53 56 57 83 7D 0C 01 75 05 E8 17 90 90 90 FF 75 10 FF 75 0C FF 75 08 A1 ?? ?? ?? ?? E9\nep_only = true\n\n[* PseudoSigner 0.1 [Lockless Intro Pack] --> Anorganix]\nsignature = 2C E8 EB 1A 90 90 5D 8B C5 81 ED F6 73 90 90 2B 85 90 90 90 90 83 E8 06 89 85 FF 01 EC AD E9\nep_only = true\n\n[* PseudoSigner 0.1 [LTC 1.3] --> Anorganix]\nsignature = 54 E8 00 00 00 00 5D 8B C5 81 ED F6 73 40 00 2B 85 87 75 40 00 83 E8 06 E9\nep_only = true\n\n[* PseudoSigner 0.1 [Macromedia Flash Projector 6.0] --> Anorganix]\nsignature = 90 90 90 90 68 ?? ?? ?? ?? 67 64 FF 36 00 00 67 64 89 26 00 00 F1 90 90 90 90 83 EC 44 56 FF 15 24 81 49 00 8B F0 8A 06 3C 22 75 1C 8A 46 01 46 3C 22 74 0C 84 C0 74 08 8A 46 01 46 3C 22 75 F4 80 3E 22 75 0F 46 EB 0C E9\nep_only = true\n\n[* PseudoSigner 0.1 [MEW 11 SE 1.0] --> Anorganix]\nsignature = E9 09 00 00 00 00 00 00 02 00 00 00 0C 90 E9\nep_only = true\n\n[* PseudoSigner 0.1 [Microsoft Visual Basic 5.0 - 6.0] --> Anorganix]\nsignature = 68 ?? ?? ?? ?? E8 0A 00 00 00 00 00 00 00 00 00 30 00 00 00 E9\nep_only = true\n\n[* PseudoSigner 0.1 [Microsoft Visual Basic 6.0 DLL] --> Anorganix]\nsignature = 90 90 90 90 68 ?? ?? ?? ?? 67 64 FF 36 00 00 67 64 89 26 00 00 F1 90 90 90 90 5A 68 90 90 90 90 68 90 90 90 90 52 E9 90 90 FF\nep_only = true\n\n[* PseudoSigner 0.1 [Microsoft Visual C++ 5.0+ (MFC)] --> Anorganix]\nsignature = 55 8B EC 6A FF 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 E9\nep_only = true\n\n[* PseudoSigner 0.1 [Microsoft Visual C++ 6.0 (Debug Version)] --> Anorganix]\nsignature = 55 8B EC 51 90 90 90 01 01 90 90 90 90 68 ?? ?? ?? ?? 90 90 90 90 90 90 90 90 90 90 90 90 00 01 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 00 01 90 90 90 90 90\nep_only = true\n\n[* PseudoSigner 0.1 [Microsoft Visual C++ 6.20] --> Anorganix]\nsignature = 90 90 90 90 68 ?? ?? ?? ?? 67 64 FF 36 00 00 67 64 89 26 00 00 F1 90 90 90 90 55 8B EC 83 EC 50 53 56 57 BE 90 90 90 90 8D 7D F4 A5 A5 66 A5 8B\nep_only = true\n\n[* PseudoSigner 0.1 [Microsoft Visual C++ 7.0 DLL] --> Anorganix]\nsignature = 55 8D 6C 01 00 81 EC 00 00 00 00 8B 45 90 83 F8 01 56 0F 84 00 00 00 00 85 C0 0F 84 ?? ?? ?? ?? E9\nep_only = true\n\n[* PseudoSigner 0.1 [MinGW GCC 2.x] --> Anorganix]\nsignature = 55 89 E5 E8 02 00 00 00 C9 C3 90 90 45 58 45 E9\nep_only = true\n\n[* PseudoSigner 0.1 [Morphine 1.2] --> Anorganix]\nsignature = 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 EB 06 00 90 90 90 90 90 90 90 90 EB 08 E8 90 00 00 00 66 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 51 66 90 90 90 59 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90\nep_only = true\n\n[* PseudoSigner 0.1 [Neolite 2.0] --> Anorganix]\nsignature = E9 A6 00 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90\nep_only = true\n\n[* PseudoSigner 0.1 [NorthStar PE Shrinker 1.3] --> Anorganix]\nsignature = 9C 60 E8 00 00 00 00 5D B8 B3 85 40 00 2D AC 85 40 00 2B E8 8D B5 00 00 00 00 E9\nep_only = true\n\n[* PseudoSigner 0.1 [Pack Master 1.0 (PEX Clone)] --> Anorganix]\nsignature = 60 E8 01 01 00 00 E8 83 C4 04 E8 01 90 90 90 E9 5D 81 ED D3 22 40 90 E8 04 02 90 90 E8 EB 08 EB 02 CD 20 FF 24 24 9A 66 BE 47 46 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90\nep_only = true\n\n[* PseudoSigner 0.1 [PE Intro 1.0] --> Anorganix]\nsignature = 8B 04 24 9C 60 E8 14 00 00 00 5D 81 ED 0A 45 40 90 80 BD 67 44 40 90 90 0F 85 48 FF ED 0A E9\nep_only = true\n\n[* PseudoSigner 0.1 [PE Pack 0.99] --> Anorganix]\nsignature = 60 E8 11 00 00 00 5D 83 ED 06 80 BD E0 04 90 90 01 0F 84 F2 FF CC 0A E9\nep_only = true\n\n[* PseudoSigner 0.1 [PE Protect 0.9] --> Anorganix]\nsignature = 52 51 55 57 64 67 A1 30 00 85 C0 78 0D E8 07 00 00 00 58 83 C0 07 C6 90 C3 E9\nep_only = true\n\n[* PseudoSigner 0.1 [PECompact 1.4+] --> Anorganix]\nsignature = 90 90 90 90 68 ?? ?? ?? ?? 67 64 FF 36 00 00 67 64 89 26 00 00 F1 90 90 90 90 EB 06 68 90 90 90 90 C3 9C 60 E8 02 90 90 90 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81\nep_only = true\n\n[* PseudoSigner 0.1 [PENightMare 2 Beta] --> Anorganix]\nsignature = 60 E9 10 00 00 00 EF 40 03 A7 07 8F 07 1C 37 5D 43 A7 04 B9 2C 3A E9\nep_only = true\n\n[* PseudoSigner 0.1 [PENinja 1.31] --> Anorganix]\nsignature = 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 E9\nep_only = true\n\n[* PseudoSigner 0.1 [PESHiELD 0.25] --> Anorganix]\nsignature = 60 E8 2B 00 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 CC CC E9\nep_only = true\n\n[* PseudoSigner 0.1 [PEtite 2.x (level 0)] --> Anorganix]\nsignature = 90 90 90 90 68 ?? ?? ?? ?? 67 64 FF 36 00 00 67 64 89 26 00 00 F1 90 90 90 90 B8 00 90 90 00 6A 00 68 90 90 90 00 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 66 9C 60 50 8B D8 03 00 68\nep_only = true\n\n[* PseudoSigner 0.1 [PEX 0.99] --> Anorganix]\nsignature = 60 E8 01 00 00 00 55 83 C4 04 E8 01 00 00 00 90 5D 81 FF FF FF 00 01 E9\nep_only = true\n\n[* PseudoSigner 0.1 [REALBasic] --> Anorganix]\nsignature = 55 89 E5 90 90 90 90 90 90 90 90 90 90 50 90 90 90 90 90 00 01 E9\nep_only = true\n\n[* PseudoSigner 0.1 [Ste@lth PE 1.01] --> Anorganix]\nsignature = 0B C0 0B C0 0B C0 0B C0 0B C0 0B C0 0B C0 0B C0 BA ?? ?? ?? ?? FF E2 BA E0 10 40 00 B8 68 24 1A 40 89 02 83 C2 03 B8 40 00 E8 EE 89 02 83 C2 FD FF E2 2D 3D 5B 20 48 69 64 65 50 45 20 5D 3D 2D 90 00 00 00\nep_only = true\n\n[* PseudoSigner 0.1 [UPX 0.6] --> Anorganix]\nsignature = 60 E8 00 00 00 00 58 83 E8 3D 50 8D B8 00 00 00 FF 57 8D B0 E8 00 00 00 E9\nep_only = true\n\n[* PseudoSigner 0.1 [VBOX 4.3 MTE] --> Anorganix]\nsignature = 0B C0 0B C0 0B C0 0B C0 0B C0 0B C0 0B C0 0B C0 E9\nep_only = true\n\n[* PseudoSigner 0.1 [Video-Lan-Client] --> Anorganix]\nsignature = 55 89 E5 83 EC 08 90 90 90 90 90 90 90 90 90 90 90 90 90 90 01 FF FF 01 01 01 00 01 90 90 90 90 90 90 90 90 90 90 90 90 90 90 00 01 00 01 00 01 90 90 00 01 E9\nep_only = true\n\n[* PseudoSigner 0.1 [VOB ProtectCD 5] --> Anorganix]\nsignature = 36 3E 26 8A C0 60 E8 00 00 00 00 E9\nep_only = true\n\n[* PseudoSigner 0.1 [WATCOM C/C++ EXE] --> Anorganix]\nsignature = E9 00 00 00 00 90 90 90 90 57 41 E9\nep_only = true\n\n[* PseudoSigner 0.1 [XCR 0.11] --> Anorganix]\nsignature = 60 8B F0 33 DB 83 C3 01 83 C0 01 E9\nep_only = true\n\n[* PseudoSigner 0.1 [Yoda's Protector 1.02] --> Anorganix]\nsignature = E8 03 00 00 00 EB 01 90 90 E9\nep_only = true\n\n[* PseudoSigner 0.2 [.BJFNT 1.1b] --> Anorganix]\nsignature = EB 01 EA 9C EB 01 EA 53 EB 01 EA 51 EB 01 EA 52 EB 01 EA 56 90\nep_only = true\n\n[* PseudoSigner 0.2 [.BJFNT 1.2] --> Anorganix]\nsignature = EB 02 69 B1 83 EC 04 EB 03 CD 20 EB EB 01 EB 9C EB 01 EB EB 00\nep_only = true\n\n[* PseudoSigner 0.2 [32Lite 0.03] --> Anorganix]\nsignature = 60 06 FC 1E 07 BE 90 90 90 90 6A 04 68 90 10 90 90 68\nep_only = true\n\n[* PseudoSigner 0.2 [Armadillo 3.00] --> Anorganix]\nsignature = 60 E8 2A 00 00 00 5D 50 51 EB 0F B9 EB 0F B8 EB 07 B9 EB 0F 90 EB 08 FD EB 0B F2 EB F5 EB F6 F2 EB 08 FD EB E9 F3 EB E4 FC E9 59 58 50 51 EB 85\nep_only = true\n\n[* PseudoSigner 0.2 [ASProtect] --> Anorganix]\nsignature = 60 90 90 90 90 90 90 5D 90 90 90 90 90 90 90 90 90 90 90 03 DD\nep_only = true\n\n[* PseudoSigner 0.2 [Borland C++ 1999] --> Anorganix]\nsignature = EB 10 66 62 3A 43 2B 2B 48 4F 4F 4B 90 E9 90 90 90 90 A1 ?? ?? ?? ?? A3\nep_only = true\n\n[* PseudoSigner 0.2 [Borland C++ DLL (Method 2)] --> Anorganix]\nsignature = EB 10 66 62 3A 43 2B 2B 48 4F 4F 4B 90 E9 90 90 90 90\nep_only = true\n\n[* PseudoSigner 0.2 [Borland Delphi DLL] --> Anorganix]\nsignature = 55 8B EC 83 C4 B4 B8 90 90 90 90 E8 00 00 00 00 E8 00 00 00 00 8D 40 00\nep_only = true\n\n[* PseudoSigner 0.2 [Borland Delphi Setup Module] --> Anorganix]\nsignature = 55 8B EC 83 C4 90 53 56 57 33 C0 89 45 F0 89 45 D4 89 45 D0 E8 00 00 00 00\nep_only = true\n\n[* PseudoSigner 0.2 [CD-Cops II] --> Anorganix]\nsignature = 53 60 BD 90 90 90 90 8D 45 90 8D 5D 90 E8 00 00 00 00 8D 01\nep_only = true\n\n[* PseudoSigner 0.2 [Code-Lock] --> Anorganix]\nsignature = 43 4F 44 45 2D 4C 4F 43 4B 2E 4F 43 58 00 01 28 01 50 4B 47 05 4C 3F B4 04 4D 4C 47 4B\nep_only = true\n\n[* PseudoSigner 0.2 [CodeSafe 2.0] --> Anorganix]\nsignature = 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 EB 0B 83 EC 10 53 56 57 E8 C4 01 00 85\nep_only = true\n\n[* PseudoSigner 0.2 [Crunch/PE Heuristic] --> Anorganix]\nsignature = 55 E8 0E 00 00 00 5D 83 ED 06 8B C5 55 60 89 AD ?? ?? ?? ?? 2B 85 00 00 00 00\nep_only = true\n\n[* PseudoSigner 0.2 [DEF 1.0] --> Anorganix]\nsignature = BE 00 01 40 00 6A 05 59 80 7E 07 00 74 11 8B 46 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 83 C1 01\nep_only = true\n\n[* PseudoSigner 0.2 [DxPack 1.0] --> Anorganix]\nsignature = 60 E8 00 00 00 00 5D 8B FD 81 ED 90 90 90 90 2B B9 00 00 00 00 81 EF 90 90 90 90 83 BD 90 90 90 90 90 0F 84 00 00 00 00\nep_only = true\n\n[* PseudoSigner 0.2 [ExeSmasher] --> Anorganix]\nsignature = 9C FE 03 90 60 BE 90 90 41 90 8D BE 90 10 FF FF 57 83 CD FF EB 10 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 FE 0B\nep_only = true\n\n[* PseudoSigner 0.2 [FSG 1.0] --> Anorganix]\nsignature = 90 90 90 90 68 ?? ?? ?? ?? 67 64 FF 36 00 00 67 64 89 26 00 00 F1 90 90 90 90 BB D0 01 40 00 BF 00 10 40 00 BE 90 90 90 90 53 E8 0A 00 00 00 02 D2 75 05 8A 16 46 12 D2 C3 FC B2 80 A4 6A 02 5B\nep_only = true\n\n[* PseudoSigner 0.2 [FSG 1.31] --> Anorganix]\nsignature = BE 90 90 90 00 BF 90 90 90 00 BB 90 90 90 00 53 BB 90 90 90 00 B2 80\nep_only = true\n\n[* PseudoSigner 0.2 [Gleam 1.00] --> Anorganix]\nsignature = 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 EB 0B 83 EC 0C 53 56 57 E8 24 02 00 FF\nep_only = true\n\n[* PseudoSigner 0.2 [JDPack 1.x / JDProtect 0.9] --> Anorganix]\nsignature = 60 E8 22 00 00 00 5D 8B D5 81 ED 90 90 90 90 2B 95 90 90 90 90 81 EA 06 90 90 90 89 95 90 90 90 90 83 BD 45 00 01 00 01\nep_only = true\n\n[* PseudoSigner 0.2 [LCC Win32 1.x] --> Anorganix]\nsignature = 64 A1 01 00 00 00 55 89 E5 6A FF 68 ?? ?? ?? ?? 68 9A 10 40 90 50\nep_only = true\n\n[* PseudoSigner 0.2 [LCC Win32 DLL] --> Anorganix]\nsignature = 55 89 E5 53 56 57 83 7D 0C 01 75 05 E8 17 90 90 90 FF 75 10 FF 75 0C FF 75 08 A1\nep_only = true\n\n[* PseudoSigner 0.2 [Lockless Intro Pack] --> Anorganix]\nsignature = 2C E8 EB 1A 90 90 5D 8B C5 81 ED F6 73 90 90 2B 85 90 90 90 90 83 E8 06 89 85 FF 01 EC AD\nep_only = true\n\n[* PseudoSigner 0.2 [Macromedia Flash Projector 6.0] --> Anorganix]\nsignature = 90 90 90 90 68 ?? ?? ?? ?? 67 64 FF 36 00 00 67 64 89 26 00 00 F1 90 90 90 90 83 EC 44 56 FF 15 24 81 49 00 8B F0 8A 06 3C 22 75 1C 8A 46 01 46 3C 22 74 0C 84 C0 74 08 8A 46 01 46 3C 22 75 F4 80 3E 22 75 0F 46 EB 0C\nep_only = true\n\n[* PseudoSigner 0.2 [MEW 11 SE 1.0] --> Anorganix]\nsignature = E9 09 00 00 00 00 00 00 02 00 00 00 0C 90\nep_only = true\n\n[* PseudoSigner 0.2 [Microsoft Visual Basic 5.0 - 6.0] --> Anorganix]\nsignature = 68 ?? ?? ?? ?? E8 0A 00 00 00 00 00 00 00 00 00 30 00 00 00\nep_only = true\n\n[* PseudoSigner 0.2 [Microsoft Visual C++ 7.0 DLL] --> Anorganix]\nsignature = 55 8D 6C 01 00 81 EC 00 00 00 00 8B 45 90 83 F8 01 56 0F 84 00 00 00 00 85 C0 0F 84\nep_only = true\n\n[* PseudoSigner 0.2 [MinGW GCC 2.x] --> Anorganix]\nsignature = 55 89 E5 E8 02 00 00 00 C9 C3 90 90 45 58 45\nep_only = true\n\n[* PseudoSigner 0.2 [NorthStar PE Shrinker 1.3] --> Anorganix]\nsignature = 9C 60 E8 00 00 00 00 5D B8 B3 85 40 00 2D AC 85 40 00 2B E8 8D B5 00 00 00 00\nep_only = true\n\n[* PseudoSigner 0.2 [PE Intro 1.0] --> Anorganix]\nsignature = 8B 04 24 9C 60 E8 14 00 00 00 5D 81 ED 0A 45 40 90 80 BD 67 44 40 90 90 0F 85 48 FF ED 0A\nep_only = true\n\n[* PseudoSigner 0.2 [PE Pack 0.99] --> Anorganix]\nsignature = 60 E8 11 00 00 00 5D 83 ED 06 80 BD E0 04 90 90 01 0F 84 F2 FF CC 0A\nep_only = true\n\n[* PseudoSigner 0.2 [PE Protect 0.9] --> Anorganix]\nsignature = 52 51 55 57 64 67 A1 30 00 85 C0 78 0D E8 07 00 00 00 58 83 C0 07 C6 90 C3\nep_only = true\n\n[* PseudoSigner 0.2 [PENightMare 2 Beta] --> Anorganix]\nsignature = 60 E9 10 00 00 00 EF 40 03 A7 07 8F 07 1C 37 5D 43 A7 04 B9 2C 3A\nep_only = true\n\n[* PseudoSigner 0.2 [PESHiELD 0.25] --> Anorganix]\nsignature = 60 E8 2B 00 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 CC CC\nep_only = true\n\n[* PseudoSigner 0.2 [PEX 0.99] --> Anorganix]\nsignature = 60 E8 01 00 00 00 55 83 C4 04 E8 01 00 00 00 90 5D 81 FF FF FF 00 01\nep_only = true\n\n[* PseudoSigner 0.2 [REALBasic] --> Anorganix]\nsignature = 55 89 E5 90 90 90 90 90 90 90 90 90 90 50 90 90 90 90 90 00 01\nep_only = true\n\n[* PseudoSigner 0.2 [UPX 0.6] --> Anorganix]\nsignature = 60 E8 00 00 00 00 58 83 E8 3D 50 8D B8 00 00 00 FF 57 8D B0 E8 00 00 00\nep_only = true\n\n[* PseudoSigner 0.2 [VBOX 4.3 MTE] --> Anorganix]\nsignature = 0B C0 0B C0 0B C0 0B C0 0B C0 0B C0 0B C0 0B C0\nep_only = true\n\n[* PseudoSigner 0.2 [Video-Lan-Client] --> Anorganix]\nsignature = 55 89 E5 83 EC 08 90 90 90 90 90 90 90 90 90 90 90 90 90 90 01 FF FF 01 01 01 00 01 90 90 90 90 90 90 90 90 90 90 90 90 90 90 00 01 00 01 00 01 90 90 00 01\nep_only = true\n\n[* PseudoSigner 0.2 [VOB ProtectCD 5] --> Anorganix]\nsignature = 36 3E 26 8A C0 60 E8 00 00 00 00\nep_only = true\n\n[* PseudoSigner 0.2 [Watcom C/C++ DLL] --> Anorganix]\nsignature = 53 56 57 55 8B 74 24 14 8B 7C 24 18 8B 6C 24 1C 83 FF 03 0F 87 01 00 00 00 F1\nep_only = true\n\n[* PseudoSigner 0.2 [WATCOM C/C++ EXE] --> Anorganix]\nsignature = E9 00 00 00 00 90 90 90 90 57 41\nep_only = true\n\n[* PseudoSigner 0.2 [XCR 0.11] --> Anorganix]\nsignature = 60 8B F0 33 DB 83 C3 01 83 C0 01\nep_only = true\n\n[* PseudoSigner 0.2 [Yoda's Protector 1.02] --> Anorganix]\nsignature = E8 03 00 00 00 EB 01 90 90\nep_only = true\n\n[* PseudoSigner 0.2 [ZCode 1.01] --> Anorganix]\nsignature = E9 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E9 FB FF FF FF C3 68 00 00 00 00 64 FF 35 00 00 00 00\nep_only = true\n\n[* [MSLRH] v0.1 -> emadicius]\nsignature = 60 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 E8 0A 00 00 00 E8 EB 0C 00 00 E8\nep_only = false\n\n[* [MSLRH] V0.31 -> emadicius]\nsignature = 60 D1 CB 0F CA C1 CA E0 D1 CA 0F C8 EB 01 F1\nep_only = true\n\n[* [MSLRH] v0.31a]\nsignature = 60 D1 CB 0F CA C1 CA E0 D1 CA 0F C8 EB 01 F1 0F C0 C9 D2 D1 0F C1 C0 D3 DA C0 D6 A8 EB 01 DE D0 EC 0F C1 CB D0 CF 0F C1 D1 D2 DB 0F C8 EB 01 BC C0 E9 C6 C1 D0 91 0F CB EB 01 73 0F CA 87 D9 87 D2 D0 CF 87 D9 0F C8 EB 01 C1 EB 01 A2 86 CA D0 E1 0F C0 CB 0F\nep_only = false\n\n[* [MSLRH] v0.32a -> emadicius]\nsignature = E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 2B 04 24 74 04 75 02 EB 02 EB 01 81 83 C4 04 E8 0A 00 00 00 E8\nep_only = false\n\n[* [MSLRH] v0.32a -> emadicius]\nsignature = EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03\nep_only = false\n\n[*** Protector v1.1.11 (DDeM->PE Engine v0.9, DDeM->CI v0.9.2)]\nsignature = 53 51 56 E8 00 00 00 00 5B 81 EB 08 10 00 00 8D B3 34 10 00 00 B9 F3 03 00 00 BA 63 17 2A EE 31 16 83 C6 04\nep_only = true\n\n[.BJFnt v1.1b]\nsignature = EB 01 EA 9C EB 01 EA 53 EB 01 EA 51 EB 01 EA 52 EB 01 EA 56\nep_only = true\n\n[.BJFnt v1.2 RC]\nsignature = EB 02 69 B1 83 EC 04 EB 03 CD 20 EB EB 01 EB 9C EB 01 EB EB\nep_only = true\n\n[.BJFnt v1.3]\nsignature = EB ?? 3A ?? ?? 1E EB ?? CD 20 9C EB ?? CD 20 EB ?? CD 20 60 EB\nep_only = true\n\n[.NET DLL -> Microsoft]\nsignature = 00 00 00 00 00 00 00 00 5F 43 6F 72 44 6C 6C 4D 61 69 6E 00 6D 73 63 6F 72 65 65 2E 64 6C 6C 00 00 ?? 00 00 FF 25\nep_only = false\n\n[.NET executable -> Microsoft]\nsignature = 00 00 00 00 00 00 00 00 5F 43 6F 72 45 78 65 4D 61 69 6E 00 6D 73 63 6F 72 65 65 2E 64 6C 6C 00 00 00 00 00 FF 25\nep_only = false\n\n[32Lite v0.03a]\nsignature = 60 06 FC 1E 07 BE ?? ?? ?? ?? 6A 04 68 ?? 10 ?? ?? 68\nep_only = true\n\n[624 (Six to Four) v1.0]\nsignature = 50 55 4C 50 83 ?? ?? FC BF ?? ?? BE ?? ?? B5 ?? 57 F3 A5 C3 33 ED\nep_only = true\n\n[Aase Crypter - by santasdad]\nsignature = 55 8B EC 83 C4 F0 53 B8 A0 3E 00 10 E8 93 DE FF FF 68 F8 42 00 10 E8 79 DF FF FF 68 00 43 00 10 68 0C 43 00 10 E8 42 DF FF FF 50 E8 44 DF FF FF A3 98 66 00 10 83 3D 98 66 00 10 00 75 13 6A 00 68 18 43 00 10 68 1C 43 00 10 6A 00 E8 4B DF FF FF 68 2C 43 00 10 68 0C 43 ?? ?? ?? ?? DF FF FF 50 E8 0E DF FF FF A3 94 66 00 10 83 3D 94 66 00 10 00 75 13 6A 00 68 18 43 00 10 68 38 43 00 10 6A 00 E8 15 DF FF FF 68 48 43 00 10 68 0C 43 00 10 E8 D6 DE FF FF 50 E8 D8 DE FF FF A3 A0 66 00 10 83 3D A0 66 00 10 00 75 13 6A 00 68 18 43 00 10 68 58 43 00 10 6A 00 E8 DF DE FF FF 68 6C 43 00 10 68 0C 43 00 10 E8 A0 DE FF FF 50 E8 A2 DE FF FF\nep_only = false\n\n[ABC Cryptor 1.0 - by ZloY]\nsignature = 68 FF 64 24 F0 68 58 58 58 58 90 FF D4 50 8B 40 F2 05 B0 95 F6 95 0F 85 01 81 BB FF 68 ?? ?? ?? ?? BF 00 ?? ?? ?? B9 00 ?? ?? ?? 80 37 ?? 47 39 CF 75 F8 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? BF 00 ?? ?? ?? B9 00 ?? ?? ?? 80 37 ?? 47 39 CF 75 F8\nep_only = false\n\n[AcidCrypt]\nsignature = 60 B9 ?? ?? ?? 00 BA ?? ?? ?? 00 BE ?? ?? ?? 00 02 38 40 4E 75 FA 8B C2 8A 18 32 DF C0 CB\nep_only = true\n\n[AcidCrypt]\nsignature = BE ?? ?? ?? ?? 02 38 40 4E 75 FA 8B C2 8A 18 32 DF C0 CB\nep_only = true\n\n[ACProtect 1.09g -> Risco software Inc.]\nsignature = 60 F9 50 E8 01 00 00 00 7C 58 58 49 50 E8 01 00 00 00 7E 58 58 79 04 66 B9 B8 72 E8 01 00 00 00 7A 83 C4 04 85 C8 EB 01 EB C1 F8 BE 72 03 73 01 74 0F 81 01 00 00 00 F9 EB 01 75 F9 E8 01 00 00\nep_only = true\n\n[ACProtect 1.4x -> RISCO soft]\nsignature = 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 45 78 69 74 50 72 6F 63 65 73 73 00 00 00 4D 65 73 73 61 67 65 42 6F 78 41 00 90 4D 69 6E 65 49 6D 70\nep_only = false\n\n[ACProtect v1.35 -> risco software Inc. & Anticrack Software]\nsignature = 4B 45 52 4E 45 4C 33 32 2E 44 4C 4C 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 55 53 45 52 33 32 2E 44 4C 4C 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 47 65 74 50 72 6F 63\nep_only = false\n\n[ACProtect V1.3X -> risco]\nsignature = 60 50 E8 01 00 00 00 75 83\nep_only = true\n\n[ACProtect v1.41]\nsignature = 60 76 03 77 01 7B 74 03 75 01 78 47 87 EE E8 01 00 00 00 76 83 C4 04 85 EE EB 01 7F 85 F2 EB 01 79 0F 86 01 00 00 00 FC EB 01 78 79 02 87 F2 61 51 8F 05 19 38 01 01 60 EB 01 E9 E9 01 00 00 00\nep_only = true\n\n[ACProtect V1.4X -> risco]\nsignature = 60 E8 01 00 00 00 7C 83 04 24 06 C3\nep_only = true\n\n[ACProtect v1.90g -> Risco software Inc.]\nsignature = 60 0F 87 02 00 00 00 1B F8 E8 01 00 00 00 73 83 04 24 06 C3\nep_only = true\n\n[ACProtect V2.0 -> risco]\nsignature = 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? C3 C3\nep_only = true\n\n[ACProtect/UltraProtect 1.0X-2.0X -> RiSco]\nsignature = 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4B 45 52 4E 45 4C 33 32 2E 44 4C 4C 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 55 53 45 52 33 32 2E 44 4C 4C 00 ?? ?? ?? ?? 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 45 78 69 74 50 72 6F 63 65 73 73 00 00 00 4D 65 73 73 61 67 65 42 6F 78 41 00 90 4D 69 6E 65 49 6D 70 6F 72 74 5F 45 6E 64 73 73 00\nep_only = false\n\n[ActiveMARK 5.x -> Trymedia Systems,Inc.]\nsignature = 20 2D 2D 4D 50 52 4D 4D 47 56 41 2D 2D 00 75 73 65 72 33 32 2E 64 6C 6C 00 4D 65 73 73 61 67 65 42 6F 78 41 00 54 68 69 73 20 61 70 70 6C 69 63 61 74 69 6F 6E 20 63 61 6E 6E 6F 74 20 72 75 6E 20 77 69 74 68 20 61 6E 20 61 63 74 69 76 65 20 64 65 62 75 67\nep_only = false\n\n[ActiveMARK[TM] R5.31.1140 -> Trymedia]\nsignature = 79 11 7F AB 9A 4A 83 B5 C9 6B 1A 48 F9 27 B4 25\nep_only = true\n\n[AdFlt2]\nsignature = 68 00 01 9C 0F A0 0F A8 60 FD 6A 00 0F A1 BE ?? ?? AD\nep_only = true\n\n[Ady's Glue 1.10]\nsignature = 2E ?? ?? ?? ?? 0E 1F BF ?? ?? 33 DB 33 C0 AC\nep_only = true\n\n[Ady`s Glue v0.10]\nsignature = 2E 8C 06 ?? ?? 0E 07 33 C0 8E D8 BE ?? ?? BF ?? ?? FC B9 ?? ?? 56 F3 A5 1E 07 5F\nep_only = true\n\n[AHPack 0.1 -> FEUERRADER]\nsignature = 60 68 54 ?? ?? 00 B8 48 ?? ?? 00 FF 10 68 B3 ?? ?? 00 50 B8 44 ?? ?? 00 FF 10 68 00\nep_only = true\n\n[AHpack 0.1 -> FEUERRADER]\nsignature = 60 68 54 ?? ?? ?? B8 48 ?? ?? ?? FF 10 68 B3 ?? ?? ?? 50 B8 44 ?? ?? ?? FF 10 68 00 ?? ?? ?? 6A 40 FF D0 89 05 CA ?? ?? ?? 89 C7 BE 00 10 ?? ?? 60 FC B2 80 31 DB A4 B3 02 E8 6D 00 00 00 73 F6 31 C9 E8 64 00 00 00 73 1C 31 C0 E8 5B 00 00 00 73 23 B3 02 41\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake ASPack 2.12) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01 00 00 00 EB 5D BB ED FF FF FF 03 DD 81 EB\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake ASProtect 1.0) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 60 E8 01 00 00 00 90 5D 81 ED 00 00 00 00 BB 00 00 00 00 03 DD 2B 9D\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake Borland Delphi 6.0-7.0) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 53 8B D8 33 C0 A3 00 00 00 00 6A 00 E8 00 00 00 FF A3 00 00 00 00 A1 00 00 00 00 A3 00 00 00 00 33 C0 A3 00 00 00 00 33 C0 A3 00 00 00 00 E8\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake k.kryptor 9/kryptor a) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 60 E8 ?? ?? ?? ?? 5E B9 00 00 00 00 2B C0 02 04 0E D3 C0 49 79 F8 41 8D 7E 2C 33 46 ?? 66 B9\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake Microsoft Visual C++ 7.0) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 6A 00 68 ?? ?? ?? ?? E8 ?? ?? ?? ?? BF ?? ?? ?? ?? 8B C7 E8 ?? ?? ?? ?? 89 65 00 8B F4 89 3E 56 FF 15 ?? ?? ?? ?? 8B 4E ?? 89 0D ?? ?? ?? 00 8B 46 00 A3\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake PCGuard 4.03-4.15) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 FC 55 50 E8 00 00 00 00 5D EB 01 E3 60 E8 03 00 00 00 D2 EB 0B 58 EB 01 48 40 EB 01\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake PE Lock NT 2.04) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 EB 03 CD 20 C7 1E EB 03 CD 20 EA 9C EB 02 EB 01 EB 01 EB 60 EB 03 CD 20 EB EB 01 EB\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake PE-Crypt 1.02) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 E8 00 00 00 00 5B 83 EB 05 EB 04 52 4E 44\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake PESHiELD 2.x) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 60 E8 00 00 00 00 41 4E 41 4B 49 4E 5D 83 ED 06 EB 02 EA 04\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake PEtite 2.2) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 B8 00 00 00 00 68 00 00 00 00 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 66 9C 60 50\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake Spalsher 1.x-3.x) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 9C 60 8B 44 24 24 E8 00 00 00 00 5D 81 ED 00 00 00 00 50 E8 ED 02 00 00 8C C0 0F 84\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake Stone's PE Encryptor 2.0) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 53 51 52 56 57 55 E8 00 00 00 00 5D 81 ED 42 30 40 00 FF 95 32 35 40 00 B8 37 30 40 00 03 C5 2B 85 1B 34 40 00 89 85 27 34 40 00 83\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake SVKP 1.3x) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 60 E8 00 00 00 00 5D 81 ED 06 00 00 00 EB 05 B8 00 00 00 00 64 A0 23 00 00 00 EB 03 C7 84 E8 84 C0 EB 03 C7 84 E9 75 67 B9 49 00 00 00 8D B5 C5 02 00 00 56 80 06 44 46 E2 FA 8B 8D C1 02 00 00 5E 55 51 6A 00\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake tElock 0.61) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 E9 00 00 00 00 60 E8 00 00 00 00 58 83 C0 08 F3 EB FF E0 83 C0 28 50 E8 00 00 00 00 5E B3 33 8D 46 0E 8D 76 31 28 18 F8 73 00 C3 8B FE B9 3C 02\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake VIRUS/I-Worm Hybris) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 EB 16 A8 54 00 00 47 41 42 4C 4B 43 47 43 00 00 00 00 00 00 52 49 53 00 FC 68 4C 70 40 00 FF 15\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake VOB ProtectCD) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 5F 81 EF 00 00 00 00 BE 00 00 40 00 8B 87 00 00 00 00 03 C6 57 56 8C A7 00 00 00 00 FF 10 89 87 00 00 00 00 5E 5F\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake Xtreme-Protector 1.05) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 E8 00 00 00 00 5D 81 00 00 00 00 00 6A 45 E8 A3 00 00 00 68 00 00 00 00 E8\nep_only = true\n\n[AHTeam EP Protector 0.3 (fake ZCode 1.01) -> FEUERRADER]\nsignature = 90 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 90 FF E0 E9 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E9 FB FF FF FF C3 68 00 00 00 00 64 FF 35\nep_only = true\n\n[AI1 Creator 1 Beta 2 - by MZ]\nsignature = E8 FE FD FF FF 6A 00 E8 0D 00 00 00 CC FF 25 78 10 40 00 FF 25 7C 10 40 00 FF 25 80 10 40 00 FF 25 84 10 40 00 FF 25 88 10 40 00 FF 25 8C 10 40 00 FF 25 90 10 40 00 FF 25 94 10 40 00 FF 25 98 10 40 00 FF 25 9C 10 40 00 FF 25 A0 10 40 00 FF 25 A4 10 40 00 FF 25 AC 10 40 00\nep_only = false\n\n[AINEXE v2.1]\nsignature = A1 ?? ?? 2D ?? ?? 8E D0 BC ?? ?? 8C D8 36 A3 ?? ?? 05 ?? ?? 36 A3 ?? ?? 2E A1 ?? ?? 8A D4 B1 04 D2 EA FE C9\nep_only = true\n\n[AINEXE v2.30]\nsignature = 0E 07 B9 ?? ?? BE ?? ?? 33 FF FC F3 A4 A1 ?? ?? 2D ?? ?? 8E D0 BC ?? ?? 8C D8\nep_only = true\n\n[Alex Protector 1.0 beta 2 by Alex]\nsignature = 60 E8 00 00 00 00 5D 81 ED 06 10 40 00 E8 24 00 00 00 EB 01 E9 8B 44 24 0C EB 03 EB 03 C7 EB FB E8 01 00 00 00 A8 83 C4 04 83 80 B8 00 00 00 02 33 C0 EB 01 E9 C3 58 83 C4 04 EB 03 EB 03 C7 EB FB E8 01 00 00 00 A8 83 C4 04 50 64 FF 35 00 00 00 00 64 89 25\nep_only = false\n\n[Alex Protector v0.4 beta 1 by Alex]\nsignature = 60 E8 01 00 00 00 C7 83 C4 04 33 C9 E8 01 00 00 00 68 83 C4 04 E8 01 00 00 00 68 83 C4 04 B9 ?? 00 00 00 E8 01 00 00 00 68 83 C4 04 E8 00 00 00 00 E8 01 00 00 00 C7 83 C4 04 8B 2C 24 83 C4 04 E8 01 00 00 00 A9 83 C4 04 81 ED 3C 13 40 00 E8 01 00 00 00 68\nep_only = false\n\n[Alex Protector v1.0 -> Alex]\nsignature = 60 E8 00 00 00 00 5D 81 ED 06 10 40 00 E8 24 00 00 00 EB 01 E9 8B\nep_only = true\n\n[Alloy 4.x -> PGWare LLC]\nsignature = 9C 60 E8 02 00 00 00 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 07 30 40 00 87 DD 6A 04 68 00 10 00 00 68 00 02 00 00 6A 00 FF 95 A8 33 40 00 0B C0 0F 84 F6 01 00 00 89 85 2E 33 40 00 83 BD E8 32 40 00 01 74 0D 83 BD E4 32 40 00 01 74 2A 8B F8 EB 3E 68\nep_only = true\n\n[Alloy v1.x.2000]\nsignature = 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 07 20 40 ?? 87 DD 6A 04 68 ?? 10 ?? ?? 68 ?? 02 ?? ?? 6A ?? FF 95 46 23 40 ?? 0B\nep_only = true\n\n[Aluwain v8.09]\nsignature = 8B EC 1E E8 ?? ?? 9D 5E\nep_only = true\n\n[ANDpakk2 0.06 -> Dmitry Andreev]\nsignature = 60 FC BE D4 00 40 00 BF 00 10 00 01 57 83 CD FF 33 C9 F9 EB 05 A4 02 DB 75 05 8A 1E 46 12 DB 72 F4 33 C0 40 02 DB 75 05 8A 1E 46 12 DB 13 C0 02 DB 75 05 8A 1E 46 12 DB 72 0E 48 02 DB 75 05 8A 1E 46 12 DB 13 C0 EB DC 83 E8 03 72 0F C1 E0 08 AC 83 F0 FF 74 4D D1 F8 8B E8 EB 09 02 DB 75 05 8A 1E 46 12 DB 13 C9 02 DB 75 05 8A 1E 46 12 DB 13 C9 75 1A 41 02 DB 75 05 8A 1E 46 12 DB 13 C9 02 DB 75 05 8A 1E 46 12 DB 73 EA 83 C1 02 81 FD 00 FB FF FF 83 D1 01 56 8D 34 2F F3 A4 5E E9 73 FF FF FF C3\nep_only = false\n\n[ANDpakk2 0.18 - by Dmitry \"AND\" Andreev]\nsignature = FC BE D4 00 40 00 BF 00 ?? ?? 00 57 83 CD FF 33 C9 F9 EB 05 A4 02 DB 75 05 8A 1E 46 12 DB 72 F4 33 C0 40 02 DB 75 05 8A 1E 46 12 DB 13 C0 02 DB 75 05 8A 1E 46 12 DB 72 0E 48 02 DB 75 05 8A 1E 46 12 DB 13 C0 EB DC 83 E8 03 72 0F C1 E0 08 AC 83 F0 FF 74 4D D1 F8 8B E8 EB 09 02 DB 75 05 8A 1E 46 12 DB 13 C9 02 DB 75 05 8A 1E 46 12 DB 13 C9 75 1A 41 02 DB 75 05 8A 1E 46 12 DB 13 C9 02 DB 75 05 8A 1E 46 12 DB 73 EA 83 C1 02 81 FD 00 FB FF FF 83 D1 01 56 8D 34 2F F3 A4 5E E9 73 FF FF FF C3\nep_only = true\n\n[Anskya Binder v1.1 -> Anskya]\nsignature = BE ?? ?? ?? 00 BB F8 11 40 00 33 ED 83 EE 04 39 2E 74 11\nep_only = true\n\n[Anskya NTPacker Generator -> Anskya]\nsignature = 55 8B EC 83 C4 F0 53 B8 88 1D 00 10 E8 C7 FA FF FF 6A 0A 68 20 1E 00 10 A1 14 31 00 10 50 E8 71 FB FF FF 8B D8 85 DB 74 2F 53 A1 14 31 00 10 50 E8 97 FB FF FF 85 C0 74 1F 53 A1 14 31 00 10 50 E8 5F FB FF FF 85 C0 74 0F 50 E8 5D FB FF FF 85 C0 74 05 E8 70 FC FF FF 5B E8 F2 F6 FF FF 00 00 48 45 41 52 54\nep_only = false\n\n[Anslym Crypter]\nsignature = 55 8B EC 83 C4 F0 53 56 B8 38 17 05 10 E8 5A 45 FB FF 33 C0 55 68 21 1C 05 10 64 FF 30 64 89 20 EB 08 FC FC FC FC FC FC 27 54 E8 85 4C FB FF 6A 00 E8 0E 47 FB FF 6A 0A E8 27 49 FB FF E8 EA 47 FB FF 6A 0A 68 30 1C 05 10 A1 60 56 05 10 50 E8 68 47 FB FF 8B D8 85 DB 0F 84 B6 02 00 00 53 A1 60 56 05 10 50 E8 F2 48 FB FF 8B F0 85 F6 0F 84 A0 02 00 00 E8 F3\nep_only = true\n\n[Anslym FUD Crypter]\nsignature = 55 8B EC 83 C4 F0 53 56 B8 38 17 05 10 E8 5A 45 FB FF 33 C0 55 68 21 1C 05 10 64 FF 30 64 89 20 EB 08 FC FC FC FC FC FC 27 54 E8 85 4C FB FF 6A 00 E8 0E 47 FB FF 6A 0A E8 27 49 FB FF E8 EA 47 FB FF 6A 0A\nep_only = true\n\n[Anti007 V2.6 -> LiuXingPing]\nsignature = 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 56 69 72 74 75 61 6C 50 72 6F 74 65 63 74 00 00 00 56 69 72 74 75 61 6C 41 6C 6C 6F 63 00 00 00 56 69 72 74 75 61 6C 46 72 65 65 00 00 00 47 65 74 53 79 73 74 65 6D 44 69 72 65 63 74 6F 72 79 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 41 00 00 00 57 72 69 74 65 46 69 6C 65 00 00 00 43 6C 6F 73 65 48 61 6E 64 6C 65 00 00 00 45 78 69 74 50 72 6F 63 65 73 73 00 00\nep_only = false\n\n[Anticrack Software Protector v1.09 (ACProtect)]\nsignature = 60 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 01 00 00 00 ?? 83 04 24 06 C3 ?? ?? ?? ?? ?? 00\nep_only = true\n\n[AntiDote 1.0 Beta -> SIS-Team]\nsignature = E8 BB FF FF FF 84 C0 74 2F 68 04 01 00 00 68 C0 23 60 00 6A 00 FF 15 08 10 60 00 E8 40 FF FF FF 50 68 78 11 60 00 68 68 11 60 00 68 C0 23 60 00 E8 AB FD FF FF 83 C4 10 33 C0 C2 10 00 90 90 90 8B 4C 24 08 56 8B 74 24 08 33 D2 8B C6 F7 F1 8B C6 85 D2 74 08 33 D2 F7 F1 40 0F AF C1 5E C3 90 8B 44 24 04 53 55 56 8B 48 3C 57 03 C8 33 D2 8B 79 54 8B 71 38 8B C7 F7 F6 85 D2 74 0C 8B C7 33 D2 F7 F6 8B F8 47 0F AF FE 33 C0 33 DB 66 8B 41 14 8D 54 08 18 33 C0 66 8B 41 06 89 54 24 14 8D 68 FF 85 ED 7C 37 33 C0\nep_only = true\n\n[AntiDote 1.0 Demo / 1.2 -> SIS-Team]\nsignature = 00 00 00 00 09 01 47 65 74 43 6F 6D 6D 61 6E 64 4C 69 6E 65 41 00 DB 01 47 65 74 56 65 72 73 69 6F 6E 45 78 41 00 73 01 47 65 74 4D 6F 64 75 6C 65 46 69 6C 65 4E 61 6D 65 41 00 00 7A 03 57 61 69 74 46 6F 72 53 69 6E 67 6C 65 4F 62 6A 65 63 74 00 BF 02 52 65 73 75 6D 65 54 68 72 65 61 64 00 00 29 03 53 65 74 54 68 72 65 61 64 43 6F 6E 74 65 78 74 00 00 94 03 57 72 69 74 65 50 72 6F 63 65 73 73 4D 65 6D 6F 72 79 00 00 6B 03 56 69 72 74 75 61 6C 41 6C 6C 6F 63 45 78 00 00 A6 02 52 65 61 64 50 72 6F 63 65 73 73 4D 65 6D 6F 72 79 00 CA 01 47 65 74 54 68 72 65 61 64 43 6F 6E 74 65 78 74 00 00 62 00 43 72 65 61 74 65 50 72 6F 63 65 73 73 41 00 00 4B 45 52 4E 45 4C 33 32 2E 64 6C 6C\nep_only = false\n\n[AntiDote 1.2 Beta (Demo) -> SIS-Team]\nsignature = 68 69 D6 00 00 E8 C6 FD FF FF 68 69 D6 00 00 E8 BC FD FF FF 83 C4 08 E8 A4 FF FF FF 84 C0 74 2F 68 04 01 00 00 68 B0 21 60 00 6A 00 FF 15 08 10 60 00 E8 29 FF FF FF 50 68 88 10 60 00 68 78 10 60 00 68 B0 21 60 00 E8 A4 FD FF FF 83 C4 10 33 C0 C2 10 00 90 90 90 90 90 90 90 90 90 90 90 90 8B 4C 24 08 56 8B 74 24 08 33 D2 8B C6 F7 F1 8B C6 85 D2 74 08 33 D2 F7 F1 40 0F AF C1 5E C3 90 8B 44 24 04 53 55 56 8B 48 3C 57 03 C8 33 D2 8B 79 54 8B 71 38 8B C7 F7 F6 85 D2 74 0C 8B C7 33 D2 F7 F6 8B F8 47 0F AF FE 33 C0 33 DB 66 8B 41 14 8D 54 08 18 33 C0\nep_only = true\n\n[AntiDote 1.2.Demo -> SIS-Team]\nsignature = E8 F7 FE FF FF 05 CB 22 00 00 FF E0 E8 EB FE FF FF 05 BB 19 00 00 FF E0 E8 BD 00 00 00 08 B2 62 00 01 52 17 0C 0F 2C 2B 20 7F 52 79 01 30 07 17 29 4F 01 3C 30 2B 5A 3D C7 26 11 26 06 59 0E 78 2E 10 14 0B 13 1A 1A 3F 64 1D 71 33 57 21 09 24 8B 1B 09 37 08 61 0F 1D 1D 2A 01 87 35 4C 07 39 0B\nep_only = false\n\n[AntiDote 1.2.DLL.Demo -> SIS-Team]\nsignature = EB 10 66 62 3A 43 2B 2B 48 4F 4F 4B 90 E9 08 32 90 90 90 90 90 90 90 90 90 90 80 7C 24 08 01 0F 85 ?? ?? ?? ?? 60 BE ?? ?? ?? ?? 8D BE ?? ?? ?? ?? 57 83 CD FF EB 0B 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB 72 ED B8 01 00 00 00 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C0 01 DB 73 EF 75 09 8B 1E 83 EE FC 11 DB 73 E4 31 C9 83 E8 03 72 0D C1 E0 08 8A 06 46 83 F0 FF 74 74 89 C5 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C9 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C9 75 20 41 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C9 01 DB 73 EF 75 09 8B 1E 83 EE FC 11 DB 73 E4 83 C1 02 81 FD 00 F3 FF FF 83 D1 01 8D 14 2F 83 FD FC 76 0F 8A 02 42 88 07 47 49 75 F7 E9 63 FF FF FF 90 8B 02 83 C2 04 89 07 83 C7 04 83 E9 04 77 F1 01 CF E9 4C FF FF FF\nep_only = false\n\n[AntiDote 1.2/1.4 SE DLL -> SIS-Team]\nsignature = EB 10 66 62 3A 43 2B 2B 48 4F 4F 4B 90 E9 08 32 90 90 90 90 90 90 90 90 90 90 80 7C 24 08 01 0F 85 ?? ?? ?? ?? 60 BE ?? ?? ?? ?? 8D BE ?? ?? ?? ?? 57 83 CD FF EB 0B 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB 72 ED B8 01 00 00 00 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C0 01 DB 73 ?? 75 ?? 8B 1E 83 EE FC 11 DB\nep_only = true\n\n[AntiDote 1.4 SE -> SIS-Team]\nsignature = 68 90 03 00 00 E8 C6 FD FF FF 68 90 03 00 00 E8 BC FD FF FF 68 90 03 00 00 E8 B2 FD FF FF 50 E8 AC FD FF FF 50 E8 A6 FD FF FF 68 69 D6 00 00 E8 9C FD FF FF 50 E8 96 FD FF FF 50 E8 90 FD FF FF 83 C4 20 E8 78 FF FF FF 84 C0 74 4F 68 04 01 00 00 68 10 22 60 00 6A 00 FF 15 08 10 60 00 68 90 03 00 00 E8 68 FD FF FF 68 69 D6 00 00 E8 5E FD FF FF 50 E8 58 FD FF FF 50 E8 52 FD FF FF E8 DD FE FF FF 50 68 A4 10 60 00 68 94 10 60 00 68 10 22 60 00 E8 58 FD FF FF 83 C4 20 33 C0 C2 10 00 8B 4C 24 08 56 8B 74 24 08 33 D2 8B C6 F7 F1 8B C6 85 D2 74 08 33 D2 F7 F1 40 0F AF C1 5E C3\nep_only = true\n\n[AntiVirus Vaccine v.1.03]\nsignature = FA 33 DB B9 ?? ?? 0E 1F 33 F6 FC AD 35 ?? ?? 03 D8 E2\nep_only = true\n\n[aPack v0.62]\nsignature = 1E 06 8C C8 8E D8 ?? ?? ?? 8E C0 50 BE ?? ?? 33 FF FC B6\nep_only = true\n\n[aPack v0.82]\nsignature = 1E 06 8C CB BA ?? ?? 03 DA 8D ?? ?? ?? FC 33 F6 33 FF 48 4B 8E C0 8E DB\nep_only = true\n\n[aPack v0.98 -m]\nsignature = 1E 06 8C C8 8E D8 05 ?? ?? 8E C0 50 BE ?? ?? 33 FF FC B2 ?? BD ?? ?? 33 C9 50 A4 BB ?? ?? 3B F3 76\nep_only = false\n\n[aPack v0.98b (DS&ES not saved)]\nsignature = 8C CB BA ?? ?? 03 DA FC 33 F6 33 FF 4B 8E DB 8D ?? ?? ?? 8E C0 B9 ?? ?? F3 A5 4A 75\nep_only = false\n\n[aPack v0.98b -> Jibz]\nsignature = 93 07 1F 05 ?? ?? 8E D0 BC ?? ?? EA\nep_only = false\n\n[APatch GUI v1.1]\nsignature = 52 31 C0 E8 FF FF FF FF\nep_only = true\n\n[Apex 3.0 alpha -> 500mhz]\nsignature = 5F B9 14 00 00 00 51 BE 00 10 40 00 B9 00 ?? ?? 00 8A 07 30 06 46 E2 FB 47 59 E2 EA 68 ?? ?? ?? 00 C3\nep_only = false\n\n[APEX_C (BLT Apex 4.0) -> 500mhz]\nsignature = 68 ?? ?? ?? ?? B9 FF FF FF 00 01 D0 F7 E2 72 01 48 E2 F7 B9 FF 00 00 00 8B 34 24 80 36 FD 46 E2 FA C3\nep_only = true\n\n[Apex_c beta -> 500mhz]\nsignature = 68 ?? ?? ?? ?? B9 FF FF FF 00 01 D0 F7 E2 72 01 48 E2 F7 B9 FF 00 00 00 8B 34 24 80 36 FD 46 E2 FA C3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = true\n\n[App Encryptor -> Silent Team]\nsignature = 60 E8 00 00 00 00 5D 81 ED 1F 1F 40 00 B9 7B 09 00 00 8D BD 67 1F 40 00 8B F7 AC\nep_only = true\n\n[App Protector -> Silent Team]\nsignature = E9 97 00 00 00 0D 0A 53 69 6C 65 6E 74 20 54 65 61 6D 20 41 70 70 20 50 72 6F 74 65 63 74 6F 72 0D 0A 43 72 65 61 74 65 64 20 62 79 20 53 69 6C 65 6E 74 20 53 6F 66 74 77 61 72 65 0D 0A 54 68 65 6E 6B 7A 20 74 6F 20 44 6F 63 68 74 6F 72 20 58 0D 0A 0D 0A\nep_only = true\n\n[ARC-SFX Archive]\nsignature = 8C C8 8C DB 8E D8 8E C0 89 ?? ?? ?? 2B C3 A3 ?? ?? 89 ?? ?? ?? BE ?? ?? B9 ?? ?? BF ?? ?? BA ?? ?? FC AC 32 C2 8A D8\nep_only = true\n\n[ARM Protector 0.1 - by SMoKE]\nsignature = E8 04 00 00 00 83 60 EB 0C 5D EB 05 45 55 EB 04 B8 EB F9 00 C3 E8 00 00 00 00 5D EB 01 00 81 ED 5E 1F 40 00 EB 02 83 09 8D B5 EF 1F 40 00 EB 02 83 09 BA A3 11 00 00 EB 01 00 8D 8D 92 31 40 00 8B 09 E8 14 00 00 00 83 EB 01 00 8B FE E8 00 00 00 00 58 83 C0 07 50 C3 00 EB 04 58 40 50 C3 8A 06 46 EB 01 00 D0 C8 E8 14 00 00 00 83 EB 01 00 2A C2 E8 00 00 00 00 5B 83 C3 07 53 C3 00 EB 04 5B 43 53 C3 EB 01 00 32 C2 E8 0B 00 00 00 00 32 C1 EB 01 00 C0 C0 02 EB 09 2A C2 5B EB 01 00 43 53 C3 88 07 EB 01 00 47 4A 75 B4\nep_only = true\n\n[ARM Protector 0.3 - by SMoKE]\nsignature = E8 04 00 00 00 83 60 EB 0C 5D EB 05 45 55 EB 04 B8 EB F9 00 C3 E8 00 00 00 00 5D EB 01 00 81 ED 13 24 40 00 EB 02 83 09 8D B5 A4 24 40 00 EB 02 83 09 BA 4B 15 00 00 EB 01 00 8D 8D EF 39 40 00 8B 09 E8 14 00 00 00 83 EB 01 00 8B FE E8 00 00 00 00 58 83 C0 07 50 C3 00 EB 04 58 40 50 C3 8A 06 46 EB 01 00 D0 C8 E8 14 00 00 00 83 EB 01 00 2A C2 E8 00 00 00 00 5B 83 C3 07 53 C3 00 EB 04 5B 43 53 C3 EB 01 00 32 C2 E8 0B 00 00 00 00 32 C1 EB 01 00 C0 C0 02 EB 09 2A C2 5B EB 01 00 43 53 C3 88 07 EB 01 00 47 4A 75 B4\nep_only = false\n\n[ARM Protector v0.1 by SMoKE]\nsignature = E8 04 00 00 00 83 60 EB 0C 5D EB 05 45 55 EB 04 B8 EB F9 00 C3 E8 00 00 00 00 5D EB 01 00 81 ED 5E 1F 40 00 EB 02 83 09 8D B5 EF 1F 40 00 EB 02 83 09 BA A3 11 00 00 EB 01 00 8D 8D 92 31 40 00 8B 09 E8 14 00 00 00 83 EB 01 00 8B FE E8 00 00 00 00 58 83 C0\nep_only = false\n\n[ARM Protector v0.2-> SMoKE]\nsignature = E8 04 00 00 00 83 60 EB 0C 5D EB 05 45 55 EB 04 B8 EB F9 00 C3 E8 00 00 00 00 5D EB 01 00 81 ED 09 20 40 00 EB 02 83 09 8D B5 9A 20 40 00 EB 02 83 09 BA 0B 12 00 00 EB 01 00 8D 8D A5 32 40 00\nep_only = true\n\n[Armadillo 3.00a -> Silicon Realms Toolworks]\nsignature = 60 E8 00 00 00 00 5D 50 51 EB 0F ?? EB 0F ?? EB 07 ?? EB 0F ?? EB 08 FD EB 0B F2 EB F5 EB F6 F2 EB 08 FD EB E9 F3 EB E4 FC ?? 59 58 50 51 EB 0F ?? EB 0F ?? EB 07 ?? EB 0F ?? EB 08 FD EB 0B F2 EB F5 EB F6 F2 EB 08 FD EB E9 F3 EB E4 FC ?? 59 58 50 51 EB 0F\nep_only = true\n\n[Armadillo 3.X-5.X -> Silicon Realms Toolworks]\nsignature = 60 E8 00 00 00 00 5D 50 51 0F CA F7 D2 9C F7 D2 0F CA EB 0F B9 EB 0F B8 EB 07 B9 EB 0F 90 EB 08 FD EB 0B F2 EB F5 EB F6 F2 EB 08 FD EB E9 F3 EB E4 FC E9 9D 0F C9 8B CA F7 D1 59 58 50 51 0F CA F7 D2 9C F7 D2 0F CA EB 0F B9 EB 0F B8 EB 07 B9 EB 0F 90 EB 08 FD EB 0B F2 EB F5 EB F6 F2 EB 08 FD EB E9 F3 EB E4 FC E9 9D 0F C9 8B CA F7 D1 59 58 50 51 0F CA F7 D2 9C F7 D2 0F CA EB 0F B9 EB 0F B8 EB 07 B9 EB 0F 90 EB 08 FD EB 0B F2 EB F5 EB F6 F2 EB 08 FD EB E9 F3 EB E4 FC E9 9D 0F C9 8B CA F7 D1 59 58 60 33 C9 75 02 EB 15 EB 33\nep_only = true\n\n[Armadillo 4.30a -> Silicon Realms Toolworks]\nsignature = 44 64 65 44 61 74 61 20 69 6E 69 74 69 61 6C 69 7A 65 64 20 28 41 4E 53 49 29 2C 20 61 70 70 20 73 74 72 69 6E 67 73 20 61 72 65 20 27 25 73 27 20 61 6E 64 20 27 25 73 27 00 00 00 44 64 65 44 61 74 61 20 69 6E 69 74 69 61 6C 69 7A 65 64 20 28 55 4E 49 43\nep_only = false\n\n[Armadillo 4.40 -> Silicon Realms Toolworks]\nsignature = 31 2E 31 2E 34 00 00 00 C2 E0 94 BE 93 FC DE C6 B6 24 83 F7 D2 A4 92 77 40 27 CF EB D8 6F 50 B4 B5 29 24 FA 45 08 04 52 D5 1B D2 8C 8A 1E 6E FF 8C 5F 42 89 F1 83 B1 27 C5 69 57 FC 55 0A DD 44 BE 2A 02 97 6B 65 15 AA 31 E9 28 7D 49 1B DF B5 5D 08 A8 BA A8\nep_only = false\n\n[Armadillo 5.0 Dll -> Silicon Realms Toolworks]\nsignature = 83 7C 24 08 01 75 05 E8 DE 4B 00 00 FF 74 24 04 8B 4C 24 10 8B 54 24 0C E8 ED FE FF FF 59 C2 0C 00 6A 0C 68 ?? ?? ?? ?? E8 E5 24 00 00 8B 4D 08 33 FF 3B CF 76 2E 6A E0 58 33 D2 F7 F1 3B 45 0C 1B C0 40 75 1F E8 8F 15 00 00 C7 00 0C 00 00 00 57 57 57 57 57 E8 20 15 00 00 83 C4 14 33 C0 E9 D5 00 00 00 0F AF 4D 0C 8B F1 89 75 08 3B F7 75 03 33 F6 46 33 DB 89 5D E4 83 FE E0 77 69 83 3D ?? ?? ?? ?? 03 75 4B 83 C6 0F 83 E6 F0 89 75 0C 8B 45 08 3B 05 ?? ?? ?? ?? 77 37 6A 04 E8 D7 23 00 00 59 89 7D FC FF 75 08 E8 EC 53 00 00 59 89 45 E4 C7 45 FC FE FF FF FF E8 5F 00 00 00 8B 5D E4 3B DF 74 11 FF 75 08 57 53 E8 2B C5 FF FF 83 C4 0C 3B DF 75 61 56 6A 08 FF 35 ?? ?? ?? ?? FF 15 ?? ?? ?? ?? 8B D8 3B DF 75 4C 39 3D ?? ?? ?? ?? 74 33 56 E8 19 ED FF FF 59 85 C0 0F 85 72 FF FF FF 8B 45 10 3B C7 0F 84 50 FF FF FF C7 00 0C 00 00 00 E9 45 FF FF FF 33 FF 8B 75 0C 6A 04 E8 7D 22 00 00 59 C3\nep_only = true\n\n[Armadillo 5.00 -> Silicon Realms Toolworks]\nsignature = E8 E3 40 00 00 E9 16 FE FF FF 6A 0C 68 ?? ?? ?? ?? E8 44 15 00 00 8B 4D 08 33 FF 3B CF 76 2E 6A E0 58 33 D2 F7 F1 3B 45 0C 1B C0 40 75 1F E8 36 13 00 00 C7 00 0C 00 00 00 57 57 57 57 57 E8 C7 12 00 00 83 C4 14 33 C0 E9 D5 00 00 00 0F AF 4D 0C 8B F1 89 75 08 3B F7 75 03 33 F6 46 33 DB 89 5D E4 83 FE E0 77 69 83 3D ?? ?? ?? ?? 03 75 4B 83 C6 0F 83 E6 F0 89 75 0C 8B 45 08 3B 05 ?? ?? ?? ?? 77 37 6A 04 E8 48 11 00 00 59 89 7D FC FF 75 08 E8 01 49 00 00 59 89 45 E4 C7 45 FC FE FF FF FF E8 5F 00 00 00 8B 5D E4 3B DF 74 11 FF 75 08 57 53 E8 66 D3 FF FF 83 C4 0C 3B DF 75 61 56 6A 08 FF 35 ?? ?? ?? ?? FF 15 ?? ?? ?? ?? 8B D8 3B DF 75 4C 39 3D ?? ?? ?? ?? 74 33 56 E8 AF F9 FF FF 59 85 C0 0F 85 72 FF FF FF 8B 45 10 3B C7 0F 84 50 FF FF FF C7 00 0C 00 00 00 E9 45 FF FF FF 33 FF 8B 75 0C 6A 04 E8 EE 0F 00 00 59 C3\nep_only = true\n\n[Armadillo v1.60a]\nsignature = 55 8B EC 6A FF 68 98 71 40 00 68 48 2D 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v1.71]\nsignature = 55 8B EC 6A FF 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 A1\nep_only = true\n\n[Armadillo v1.72 - v1.73]\nsignature = 55 8B EC 6A FF 68 E8 C1 ?? ?? 68 F4 86 ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58\nep_only = true\n\n[Armadillo v1.77]\nsignature = 55 8B EC 6A FF 68 B0 71 40 00 68 6C 37 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v1.80]\nsignature = 55 8B EC 6A FF 68 E8 C1 00 00 68 F4 86 00 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v1.82]\nsignature = 55 8B EC 6A FF 68 E0 C1 40 00 68 74 81 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v1.83]\nsignature = 55 8B EC 6A FF 68 E0 C1 40 00 68 64 84 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v1.84]\nsignature = 55 8B EC 6A FF 68 E8 C1 40 00 68 F4 86 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v1.90]\nsignature = 55 8B EC 6A FF 68 10 F2 40 00 68 64 9A 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v1.90a]\nsignature = 55 8B EC 64 FF 68 10 F2 40 00 68 14 9B 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v1.90b1]\nsignature = 55 8B EC 6A FF 68 E0 C1 40 00 68 04 89 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v1.90b2]\nsignature = 55 8B EC 6A FF 68 F0 C1 40 00 68 A4 89 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v1.90b3]\nsignature = 55 8B EC 6A FF 68 08 E2 40 00 68 94 95 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v1.90b4]\nsignature = 55 8B EC 6A FF 68 08 E2 40 00 68 B4 96 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v1.90c]\nsignature = 55 8B EC 6A FF 68 10 F2 40 00 68 74 9D 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v1.9x]\nsignature = 55 8B EC 6A FF 68 98 ?? ?? ?? 68 10 ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15\nep_only = true\n\n[Armadillo v1.xx - v2.xx]\nsignature = 55 8B EC 53 8B 5D 08 56 8B 75 0C 57 8B 7D 10 85 F6\nep_only = true\n\n[Armadillo v2.00]\nsignature = 55 8B EC 6A FF 68 00 02 41 00 68 C4 A0 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v2.00b2-2.00b3]\nsignature = 55 8B EC 6A FF 68 00 F2 40 00 68 C4 A0 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v2.01]\nsignature = 55 8B EC 6A FF 68 08 02 41 00 68 04 9A 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v2.10b2]\nsignature = 55 8B EC 6A FF 68 18 12 41 00 68 24 A0 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v2.20]\nsignature = 55 8B EC 6A FF 68 10 12 41 00 68 F4 A0 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v2.20b1]\nsignature = 55 8B EC 6A FF 68 30 12 41 00 68 A4 A5 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58\nep_only = true\n\n[Armadillo v2.50]\nsignature = 55 8B EC 6A FF 68 B8 ?? ?? ?? 68 F8 ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8 FF 15 20 ?? ?? ?? 33 D2 8A D4 89 15 D0\nep_only = true\n\n[Armadillo v2.50b3]\nsignature = 55 8B EC 6A FF 68 B8 ?? ?? ?? 68 F8 ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15 20 ?? ?? ?? 33 D2 8A D4 89 15 D0\nep_only = true\n\n[Armadillo v2.51]\nsignature = 55 8B EC 6A FF 68 B8 ?? ?? ?? 68 D0 ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15 20\nep_only = true\n\n[Armadillo v2.52]\nsignature = 55 8B EC 6A FF 68 ?? ?? ?? ?? E0 ?? ?? ?? ?? 68 D4 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8 FF ?? ?? ?? 15 38\nep_only = true\n\n[Armadillo v2.52]\nsignature = 55 8B EC 6A FF 68 E0 ?? ?? ?? 68 D4 ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15 38\nep_only = true\n\n[Armadillo v2.52 beta2]\nsignature = 55 8B EC 6A FF 68 ?? ?? ?? ?? B0 ?? ?? ?? ?? 68 60 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8 FF ?? ?? ?? 15 24\nep_only = true\n\n[Armadillo v2.52b2]\nsignature = 55 8B EC 6A FF 68 B0 ?? ?? ?? 68 60 ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15 24\nep_only = true\n\n[Armadillo v2.53]\nsignature = 55 8B EC 6A FF 68 40 ?? ?? ?? 68 54 ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15 58 ?? ?? ?? 33 D2 8A D4 89 15 EC\nep_only = true\n\n[Armadillo v2.53]\nsignature = 55 8B EC 6A FF 68 ?? ?? ?? ?? 40 ?? ?? ?? ?? 68 54 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8 FF ?? ?? ?? 15 58 33 D2 8A D4 89\nep_only = true\n\n[Armadillo v2.53b3]\nsignature = 55 8B EC 6A FF 68 D8 ?? ?? ?? 68 14 ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15\nep_only = true\n\n[Armadillo v2.5x - v2.6x]\nsignature = 55 8B EC 6A FF 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8 FF 15 58 ?? ?? ?? 33 D2 8A D4 89 15 EC\nep_only = true\n\n[Armadillo v2.60]\nsignature = 55 8B EC 6A FF 68 D0 ?? ?? ?? 68 34 ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15 68 ?? ?? ?? 33 D2 8A D4 89 15 84\nep_only = true\n\n[Armadillo v2.60a]\nsignature = 55 8B EC 6A FF 68 ?? ?? ?? ?? 68 94 ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15 6C ?? ?? ?? 33 D2 8A D4 89 15 B4\nep_only = true\n\n[Armadillo v2.60b1]\nsignature = 55 8B EC 6A FF 68 50 ?? ?? ?? 68 74 ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15 58 ?? ?? ?? 33 D2 8A D4 89 15 FC\nep_only = true\n\n[Armadillo v2.60b2]\nsignature = 55 8B EC 6A FF 68 90 ?? ?? ?? 68 24 ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15 60 ?? ?? ?? 33 D2 8A D4 89 15 3C\nep_only = true\n\n[Armadillo v2.60c]\nsignature = 55 8B EC 6A FF 68 40 ?? ?? ?? 68 F4 ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15 6C ?? ?? ?? 33 D2 8A D4 89 15 F4\nep_only = true\n\n[Armadillo v2.61]\nsignature = 55 8B EC 6A FF 68 28 ?? ?? ?? 68 E4 ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15 6C ?? ?? ?? 33 D2 8A D4 89 15 0C\nep_only = true\n\n[Armadillo v2.65b1]\nsignature = 55 8B EC 6A FF 68 38 ?? ?? ?? 68 40 ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15 28 ?? ?? ?? 33 D2 8A D4 89 15 F4\nep_only = true\n\n[Armadillo v2.75a]\nsignature = 55 8B EC 6A FF 68 68 ?? ?? ?? 68 D0 ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15 28 ?? ?? ?? 33 D2 8A D4 89 15 24\nep_only = true\n\n[Armadillo v2.85]\nsignature = 55 8B EC 6A FF 68 68 ?? ?? ?? 68 ?? ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15 28 ?? ?? ?? 33 D2 8A D4 89 15 24\nep_only = true\n\n[Armadillo v2.xx (CopyMem II)]\nsignature = 6A ?? 8B B5 ?? ?? ?? ?? C1 E6 04 8B 85 ?? ?? ?? ?? 25 07 ?? ?? 80 79 05 48 83 C8 F8 40 33 C9 8A 88 ?? ?? ?? ?? 8B 95 ?? ?? ?? ?? 81 E2 07 ?? ?? 80 79 05 4A 83 CA F8 42 33 C0 8A 82\nep_only = true\n\n[Armadillo v3.00]\nsignature = 60 E8 ?? ?? ?? ?? 5D 50 51 EB 0F B9 EB 0F B8 EB 07 B9 EB 0F 90 EB 08 FD EB 0B F2 EB F5 EB F6 F2 EB 08 FD EB E9 F3 EB E4 FC E9 59 58 60 33 C9\nep_only = true\n\n[Armadillo v3.00a]\nsignature = 60 E8 ?? ?? ?? ?? 5D 50 51 EB 0F B9 EB 0F B8 EB 07 B9 EB 0F 90 EB 08 FD EB 0B F2 EB F5 EB F6 F2 EB 08 FD EB E9 F3 EB E4 FC E9 59 58 50 51 EB\nep_only = true\n\n[Armadillo v3.01, v3.05]\nsignature = 60 E8 00 00 00 00 5D 50 51 EB 0F B9 EB 0F B8 EB 07 B9 EB 0F 90 EB 08 FD EB 0B F2 EB F5 EB F6 F2 EB 08 FD EB E9 F3 EB E4 FC E9 59 58 50 51 EB 0F B9 EB 0F B8 EB 07 B9 EB 0F 90 EB 08 FD EB 0B F2 EB F5 EB F6 F2 EB 08 FD EB E9 F3 EB E4 FC E9 59 58 50 51 EB 0F\nep_only = true\n\n[Armadillo v3.10]\nsignature = 55 8B EC 6A FF 68 E0 97 44 00 68 20 C0 42 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8 FF 15 4C 41 44 00 33 D2 8A D4 89 15 90 A1 44 00 8B C8 81 E1 FF 00 00 00 89 0D 8C A1 44 00 C1 E1 08 03 CA 89 0D 88 A1 44 00 C1 E8 10 A3 84 A1\nep_only = true\n\n[Armadillo v3.xx]\nsignature = 60 E8 ?? ?? ?? ?? 5D 50 51 EB 0F B9 EB 0F B8 EB 07 B9 EB 0F 90 EB 08 FD EB 0B F2 EB F5 EB F6 F2 EB 08 FD EB E9 F3 EB E4 FC E9 59 58\nep_only = true\n\n[Armadillo v4.00.0053 -> Silicon Realms Toolworks]\nsignature = 55 8B EC 6A FF 68 20 8B 4B 00 68 80 E4 48 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8 FF 15 88 31 4B 00 33 D2 8A D4 89 15 A4 A1 4B 00 8B C8 81 E1 FF 00 00 00 89 0D A0 A1 4B 00 C1 E1 08 03 CA 89 0D 9C A1 4B 00 C1 E8 10 A3 98 A1\nep_only = true\n\n[Armadillo v4.10 -> Silicon Realms Toolworks]\nsignature = 55 8B EC 6A FF 68 F8 8E 4C 00 68 D0 EA 49 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8 FF 15 88 31 4C 00 33 D2 8A D4 89 15 7C A5 4C 00 8B C8 81 E1 FF 00 00 00 89 0D 78 A5 4C 00 C1 E1 08 03 CA 89 0D 74 A5 4C 00 C1 E8 10 A3 70 A5\nep_only = true\n\n[Armadillo v4.20 -> Silicon Realms Toolworks]\nsignature = 55 8B EC 6A FF 68 F8 8E 4C 00 68 F0 EA 49 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8 FF 15 88 31 4C 00 33 D2 8A D4 89 15 84 A5 4C 00 8B C8 81 E1 FF 00 00 00 89 0D 80 A5 4C 00 C1 E1 08 03 CA 89 0D 7C A5 4C 00 C1 E8 10 A3 78 A5\nep_only = true\n\n[Armadillo v4.30 - v4.40 -> Silicon Realms Toolworks]\nsignature = 55 8B EC 6A FF 68 40 ?? ?? 00 68 80 ?? ?? 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8 FF 15 88 ?? ?? 00 33 D2 8A D4 89 15 30 ?? ?? 00 8B C8 81 E1 FF 00 00 00 89 0D 2C ?? ?? 00 C1 E1 08 03 CA 89 0D 28 ?? ?? 00 C1 E8 10 A3 24\nep_only = true\n\n[Armadillo v4.30 - v4.40 -> Silicon Realms Toolworks]\nsignature = 60 E8 00 00 00 00 5D 50 51 0F CA F7 D2 9C F7 D2 0F CA EB 0F B9 EB 0F B8 EB 07 B9 EB 0F 90 EB 08 FD EB 0B F2 EB F5 EB F6 F2 EB 08 FD EB E9 F3 EB E4 FC E9 9D 0F C9 8B CA F7 D1 59 58 50 51 0F CA F7 D2 9C F7 D2 0F CA EB 0F B9 EB 0F B8 EB 07 B9 EB 0F 90 EB 08\nep_only = true\n\n[AsCrypt v0.1 -> SToRM - #1]\nsignature = 81 ?? ?? ?? ?? ?? ?? 83 ?? ?? ?? ?? ?? ?? ?? 83 ?? ?? E2 ?? EB\nep_only = false\n\n[AsCrypt v0.1 -> SToRM - #2]\nsignature = 80 ?? ?? ?? 83 ?? ?? ?? ?? 90 90 90 83 ?? ?? E2\nep_only = false\n\n[AsCrypt v0.1 -> SToRM - #3]\nsignature = 80 ?? ?? ?? 83 ?? ?? ?? ?? 90 90 90 51 ?? ?? ?? 01 00 00 00 83 ?? ?? E2\nep_only = false\n\n[AsCrypt v0.1 -> SToRM - #4]\nsignature = 80 ?? ?? ?? 83 ?? ?? ?? ?? 90 90 90 E2\nep_only = false\n\n[AsCrypt v0.1 -> SToRM - #5]\nsignature = 83 ?? ?? E2 ?? ?? E2 ?? FF\nep_only = false\n\n[ASDPack 2.0 -> asd]\nsignature = 00 00 00 00 ?? ?? ?? ?? 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? 00 00 00 00 4B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 8D 49 00 1F 01 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 90\nep_only = false\n\n[ASDPack 2.0 -> asd]\nsignature = 5B 43 83 7B 74 00 0F 84 08 00 00 00 89 43 14 E9\nep_only = false\n\n[ASDPack 2.0 -> asd]\nsignature = 8B 44 24 04 56 57 53 E8 CD 01 00 00 C3 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 00\nep_only = true\n\n[ASDPack v1.0 -> asd]\nsignature = 55 8B EC 56 53 E8 5C 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 00 00 ?? ?? ?? 00 00 00 00 00 00 00 40 00 00 ?? ?? 00 00 00 00 00 00 00 00 00 ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 ?? ?? 00 00 10 00 00 00 ?? 00 00 00 ?? ?? 00 00 ?? ?? 00 00 ?? ?? 00 00 ?? 00 00 00 ?? ?? 00 00 ?? 00 00 00 ?? ?? 00 00 ?? 00 00 00 ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 5B 81 EB E6 1D 40 00 83 7D 0C 01 75 11 55 E8 4F 01 00 00 E8 6A 01 00 00 5D E8 2C 00 00 00 8B B3 1A 1E 40 00 03 B3 FA 1D 40 00 8B 76 0C AD 0B C0 74 0D FF 75 10 FF 75 0C FF 75 08 FF D0 EB EE B8 01 00 00 00 5B 5E C9 C2 0C 00 55 6A 00 FF 93 20 21 40 00 89 83 FA 1D 40 00 6A 40 68 00 10 00 00 FF B3 02 1E 40 00 6A 00 FF 93 2C 21 40 00 89 83 06 1E 40 00 8B 83 F2 1D 40 00 03 83 FA 1D 40 00 50 FF B3 06 1E 40 00 50 E8 6D 01 00 00 5F\nep_only = false\n\n[ASPack v1.00b -> Alexey Solodovnikov]\nsignature = 60 E8 ?? ?? ?? ?? 5D 81 ED 92 1A 44 ?? B8 8C 1A 44 ?? 03 C5 2B 85 CD 1D 44 ?? 89 85 D9 1D 44 ?? 80 BD C4 1D 44\nep_only = true\n\n[ASPack v1.01b -> Alexey Solodovnikov]\nsignature = 60 E8 ?? ?? ?? ?? 5D 81 ED D2 2A 44 ?? B8 CC 2A 44 ?? 03 C5 2B 85 A5 2E 44 ?? 89 85 B1 2E 44 ?? 80 BD 9C 2E 44\nep_only = true\n\n[ASPack v1.02a -> Alexey Solodovnikov]\nsignature = 60 E8 ?? ?? ?? ?? 5D 81 ED 3E D9 43 ?? B8 38 ?? ?? ?? 03 C5 2B 85 0B DE 43 ?? 89 85 17 DE 43 ?? 80 BD 01 DE 43 ?? ?? 75 15 FE 85 01 DE 43 ?? E8 1D ?? ?? ?? E8 79 02 ?? ?? E8 12 03 ?? ?? 8B 85 03 DE 43 ?? 03 85 17 DE 43 ?? 89 44 24 1C 61 FF\nep_only = true\n\n[ASPack v1.02b -> Alexey Solodovnikov]\nsignature = 60 E8 00 00 00 00 5D 81 ED 96 78 43 00 B8 90 78 43 00 03 C5\nep_only = true\n\n[ASPack v1.02b -> Alexey Solodovnikov]\nsignature = 60 E8 ?? ?? ?? ?? 5D 81 ED 96 78 43 ?? B8 90 78 43 ?? 03 C5 2B 85 7D 7C 43 ?? 89 85 89 7C 43 ?? 80 BD 74 7C 43\nep_only = true\n\n[ASPack v1.03b -> Alexey Solodovnikov]\nsignature = 60 E8 ?? ?? ?? ?? 5D 81 ED AE 98 43 ?? B8 A8 98 43 ?? 03 C5 2B 85 18 9D 43 ?? 89 85 24 9D 43 ?? 80 BD 0E 9D 43\nep_only = true\n\n[ASPack v1.04b -> Alexey Solodovnikov]\nsignature = 60 E8 ?? ?? ?? ?? 5D 81 ED ?? ?? ?? ?? B8 ?? ?? ?? ?? 03 C5 2B 85 ?? 12 9D ?? 89 85 1E 9D ?? ?? 80 BD 08 9D\nep_only = true\n\n[ASPack v1.05b -> Alexey Solodovnikov]\nsignature = 60 E8 ?? ?? ?? ?? 5D 81 ED CE 3A 44 ?? B8 C8 3A 44 ?? 03 C5 2B 85 B5 3E 44 ?? 89 85 C1 3E 44 ?? 80 BD AC 3E 44\nep_only = true\n\n[ASPack v1.061b -> Alexey Solodovnikov]\nsignature = 60 E8 ?? ?? ?? ?? 5D 81 ED EA A8 43 ?? B8 E4 A8 43 ?? 03 C5 2B 85 78 AD 43 ?? 89 85 84 AD 43 ?? 80 BD 6E AD 43\nep_only = true\n\n[ASPack v1.07b (DLL) -> Alexey Solodovnikov]\nsignature = 60 E8 00 00 00 00 5D ?? ?? ?? ?? ?? ?? B8 ?? ?? ?? ?? 03 C5\nep_only = true\n\n[ASPack v1.07b -> Alexey Solodovnikov]\nsignature = 60 E8 ?? ?? ?? ?? 5D 81 ED ?? ?? ?? ?? B8 ?? ?? ?? ?? 03 C5 2B 85 ?? 0B DE ?? 89 85 17 DE ?? ?? 80 BD 01 DE\nep_only = true\n\n[ASPack v1.08.01 -> Alexey Solodovnikov]\nsignature = 60 EB 0A 5D EB 02 FF 25 45 FF E5 E8 E9 E8 F1 FF FF FF E9 81 ?? ?? ?? 44 00 BB 10 ?? 44 00 03 DD 2B 9D\nep_only = true\n\n[ASPack v1.08.01 -> Alexey Solodovnikov]\nsignature = 60 EB 0A 5D EB 02 FF 25 45 FF E5 E8 E9 E8 F1 FF FF FF E9 81 ?? ?? ?? 44 ?? BB 10 ?? 44 ?? 03 DD 2B 9D\nep_only = true\n\n[ASPack v1.08.01 -> Alexey Solodovnikov]\nsignature = 60 EB ?? 5D EB ?? FF ?? ?? ?? ?? ?? E9\nep_only = true\n\n[ASPack v1.08.02 -> Alexey Solodovnikov]\nsignature = 60 EB 0A 5D EB 02 FF 25 45 FF E5 E8 E9 E8 F1 FF FF FF E9 81 ED 23 6A 44 00 BB 10 ?? 44 00 03 DD 2B 9D 72\nep_only = true\n\n[ASPack v1.08.03 -> Alexey Solodovnikov]\nsignature = 60 E8 00 00 00 00 5D 81 ED 0A 4A 44 00 BB 04 4A 44 00 03 DD\nep_only = true\n\n[ASPack v1.08.03 -> Alexey Solodovnikov]\nsignature = 60 E8 00 00 00 00 5D 81 ED 0A 4A 44 00 BB 04 4A 44 00 03 DD 2B 9D B1 50 44 00 83 BD AC 50 44 00 00 89 9D BB 4E\nep_only = true\n\n[ASPack v1.08.03 -> Alexey Solodovnikov]\nsignature = 60 E8 00 00 00 00 5D ?? ?? ?? ?? ?? ?? BB ?? ?? ?? ?? 03 DD\nep_only = true\n\n[ASPack v1.08.03 -> Alexey Solodovnikov]\nsignature = 60 E8 00 00 00 00 5D ?? ?? ?? ?? ?? ?? BB ?? ?? ?? ?? 03 DD 2B 9D B1 50 44 00 83 BD AC 50 44 00 00 89 9D BB 4E\nep_only = true\n\n[ASPack v1.08.04 -> Alexey Solodovnikov]\nsignature = 60 E8 41 06 00 00 EB 41\nep_only = true\n\n[ASPack v1.08.x -> Alexey Solodovnikov]\nsignature = 60 EB 03 5D FF E5 E8 F8 FF FF FF 81 ED 1B 6A 44 00 BB 10 6A 44 00 03 DD 2B 9D 2A\nep_only = true\n\n[ASPack v2.000 -> Alexey Solodovnikov]\nsignature = 60 E8 70 05 00 00 EB 4C\nep_only = true\n\n[ASPack v2.001 -> Alexey Solodovnikov]\nsignature = 60 E8 72 05 00 00 EB 4C\nep_only = true\n\n[ASPack v2.1 -> Alexey Solodovnikov]\nsignature = 60 E8 72 05 00 00 EB 33 87 DB 90 00\nep_only = true\n\n[ASPack v2.11b -> Alexey Solodovnikov]\nsignature = 60 E8 02 00 00 00 EB 09 5D 55 81 ED 39 39 44 00 C3 E9 3D 04 00 00\nep_only = true\n\n[ASPack v2.11c -> Alexey Solodovnikov]\nsignature = 60 E8 02 00 00 00 EB 09 5D 55 81 ED 39 39 44 00 C3 E9 59 04 00 00\nep_only = true\n\n[ASPack v2.11d -> Alexey Solodovnikov]\nsignature = 60 E8 02 00 00 00 EB 09 5D 55\nep_only = true\n\n[ASPack v2.12 -> Alexey Solodovnikov]\nsignature = 60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01\nep_only = true\n\n[ASPack v2.12 -> Alexey Solodovnikov]\nsignature = 60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01 00 00 00 EB 5D BB ED FF FF FF 03 DD 81 EB\nep_only = true\n\n[ASPack v2.xx -> Alexey Solodovnikov]\nsignature = A8 03 00 00 61 75 08 B8 01 00 00 00 C2 0C 00 68 00 00 00 00 C3 8B 85 26 04 00 00 8D 8D 3B 04 00 00 51 50 FF 95\nep_only = true\n\n[ASPack v2.xx -> Alexey Solodovnikov]\nsignature = A8 03 ?? ?? 61 75 08 B8 01 ?? ?? ?? C2 0C ?? 68 ?? ?? ?? ?? C3 8B 85 26 04 ?? ?? 8D 8D 3B 04 ?? ?? 51 50 FF 95\nep_only = true\n\n[ASPR Stripper v2.x unpacked]\nsignature = BB ?? ?? ?? ?? E9 ?? ?? ?? ?? 60 9C FC BF ?? ?? ?? ?? B9 ?? ?? ?? ?? F3 AA 9D 61 C3 55 8B EC\nep_only = true\n\n[ASProtect 1.33 - 2.1 Registered -> Alexey Solodovnikov]\nsignature = 68 01 ?? ?? ?? E8 01 00 00 00 C3 C3\nep_only = true\n\n[ASProtect SKE 2.1x (dll) -> Alexey Solodovnikov]\nsignature = 60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01 00 00 00 EB 5D BB ED FF FF FF 03 DD 81 EB 00 ?? ?? ?? 80 7D 4D 01 75 0C 8B 74 24 28 83 FE 01 89 5D 4E 75 31 8D 45 53 50 53 FF B5 ED 09 00 00 8D 45 35 50 E9 82 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = true\n\n[ASProtect SKE 2.1x (exe) -> Alexey Solodovnikov]\nsignature = 90 60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01 00 00 00 EB 5D BB ED FF FF FF 03 DD 81 EB 00 ?? ?? ?? 80 7D 4D 01 75 0C 8B 74 24 28 83 FE 01 89 5D 4E 75 31 8D 45 53 50 53 FF B5 ED 09 00 00 8D 45 35 50 E9 82 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[ASProtect v1.0]\nsignature = 60 E8 01 ?? ?? ?? 90 5D 81 ED ?? ?? ?? ?? BB ?? ?? ?? ?? 03 DD 2B 9D\nep_only = true\n\n[ASProtect v1.1]\nsignature = 60 E9 ?? 04 ?? ?? E9 ?? ?? ?? ?? ?? ?? ?? EE\nep_only = true\n\n[ASProtect v1.1 MTE]\nsignature = 60 E9 ?? ?? ?? ?? 91 78 79 79 79 E9\nep_only = true\n\n[ASProtect v1.1 MTEc]\nsignature = 90 60 E8 1B ?? ?? ?? E9 FC\nep_only = true\n\n[ASProtect v1.2 -> Alexey Solodovnikov (h1)]\nsignature = 90 60 E8 1B 00 00 00 E9 FC 8D B5 0F 06 00 00 8B FE B9 97 00 00 00 AD 35 78 56 34 12 AB 49 75 F6 EB 04 5D 45 55 C3 E9 ?? ?? ?? 00\nep_only = false\n\n[ASProtect v1.23 RC1]\nsignature = 68 01 ?? ?? 00 E8 01 00 00 00 C3 C3\nep_only = true\n\n[ASProtect v1.23 RC4 build 08.07 (dll) -> Alexey Solodovnikov]\nsignature = 60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01 00 00 00 EB 5D BB ED FF FF FF 03 DD 81 EB 00 ?? ?? ?? 80 7D 4D 01 75 0C 8B 74 24 28 83 FE 01 89 5D 4E 75 31 8D 45 53 50 53 FF B5 D5 09 00 00 8D 45 35 50 E9 82 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = true\n\n[ASProtect v1.23 RC4 build 08.07 (exe) -> Alexey Solodovnikov]\nsignature = 90 60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01 00 00 00 EB 5D BB ED FF FF FF 03 DD 81 EB ?? ?? ?? ?? 80 7D 4D 01 75 0C 8B 74 24 28 83 FE 01 89 5D 4E 75 31 8D 45 53 50 53 FF B5 D5 09 00 00 8D 45 35 50 E9 82 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[ASProtect v1.2x]\nsignature = 00 00 68 01 ?? ?? ?? C3 AA\nep_only = true\n\n[ASProtect v1.2x (New Strain)]\nsignature = 68 01 ?? ?? ?? E8 01 ?? ?? ?? C3 C3\nep_only = true\n\n[ASProtect v2.0]\nsignature = 68 01 ?? 40 00 E8 01 00 00 00 C3 C3\nep_only = false\n\n[ASProtect V2.X DLL -> Alexey Solodovnikov]\nsignature = 60 E8 03 00 00 00 E9 ?? ?? 5D 45 55 C3 E8 01 00 00 00 EB 5D BB ?? ?? ?? ?? 03 DD\nep_only = true\n\n[ASProtect v?.? -> If you know this version, post on PEiD board (h2)]\nsignature = 90 60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01 00 00 00 EB 5D BB ED FF FF FF 03 DD 81 EB 00 ?? ?? 00 80 7D 4D 01 75 0C 8B 74 24 28 83 FE 01 89 5D 4E 75 31 8D 45 53 50 53 FF B5 DD 09 00 00 8D 45 35 50 E9 82 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[ASProtect vx.x]\nsignature = 60 ?? ?? ?? ?? ?? 90 5D ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 03 DD\nep_only = true\n\n[ass - crypter -> by santasdad]\nsignature = 55 8B EC 83 C4 EC 53 ?? ?? ?? ?? 89 45 EC B8 98 40 00 10 E8 AC EA FF FF 33 C0 55 68 78 51 00 10 64 ?? ?? ?? ?? 20 6A 0A 68 88 51 00 10 A1 E0 97 00 10 50 E8 D8 EA FF FF 8B D8 53 A1 E0 97 00 10 50 E8 12 EB FF FF 8B F8 53 A1 E0 97 00 10 50 E8 DC EA FF FF 8B D8 53 E8 DC EA FF FF 8B F0 85 F6 74 26 8B D7 4A B8 F0 97 00 10 E8 C9 E7 FF FF B8 F0 97 00 10 E8 B7 E7 FF FF 8B CF 8B D6 E8 EE EA FF FF 53 E8 98 EA FF FF 8D 4D EC BA 9C 51 00 10 A1 F0 97 00 10 E8 22 EB FF FF 8B 55 EC B8 F0 97 00 10 E8 89 E6 FF FF B8 F0 97 00 10 E8 7F E7 FF FF E8 6E EC FF FF 33 C0 5A 59 59 64 89 10 68 7F 51 00 10 8D 45 EC E8 11 E6 FF FF C3 E9 FF DF FF FF EB F0 5F 5E 5B E8 0D E5 FF FF 00 53 45 54 54 49 4E 47 53 00 00 00 00 FF FF FF FF 1C 00 00 00 45 4E 54 45 52 20 59 4F 55 52 20 4F 57 4E 20 50 41 53 53 57 4F 52 44 20 48 45 52 45\nep_only = true\n\n[AverCryptor 1.0 -> os1r1s]\nsignature = 60 E8 00 00 00 00 5D 81 ED 75 17 40 00 8B BD 9C 18 40 00 8B 8D A4 18 40 00 B8 BC 18 40 00 03 C5 80 30 05 83 F9 00 74 71 81 7F 1C AB 00 00 00 75 62 8B 57 0C 03 95 A0 18 40 00 33 C0 51 33 C9 66 B9 FA 00 66 83 F9 00 74 49 8B 57 0C 03 95 A0 18 40 00 8B 85 A8 18 40 00 83 F8 02 75 06 81 C2 00 02 00 00 51 8B 4F 10 83 F8 02 75 06 81 E9 00 02 00 00 57 BF C8 00 00 00 8B F1 E8 27 00 00 00 8B C8 5F B8 BC 18 40 00 03 C5 E8 24 00 00 00 59 49 EB B1 59 83 C7 28 49 EB 8A 8B 85 98 18 40 00 89 44 24 1C 61 FF E0 56 57 4F F7 D7 23 F7 8B C6 5F 5E C3\nep_only = true\n\n[AverCryptor 1.02 beta -> os1r1s]\nsignature = 60 E8 00 00 00 00 5D 81 ED 0C 17 40 00 8B BD 33 18 40 00 8B 8D 3B 18 40 00 B8 51 18 40 00 03 C5 80 30 05 83 F9 00 74 71 81 7F 1C AB 00 00 00 75 62 8B 57 0C 03 95 37 18 40 00 33 C0 51 33 C9 66 B9 F7 00 66 83 F9 00 74 49 8B 57 0C 03 95 37 18 40 00 8B 85 3F 18 40 00 83 F8 02 75 06 81 C2 00 02 00 00 51 8B 4F 10 83 F8 02 75 06 81 E9 00 02 00 00 57 BF C8 00 00 00 8B F1 E8 27 00 00 00 8B C8 5F B8 51 18 40 00 03 C5 E8 24 00 00 00 59 49 EB B1 59 83 C7 28 49 EB 8A 8B 85 2F 18 40 00 89 44 24 1C 61 FF E0 56 57 4F F7 D7 23 F7 8B C6 5F 5E C3\nep_only = true\n\n[AVPACK v1.20]\nsignature = 50 1E 0E 1F 16 07 33 F6 8B FE B9 ?? ?? FC F3 A5 06 BB ?? ?? 53 CB\nep_only = true\n\n[AZProtect 0001 - by AlexZ aka AZCRC]\nsignature = EB 70 FC 60 8C 80 4D 11 00 70 25 81 00 40 0D 91 BB 60 8C 80 4D 11 00 70 21 81 1D 61 0D 81 00 40 CE 60 8C 80 4D 11 00 70 25 81 25 81 25 81 25 81 29 61 41 81 31 61 1D 61 00 40 B7 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 60 BE 00 ?? ?? 00 BF 00 00 40 00 EB 17 4B 45 52 4E 45 4C 33 32 2E 44 4C 4C 00 00 00 00 00 FF 25 ?? ?? ?? 00 8B C6 03 C7 8B F8 57 55 8B EC 05 7F 00 00 00 50 E8 E5 FF FF FF BA 8C ?? ?? 00 89 02 E9 1A 01 00 00 ?? 00 00 00 47 65 74 4D 6F 64 75 6C 65 46 69 6C 65 4E 61 6D 65 41 00 47 65 74 56 6F 6C 75 6D 65 49 6E 66 6F 72 6D 61 74 69 6F 6E 41 00 4D 65 73 73 61 67 65 42 6F 78 41 00 45 78 69 74 50 72 6F 63 65 73 73 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41\nep_only = true\n\n[AZProtect 0001 - by AlexZ aka AZCRC]\nsignature = FC 33 C9 49 8B D1 33 C0 33 DB AC 32 C1 8A CD 8A EA 8A D6 B6 08 66 D1 EB 66 D1 D8 73 09 66 35 20 83 66 81 F3 B8 ED FE CE 75 EB 33 C8 33 D3 4F 75 D5 F7 D2 F7 D1 8B C2 C1 C0 10 66 8B C1 C3 F0 DA 55 8B EC 53 56 33 C9 33 DB 8B 4D 0C 8B 55 10 8B 75 08 4E 4A 83 FB 08 72 05 33 DB 43 EB 01 43 33 C0 8A 04 31 8A 24 13 2A C4 88 04 31 E2 E6 5E 5B C9 C2 0C\nep_only = false\n\n[bambam 0.01 -> bedrock]\nsignature = 6A 14 E8 9A 05 00 00 8B D8 53 68 ?? ?? ?? ?? E8 6C FD FF FF B9 05 00 00 00 8B F3 BF ?? ?? ?? ?? 53 F3 A5 E8 8D 05 00 00 8B 3D ?? ?? ?? ?? A1 ?? ?? ?? ?? 66 8B 15 ?? ?? ?? ?? B9 ?? ?? ?? ?? 2B CF 89 45 E8 89 0D ?? ?? ?? ?? 66 89 55 EC 8B 41 3C 33 D2 03 C1 83 C4 10 66 8B 48 06 66 8B 50 14 81 E1 FF FF 00 00 8D 5C 02 18 8D 41 FF 85 C0\nep_only = true\n\n[bambam 0.04 -> bedrock]\nsignature = BF ?? ?? ?? ?? 83 C9 FF 33 C0 68 ?? ?? ?? ?? F2 AE F7 D1 49 51 68 ?? ?? ?? ?? E8 11 0A 00 00 83 C4 0C 68 ?? ?? ?? ?? FF 15 ?? ?? ?? ?? 8B F0 BF ?? ?? ?? ?? 83 C9 FF 33 C0 F2 AE F7 D1 49 BF ?? ?? ?? ?? 8B D1 68 ?? ?? ?? ?? C1 E9 02 F3 AB 8B CA 83 E1 03 F3 AA BF ?? ?? ?? ?? 83 C9 FF 33 C0 F2 AE F7 D1 49 51 68 ?? ?? ?? ?? E8 C0 09 00 00\nep_only = true\n\n[BamBam v0.01 -> Bedrock]\nsignature = 6A 14 E8 9A 05 00 00 8B D8 53 68 FB ?? ?? 00 E8 6C FD FF FF B9 05 00 00 00 8B F3 BF FB ?? ?? 00 53 F3 A5 E8 8D 05 00 00 8B 3D 03 ?? ?? 00 A1 2B ?? ?? 00 66 8B 15 2F ?? ?? 00 B9 80 ?? ?? 00 2B CF 89 45 E8 89 0D 6B ?? ?? 00 66 89 55 EC 8B 41 3C 33 D2 03 C1\nep_only = false\n\n[beria v0.07 public WIP --> symbiont]\nsignature = 83 EC 18 53 8B 1D 00 30 ?? ?? 55 56 57 68 30 07 00 00 33 ED 55 FF D3 8B F0 3B F5 74 0D 89 AE 20 07 00 00 E8 88 0F 00 00 EB 02 33 F6 6A 10 55 89 35 30 40 ?? ?? FF D3 8B F0 3B F5 74 09 89 2E E8 3C FE FF FF EB 02 33 F6 6A 18 55 89 35 D8 43 ?? ?? FF D3 8B F0\nep_only = true\n\n[BeRo Tiny Pascal -> BeRo]\nsignature = E9 ?? ?? ?? ?? 20 43 6F 6D 70 69 6C 65 64 20 62 79 3A 20 42 65 52 6F 54 69 6E 79 50 61 73 63 61 6C 20 2D 20 28 43 29 20 43 6F 70 79 72 69 67 68 74 20 32 30 30 36 2C 20 42 65 6E 6A 61 6D 69 6E 20 27 42 65 52 6F 27 20 52 6F 73 73 65 61 75 78 20\nep_only = true\n\n[BeRoEXEPacker V1.00 -> BeRo]\nsignature = BA ?? ?? ?? ?? 8D B2 ?? ?? ?? ?? 8B 46 ?? 85 C0 74 51 03 C2 8B 7E ?? 8B 1E 85 DB 75 02 8B DF 03 DA 03 FA 52 57 50 FF 15 ?? ?? ?? ?? 5F 5A 85 C0 74 2F 8B C8 8B 03 85 C0 74 22 0F BA F0 1F 72 04 8D 44 ?? ?? 51 52 57 50 51 FF 15 ?? ?? ?? ?? 5F 5A 59 85 C0 74 0B AB 83 C3 04 EB D8 83 C6 14 EB AA 61 C3\nep_only = false\n\n[BeRoEXEPacker v1.00 DLL [LZBRR] -> BeRo / Farbrausch]\nsignature = 83 7C 24 08 01 0F 85 ?? ?? ?? ?? 60 BE ?? ?? ?? ?? BF ?? ?? ?? ?? FC B2 80 33 DB A4 B3 02 E8 ?? ?? ?? ?? 73 F6 33 C9 E8 ?? ?? ?? ?? 73 1C 33 C0 E8 ?? ?? ?? ?? 73 23 B3 02 41 B0 10\nep_only = true\n\n[BeRoEXEPacker v1.00 DLL [LZBRS] -> BeRo / Farbrausch]\nsignature = 83 7C 24 08 01 0F 85 ?? ?? ?? ?? 60 BE ?? ?? ?? ?? BF ?? ?? ?? ?? FC AD 8D 1C 07 B0 80 3B FB 73 3B E8 ?? ?? ?? ?? 72 03 A4 EB F2 E8 ?? ?? ?? ?? 8D 51 FF E8 ?? ?? ?? ?? 56 8B F7 2B F2 F3 A4 5E EB DB 02 C0 75 03 AC 12 C0 C3 33\nep_only = true\n\n[BeRoEXEPacker v1.00 DLL [LZMA] -> BeRo / Farbrausch]\nsignature = 83 7C 24 08 01 0F 85 ?? ?? ?? ?? 60 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? E8 ?? ?? ?? ?? BE ?? ?? ?? ?? B9 ?? ?? ?? ?? 8B F9 81 FE ?? ?? ?? ?? 7F 10 AC 47 04 18 2C 02 73 F0 29 3E 03 F1 03 F9 EB E8\nep_only = true\n\n[BeRoEXEPacker v1.00 [LZBRR] -> BeRo / Farbrausch]\nsignature = 60 BE ?? ?? ?? ?? BF ?? ?? ?? ?? FC B2 80 33 DB A4 B3 02 E8 ?? ?? ?? ?? 73 F6 33 C9 E8 ?? ?? ?? ?? 73 1C 33 C0 E8 ?? ?? ?? ?? 73 23 B3 02 41 B0 10\nep_only = true\n\n[BeRoEXEPacker v1.00 [LZBRS] -> BeRo / Farbrausch]\nsignature = 60 BE ?? ?? ?? ?? BF ?? ?? ?? ?? FC AD 8D 1C 07 B0 80 3B FB 73 3B E8 ?? ?? ?? ?? 72 03 A4 EB F2 E8 ?? ?? ?? ?? 8D 51 FF E8 ?? ?? ?? ?? 56 8B F7 2B F2 F3 A4 5E EB DB 02 C0 75 03 AC 12 C0 C3 33\nep_only = true\n\n[BeRoEXEPacker v1.00 [LZMA] -> BeRo / Farbrausch]\nsignature = 60 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? E8 ?? ?? ?? ?? BE ?? ?? ?? ?? B9 04 00 00 00 8B F9 81 FE ?? ?? ?? ?? 7F 10 AC 47 04 18 2C 02 73 F0 29 3E 03 F1 03 F9 EB E8\nep_only = true\n\n[BlackEnergy DDoS Bot Crypter]\nsignature = 55 ?? ?? 81 EC 1C 01 00 00 53 56 57 6A 04 BE 00 30 00 00 56 FF 35 00 20 11 13 6A 00 E8 ?? 03 00 00 ?? ?? 83 C4 10 ?? FF 89 7D F4 0F\nep_only = true\n\n[Blade Joiner v1.5]\nsignature = 55 8B EC 81 C4 E4 FE FF FF 53 56 57 33 C0 89 45 F0 89 85\nep_only = true\n\n[BlindSpot 1.0 -> s134k]\nsignature = 55 8B EC 81 EC 50 02 00 00 8D 85 B0 FE FF FF 53 56 A3 90 12 40 00 57 8D 85 B0 FD FF FF 68 00 01 00 00 33 F6 50 56 FF 15 24 10 40 00 56 68 80 00 00 00 6A 03 56 56 8D 85 B0 FD FF FF 68 00 00 00 80 50 FF 15 20 10 40 00 56 56 68 00 08 00 00 50 89 45 FC FF 15 1C 10 40 00 8D 45 F8 8B 1D 18 10 40 00 56 50 6A 34 FF 35 90 12 40 00 FF 75 FC FF D3 85 C0 0F 84 7F 01 00 00 39 75 F8 0F 84 76 01 00 00 A1 90 12 40 00 66 8B 40 30 66 3D 01 00 75 14 8D 85 E4 FE FF FF 68 04 01 00 00 50 FF 15 14 10 40 00 EB 2C 66 3D 02 00 75 14 8D 85 E4 FE FF FF 50 68 04 01 00 00 FF 15 10 10 40 00 EB 12 8D 85 E4 FE FF FF 68 04 01 00 00 50 FF 15 0C 10 40 00 8B 3D 08 10 40 00 8D 85 E4 FE FF FF 68 54 10 40 00 50\nep_only = false\n\n[BobPack v1.00 --> BoB / BobSoft]\nsignature = 60 E8 00 00 00 00 8B 0C 24 89 CD 83 E9 06 81 ED ?? ?? ?? ?? E8 3D 00 00 00 89 85 ?? ?? ?? ?? 89 C2 B8 5D 0A 00 00 8D 04 08 E8 E4 00 00 00 8B 70 04 01 D6 E8 76 00 00 00 E8 51 01 00 00 E8 01 01\nep_only = true\n\n[BobSoft Mini Delphi -> BoB / BobSoft]\nsignature = 55 8B EC 83 C4 F0 53 56 B8 ?? ?? ?? ?? E8 ?? ?? ?? ?? 33 C0 55 68 ?? ?? ?? ?? 64 FF 30 64 89 20 B8\nep_only = true\n\n[BobSoft Mini Delphi -> BoB / BobSoft]\nsignature = 55 8B EC 83 C4 F0 53 B8 ?? ?? ?? ?? E8 ?? ?? ?? ?? 33 C0 55 68 ?? ?? ?? ?? 64 FF 30 64 89 20 B8 ?? ?? ?? ?? E8\nep_only = true\n\n[BobSoft Mini Delphi -> BoB / BobSoft]\nsignature = 55 8B EC 83 C4 F0 B8 ?? ?? ?? ?? E8\nep_only = true\n\n[BopCrypt v1.0]\nsignature = 60 BD ?? ?? ?? ?? E8 ?? ?? 00 00\nep_only = true\n\n[CD-Cops II]\nsignature = 53 60 BD ?? ?? ?? ?? 8D 45 ?? 8D 5D ?? E8 ?? ?? ?? ?? 8D\nep_only = true\n\n[CDS SS 1.0 beta1 -> CyberDoom]\nsignature = 60 E8 00 00 00 00 5D 81 ED CA 47 40 00 FF 74 24 20 E8 D3 03 00 00 0B C0 0F 84 13 03 00 00 89 85 B8 4E 40 00 66 8C D8 A8 04 74 0C C7 85 8C 4E 40 00 01 00 00 00 EB 12 64 A1 30 00 00 00 0F B6 40 02 0A C0 0F 85 E8 02 00 00 8D 85 F6 4C 40 00 50 FF B5 B8 4E 40 00 E8 FC 03 00 00 0B C0 0F 84 CE 02 00 00 E8 1E 03 00 00 89 85 90 4E 40 00 8D 85 03 4D 40 00 50 FF B5 B8 4E 40 00 E8 D7 03 00 00 0B C0 0F 84 A9 02 00 00 E8 F9 02 00 00 89 85 94 4E 40 00 8D 85 12 4D 40 00 50\nep_only = true\n\n[CDS SS v1.0 Beta 1 -> CyberDoom / Team-X]\nsignature = 60 E8 00 00 00 00 5D 81 ED CA 47 40 00 FF 74 24 20 E8 D3 03 00 00 0B C0 0F 84 13 03 00 00 89 85 B8 4E 40 00 66 8C D8 A8 04 74 0C C7 85 8C 4E 40 00 01 00 00 00 EB 12 64 A1 30 00 00 00 0F B6 40 02 0A C0 0F 85 E8 02 00 00 8D 85 F6 4C 40 00 50 FF B5 B8 4E 40 00 E8 FC 03 00 00 0B C0 0F 84 CE 02 00 00 E8 1E 03 00 00 89 85 90 4E 40 00 8D 85 03 4D 40 00 50 FF B5 B8\nep_only = true\n\n[Celsius Crypt 2.1 -> Z3r0]\nsignature = 55 89 E5 83 EC 08 C7 04 24 01 00 00 00 FF 15 84 92 44 00 E8 C8 FE FF FF 90 8D B4 26 00 00 00 00 55 89 E5 83 EC 08 C7 04 24 02 00 00 00 FF 15 84 92 44 00 E8 A8 FE FF FF 90 8D B4 26 00 00 00 00 55 8B 0D C4 92 44 00 89 E5 5D FF E1 8D 74 26 00 55 8B 0D AC 92 44 00 89 E5 5D FF E1 90 90 90 90 55 89 E5 5D E9 77 C2 00 00 90 90 90 90 90 90 90 55 89 E5 83 EC 28 8B 45 10 89 04 24 E8 3F 14 01 00 48 89 45 FC 8B 45 0C 48 89 45 F4 8D 45 F4 89 44 24 04 8D 45 FC 89 04 24 E8 12 A3 03 00 8B 00 89 45 F8 8B 45 FC 89 45 F0 C6 45 EF 01 C7 45 E8 00 00 00 00 8B 45 E8 3B 45 F8 73 39 80 7D EF 00 74 33 8B 45 F0 89 44 24 04 8B 45 10 89 04 24 E8 1C 1A 01 00 89 C1 8B 45 08 8B 55 E8 01 C2 0F B6 01 3A 02 0F 94 C0 88 45 EF 8D 45 F0 FF 08 8D 45 E8 FF 00 EB BF 83 7D F0 00 74 34 80 7D EF 00 74 2E 8B 45 F0 89 44 24 04 8B 45 10 89 04 24 E8 DD 19 01 00 89 C1 8B 45 08 8B 55 F8 01 C2 0F B6 01 3A 02 0F 94 C0 88 45 EF 8D 45 F0 FF 08 EB C6 C7 44 24 04 00 00 00 00 8B 45 10 89 04 24 E8 AE 19 01 00 89 C1 8B 45 08 8B 55 F8 01 C2 0F B6 01 3A 02 7F 0C 0F B6 45 EF 83 E0 01 88 45 E7 EB 04 C6 45 E7 00 0F B6 45 E7 88 45 EF 0F B6 45 EF C9 C3\nep_only = true\n\n[Celsius Crypt 2.1 -> Z3r0]\nsignature = 55 89 E5 83 EC 28 8B 45 10 89 04 24 E8 3F 14 01 00 48 89 45 FC 8B 45 0C 48 89 45 F4 8D 45 F4 89 44 24 04 8D 45 FC 89 04 24 E8 12 A3 03 00 8B 00 89 45 F8 8B 45 FC 89 45 F0 C6 45 EF 01 C7 45 E8 00 00 00 00 8B 45 E8 3B 45 F8 73 39 80 7D EF 00 74 33 8B 45 F0 89 44 24 04 8B 45 10 89 04 24 E8 1C 1A 01 00 89 C1 8B 45 08 8B 55 E8 01 C2 0F B6 01 3A 02 0F 94 C0 88 45 EF 8D 45 F0 FF 08 8D 45 E8 FF 00 EB BF 83 7D F0 00 74 34 80 7D EF 00 74 2E 8B 45 F0 89 44 24 04 8B 45 10 89 04 24 E8 DD 19 01 00 89 C1 8B 45 08 8B 55 F8 01 C2 0F B6 01 3A 02 0F 94 C0 88 45 EF 8D 45 F0 FF 08 EB C6 C7 44 24 04 00 00 00 00 8B 45 10 89 04 24 E8 AE 19 01 00 89 C1 8B 45 08 8B 55 F8 01 C2 0F B6 01 3A 02 7F 0C 0F B6 45 EF 83 E0 01 88 45 E7 EB 04 C6 45 E7 00 0F B6 45 E7 88 45 EF 0F B6 45 EF C9 C3\nep_only = false\n\n[CERBERUS v2.0]\nsignature = 9C 2B ED 8C ?? ?? 8C ?? ?? FA E4 ?? 88 ?? ?? 16 07 BF ?? ?? 8E DD 9B F5 B9 ?? ?? FC F3 A5\nep_only = true\n\n[CExe v1.0a]\nsignature = 55 8B EC 81 EC 0C 02 ?? ?? 56 BE 04 01 ?? ?? 8D 85 F8 FE FF FF 56 50 6A ?? FF 15 54 10 40 ?? 8A 8D F8 FE FF FF 33 D2 84 C9 8D 85 F8 FE FF FF 74 16\nep_only = true\n\n[CHECKPRG (c) 1992]\nsignature = 33 C0 BE ?? ?? 8B D8 B9 ?? ?? BF ?? ?? BA ?? ?? 47 4A 74\nep_only = true\n\n[ChinaProtect -> dummy]\nsignature = C3 E8 ?? ?? ?? ?? B9 ?? ?? ?? ?? E8 ?? ?? ?? ?? FF 30 C3 B9 ?? ?? ?? ?? E8 ?? ?? ?? ?? FF 30 C3 B9 ?? ?? ?? ?? E8 ?? ?? ?? ?? FF 30 C3 B9 ?? ?? ?? ?? E8 ?? ?? ?? ?? FF 30 C3 56 8B ?? ?? ?? 6A 40 68 00 10 00 00 8D ?? ?? 50 6A 00 E8 ?? ?? ?? ?? 89 30 83 C0 04 5E C3 8B 44 ?? ?? 56 8D ?? ?? 68 00 40 00 00 FF 36 56 E8 ?? ?? ?? ?? 68 00 80 00 00 6A 00 56 E8 ?? ?? ?? ?? 5E C3\nep_only = false\n\n[ChSfx (small) v1.1]\nsignature = BA ?? ?? E8 ?? ?? 8B EC 83 EC ?? 8C C8 BB ?? ?? B1 ?? D3 EB 03 C3 8E D8 05 ?? ?? 89\nep_only = true\n\n[CICompress v1.0]\nsignature = 6A 04 68 00 10 00 00 FF 35 9C 14 40 00 6A 00 FF 15 38 10 40 00 A3 FC 10 40 00 97 BE 00 20 40 00 E8 71 00 00 00 3B 05 9C 14 40 00 75 61 6A 00 6A 20 6A 02 6A 00 6A 03 68 00 00 00 C0 68 94 10 40 00 FF 15 2C 10 40 00 A3 F8 10 40 00 6A 00 68 F4 10 40 00 FF 35\nep_only = true\n\n[CipherWall Self-Extrator/Decryptor (Console) v1.5]\nsignature = 90 61 BE 00 10 42 00 8D BE 00 00 FE FF C7 87 C0 20 02 00 0B 6E 5B 9B 57 83 CD FF EB 0E 90 90 90 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB 72 ED B8 01 00 00 00 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C0 01 DB 73 EF 75 09 8B 1E 83 EE FC 11 DB 73 E4\nep_only = true\n\n[CipherWall Self-Extrator/Decryptor (GUI) v1.5]\nsignature = 90 61 BE 00 10 42 00 8D BE 00 00 FE FF C7 87 C0 20 02 00 F9 89 C7 6A 57 83 CD FF EB 0E 90 90 90 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB 72 ED B8 01 00 00 00 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C0 01 DB 73 EF 75 09 8B 1E 83 EE FC 11 DB 73 E4\nep_only = true\n\n[Code Virtualizer 1.3.1.0 -> Oreans Technologies]\nsignature = 60 9C FC E8 00 00 00 00 5F 81 EF ?? ?? ?? ?? 8B C7 81 C7 ?? ?? ?? ?? 3B 47 2C 75 02 EB 2E 89 47 2C B9 A7 00 00 00 EB 05 01 44 8F ?? 49 0B C9 75 F7 83 7F 40 00 74 15 8B 77 40 03 F0 EB 09 8B 1E 03 D8 01 03 83 C6 04 83 3E 00 75 F2 8B 74 24 24 8B DE 03 F0 B9 01 00 00 00 33 C0 F0 0F B1 4F 30 75 F7 AC\nep_only = false\n\n[Code-Lock vx.x]\nsignature = 43 4F 44 45 2D 4C 4F 43 4B 2E 4F 43 58 00\nep_only = true\n\n[CodeCrypt v0.14b]\nsignature = E9 C5 02 00 00 EB 02 83 3D 58 EB 02 FF 1D 5B EB 02 0F C7 5F\nep_only = true\n\n[CodeCrypt v0.15b]\nsignature = E9 31 03 00 00 EB 02 83 3D 58 EB 02 FF 1D 5B EB 02 0F C7 5F\nep_only = true\n\n[CodeCrypt v0.164]\nsignature = E9 2E 03 00 00 EB 02 83 3D 58 EB 02 FF 1D 5B EB 02 0F C7 5F EB 03 FF 1D 34\nep_only = true\n\n[CodeCrypt v0.16b - v0.163b]\nsignature = E9 2E 03 00 00 EB 02 83 3D 58 EB 02 FF 1D 5B EB 02 0F C7 5F\nep_only = true\n\n[codeCrypter 0.31]\nsignature = 50 58 53 5B 90 BB ?? ?? 40 00 FF E3 90 CC CC CC 55 8B EC 5D C3 CC CC CC CC CC CC CC CC CC CC CC\nep_only = false\n\n[codeCrypter 0.31 -> Tibbar]\nsignature = 50 58 53 5B 90 BB ?? ?? ?? 00 FF E3 90 CC CC CC 55 8B EC 5D C3 CC CC CC CC CC CC CC CC CC CC CC\nep_only = true\n\n[COP v1.0 (c) 1988]\nsignature = BF ?? ?? BE ?? ?? B9 ?? ?? AC 32 ?? ?? ?? AA E2 ?? 8B ?? ?? ?? EB ?? 90\nep_only = true\n\n[Copy Protector v2.0]\nsignature = 2E A2 ?? ?? 53 51 52 1E 06 B4 ?? 1E 0E 1F BA ?? ?? CD 21 1F\nep_only = true\n\n[CopyControl v3.03]\nsignature = CC 90 90 EB 0B 01 50 51 52 53 54 61 33 61 2D 35 CA D1 07 52 D1 A1 3C\nep_only = true\n\n[CopyMinder -> Microcosm.Ltd]\nsignature = 83 25 ?? ?? ?? ?? EF 6A 00 E8 ?? ?? ?? ?? E8 ?? ?? ?? ?? CC FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? FF 25\nep_only = true\n\n[CPAV]\nsignature = E8 ?? ?? 4D 5A B1 01 93 01 00 00 02\nep_only = true\n\n[CrackStop v1.01 (c) Stefan Esser 1997]\nsignature = B4 48 BB FF FF B9 EB 27 8B EC CD 21 FA FC\nep_only = true\n\n[CreateInstall Stub vx.x]\nsignature = 55 8B EC 81 EC 20 02 00 00 53 56 57 6A 00 FF 15 18 61 40 00 68 00 70 40 00 89 45 08 FF 15 14 61 40 00 85 C0 74 27 6A 00 A1 00 20 40 00 50 FF 15 3C 61 40 00 8B F0 6A 06 56 FF 15 38 61 40 00 6A 03 56 FF 15 38 61 40 00 E9 36 03 00 00 68 02 7F 00 00 33 F6 56\nep_only = true\n\n[CreateInstall v2003.3.5]\nsignature = 81 EC 0C 04 00 00 53 56 57 55 68 60 50 40 00 6A 01 6A 00 FF 15 D8 80 40 00 8B F0 FF 15 D4 80 40 00 3D B7 00 00 00 75 0F 56 FF 15 B8 80 40 00 6A 02 FF 15 A4 80 40 00 33 DB E8 F2 FE FF FF 68 02 7F 00 00 89 1D 94 74 40 00 53 89 1D 98 74 40 00 FF 15 E4 80 40\nep_only = false\n\n[Crinkler V0.1-V0.2 -> Rune L.H.Stubbe and Aske Simon Christensen]\nsignature = B9 ?? ?? ?? ?? 01 C0 68 ?? ?? ?? ?? 6A 00 58 50 6A 00 5F 48 5D BB 03 00 00 00 BE ?? ?? ?? ?? E9\nep_only = true\n\n[Crinkler V0.3-V0.4 -> Rune L.H.Stubbe and Aske Simon Christensen]\nsignature = B8 00 00 42 00 31 DB 43 EB 58\nep_only = true\n\n[Crunch 5 Fusion 4]\nsignature = EB 15 03 ?? ?? ?? 06 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 68 ?? ?? ?? ?? 55 E8\nep_only = false\n\n[Crunch v4.0]\nsignature = EB 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 E8 00 00 00 00 5D 81 ED 18 00 00 00 8B C5 55 60 9C 2B 85 E9 06 00 00 89 85 E1 06 00 00 FF 74 24 2C E8 BB 01 00 00 0F 82 92 05 00 00 E8 F1 03 00 00 49 0F 88 86 05 00 00 68 6C D9 B2 96 33 C0 50 E8 24\nep_only = true\n\n[Crunch v5 -> Bit-Arts]\nsignature = EB 15 03 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 68 00 00 00 00 55 E8 00 00 00 00 5D 81 ED 1D 00 00 00 8B C5 55 60 9C 2B 85 FC 07 00 00 89 85 E8 07 00 00 FF 74 24 2C E8 20 02 00 00 0F 82 94 06 00 00 E8 F3 04 00 00 49 0F 88 88 06 00 00 8B B5 E8 07 00\nep_only = true\n\n[Crunch/PE]\nsignature = 55 E8 ?? ?? ?? ?? 5D 83 ED 06 8B C5 55 60 89 AD ?? ?? ?? ?? 2B 85\nep_only = true\n\n[Crunch/PE v1.0.x.x]\nsignature = 55 E8 ?? ?? ?? ?? 5D 83 ED 06 8B C5 55 60 89 AD ?? ?? ?? ?? 2B 85 ?? ?? ?? ?? 89 85 ?? ?? ?? ?? 80 BD ?? ?? ?? ?? ?? 75 09 C6 85\nep_only = true\n\n[Crunch/PE v2.0.x.x]\nsignature = 55 E8 ?? ?? ?? ?? 5D 83 ED 06 8B C5 55 60 89 AD ?? ?? ?? ?? 2B 85 ?? ?? ?? ?? 89 85 ?? ?? ?? ?? 55 BB ?? ?? ?? ?? 03 DD 53 64 67 FF 36 ?? ?? 64 67 89 26\nep_only = true\n\n[Crunch/PE v3.0.x.x]\nsignature = EB 10 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 55 E8 ?? ?? ?? ?? 5D 81 ED 18 ?? ?? ?? 8B C5 55 60 9C 2B 85 ?? ?? ?? ?? 89 85 ?? ?? ?? ?? FF 74\nep_only = true\n\n[Crunch/PE v4.0]\nsignature = EB 10 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 55 E8 ?? ?? ?? ?? 5D 81 ED 18 ?? ?? ?? 8B C5 55 60 9C 2B 85 E9 06 ?? ?? 89 85 E1 06 ?? ?? FF 74 24 2C E8 BB 01 00 00 0F 82 92 05 00 00 E8 F1 03 00 00 49 0F 88 86 05 00 00 68 6C D9 B2 96 33 C0 50 E8 24\nep_only = false\n\n[Cruncher v1.0]\nsignature = 2E ?? ?? ?? ?? 2E ?? ?? ?? B4 30 CD 21 3C 03 73 ?? BB ?? ?? 8E DB 8D ?? ?? ?? B4 09 CD 21 06 33 C0 50 CB\nep_only = true\n\n[CrypKey v5 - v6]\nsignature = E8 ?? ?? ?? ?? 58 83 E8 05 50 5F 57 8B F7 81 EF ?? ?? ?? ?? 83 C6 39 BA ?? ?? ?? ?? 8B DF B9 0B ?? ?? ?? 8B 06\nep_only = true\n\n[CrypKey V5.6.X -> Kenonic Controls Ltd.]\nsignature = E8 ?? ?? ?? ?? E8 ?? ?? ?? ?? 83 F8 00 75 07 6A 00 E8\nep_only = true\n\n[CrypKey V5.6.X DLL -> Kenonic Controls Ltd.]\nsignature = 8B 1D ?? ?? ?? ?? 83 FB 00 75 0A E8 ?? ?? ?? ?? E8\nep_only = true\n\n[CrypKey V6.1X DLL -> CrypKey (Canada) Inc.]\nsignature = 83 3D ?? ?? ?? ?? 00 75 34 68 ?? ?? ?? ?? E8\nep_only = true\n\n[CRYPT Version 1.7 (c) Dismember]\nsignature = 0E 17 9C 58 F6 ?? ?? 74 ?? E9\nep_only = true\n\n[Crypter 3.1 -> SLESH]\nsignature = 68 FF 64 24 F0 68 58 58 58 58 FF D4 50 8B 40 F2 05 B0 95 F6 95 0F 85 01 81 BB FF 68\nep_only = false\n\n[Cryptic 2.0 -> Tughack]\nsignature = B8 00 00 40 00 BB ?? ?? ?? 00 B9 00 10 00 00 BA ?? ?? ?? 00 03 D8 03 C8 03 D1 3B CA 74 06 80 31 ?? 41 EB F6 FF E3\nep_only = true\n\n[Crypto-Lock v2.02 (Eng) -> Ryan Thian]\nsignature = 60 BE 15 90 40 00 8D BE EB 7F FF FF 57 83 CD FF EB 10 90 90 90 90 90 90 8A 06 46 88 07 47\nep_only = true\n\n[Crypto-Lock v2.02 (Eng) -> Ryan Thian]\nsignature = 60 BE 15 90 40 00 8D BE EB 7F FF FF 57 83 CD FF EB 10 90 90 90 90 90 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB 72 ED B8 01 00 00 00 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C0 01 DB 73 EF 75 09 8B 1E 83 EE FC 11 DB 73 E4 31 C9 83 E8 03 72 0D C1 E0\nep_only = true\n\n[Crypto-Lock v2.02 (Eng) -> Ryan Thian]\nsignature = 60 BE ?? 90 40 00 8D BE ?? ?? FF FF 57 83 CD FF EB 10 90 90 90 90 90 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB 72 ED B8 01 00 00 00 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C0 01 DB 73 EF 75 09 8B 1E 83 EE FC 11 DB 73 E4 31 C9 83 E8 03 72 0D C1 E0\nep_only = true\n\n[CRYPToCRACk's PE Protector V0.9.2 -> Lukas Fleischer]\nsignature = E8 01 00 00 00 E8 58 5B 81 E3 00 FF FF FF 66 81 3B 4D 5A 75 37 84 DB 75 33 8B F3 03 ?? ?? 81 3E 50 45 00 00 75 26\nep_only = true\n\n[CRYPToCRACk's PE Protector V0.9.3 -> Lukas Fleischer]\nsignature = 5B 81 E3 00 FF FF FF 66 81 3B 4D 5A 75 33 8B F3 03 73 3C 81 3E 50 45 00 00 75 26 0F B7 46 18 8B C8 69 C0 AD 0B 00 00 F7 E0 2D AB 5D 41 4B 69 C9 DE C0 00 00 03 C1\nep_only = true\n\n[CrypWrap vx.x]\nsignature = E8 B8 ?? ?? ?? E8 90 02 ?? ?? 83 F8 ?? 75 07 6A ?? E8 ?? ?? ?? ?? FF 15 49 8F 40 ?? A9 ?? ?? ?? 80 74 0E\nep_only = true\n\n[Cygwin32]\nsignature = 55 89 E5 83 EC 04 83 3D\nep_only = true\n\n[D1NS1G -> D1N]\nsignature = 18 37 00 00 00 00 00 00 01 00 0A 00 00 00 18 00 00 80 00 00 00 00 ?? ?? 18 37 00 00 00 00 02 00 00 00 88 00 00 80 38 00 00 80 96 00 00 80 50 00 00 80 00 00 00 00 ?? ?? 18 37 00 00 00 00 00 00 01 00 00 00 00 00 68 00 00 00 00 00 00 00 ?? ?? 18 37 00 00 00 00 00 00 01 00 00 00 00 00 78 00 00 00 B0 F0 00 00 10 00 00 00 00 00 00 00 00 00 00 00 C0 F0 00 00 60 00 00 00 00 00 00 00 00 00 00 00 06 00 44 00 56 00 43 00 4C 00 41 00 4C 00 0B 00 50 00 41 00 43 00 4B 00 41 00 47 00 45 00 49 00 4E 00 46 00 4F 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[D1S1G v1.1 Beta ++ Scrambled EXE -> D1N]\nsignature = E8 07 00 00 00 E8 1E 00 00 00 C3 90 58 89 C2 89 C2 25 00 F0 FF FF 50 83 C0 55 8D 00 FF 30 8D 40 04 FF 30 52 C3 8D 40 00 55 8B EC 83 C4 E8 53 56 57 8B 4D 10 8B 45 08 89 45 F8 8B 45 0C 89 45 F4 8D 41 61 8B 38 8D 41 65 8B 00 03 C7 89 45 FC 8D 41 69 8B 00 03 C7 8D 51 6D 8B 12 03 D7 83 C1 71 8B 09 03 CF 2B CA 72 0A 41 87 D1 80 31 FF 41 4A 75 F9 89 45 F0 EB 71 8B\nep_only = false\n\n[D1S1G v1.1 beta --> D1N]\nsignature = 00 00 00 00 ?? ?? ?? ?? 00 00 00 00 00 00 01 00 0A 00 00 00 18 00 00 80 00 00 00 00 ?? ?? ?? ?? 00 00 00 00 02 00 00 00 88 00 00 80 38 00 00 80 96 00 00 80 50 00 00 80 00 00 00 00 ?? ?? ?? ?? 00 00 00 00 00 00 01 00 00 00 00 00 68 00 00 00 00 00 00 00 ?? ?? ?? ?? 00 00 00 00 00 00 01 00 00 00 00 00 78 00 00 00 B0 ?? ?? 00 10 00 00 00 00 00 00 00 00 00 00 00 C0 ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 06 00 44 00 56 00 43 00 4C 00 41 00 4C 00 0B 00 50 00 41 00 43 00 4B 00 41 00 47 00 45 00 49 00 4E 00 46 00 4F 00 00 00\nep_only = false\n\n[DAEMON Protect v0.6.7]\nsignature = 60 60 9C 8C C9 32 C9 E3 0C 52 0F 01 4C 24 FE 5A 83 C2 0C 8B 1A 9D 61\nep_only = true\n\n[DalKrypt 1.0 - by DalKiT]\nsignature = 68 00 10 40 00 58 68 ?? ?? ?? 00 5F 33 DB EB 0D 8A 14 03 80 EA 07 80 F2 04 88 14 03 43 81 FB ?? ?? ?? 00 72 EB FF E7\nep_only = true\n\n[DBPE v1.53]\nsignature = 9C 55 57 56 52 51 53 9C FA E8 ?? ?? ?? ?? 5D 81 ED 5B 53 40 ?? B0 ?? E8 ?? ?? ?? ?? 5E 83 C6 11 B9 27 ?? ?? ?? 30 06 46 49 75 FA\nep_only = true\n\n[DBPE v2.10]\nsignature = 9C 6A 10 73 0B EB 02 C1 51 E8 06 ?? ?? ?? C4 11 73 F7 5B CD 83 C4 04 EB 02 99 EB FF 0C 24 71 01 E8 79 E0 7A 01 75 83 C4 04 9D EB 01 75 68 5F 20 40 ?? E8 B0 EF FF FF 72 03 73 01 75 BE\nep_only = true\n\n[DBPE v2.10 -> Ding Boy]\nsignature = EB 20 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 9C 55 57 56 52 51 53 9C E8 ?? ?? ?? ?? 5D 81 ED ?? ?? ?? ?? EB 58 75 73 65 72 33 32 2E 64 6C 6C ?? 4D 65 73 73 61 67 65 42 6F 78 41 ?? 6B 65 72 6E 65 6C\nep_only = true\n\n[DBPE v2.33 -> Ding Boy]\nsignature = EB 20 ?? ?? 40 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 9C 55 57 56 52 51 53 9C E8 ?? ?? ?? ?? 5D 81 ED ?? ?? ?? ?? 9C 6A 10 73 0B EB 02 C1 51 E8 06 ?? ?? ?? C4 11 73 F7 5B CD 83 C4 04 EB 02 99 EB FF 0C 24 71\nep_only = true\n\n[DBPE vx.xx -> Ding Boy]\nsignature = EB 20 ?? ?? 40 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 9C 55 57 56 52 51 53 9C E8 ?? ?? ?? ?? 5D 81 ED\nep_only = true\n\n[DCrypt Private 0.9b -> drmist]\nsignature = B9 ?? ?? ?? 00 E8 00 00 00 00 58 68 ?? ?? ?? 00 83 E8 0B 0F 18 00 D0 00 48 E2 FB C3\nep_only = true\n\n[DEF 1.0 -> bart/xt]\nsignature = BE ?? ?? 40 00 6A ?? 59 80 7E 07 00 74 11 8B 46 0C 05 00 00 40 00 8B 56 10 30 10 40 4A 75 FA 83 C6 28 E2 E4 68 ?? ?? 40 00 C3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = true\n\n[DEF v1.0]\nsignature = BE ?? 01 40 00 6A 05 59 80 7E 07 00 74 11 8B 46\nep_only = true\n\n[DEF v1.0]\nsignature = BE ?? 01 40 00 6A ?? 59 80 7E 07 00 74 11 8B 46 0C 05 00 00 40 00 8B 56 10 30 10 40 4A 75 FA 83 C6 28 E2 E4 68 ?? 10 40 00 C3\nep_only = false\n\n[DEF v1.00 (Eng) -> bart/xt]\nsignature = BE ?? 01 40 00 6A ?? 59 80 7E 07 00 74 11 8B 46 0C 05 00 00 40 00 8B 56 10 30 10 40 4A 75 FA 83 C6 28 E2 E4 68 ?? ?? 40 00 C3 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = true\n\n[dePACK -> deNULL]\nsignature = EB 01 DD 60 68 00 ?? ?? ?? 68 ?? ?? 00 00 E8 ?? 00 00 00\nep_only = true\n\n[dePACK -> deNULL]\nsignature = EB 01 DD 60 68 00 ?? ?? ?? 68 ?? ?? ?? 00 E8 ?? 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? D2\nep_only = true\n\n[Dev-C++ 4.9.9.2 -> Bloodshed Software]\nsignature = 55 89 E5 83 EC 08 C7 04 24 01 00 00 00 FF 15 ?? ?? ?? 00 E8 C8 FE FF FF 90 8D B4 26 00 00 00 00 55 89 E5 83 EC 08 C7 04 24 02 00 00 00 FF 15 ?? ?? ?? 00 E8 A8 FE FF FF 90 8D B4 26 00 00 00 00 55 8B 0D ?? ?? ?? 00 89 E5 5D FF E1 8D 74 26 00 55 8B 0D\nep_only = true\n\n[Dev-C++ v4]\nsignature = 55 89 E5 83 EC 08 83 C4 F4 6A ?? A1 ?? ?? ?? 00 FF D0 E8 ?? FF FF FF\nep_only = false\n\n[Dev-C++ v5]\nsignature = 55 89 E5 83 EC 14 6A ?? FF 15 ?? ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00\nep_only = false\n\n[DIET v1.00, v1.00d]\nsignature = BF ?? ?? 3B FC 72 ?? B4 4C CD 21 BE ?? ?? B9 ?? ?? FD F3 A5 FC\nep_only = true\n\n[DIET v1.00d]\nsignature = FC 06 1E 0E 8C C8 01 ?? ?? ?? BA ?? ?? 03 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00\nep_only = true\n\n[DIET v1.02b, v1.10a, v1.20]\nsignature = BE ?? ?? BF ?? ?? B9 ?? ?? 3B FC 72 ?? B4 4C CD 21 FD F3 A5 FC\nep_only = true\n\n[DIET v1.44, v1.45f]\nsignature = F8 9C 06 1E 57 56 52 51 53 50 0E FC 8C C8 BA ?? ?? 03 D0 52\nep_only = true\n\n[Ding Boy's PE-lock Phantasm v0.8]\nsignature = 55 57 56 52 51 53 E8 00 00 00 00 5D 8B D5 81 ED 0D 39 40 00\nep_only = true\n\n[Ding Boy's PE-lock Phantasm v1.0 / v1.1]\nsignature = 55 57 56 52 51 53 66 81 C3 EB 02 EB FC 66 81 C3 EB 02 EB FC\nep_only = true\n\n[Ding Boy's PE-lock Phantasm v1.5b3]\nsignature = 9C 55 57 56 52 51 53 9C FA E8 00 00 00 00 5D 81 ED 5B 53 40 00 B0\nep_only = true\n\n[Ding Boy's PE-lock v0.07]\nsignature = 55 57 56 52 51 53 E8 00 00 00 00 5D 8B D5 81 ED 23 35 40 00\nep_only = true\n\n[diPacker V1.X -> diProtector Software]\nsignature = 0F 00 2D E9 01 00 A0 E3 68 01 00 EB 8C 00 00 EB 2B 00 00 EB 00 00 20 E0 1C 10 8F E2 8E 20 8F E2 00 30 A0 E3 67 01 00 EB 0F 00 BD E8 00 C0 8F E2 00 F0 9C E5\nep_only = true\n\n[diProtector V1.X -> diProtector Software]\nsignature = 01 00 A0 E3 14 00 00 EB 00 00 20 E0 44 10 9F E5 03 2A A0 E3 40 30 A0 E3 AE 00 00 EB 30 00 8F E5 00 20 A0 E1 3A 0E 8F E2 00 00 80 E2 1C 10 9F E5 20 30 8F E2 0E 00 00 EB 14 00 9F E5 14 10 9F E5 7F 20 A0 E3 C5 00 00 EB 04 C0 8F E2 00 F0 9C E5\nep_only = true\n\n[DJoin v0.7 public (RC4 encryption) -> drmist]\nsignature = C6 05 ?? ?? 40 00 00 C6 05 ?? ?? 40 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 ?? ?? ?? ?? 00 ?? ?? ?? ?? ?? 00\nep_only = true\n\n[DJoin v0.7 public (xor encryption) -> drmist]\nsignature = C6 05 ?? ?? 40 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 ?? ?? ?? ?? 00 ?? ?? ?? ?? ?? 00\nep_only = true\n\n[DotFix Nice Protect 2.1 -> GPcH Soft]\nsignature = E9 FF 00 00 00 60 8B 74 24 24 8B 7C 24 28 FC B2 80 33 DB A4 B3 02 E8 6D 00 00 00 73 F6 33 C9 E8 64 00 00 00 73 1C 33 C0 E8 5B 00 00 00 73 23 B3 02 41 B0 10 E8 4F 00 00 00 12 C0 73 F7 75 3F AA EB D4 E8 4D 00 00 00 2B CB 75 10 E8 42 00 00 00 EB 28 AC D1 E8 74 4D 13 C9 EB 1C 91 48 C1 E0 08 AC E8 2C 00 00 00 3D 00 7D 00 00 73 0A 80 FC 05 73 06 83 F8 7F 77 02 41 41 95 8B C5 B3 01 56 8B F7 2B F0 F3 A4 5E EB 8E 02 D2 75 05 8A 16 46 12 D2 C3 33 C9 41 E8 EE FF FF FF 13 C9 E8 E7 FF FF FF 72 F2 C3 2B 7C 24 28 89 7C 24 1C 61 C3 60 B8 ?? ?? ?? ?? 03 C5 50 B8 ?? ?? ?? ?? 03 C5 FF 10 BB ?? ?? ?? ?? 03 DD 83 C3 0C 53 50 B8 ?? ?? ?? ?? 03 C5 FF 10 6A 40 68 00 10 00 00 FF 74 24 2C 6A 00 FF D0 89 44 24 1C 61 C3\nep_only = false\n\n[DotFix NiceProtect vna]\nsignature = 60 E8 55 00 00 00 8D BD 00 10 40 00 68 ?? ?? ?? 00 03 3C 24 8B F7 90 68 31 10 40 00 9B DB E3 55 DB 04 24 8B C7 DB 44 24 04 DE C1 DB 1C 24 8B 1C 24 66 AD 51 DB 04 24 90 90 DA 8D 77 10 40 00 DB 1C 24 D1 E1 29\nep_only = true\n\n[Dr.Web Virus-Finding Engine -> InSoft EDV-Systeme]\nsignature = B8 01 00 00 00 C2 0C 00 8D 80 00 00 00 00 8B D2 8B ?? 24 04\nep_only = true\n\n[DragonArmor -> Orient]\nsignature = BF 4C ?? ?? 00 83 C9 FF 33 C0 68 34 ?? ?? 00 F2 AE F7 D1 49 51 68 4C ?? ?? 00 E8 11 0A 00 00 83 C4 0C 68 4C ?? ?? 00 FF 15 00 ?? ?? 00 8B F0 BF 4C ?? ?? 00 83 C9 FF 33 C0 F2 AE F7 D1 49 BF 4C ?? ?? 00 8B D1 68 34 ?? ?? 00 C1 E9 02 F3 AB 8B CA 83 E1 03 F3 AA BF 5C ?? ?? 00 83 C9 FF 33 C0 F2 AE F7 D1 49 51 68 5C ?? ?? 00 E8 C0 09 00 00 8B 1D 04 ?? ?? 00 83 C4 0C 68 5C ?? ?? 00 56 FF D3 A3 D4 ?? ?? 00 BF 5C ?? ?? 00 83 C9 FF 33 C0 F2 AE F7 D1 49 BF 5C ?? ?? 00 8B D1 68 34 ?? ?? 00 C1 E9 02 F3 AB 8B CA 83 E1\nep_only = false\n\n[Dropper Creator V0.1 -> Conflict]\nsignature = 60 E8 00 00 00 00 5D 8D 05 ?? ?? ?? ?? 29 C5 8D 85 ?? ?? ?? ?? 31 C0 64 03 40 30 78 0C 8B 40 0C 8B 70 1C AD 8B 40 08 EB 09\nep_only = false\n\n[DSHIELD]\nsignature = 06 E8 ?? ?? 5E 83 EE ?? 16 17 9C 58 B9 ?? ?? 25 ?? ?? 2E\nep_only = true\n\n[Dual's eXe 1.0]\nsignature = 55 8B EC 81 EC 00 05 00 00 E8 00 00 00 00 5D 81 ED 0E 00 00 00 8D 85 08 03 00 00 89 28 33 FF 8D 85 7D 02 00 00 8D 8D 08 03 00 00 2B C8 8B 9D 58 03 00 00 E8 1C 02 00 00 8D 9D 61 02 00 00 8D B5 7C 02 00 00 46 80 3E 00 74 24 56 FF 95 0A 04 00 00 46 80 3E 00\nep_only = true\n\n[Dual's eXe Encryptor 1.0b -> Dual]\nsignature = 55 8B EC 81 EC 00 05 00 00 E8 00 00 00 00 5D 81 ED 0E 00 00 00 8D 85 3A 04 00 00 89 28 33 FF 8D 85 80 03 00 00 8D 8D 3A 04 00 00 2B C8 8B 9D 8A 04 00 00 E8 24 02 00 00 8D 9D 58 03 00 00 8D B5 7F 03 00 00 46 80 3E 00 74 24 56 FF 95 58 05 00 00 46 80 3E 00 75 FA 46 80 3E 00 74 E7 50 56 50 FF 95 5C 05 00 00 89 03 58 83 C3 04 EB E3 8D 85 69 02 00 00 FF D0 8D 85 56 04 00 00 50 68 1F 00 02 00 6A 00 8D 85 7A 04 00 00 50\nep_only = true\n\n[dUP 2.x Patcher --> www.diablo2oo2.cjb.net]\nsignature = 8B CB 85 C9 74 ?? 80 3A 01 74 08 AC AE 75 0A 42 49 EB EF 47 46 42 49 EB E9\nep_only = false\n\n[dUP2 -> diablo2oo2]\nsignature = E8 ?? ?? ?? ?? E8 ?? ?? ?? ?? 8B F0 6A 00 68 ?? ?? ?? ?? 56 E8 ?? ?? ?? ?? A2 ?? ?? ?? ?? 6A 00 68 ?? ?? ?? ?? 56 E8 ?? ?? ?? ?? A2 ?? ?? ?? ?? 6A 00 68 ?? ?? ?? ?? 56 E8 ?? ?? ?? ?? A2 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 56 E8 ?? ?? ?? ?? 3C 01 75 19 BE ?? ?? ?? ?? 68 00 02 00 00 56 68\nep_only = true\n\n[DxPack 1.0]\nsignature = 60 E8 ?? ?? ?? ?? 5D 8B FD 81 ED ?? ?? ?? ?? 2B B9 ?? ?? ?? ?? 81 EF ?? ?? ?? ?? 83 BD ?? ?? ?? ?? ?? 0F 84\nep_only = true\n\n[DxPack V0.86 -> Dxd]\nsignature = 60 E8 00 00 00 00 5D 8B FD 81 ED 06 10 40 00 2B BD 94 12 40 00 81 EF 06 00 00 00 83 BD 14 13 40 00 01 0F 84 2F 01 00 00\nep_only = true\n\n[DzA Patcher v1.3 Loader]\nsignature = BF 00 40 40 00 99 68 48 20 40 00 68 00 20 40 00 52 52 52 52 52 52 52 57 E8 15 01 00 00 85 C0 75 1C 99 52 52 57 52 E8 CB 00 00 00 FF 35 4C 20 40 00 E8 D2 00 00 00 6A 00 E8 BF 00 00 00 99 68 58 20 40 00 52 52 68 63 10 40 00 52 52 E8 DB 00 00 00 6A FF FF 35\nep_only = false\n\n[E language]\nsignature = E8 06 00 00 00 50 E8 ?? 01 00 00 55 8B EC 81 C4 F0 FE FF FF\nep_only = true\n\n[E.You.Di.Dai-> YueHeiFengGao]\nsignature = 55 8B EC B8 ?? ?? ?? ?? E8 ?? ?? ?? ?? 53 56 57 0F 31 8B D8 0F 31 8B D0 2B D3 C1 EA 10 B8 ?? ?? ?? ?? 0F 6E C0 B8 ?? ?? ?? ?? 0F 6E C8 0F F5 C1 0F 7E C0 0F 77 03 C2 ?? ?? ?? ?? ?? FF E0\nep_only = true\n\n[E2C by DoP]\nsignature = BE ?? ?? BF ?? ?? B9 ?? ?? FC 57 F3 A5 C3\nep_only = true\n\n[EEXE Version 1.12]\nsignature = B4 30 CD 21 3C 03 73 ?? BA 1F 00 0E 1F B4 09 CD 21 B8 FF 4C CD 21\nep_only = true\n\n[Elicense System V4.0.0.0 -> ViaTech Inc]\nsignature = 00 00 00 00 63 79 62 00 65 6C 69 63 65 6E 34 30 2E 64 6C 6C 00 00 00 00\nep_only = false\n\n[Embed PE v1.13 -> cyclotron]\nsignature = 83 EC 50 60 68 5D B9 52 5A E8 2F 99 00 00 DC 99 F3 57 05 68\nep_only = true\n\n[EmbedPE 1.13 -> cyclotron]\nsignature = 83 EC 50 60 68 5D B9 52 5A E8 2F 99 00 00 DC 99 F3 57 05 68 B8 5E 2D C6 DA FD 48 63 05 3C 71 B8 5E 97 7C 36 7E 32 7C 08 4F 06 51 64 10 A3 F1 4E CF 25 CB 80 D2 99 54 46 ED E1 D3 46 86 2D 10 68 93 83 5C 46 4D 43 9B 8C D6 7C BB 99 69 97 71 2A 2F A3 38 6B 33\nep_only = true\n\n[EmbedPE V1.00-V1.24 -> cyclotron]\nsignature = 00 00 00 00 ?? ?? ?? ?? 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 4B 45 52 4E 45 4C 33 32 2E 64 6C 6C 00 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[EmbedPE v1.24 -> cyclotron]\nsignature = 83 EC 50 60 68 ?? ?? ?? ?? E8 CB FF 00 00\nep_only = true\n\n[EmbedPE V1.X -> cyclotron]\nsignature = 83 EC 50 60 68 ?? ?? ?? ?? E8 ?? ?? 00 00\nep_only = true\n\n[EncryptPE 1.2003.3.18-1.2003.5.18 -> WFS]\nsignature = 60 9C 64 FF 35 00 00 00 00 E8 79 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 47 65 74 53 79 73 74 65 6D 44 69 72 65 63 74 6F 72 79 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 4D 61 70 70 69 6E 67 41 00 00 00 4D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 55 6E 6D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 43 6C 6F 73 65 48 61 6E 64 6C 65 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 45 78 69 74 50 72 6F 63 65 73 73\nep_only = true\n\n[EncryptPE 1.2003.5.18 -> WFS]\nsignature = 60 9C 64 FF 35 00 00 00 00 E8 79\nep_only = true\n\n[EncryptPE 2.2004.6.16-2.2006.6.30 -> WFS]\nsignature = 60 9C 64 FF 35 00 00 00 00 E8 7A 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 47 65 74 53 79 73 74 65 6D 44 69 72 65 63 74 6F 72 79 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 4D 61 70 70 69 6E 67 41 00 00 00 4D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 55 6E 6D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 43 6C 6F 73 65 48 61 6E 64 6C 65 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 45 78 69 74 50 72 6F 63 65 73 73\nep_only = true\n\n[EncryptPE 2.2004.8.10 - 2.2005.3.14 -> WFS]\nsignature = 60 9C 64 FF 35 00 00 00 00 E8 7A\nep_only = true\n\n[EncryptPE 2.2006.7.10-2.2006.10.25 -> WFS]\nsignature = 60 9C 64 FF 35 00 00 00 00 E8 73 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 47 65 74 54 65 6D 70 50 61 74 68 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 4D 61 70 70 69 6E 67 41 00 00 00 4D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 55 6E 6D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 43 6C 6F 73 65 48 61 6E 64 6C 65 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 45 78 69 74 50 72 6F 63 65 73 73\nep_only = true\n\n[EncryptPE V2.2006.1.15 -> WFS]\nsignature = 45 50 45 3A 20 45 6E 63 72 79 70 74 50 45 20 56 32 2E 32 30 30 36 2E 31 2E 31 35\nep_only = false\n\n[EncryptPE V2.2006.7.10 -> WFS]\nsignature = 60 9C 64 FF 35 00 00 00 00 E8 73 01 00 00\nep_only = true\n\n[EncryptPE V2.2006.7.10 -> WFS]\nsignature = 60 9C 64 FF 35 00 00 00 00 E8 73 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 47 65 74 54 65 6D 70 50 61 74 68 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 4D 61 70 70 69 6E 67 41 00 00 00 4D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 55 6E 6D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 43 6C 6F 73 65 48 61 6E 64 6C 65 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 45 78 69 74 50 72 6F 63 65 73 73 00 00 00 00\nep_only = true\n\n[EncryptPE V2.2007.04.11 -> WFS]\nsignature = 60 9C 64 FF 35 00 00 00 00 E8 1B 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 47 65 74 54 65 6D 70 50 61 74 68 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 4D 61 70 70 69 6E 67 41 00 00 00 4D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 55 6E 6D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 43 6C 6F 73 65 48 61 6E 64 6C 65 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 45 78 69 74 50 72 6F 63 65 73 73\nep_only = true\n\n[EncryptPE V2.2007.4.11 -> WFS]\nsignature = 60 9C 64 FF 35 00 00 00 00 E8 1B 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 47 65 74 54 65 6D 70 50 61 74 68 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 4D 61 70 70 69 6E 67 41 00 00 00 4D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 55 6E 6D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 43 6C 6F 73 65 48 61 6E 64 6C 65 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 45 78 69 74 50 72 6F 63 65 73 73 00 00 00 00 00 00\nep_only = true\n\n[ENIGMA Protector -> Sukhov Vladimir]\nsignature = 45 6E 69 67 6D 61 20 70 72 6F 74 65 63 74 6F 72 20 76 31\nep_only = false\n\n[Enigma Protector 1.0X -> Sukhov Vladimir]\nsignature = 60 E8 00 00 00 00 5D 83 ?? ?? 81 ED ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 01 00 00 00 ?? 83 C4 04 EB 02 ?? ?? 60 E8 24 00 00 00 00 00 ?? EB 02 ?? ?? 8B 44 24 0C 83 80 B8 00 00 00 03 31 C0 C3 83 C0 08 EB 02 ?? ?? 89 C4 61 EB 2E ?? ?? ?? ?? ?? ?? ?? EB 01 ?? 31 C0 EB 01 ?? 64 FF 30 EB 01 ?? 64 89 20 EB 02 ?? ?? 89 00 9A 64 8F 05 00 00 00 00 EB 02 C1 ?? 58 61 EB 01\nep_only = false\n\n[Enigma protector 1.10 (unregistered)]\nsignature = 60 72 80 72 88 72 8C 72 90 72 94 72 98 72 9C 72 A0 72 A4 59 A8 B0 5C E8 39 D5 39 E4 39 F1 31 F9 5C 3D 58 CA 5F 56 B1 2D 20 7A 2E 30 16 32 72 2B 72 36 1C A5 33 A9 9C AD 9C B1 9C B5 9C B9 9C BD 9C C1 9C C5 9C C9 9C CD 9C D1 9C D5 9C D9 9C DD 9C E1 9C E5 89\nep_only = false\n\n[Enigma protector 1.10 (unregistered)]\nsignature = 60 72 80 72 88 72 8C 72 90 72 94 72 98 72 9C 72 A0 72 A4 59 A8 B0 5C E8 39 D5 39 E4 39 F1 31 F9 5C 3D 58 CA 5F 56 B1 2D 20 7A 2E 30 16 32 72 2B 72 36 1C A5 33 A9 9C AD 9C B1 9C B5 9C B9 9C BD 9C C1 9C C5 9C C9 9C CD 9C D1 9C D5 9C D9 9C DD 9C E1 9C E5 89 E9 51 0B C4 80 BC 7E 35 09 37 E7 C9 3D C9 45 C9 4D 74 92 BA E4 E9 24 6B DF 3E 0E 38 0C 49 10 27 80 51 A1 8E 3A A3 C8 AE 3B 1C 35\nep_only = false\n\n[Enigma protector 1.10/1.11 -> Vladimir Sukhov]\nsignature = 60 E8 00 00 00 00 5D 83 ED 06 81 ED ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 01 00 00 00 9A 83 C4 04 EB 02 FF 35 60 E8 24 00 00 00 00 00 FF EB 02 CD 20 8B 44 24 0C 83 80 B8 00 00 00 03 31\nep_only = false\n\n[Enigma protector 1.10/1.11 -> Vladimir Sukhov]\nsignature = 60 E8 00 00 00 00 5D 83 ED 06 81 ED ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 01 00 00 00 9A 83 C4 04 EB 02 FF 35 60 E8 24 00 00 00 00 00 FF EB 02 CD 20 8B 44 24 0C 83 80 B8 00 00 00 03 31 C0 C3 83 C0 08 EB 02 FF 15 89 C4 61 EB 2E EA EB 2B 83 04 24 03 EB 01 00 31 C0 EB 01 85 64 FF 30 EB 01 83 64 89 20 EB 02 CD 20 89 00 9A 64 8F 05 00 00 00 00 EB 02 C1 90 58 61 EB 01 3E EB ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 01 00 00 00 9A 83 C4 04 01 E8 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 01 00 00 00 9A 83 C4 04 05 F6 01 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 01 00 00 00 9A 83 C4 04 B9 3D 1A\nep_only = false\n\n[Enigma protector 1.12 -> Vladimir Sukhov]\nsignature = 60 E8 00 00 00 00 5D 83 ED 06 81 ED ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 01 00 00 00 9A 83 C4 04 EB 02 FF 35 60 E8 24 00 00 00 00 00 FF EB 02 CD 20 8B 44 24 0C 83 80 B8 00 00 00 03 31 C0 C3 83 C0 08 EB 02 FF 15 89 C4 61 EB 2E EA EB 2B 83 04 24 03 EB 01 00 31 C0 EB 01 85 64 FF 30 EB 01 83 64 89 20 EB 02 CD 20 89 00 9A 64 8F 05 00 00 00 00 EB 02 C1 90 58 61 EB 01 3E EB 04 ?? ?? ?? ?? B8 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 01 00 00 00 9A 83 C4 04 01 E8 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 01 00 00 00 9A 83 C4 04 05 F6 01 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 01 00 00 00 9A 83 C4 04 B9 44 1A\nep_only = false\n\n[Enigma Protector 1.1X-1.3X -> Sukhov Vladimir & Serge N. Markin]\nsignature = 55 8B EC 83 C4 F0 B8 00 10 40 00 E8 01 00 00 00 9A 83 C4 10 8B E5 5D E9\nep_only = false\n\n[Enigma Protector 1.31 Build 20070615 Dll -> Sukhov Vladimir & Serge N. Markin]\nsignature = 60 E8 00 00 00 00 5D 81 ED 06 00 00 00 81 ED ?? ?? ?? ?? E9 49 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 8A 84 24 28 00 00 00 80 F8 01 0F 84 07 00 00 00 B8 ?? ?? ?? ?? FF E0 E9 04 00 00 00 ?? ?? ?? ?? B8 ?? ?? ?? ?? 03 C5 81 C0 ?? ?? ?? ?? B9 ?? ?? ?? ?? BA ?? ?? ?? ?? 30 10 40 49 0F 85 F6 FF FF FF E9 04 00 00 00\nep_only = true\n\n[Enigma Protector 1.X -> Sukhov Vladimir & Serge N. Markin]\nsignature = 00 00 00 56 69 72 74 75 61 6C 41 6C 6C 6F 63 00 00 00 56 69 72 74 75 61 6C 46 72 65 65 00 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 45 78 69 74 50 72 6F 63 65 73 73 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 4D 65 73 73 61 67 65 42 6F 78 41 00 00 00 52 65 67 43 6C 6F 73 65 4B 65 79 00 00 00 53 79 73 46 72 65 65 53 74 72 69 6E 67 00 00 00 43 72 65 61 74 65 46 6F 6E 74 41 00 00 00 53 68 65 6C 6C 45 78 65 63 75 74 65 41 00 00\nep_only = false\n\n[ENIGMA Protector V1.1-> Sukhov Vladimir]\nsignature = 60 E8 00 00 00 00 5D 83 ?? ?? 81\nep_only = true\n\n[ENIGMA Protector V1.1-V1.2-> Sukhov Vladimir]\nsignature = 60 E8 00 00 00 00 5D 83 ED 06 81\nep_only = true\n\n[Enigma Protector v1.12 LITE]\nsignature = 60 E8 00 00 00 00 5D 83 ED 06 81 ED ?? ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 01 00 00 00 9A 83 C4 04 EB 02 FF 35 60 E8 24 00 00 00 00 00 FF EB 02 CD 20 8B 44 24 0C 83 80 B8 00 00 00 03 31\nep_only = true\n\n[ENIGMA Protector V1.12-> Sukhov Vladimir]\nsignature = 60 E8 00 00 00 00 5D 83 C5 FA 81 ED ?? ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 01 00 00 00 9A 83 C4 04 EB 02 FF 35 60 E8 24 00 00 00 00 00 FF EB 02 CD 20 8B 44 24 0C 83 80 B8 00 00 00 03 31\nep_only = true\n\n[EP v1.0]\nsignature = 50 83 C0 17 8B F0 97 33 C0 33 C9 B1 24 AC 86 C4 AC AA 86 C4 AA E2 F6 00 B8 40 00 03 00 3C 40 D2 33 8B 66 14 50 70 8B 8D 34 02 44 8B 18 10 48 70 03 BA 0C ?? ?? ?? ?? C0 33 FE 8B 30 AC 30 D0 C1 F0 10 C2 D0 30 F0 30 C2 C1 AA 10 42 42 CA C1 E2 04 5F E9 5E B1\nep_only = true\n\n[EPW v1.2]\nsignature = 06 57 1E 56 55 52 51 53 50 2E ?? ?? ?? ?? 8C C0 05 ?? ?? 2E ?? ?? ?? 8E D8 A1 ?? ?? 2E\nep_only = true\n\n[EPW v1.30]\nsignature = 06 57 1E 56 55 52 51 53 50 2E 8C 06 08 00 8C C0 83 C0 10 2E\nep_only = true\n\n[Escargot 0.1 (final) -> ++Meat]\nsignature = EB 04 40 30 2E 31 60 68 61 ?? ?? ?? 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 B8 92 ?? ?? ?? 8B 00 FF D0 50 B8 CD ?? ?? ?? 81 38 DE C0 37 13 75 2D 68 C9 ?? ?? ?? 6A 40 68 00 ?? 00 00 68 00 00 ?? ?? B8 96 ?? ?? ?? 8B 00 FF D0 8B 44 24 F0 8B 4C 24 F4 EB 05 49 C6 04 01 40 0B C9 75 F7 BE 00 10 ?? ?? B9 00 ?? ?? 00 EB 05 49 80 34 31 40 0B C9 75 F7 58 0B C0 74 08 33 C0 C7 00 DE C0 AD 0B BE ?? ?? ?? ?? E9 AC 00 00 00 8B 46 0C BB 00 00 ?? ?? 03 C3 50 50\nep_only = true\n\n[Escargot 0.1 - by ueMeat]\nsignature = EB 08 28 65 73 63 30 2E 31 29 60 68 2B ?? ?? ?? 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 B8 5C ?? ?? ?? 8B 00 FF D0 50 BE 00 10 ?? ?? B9 00 ?? ?? 00 EB 05 49 80 34 31 40 0B C9 75 F7 58 0B C0 74 08 33 C0 C7 00 DE C0 AD 0B BE ?? ?? ?? ?? E9 AC 00 00 00 8B 46 0C BB 00 00 ?? ?? 03 C3 50 50 B8 54 ?? ?? ?? 8B 00 FF D0 5F 80 3F 00 74 06 C6 07 00 47 EB F5 33 FF 8B 16 0B D2 75 03 8B 56 10 03 D3 03 D7 8B 0A C7 02 00 00 00 00 0B C9 74 4B F7 C1 00 00 00 80 74 14 81 E1 FF FF 00 00 50 51 50 B8 50\nep_only = false\n\n[Escargot V0.1 -> ++Meat]\nsignature = EB 04 40 30 2E 31 60 68 61\nep_only = true\n\n[Excalibur 1.03 -> forgot]\nsignature = E9 00 00 00 00 60 E8 14 00 00 00 5D 81 ED 00 00 00 00\nep_only = true\n\n[Excalibur V1.03 -> forgot]\nsignature = E9 00 00 00 00 60 E8 14 00 00 00 5D 81 ED 00 00 00 00 6A 45 E8 A3 00 00 00 68 00 00 00 00 E8 58 61 EB 39\nep_only = true\n\n[eXcalibur v1.03 -> forgot/us]\nsignature = E9 00 00 00 00 60 E8 14 00 00 00 5D 81 ED 00 00 00 00 6A 45 E8 A3 00 00 00 68 00 00 00 00 E8 58 61 EB 39 20 45 78 63 61 6C 69 62 75 72 20 28 63 29 20 62 79 20 66 6F 72 67 6F 74 2F 75 53 2F 44 46 43 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20\nep_only = true\n\n[Exe Guarder v1.8 -> Exeicon.com]\nsignature = 55 8B EC 83 C4 D0 53 56 57 8D 75 FC 8B 44 24 30 25 00 00 FF FF 81 38 4D 5A 90 00 74 07 2D 00 10 00 00 EB F1 89 45 FC E8 C8 FF FF FF 2D B2 04 00 00 89 45 F4 8B 06 8B 40 3C 03 06 8B 40 78 03 06 8B C8 8B 51 20 03 16 8B 59 24 03 1E 89 5D F0 8B 59 1C 03 1E 89\nep_only = true\n\n[EXE joiner -> Amok]\nsignature = A1 14 A1 40 00 C1 E0 02 A3 18 A1 40\nep_only = true\n\n[Exe Locker 1.0 -> IonIce]\nsignature = E8 00 00 00 00 60 8B 6C 24 20 81 ED 05 00 00 00\nep_only = true\n\n[Exe Locker v1.0 --> IonIce]\nsignature = E8 00 00 00 00 60 8B 6C 24 20 81 ED 05 00 00 00 3E 8F 85 6C 00 00 00 3E 8F 85 68 00 00 00 3E 8F 85 64 00 00 00 3E 8F 85 60 00 00 00 3E 8F 85 5C 00 00 00 3E 8F 85 58 00 00 00 3E 8F 85 54 00 00\nep_only = true\n\n[EXE Manager Version 3.0 1994 (c) Solar Designer]\nsignature = B4 30 1E 06 CD 21 2E ?? ?? ?? BF ?? ?? B9 ?? ?? 33 C0 2E ?? ?? 47 E2\nep_only = true\n\n[EXE Packer v7.0 by TurboPower Software]\nsignature = 1E 06 8C C3 83 ?? ?? 2E ?? ?? ?? ?? B9 ?? ?? 8C C8 8E D8 8B F1 4E 8B FE\nep_only = true\n\n[EXE Shield v0.1b - v0.3b, v0.3 -> SMoKE]\nsignature = E8 04 00 00 00 83 60 EB 0C 5D EB 05\nep_only = true\n\n[EXE Shield V0.5 -> Smoke]\nsignature = E8 04 00 00 00 83 60 EB 0C 5D EB 05 45 55 EB 04 B8 EB F9 00 C3 E8 00 00 00 00 5D 81 ED BC 1A 40 00 EB 01 00 8D B5 46 1B 40 00 BA B3 0A 00 00 EB 01 00 8D 8D F9 25 40 00 8B 09 E8 14 00 00 00 83 EB 01 00 8B FE E8 00 00 00 00 58 83 C0 07 50 C3 00 EB 04 58 40\nep_only = true\n\n[EXE Shield V0.5 -> Smoke]\nsignature = E8 04 00 00 00 83 60 EB 0C 5D EB 05 45 55 EB 04 B8 EB F9 00 C3 E8 00 00 00 00 5D 81 ED BC 1A 40 00 EB 01 00 8D B5 46 1B 40 00 BA B3 0A 00 00 EB 01 00 8D 8D F9 25 40 00 8B 09 E8 14 00 00 00 83 EB 01 00 8B FE E8 00 00 00 00 58 83 C0 07 50 C3 00 EB 04 58 40 50 C3 8A 06 46 EB 01 00 D0 C8 E8 14 00 00 00 83 EB 01 00 2A C2 E8 00 00 00 00 5B 83 C3 07 53 C3 00 EB 04 5B 43 53 C3 EB 01 00 32 C2 E8 0B 00 00 00 00 32 C1 EB 01 00 C0 C0 02 EB 09 2A C2 5B EB 01 00 43 53 C3 88 07 EB 01 00 47 4A 75 B4 90\nep_only = true\n\n[EXE Shield V0.6 -> SMoKE]\nsignature = E8 04 00 00 00 83 60 EB 0C 5D EB 05 45 55 EB 04 B8 EB F9 00 C3 E8 00 00 00 00 5D 81 ED D4 1A 40 00 EB 01 00 8D B5 5E 1B 40 00 BA A1 0B 00 00 EB 01 00 8D 8D FF 26 40 00 8B 09 E8 14 00 00 00 83 EB 01 00 8B FE E8 00 00 00 00 58 83 C0 07 50 C3 00 EB 04 58 40\nep_only = true\n\n[EXE Shield V0.6 -> SMoKE]\nsignature = E8 04 00 00 00 83 60 EB 0C 5D EB 05 45 55 EB 04 B8 EB F9 00 C3 E8 00 00 00 00 5D 81 ED D4 1A 40 00 EB 01 00 8D B5 5E 1B 40 00 BA A1 0B 00 00 EB 01 00 8D 8D FF 26 40 00 8B 09 E8 14 00 00 00 83 EB 01 00 8B FE E8 00 00 00 00 58 83 C0 07 50 C3 00 EB 04 58 40 50 C3 8A 06 46 EB 01 00 D0 C8 E8 14 00 00 00 83 EB 01 00 2A C2 E8 00 00 00 00 5B 83 C3 07 53 C3 00 EB 04 5B 43 53 C3 EB 01 00 32 C2 E8 0B 00 00 00 00 32 C1 EB 01 00 C0 C0 02 EB 09 2A C2 5B EB 01 00 43 53 C3 88 07 EB 01 00 47 4A 75 B4 90\nep_only = true\n\n[Exe Shield v1.7]\nsignature = EB 06 68 90 1F 06 00 C3 9C 60 E8 02 00 00 00 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 3F 90\nep_only = true\n\n[Exe Shield v2.7]\nsignature = EB 06 68 F4 86 06 00 C3 9C 60 E8 02 00 00\nep_only = true\n\n[Exe Shield v2.7b]\nsignature = EB 06 68 40 85 06 00 C3 9C 60 E8 02 00 00 00 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 3F 90 40 00 87 DD 8B 85 E6 90 40 00 01 85 33 90 40 00 66 C7 85 30 90 40 00 90 90 01 85 DA 90 40 00 01 85 DE 90 40 00 01 85 E2 90 40 00 BB 7B 11 00 00 03 9D EA 90 40\nep_only = true\n\n[Exe Shield v2.9]\nsignature = 60 E8 00 00 00 00 5D 81 ED 0B 20 40 00 B9 EB 08 00 00 8D BD 53 20 40 00 8B F7 AC ?? ?? ?? F8\nep_only = true\n\n[Exe Shield vx.x]\nsignature = 65 78 65 73 68 6C 2E 64 6C 6C C0 5D 00\nep_only = true\n\n[Exe Stealth 2.75a -> WebtoolMaster]\nsignature = EB 58 53 68 61 72 65 77 61 72 65 2D 56 65 72 73 69 6F 6E 20 45 78 65 53 74 65 61 6C 74 68 2C 20 63 6F 6E 74 61 63 74 20 73 75 70 70 6F 72 74 40 77 65 62 74 6F 6F 6C 6D 61 73 74 65 72 2E 63 6F 6D 20 2D 20 77 77 77 2E 77 65 62 74 6F 6F 6C 6D 61 73 74 65 72\nep_only = true\n\n[EXE Stealth v1.1]\nsignature = 60 E8 00 00 00 00 5D 81 ED FB 1D 40 00 B9 7B 09 00 00 8B F7 AC\nep_only = true\n\n[EXE Stealth v2.5]\nsignature = 60 90 EB 22 45 78 65 53 74 65 61 6C 74 68 20 2D 20 77 77 77 2E 77 65 62 74 6F 6F 6C 6D 61 73 74 65 72 2E 63 6F 6D E8 00 00 00 00 5D 81 ED 40 1E 40 00 B9 99 09 00 00 8D BD 88 1E 40 00 8B F7 AC\nep_only = false\n\n[EXE Stealth v2.7]\nsignature = EB 00 60 EB 00 E8 00 00 00 00 5D 81 ED D3 26 40\nep_only = true\n\n[EXE Stealth v2.71]\nsignature = EB 00 60 EB 00 E8 00 00 00 00 5D 81 ED B0 27 40\nep_only = true\n\n[EXE Stealth v2.72]\nsignature = EB 00 EB 2F 53 68 61 72 65 77 61 72 65 20 2D 20\nep_only = true\n\n[EXE Stealth v2.73]\nsignature = EB 00 EB 2F 53 68 61 72 65 77 61 72 65 20 2D 20 45 78 65 53 74 65 61 6C 74 68 00 EB 16 77 77 77 2E 77 65 62 74 6F 6F 6C 6D 61 73 74 65 72 2E 63 6F 6D 00 60 90 E8 00 00 00 00 5D 81 ED F0 27 40 00 B9 15 00 00 00 83 C1 05 EB 05 EB FE 83 C7 56 EB 00 83 E9 02\nep_only = false\n\n[EXE Stealth v2.74]\nsignature = EB 00 EB 17 53 68 61 72 65 77 61 72 65 20 2D 20 45 78 65 53 74 65 61 6C 74 68 00 60 90 E8 00 00 00 00 5D 81 ED C4 27 40 00 B9 15 00 00 00 83 C1 04 83 C1 01 EB 05 EB FE 83 C7 56 EB 00 83 E9 02 81 C1 78 43 27 65 EB 00 81 C1 10 25 94 00 81 E9 63 85 00 00 B9\nep_only = false\n\n[EXE Stealth v2.74 -> WebToolMaster]\nsignature = EB 00 EB 17 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 60 90 E8 00 00 00 00 5D\nep_only = true\n\n[EXE Stealth v2.76 -> WebToolMaster]\nsignature = EB 65 45 78 65 53 74 65 61 6C 74 68 20 56 32 20 2D 20 77 77 77 2E 77 65 62 74 6F 6F 6C 6D 61 73 74 65 72 2E 63 6F 6D 20 59 4F 55 52 20 41 44 20 48 45 52 45 21 50 69 52 41 43 59 20 69 53 20 41\nep_only = true\n\n[EXE32Pack v1.36]\nsignature = 3B C0 74 02 81 83 55 3B C0 74 02 81 83 53 3B C9 74 01 BC ?? ?? ?? ?? 02 81 ?? ?? ?? ?? ?? ?? ?? 3B DB 74 01 BE 5D 8B D5 81 ED CC 8D 40\nep_only = true\n\n[EXE32Pack v1.37]\nsignature = 3B C0 74 02 81 83 55 3B C0 74 02 81 83 53 3B C9 74 01 BC ?? ?? ?? ?? 02 81 ?? ?? ?? ?? ?? ?? ?? 3B DB 74 01 BE 5D 8B D5 81 ED 4C 8E 40\nep_only = true\n\n[EXE32Pack v1.38]\nsignature = 3B C0 74 02 81 83 55 3B C0 74 02 81 83 53 3B C9 74 01 BC ?? ?? ?? ?? 02 81 ?? ?? ?? ?? ?? ?? ?? 3B DB 74 01 BE 5D 8B D5 81 ED DC 8D 40\nep_only = true\n\n[EXE32Pack v1.39]\nsignature = 3B C0 74 02 81 83 55 3B C0 74 02 81 83 53 3B C9 74 01 BC ?? ?? ?? ?? 02 81 ?? ?? ?? ?? ?? ?? ?? 3B DB 74 01 BE 5D 8B D5 81 ED EC 8D 40\nep_only = true\n\n[EXE32Pack v1.3x]\nsignature = 3B ?? 74 02 81 83 55 3B ?? 74 02 81 ?? 53 3B ?? 74 01 ?? ?? ?? ?? ?? 02 81 ?? ?? E8 ?? ?? ?? ?? 3B 74 01 ?? 5D 8B D5 81 ED\nep_only = true\n\n[ExeBundle v3.0 (small loader)]\nsignature = 00 00 00 00 60 BE 00 F0 40 00 8D BE 00 20 FF FF 57 83 CD FF EB 10 90 90 90 90 90 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB 72 ED B8 01 00 00 00 01 DB 75 07 8B 1E 83 EE FC 11\nep_only = true\n\n[ExeBundle v3.0 (standard loader)]\nsignature = 00 00 00 00 60 BE 00 B0 42 00 8D BE 00 60 FD FF C7 87 B0 E4 02 00 31 3C 4B DF 57 83 CD FF EB 0E 90 90 90 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB 72 ED B8 01 00 00 00 01 DB\nep_only = true\n\n[EXECrypt 1.0 -> ReBirth]\nsignature = 90 90 60 E8 00 00 00 00 5D 81 ED D1 27 40 00 B9 15 00 00 00 83 C1 04 83 C1 01 EB 05 EB FE 83 C7 56 EB 00 EB 00 83 E9 02 81 C1 78 43 27 65 EB 00 81 C1 10 25 94 00 81 E9 63 85 00 00 B9 96 0C 00 00 90 8D BD 4E 28 40 00 8B F7 AC\nep_only = true\n\n[EXECryptor 2.0/2.1 (protected IAT)]\nsignature = A4 ?? ?? ?? 00 00 00 00 FF FF FF FF 3C ?? ?? ?? 94 ?? ?? ?? D8 ?? ?? ?? 00 00 00 00 FF FF FF FF B8 ?? ?? ?? D4 ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 00 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 00 00 00 45 78 69 74 50 72 6F 63 65 73 73 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 60 ?? ?? ?? 70 ?? ?? ?? 84 ?? ?? ?? 00 00 00 00 75 73 65 72 33 32 2E 64 6C 6C 00 00 00 00 4D 65 73 73 61 67 65 42 6F 78 41\nep_only = false\n\n[EXECryptor 2.1.17 -> Strongbit/SoftComplete Development]\nsignature = BE ?? ?? ?? ?? B8 00 00 ?? ?? 89 45 FC 89 C2 8B 46 0C 09 C0 0F 84 ?? 00 00 00 01 D0 89 C3 50 FF 15 94 ?? ?? ?? 09 C0 0F 85 0F 00 00 00 53 FF 15 98 ?? ?? ?? 09 C0 0F 84 ?? 00 00 00 89 45 F8 6A 00 8F 45 F4 8B 06 09 C0 8B 55 FC 0F 85 03 00 00 00 8B 46 10 01\nep_only = false\n\n[EXECryptor 2.2.4 -> Strongbit/SoftComplete Development (h1)]\nsignature = E8 F7 FE FF FF 05 ?? ?? 00 00 FF E0 E8 EB FE FF FF 05 ?? ?? 00 00 FF E0 E8 04 00 00 00 FF FF FF FF 5E C3\nep_only = true\n\n[EXECryptor 2.2.4 -> Strongbit/SoftComplete Development (h2)]\nsignature = E8 F7 FE FF FF 05 ?? ?? 00 00 FF E0 E8 EB FE FF FF 05 ?? ?? 00 00 FF E0 E8 ?? 00 00 00\nep_only = true\n\n[EXECryptor 2.2.4 -> Strongbit/SoftComplete Development (h3)]\nsignature = 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 00 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 00 00 00 45 78 69 74 50 72 6F 63 65 73 73\nep_only = false\n\n[EXECryptor 2.2.6 (minimum protection)]\nsignature = 50 68 ?? ?? ?? ?? 58 81 E0 ?? ?? ?? ?? E9 ?? ?? ?? 00 87 0C 24 59 E8 ?? ?? ?? 00 89 45 F8 E9 ?? ?? ?? ?? 0F 83 ?? ?? ?? 00 E9 ?? ?? ?? ?? 87 14 24 5A 57 68 ?? ?? ?? ?? E9 ?? ?? ?? ?? 58 81 C0 ?? ?? ?? ?? 2B 05 ?? ?? ?? ?? 81 C8 ?? ?? ?? ?? 81 E0 ?? ?? ?? ?? E9 ?? ?? ?? 00 C3 E9 ?? ?? ?? ?? C3 BF ?? ?? ?? ?? 81 CB ?? ?? ?? ?? BA ?? ?? ?? ?? 52 E9 ?? ?? ?? 00 E8 ?? ?? ?? 00 E9 ?? ?? ?? 00 E9 ?? ?? ?? ?? 87 34 24 5E 66 8B 00 66 25 ?? ?? E9 ?? ?? ?? ?? 8B CD 87 0C 24 8B EC 51 89 EC 5D 8B 05 ?? ?? ?? ?? 09 C0 E9 ?? ?? ?? ?? 59 81 C1 ?? ?? ?? ?? C1 C1 ?? 23 0D ?? ?? ?? ?? 81 F9 ?? ?? ?? ?? E9 ?? ?? ?? ?? C3 E9 ?? ?? ?? 00 13 D0 0B F9 E9 ?? ?? ?? ?? 51 E8 ?? ?? ?? ?? 8B 64 24 08 31 C0 64 8F 05 00 00 00 00 5A E9 ?? ?? ?? ?? 3C A4 0F 85 ?? ?? ?? 00 8B 45 FC 66 81 38 ?? ?? 0F 84 05 00 00 00 E9 ?? ?? ?? ?? 0F 84 ?? ?? ?? ?? E9 ?? ?? ?? ?? 87 3C 24 5F 31 DB 31 C9 31 D2 68 ?? ?? ?? ?? E9 ?? ?? ?? ?? 89 45 FC 33 C0 89 45 F4 83 7D FC 00 E9 ?? ?? ?? ?? 53 52 8B D1 87 14 24 81 C0 ?? ?? ?? ?? 0F 88 ?? ?? ?? ?? 3B CB\nep_only = true\n\n[EXECryptor 2.2.6 DLL (minimum protection)]\nsignature = 50 8B C6 87 04 24 68 ?? ?? ?? ?? 5E E9 ?? ?? ?? ?? 85 C8 E9 ?? ?? ?? ?? 81 C3 ?? ?? ?? ?? 0F 81 ?? ?? ?? 00 81 FA ?? ?? ?? ?? 33 D0 E9 ?? ?? ?? 00 0F 8D ?? ?? ?? 00 81 D5 ?? ?? ?? ?? F7 D1 0B 15 ?? ?? ?? ?? C1 C2 ?? 81 C2 ?? ?? ?? ?? 9D E9 ?? ?? ?? ?? C1 E2 ?? C1 E8 ?? 81 EA ?? ?? ?? ?? 13 DA 81 E9 ?? ?? ?? ?? 87 04 24 8B C8 E9 ?? ?? ?? ?? 55 8B EC 83 C4 F8 89 45 FC 8B 45 FC 89 45 F8 8B 45 08 E9 ?? ?? ?? ?? 8B 45 E0 C6 00 00 FF 45 E4 E9 ?? ?? ?? ?? FF 45 E4 E9 ?? ?? ?? 00 F7 D3 0F 81 ?? ?? ?? ?? E9 ?? ?? ?? ?? 87 34 24 5E 8B 45 F4 E8 ?? ?? ?? 00 8B 45 F4 8B E5 5D C3 E9\nep_only = true\n\n[EXECryptor 2.2/2.3 (compressed code) -> www.strongbit.com]\nsignature = E8 00 00 00 00 58 ?? ?? ?? ?? ?? 8B 1C 24 81 EB ?? ?? ?? ?? B8 ?? ?? ?? ?? 50 6A 04 68 00 10 00 00 50 6A 00 B8 C4 ?? ?? ?? 8B 04 18 FF D0 59 BA ?? ?? ?? ?? 01 DA 52 53 50 89 C7 89 D6 FC F3 A4 B9 ?? ?? ?? ?? 01 D9 FF D1 58 8B 1C 24 68 00 80 00 00 6A 00 50\nep_only = false\n\n[EXECryptor 2.2/2.3 (compressed code) -> www.strongbit.com]\nsignature = E8 00 00 00 00 58 ?? ?? ?? ?? ?? 8B 1C 24 81 EB ?? ?? ?? ?? B8 ?? ?? ?? ?? 50 6A 04 68 00 10 00 00 50 6A 00 B8 C4 ?? ?? ?? 8B 04 18 FF D0 59 BA ?? ?? ?? ?? 01 DA 52 53 50 89 C7 89 D6 FC F3 A4 B9 ?? ?? ?? ?? 01 D9 FF D1 58 8B 1C 24 68 00 80 00 00 6A 00 50 B8 C8 ?? ?? ?? 8B 04 18 FF D0 59 58 5B 83 EB 05 C6 03 B8 43 89 03 83 C3 04 C6 03 C3 09 C9 74 46 89 C3 E8 A0 00 00 00 FC AD 83 F8 FF 74 38 53 89 CB 01 C3 01 0B 83 C3 04 AC 3C FE 73 07 25 FF 00 00 00 EB ED 81 C3 FE 00 00 00 09 C0 7A 09 66 AD 25 FF FF 00 00 EB DA AD 4E 25 FF FF FF 00 3D FF FF FF 00 75 CC ?? ?? ?? ?? ?? C3\nep_only = false\n\n[EXECryptor 2.2/2.3 (protected IAT)]\nsignature = CC ?? ?? ?? 00 00 00 00 FF FF FF FF 3C ?? ?? ?? B4 ?? ?? ?? 08 ?? ?? ?? 00 00 00 00 FF FF FF FF E8 ?? ?? ?? 04 ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 00 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 00 00 00 45 78 69 74 50 72 6F 63 65 73 73 00 00 00 00 00 56 69 72 74 75 61 6C 41 6C 6C 6F 63 00 00 00 00 56 69 72 74 75 61 6C 46 72 65 65 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 4C ?? ?? ?? 60 ?? ?? ?? 70 ?? ?? ?? 84 ?? ?? ?? 94 ?? ?? ?? A4 ?? ?? ?? 00 00 00 00 75 73 65 72 33 32 2E 64 6C 6C 00 00 00 00 4D 65 73 73 61 67 65 42 6F 78\nep_only = false\n\n[EXECryptor 2.3.9 (compressed resources)]\nsignature = 51 68 ?? ?? ?? ?? 59 81 F1 12 3C CB 98 E9 53 2C 00 00 F7 D7 E9 EB 60 00 00 83 45 F8 02 E9 E3 36 00 00 F6 45 F8 20 0F 84 1E 21 00 00 55 E9 80 62 00 00 87 0C 24 8B E9 ?? ?? ?? ?? 00 00 23 C1 81 E9 ?? ?? ?? ?? 57 E9 ED 00 00 00 0F 88 ?? ?? ?? ?? E9 2C 0D 00 00 81 ED BB 43 CB 79 C1 E0 1C E9 9E 14 00 00 0B 15 ?? ?? ?? ?? 81 E2 2A 70 7F 49 81 C2 9D 83 12 3B E8 0C 50 00 00 E9 A0 16 00 00 59 5B C3 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 E8 41 42 00 00 E9 93 33 00 00 31 DB 89 D8 59 5B C3 A1 ?? ?? ?? ?? 8A 00 2C 99 E9 82 30 00 00 0F 8A ?? ?? ?? ?? B8 01 00 00 00 31 D2 0F A2 25 FF 0F 00 00 E9 72 21 00 00 0F 86 57 0B 00 00 E9 ?? ?? ?? ?? C1 C0 03 E8 F0 36 00 00 E9 41 0A 00 00 81 F7 B3 6E 85 EA 81 C7 ?? ?? ?? ?? 87 3C 24 E9 74 52 00 00 0F 8E ?? ?? ?? ?? E8 5E 37 00 00 68 B1 74 96 13 5A E9 A1 04 00 00 81 D1 49 C0 12 27 E9 50 4E 00 00 C1 C8 1B 1B C3 81 E1 96 36 E5\nep_only = true\n\n[EXECryptor 2.3.9 (minimum protection)]\nsignature = 68 ?? ?? ?? ?? E9 ?? ?? ?? FF 50 C1 C8 18 89 05 ?? ?? ?? ?? C3 C1 C0 18 51 E9 ?? ?? ?? FF 84 C0 0F 84 6A F9 FF FF E9 ?? ?? ?? FF C3 E9 ?? ?? ?? FF E8 CF E9 FF FF B8 01 00 00 00 E9 ?? ?? ?? FF 2B D0 68 A0 36 80 D4 59 81 C9 64 98 FF 99 E9 ?? ?? ?? FF 84 C0 0F 84 8E EC FF FF E9 ?? ?? ?? FF C3 87 3C 24 5F 8B 00 03 45 FC 83 C0 18 E9 ?? ?? ?? FF 87 0C 24 59 B8 01 00 00 00 D3 E0 23 D0 E9 02 18 00 00 0F 8D DB 00 00 00 C1 E8 14 E9 CA 00 00 00 9D 87 0C 24 59 87 1C 24 68 AE 73 B9 96 E9 C5 10 00 00 0F 8A ?? ?? ?? ?? E9 ?? ?? ?? FF 81 FD F5 FF 8F 07 E9 4F 10 00 00 C3 E9 5E 12 00 00 87 3C 24 E9 ?? ?? ?? FF E8 ?? ?? ?? FF 83 3D ?? ?? ?? ?? 00 0F 85 ?? ?? ?? ?? 8D 55 EC B8 ?? ?? ?? ?? E9 ?? ?? ?? FF E8 A7 1A 00 00 E8 2A CB FF FF E9 ?? ?? ?? FF C3 E9 ?? ?? ?? FF 59 89 45 E0\nep_only = true\n\n[EXECryptor 2.3.9 DLL (compressed resources)]\nsignature = 50 68 ?? ?? ?? ?? 58 C1 C0 0F E9 ?? ?? ?? 00 87 04 24 58 89 45 FC E9 ?? ?? ?? FF FF 05 ?? ?? ?? ?? E9 ?? ?? ?? 00 C1 C3 18 E9 ?? ?? ?? ?? 8B 55 08 09 42 F8 E9 ?? ?? ?? FF 83 7D F0 01 0F 85 ?? ?? ?? ?? E9 ?? ?? ?? 00 87 34 24 5E 8B 45 FC 33 D2 56 8B F2 E9 ?? ?? ?? 00 BA ?? ?? ?? ?? E8 ?? ?? ?? 00 A3 ?? ?? ?? ?? C3 E9 ?? ?? ?? 00 C3 83 C4 04 C3 E9 ?? ?? ?? FF 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 E8 ?? ?? ?? 00 E9 ?? ?? ?? FF C1 C2 03 81 CA ?? ?? ?? ?? 81 C2 ?? ?? ?? ?? 03 C2 5A E9 ?? ?? ?? FF 81 E7 ?? ?? ?? ?? 81 EF ?? ?? ?? ?? 81 C7 ?? ?? ?? ?? 89 07 E9 ?? ?? ?? ?? 0F 89 ?? ?? ?? ?? 87 14 24 5A 50 C1 C8 10\nep_only = true\n\n[EXECryptor 2.3.9 DLL (minimum protection)]\nsignature = 51 68 ?? ?? ?? ?? 87 2C 24 8B CD 5D 81 E1 ?? ?? ?? ?? E9 ?? ?? ?? 00 89 45 F8 51 68 ?? ?? ?? ?? 59 81 F1 ?? ?? ?? ?? 0B 0D ?? ?? ?? ?? 81 E9 ?? ?? ?? ?? E9 ?? ?? ?? 00 81 C2 ?? ?? ?? ?? E8 ?? ?? ?? 00 87 0C 24 59 51 64 8B 05 30 00 00 00 8B 40 0C 8B 40 0C E9 ?? ?? ?? 00 F7 D6 2B D5 E9 ?? ?? ?? 00 87 3C 24 8B CF 5F 87 14 24 1B CA E9 ?? ?? ?? 00 83 C4 08 68 ?? ?? ?? ?? E9 ?? ?? ?? 00 C3 E9 ?? ?? ?? 00 E9 ?? ?? ?? 00 50 8B C5 87 04 24 8B EC 51 0F 88 ?? ?? ?? 00 FF 05 ?? ?? ?? ?? E9 ?? ?? ?? 00 87 0C 24 59 99 03 04 24 E9 ?? ?? ?? 00 C3 81 D5 ?? ?? ?? ?? 9C E9 ?? ?? ?? 00 81 FA ?? ?? ?? ?? E9 ?? ?? ?? 00 C1 C3 15 81 CB ?? ?? ?? ?? 81 F3 ?? ?? ?? ?? 81 C3 ?? ?? ?? ?? 87\nep_only = true\n\n[EXECryptor 2.x -> SoftComplete Developement]\nsignature = A4 ?? ?? 00 00 00 00 00 FF FF FF FF 3C ?? ?? 00 94 ?? ?? 00 D8 ?? ?? 00 00 00 00 00 FF FF FF FF\nep_only = false\n\n[EXECryptor 2.xx (compressed resources)]\nsignature = 56 57 53 31 DB 89 C6 89 D7 0F B6 06 89 C2 83 E0 1F C1 EA 05 74 2D 4A 74 15 8D 5C 13 02 46 C1 E0 08 89 FA 0F B6 0E 46 29 CA 4A 29 C2 EB 32 C1 E3 05 8D 5C 03 04 46 89 FA 0F B7 0E 29 CA 4A 83 C6 02 EB 1D C1 E3 04 46 89 C1 83 E1 0F 01 CB C1 E8 05 73 07 43 89 F2 01 DE EB 06 85 DB 74 0E EB A9 56 89 D6 89 D9 F3 A4 31 DB 5E EB 9D 89 F0 5B 5F 5E C3\nep_only = false\n\n[EXECryptor 2.xx (max. compressed resources)]\nsignature = 55 8B EC 83 C4 EC FC 53 57 56 89 45 FC 89 55 F8 89 C6 89 D7 66 81 3E 4A 43 0F 85 23 01 00 00 83 C6 0A C7 45 F4 08 00 00 00 31 DB BA 00 00 00 80 43 31 C0 E8 11 01 00 00 73 0E 8B 4D F0 E8 1F 01 00 00 02 45 EF AA EB E9 E8 FC 00 00 00 0F 82 97 00 00 00 E8 F1 00 00 00 73 5B B9 04 00 00 00 E8 FD 00 00 00 48 74 DE 0F 89 C7 00 00 00 E8 D7 00 00 00 73 1B 55 BD 00 01 00 00 E8 D7 00 00 00 88 07 47 4D 75 F5 E8 BF 00 00 00 72 E9 5D EB A2 B9 01 00 00 00 E8 C8 00 00 00 83 C0 07 89 45 F0 C6 45 EF 00 83 F8 08 74 89 E8 A9 00 00 00 88 45 EF E9 7C FF FF FF B9 07 00 00 00 E8 A2 00 00 00 50\nep_only = false\n\n[EXECryptor v1.3.0.45]\nsignature = E8 24 00 00 00 8B 4C 24 0C C7 01 17 00 01 00 C7 81 ?? ?? ?? ?? ?? ?? ?? 31 C0 89 41 14 89 41 18 80 A1\nep_only = true\n\n[EXECryptor v1.3.0.45]\nsignature = E8 24 ?? ?? ?? 8B 4C 24 0C C7 01 17 ?? 01 ?? C7 81 ?? ?? ?? ?? ?? ?? ?? 31 C0 89 41 14 89 41 18 80 A1\nep_only = true\n\n[EXECryptor v1.4.0.1]\nsignature = E8 24 00 00 00 8B 4C 24 0C C7 01 17 00 01 00 C7 81 B8 00 00 00 00 ?? ?? 00 31 C0 89 41 14 89 41 18 80\nep_only = true\n\n[EXECryptor v1.5.1.x]\nsignature = E8 24 ?? ?? ?? 8B 4C 24 0C C7 01 17 ?? 01 ?? C7 81 B8 ?? ?? ?? ?? ?? ?? ?? 31 C0 89 41 14 89 41 18 80 A1 C1 ?? ?? ?? FE C3 31 C0 64 FF 30 64 89 20 CC C3\nep_only = true\n\n[EXECryptor v1.5.3]\nsignature = E8 24 00 00 00 8B 4C 24 0C C7 01 17 00 01 00 C7 81 B8 00 00 00 00 ?? ?? 00 31 C0 89 41 14 89 41 18 80 A1 C1 00 00 00 FE C3 31 C0 64 FF 30 64 89 20 CC C3\nep_only = false\n\n[EXECryptor V2.1X -> softcomplete.com]\nsignature = 83 C6 14 8B 55 FC E9 ?? FF FF FF\nep_only = false\n\n[EXECryptor V2.1X -> softcomplete.com]\nsignature = E9 ?? ?? ?? ?? 66 9C 60 50 8D 88 ?? ?? ?? ?? 8D 90 04 16 ?? ?? 8B DC 8B E1\nep_only = true\n\n[EXECryptor V2.2X -> softcomplete.com]\nsignature = FF E0 E8 04 00 00 00 FF FF FF FF 5E C3 00\nep_only = false\n\n[EXECryptor vx.x.x.x]\nsignature = E8 24 ?? ?? ?? 8B 4C 24 0C C7 01 17 ?? 01 ?? C7 81 B8 ?? ?? ?? ?? ?? ?? ?? 31 C0 89 41\nep_only = true\n\n[ExeJoiner 1.0 -> Yoda]\nsignature = 68 00 10 40 00 68 04 01 00 00 E8 39 03 00 00 05 00 10 40 00 C6 00 5C 68 04 01 00 00 68 04 11 40 00 6A 00 E8 1A 03 00 00 6A 00 68 80 00 00 00 6A 03 6A 00 6A 01 68 00 00 00 80 68 04 11 40 00 E8 EC 02 00 00 83 F8 FF 0F 84 83 02 00 00 A3 08 12 40 00 6A 00 50 E8 E2 02 00 00 83 F8 FF 0F 84 6D 02 00 00 A3 0C 12 40 00 8B D8 83 EB 04 6A 00 6A 00 53 FF 35 08 12 40 00 E8 E3 02 00 00 6A 00 68 3C 12 40 00 6A 04 68 1E 12 40 00 FF 35 08 12 40 00 E8 C4 02 00 00 83 EB 04 6A 00 6A 00 53 FF 35 08 12 40 00\nep_only = true\n\n[ExeJoiner 1.0 -> Yoda f2f]\nsignature = 68 00 10 40 00 68 04 01 00 00 E8 39 03 00 00 05 00 10 40 00 C6 00 5C 68 04 01 00 00 68 04 11 40 00 6A 00 E8 1A 03 00 00 6A 00 68 80 00 00 00 6A 03 6A 00 6A 01 68 00 00 00 80 68 04 11 40 00 E8 EC 02 00 00 83 F8 FF 0F 84 83 02 00 00 A3 08 12 40 00 6A 00 50\nep_only = true\n\n[EXEJoiner v1.0]\nsignature = 68 00 10 40 00 68 04 01 00 00 E8 39 03 00 00 05 00 10 40 C6 00 5C 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A 00 E8\nep_only = true\n\n[ExeJoiner V1.0 -> Yoda f2f]\nsignature = 68 00 10 40 00 68 04 01 00 00 E8 39 03 00 00 05 00 10 40 00 C6 00 5C 68 04 01 00 00\nep_only = true\n\n[EXELOCK 666 1.5]\nsignature = BA ?? ?? BF ?? ?? EB ?? EA ?? ?? ?? ?? 79 ?? 7F ?? 7E ?? 1C ?? 48 78 ?? E3 ?? 45 14 ?? 5A E9\nep_only = true\n\n[ExeLock v1.00]\nsignature = 06 8C C8 8E C0 BE ?? ?? 26 ?? ?? 34 ?? 26 ?? ?? 46 81 ?? ?? ?? 75 ?? 40 B3 ?? B3 ?? F3\nep_only = true\n\n[EXEPACK (LINK) v3.60, v3.64, v3.65 or 5.01.21]\nsignature = 8C C0 05 ?? ?? 0E 1F A3 ?? ?? 03 ?? ?? ?? 8E C0 8B ?? ?? ?? 8B ?? 4F 8B F7 FD F3 A4 50 B8 ?? ?? 50 CB\nep_only = true\n\n[EXEPACK v4.05, v4.06]\nsignature = 8C C0 05 ?? ?? 0E 1F A3 ?? ?? 03 06 ?? ?? 8E C0 8B 0E ?? ?? 8B F9 4F 8B F7 FD F3 A4\nep_only = true\n\n[EXERefactor V0.1 -> random]\nsignature = 55 8B EC 81 EC 90 0B 00 00 53 56 57 E9 58 8C 01 00 55 53 43 41 54 49 4F 4E\nep_only = true\n\n[ExeSafeguard v1.0 -> simonzh]\nsignature = C0 5D EB 4E EB 47 DF 69 4E 58 DF 59 74 F3 EB 01 DF 75 EE 9A 59 9C 81 C1 E2 FF FF FF EB 01 DF 9D FF E1 E8 51 E8 EB FF FF FF DF 22 3F 9A C0 81 ED 19 18 40 00 EB 48 EB 47 DF 69 4E 58 DF 59 79 EE EB 01 DF 78 E9 DF 59 9C 81 C1 E5 FF FF FF 9D FF E1 EB 51 E8 EE\nep_only = false\n\n[ExeShield 3.6 -> www.exeshield.com]\nsignature = B8 ?? ?? ?? 00 50 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 33 C0 89 08 50 45 43 6F 6D 70 61 63 74 32 00 CE 1E 42 AF F8 D6 CC E9 FB C8 4F 1B 22 7C B4 C8 0D BD 71 A9 C8 1F 5F B1 29 8F 11 73 8F 00 D1 88 87 A9 3F 4D 00 6C 3C BF C0 80 F7 AD 35 23 EB 84 82 6F\nep_only = true\n\n[ExeShield Cryptor 1.3RC -> Tom Commander]\nsignature = 55 8B EC 53 56 57 60 E8 00 00 00 00 5D 81 ED 8C 21 40 00 B9 51 2D 40 00 81 E9 E6 21 40 00 8B D5 81 C2 E6 21 40 00 8D 3A 8B F7 33 C0 EB 04 90 EB 01 C2 AC\nep_only = true\n\n[ExeShield Protector V3.6 -> www.exeshield.com]\nsignature = B8 ?? ?? ?? 00 50 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 33 C0 89 08 50 45 43 6F 6D 70 61 63 74 32 00 CE 1E 42 AF F8 D6 CC\nep_only = true\n\n[ExeSmasher vx.x]\nsignature = 9C FE 03 ?? 60 BE ?? ?? 41 ?? 8D BE ?? 10 FF FF 57 83 CD FF EB 10\nep_only = true\n\n[ExeSplitter 1.2 -> Bill Prisoner / TPOC]\nsignature = E9 95 02 00 00 64 A1 00 00 00 00 83 38 FF 74 04 8B 00 EB F7 8B 40 04 C3 55 8B EC B8 00 00 00 00 8B 75 08 81 E6 00 00 FF FF B9 06 00 00 00 56 56 E8 B0 00 00 00 5E 83 F8 01 75 06 8B C6 C9 C2 04 00 81 EE 00 00 01 00 E2 E5 C9 C2 04 00 55 8B EC 8B 75 0C 8B DE 03 76 3C 8D 76 18 8D 76 60 8B 36 03 F3 56 8B 76 20 03 F3 33 D2 8B C6 8B 36 03 F3 8B 7D 08 B9 0E 00 00 00 FC F3 A6 0B C9 75 02 EB 08\nep_only = false\n\n[ExeSplitter 1.3 (Split Method) -> Bill Prisoner / TPOC]\nsignature = E8 00 00 00 00 5D 81 ED 08 12 40 00 E8 66 FE FF FF 55 50 8D 9D 81 11 40 00 53 8D 9D 21 11 40 00 53 6A 08 E8 76 FF FF FF 6A 40 68 00 30 00 00 68 00 01 00 00 6A 00 FF 95 89 11 40 00 89 85 61 10 40 00 50 68 00 01 00 00 FF 95 85 11 40 00 8D 85 65 10 40 00 50 FF B5 61 10 40 00 FF 95 8D 11 40 00 6A 00 68 80 00 00 00 6A 02 6A 00 ?? ?? ?? ?? 01 1F 00 FF B5 61 10 40 00 FF 95 91 11 40 00 89 85 72 10 40 00 6A 00 8D ?? ?? ?? ?? 00 50 FF B5 09 10 40 00 8D 85 F5 12 40 00 50 FF B5 72 10 40 00 FF 95 95 11 40 00 FF B5 72 10 40 00 FF 95 99 11 40 00 8D 85 0D 10 40 00 50 8D 85 1D 10 40 00 50 B9 07 00 00 00 6A 00 E2 FC\nep_only = false\n\n[ExeSplitter 1.3 (Split Method) -> Bill Prisoner / TPOC]\nsignature = E9 FE 01 00 00 ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 73 76 63 45 72 30 31 31 2E 74 6D 70 00 00 00 00 00 00 00 00 00 64 A1 30 00 00 00 8B 40 0C 8B 40 0C 8B 00 85 C0 0F 84 5F 02 00 00 8B 48 30 80 39 6B 74 07 80 39 4B 74 02 EB E7 80 79 0C 33 74 02 EB DF 8B 40 18 C3\nep_only = true\n\n[ExeSplitter 1.3 (Split+Crypt Method) -> Bill Prisoner / TPOC]\nsignature = 15 10 05 23 14 56 57 57 48 12 0B 16 66 66 66 66 66 66 66 66 66 02 C7 56 66 66 66 ED 26 6A ED 26 6A ED 66 E3 A6 69 E2 39 64 66 66 ED 2E 56 E6 5F 0D 12 61 E6 5F 2D 12 64 8D 81 E6 1F 6A 55 12 64 8D B9 ED 26 7E A5 33 ED 8A 8D 69 21 03 12 36 14 09 05 27 02 02 14 03 15 15 27 ED 2B 6A ED 13 6E ED B8 65 10 5A EB 10 7E EB 10 06 ED 50 65 95 30 ED 10 46 65 95 55 B4 ED A0 ED 50 65 95 37 ED 2B 6A EB DF AB 76 26 66 3F DF 68 66 66 66 9A 95 C0 6D AF 13 64\nep_only = false\n\n[ExeSplitter 1.3 (Split+Crypt Method) -> Bill Prisoner / TPOC]\nsignature = E8 00 00 00 00 5D 81 ED 05 10 40 00 B9 ?? ?? ?? ?? 8D 85 1D 10 40 00 80 30 66 40 E2 FA 8F 98 67 66 66 ?? ?? ?? ?? ?? ?? ?? 66\nep_only = true\n\n[EXEStealth 2.75 -> WebtoolMaster]\nsignature = 90 60 90 E8 00 00 00 00 5D 81 ED D1 27 40 00 B9 15 00 00 00\nep_only = true\n\n[EXEStealth 2.76 Unregistered -> WebtoolMaster]\nsignature = EB ?? 45 78 65 53 74 65 61 6C 74 68 20 56 32 20 53 68 61 72 65 77 61 72 65 20\nep_only = false\n\n[ExeTools COM2EXE]\nsignature = E8 ?? ?? 5D 83 ED ?? 8C DA 2E 89 96 ?? ?? 83 C2 ?? 8E DA 8E C2 2E 01 96 ?? ?? 60\nep_only = true\n\n[ExeTools v2.1 Encruptor by DISMEMBER]\nsignature = E8 ?? ?? 5D 83 ?? ?? 1E 8C DA 83 ?? ?? 8E DA 8E C2 BB ?? ?? BA ?? ?? 85 D2 74\nep_only = true\n\n[eXPressor 1.1 -> CGSoftLabs]\nsignature = E9 ?? ?? 00 00 E9 ?? ?? 00 00 E9 ?? 12 00 00 E9 ?? 0C 00 00 E9 ?? ?? 00 00 E9 ?? ?? 00 00 E9 ?? ?? 00 00\nep_only = true\n\n[eXPressor 1.2 -> CGSoftLabs]\nsignature = 55 8B EC 81 EC D4 01 00 00 53 56 57 EB 0C 45 78 50 72 2D 76 2E 31 2E 32 2E 2E\nep_only = true\n\n[eXPressor 1.2.0 Beta PE Packer]\nsignature = 55 8B EC 81 EC ?? ?? ?? ?? 53 56 57 EB ?? 45 78 50 72 2D 76 2E 31 2E 32 2E 2E\nep_only = true\n\n[eXPressor V1.0 -> CGSoftLabs]\nsignature = E9 35 14 00 00 E9 31 13 00 00 E9 98 12 00 00 E9 EF 0C 00 00 E9 42 13 00 00 E9 E9 02 00 00 E9 EF 0B 00 00 E9 1B 0D 00 00\nep_only = true\n\n[eXpressor v1.1 -> CGSoftLabs]\nsignature = E9 15 13 00 00 E9 F0 12 00 00 E9 58 12 00 00 E9 AF 0C 00 00 E9 AE 02 00 00 E9 B4 0B 00 00 E9 E0 0C 00 00\nep_only = true\n\n[eXPressor v1.2 -> CGSoftLabs]\nsignature = 45 78 50 72 2D 76 2E 31 2E 32 2E\nep_only = false\n\n[eXpressor v1.2 -> CGSoftLabs]\nsignature = 55 8B EC 81 EC D4 01 00 00 53 56 57 EB 0C 45 78 50 72 2D 76\nep_only = true\n\n[eXPressor v1.2 -> CGSoftLabs]\nsignature = 55 8B EC 81 EC D4 01 00 00 53 56 57 EB 0C 45 78 50 72 2D 76 2E 31 2E 32 2E 2E B8 ?? ?? ?? ?? 2B 05 84 ?? ?? ?? A3 ?? ?? ?? ?? 83 3D ?? ?? ?? ?? 00 74 16 A1 ?? ?? ?? ?? 03 05 80 ?? ?? ?? 89 85 54 FE FF FF E9 ?? 07 00 00 C7 05 ?? ?? ?? ?? 01 00 00 00 68 04\nep_only = true\n\n[eXPressor v1.2 -> CGSoftLabs]\nsignature = 55 8B EC 81 EC D4 01 00 00 53 56 57 EB 0C 45 78 50 72 2D 76 2E 31 2E 32 2E 2E B8 ?? ?? ?? ?? 2B 05 84 ?? ?? ?? A3 ?? ?? ?? ?? 83 3D ?? ?? ?? ?? 00 74 16 A1 ?? ?? ?? ?? 03 05 80 ?? ?? ?? 89 85 54 FE FF FF E9 ?? 07 00 00 C7 05 ?? ?? ?? ?? 01 00 00 00 68 04 01 00 00 8D 85 F0 FE FF FF 50 6A 00 FF 15\nep_only = true\n\n[eXPressor v1.2.0b]\nsignature = 55 8B EC 81 EC D4 01 00 00 53 56 57 EB 0C 45 78 50 72 2D 76 2E 31 2E 32 2E 2E B8 ?? ?? ?? 00 2B 05 84 ?? ?? 00 A3 ?? ?? ?? 00 83 3D ?? ?? ?? 00 00 74 16 A1 ?? ?? ?? 00 03 05 80 ?? ?? 00 89 85 54 FE FF FF E9 ?? 07 00 00 C7 05 ?? ?? ?? 00 01 00 00 00 68 04\nep_only = false\n\n[eXPressor v1.3 -> CGSoftLabs]\nsignature = 45 78 50 72 2D 76 2E 31 2E 33 2E\nep_only = false\n\n[eXPressor V1.3 -> CGSoftLabs]\nsignature = 55 8B EC 83 EC ?? 53 56 57 EB 0C 45\nep_only = true\n\n[eXPressor v1.3 -> CGSoftLabs]\nsignature = 55 8B EC 83 EC ?? 53 56 57 EB 0C 45 78 50 72 2D 76 2E 31 2E 33 2E 2E B8 ?? ?? ?? ?? 2B 05 ?? ?? ?? ?? A3 ?? ?? ?? ?? 83 3D ?? ?? ?? ?? 00 74 13 A1 ?? ?? ?? ?? 03 05 ?? ?? ?? ?? 89 ?? ?? E9 ?? ?? 00 00 C7 05\nep_only = true\n\n[eXPressor v1.4 -> CGSoftLabs]\nsignature = 55 8B EC 83 EC ?? 53 56 57 EB 0C 45 78 50 72 2D 76 2E 31 2E 34 2E 2E B8\nep_only = true\n\n[eXPressor v1.4 -> CGSoftLabs]\nsignature = 65 58 50 72 2D 76 2E 31 2E 34 2E\nep_only = false\n\n[eXpressor v1.4.5 -> CGSoftLabs]\nsignature = 55 8B EC 83 EC 58 53 56 57 83 65 DC 00 F3 EB 0C\nep_only = true\n\n[eXPressor V1.4.5.1 -> CGSoftLabs]\nsignature = 55 8B EC 83 EC 58 53 56 57 83 65 DC 00 F3 EB 0C 65 58 50 72 2D 76 2E 31 2E 34 2E 00 A1 00 ?? ?? 00 05 00 ?? ?? 00 A3 08 ?? ?? 00 A1 08 ?? ?? 00 B9 81 ?? ?? 00 2B 48 18 89 0D 0C ?? ?? 00 83 3D\nep_only = true\n\n[eXPressor v1.4.5.1 -> CGSoftLabs]\nsignature = 55 8B EC 83 EC 58 53 56 57 83 65 DC 00 F3 EB 0C 65 58 50 72 2D 76 2E 31 2E 34 2E 00 A1 00 ?? ?? ?? 05 00 ?? ?? ?? A3 08 ?? ?? ?? A1 08 ?? ?? ?? B9 81 ?? ?? ?? 2B 48 18 89 0D 0C ?? ?? ?? 83 3D 10 ?? ?? ?? 00 74 16 A1 08 ?? ?? ?? 8B 0D 0C ?? ?? ?? 03 48 14\nep_only = true\n\n[eXPressor v1.4.5.1 -> CGSoftLabs]\nsignature = 55 8B EC 83 EC 58 53 56 57 83 65 DC 00 F3 EB 0C 65 58 50 72 2D 76 2E 31 2E 34 2E 00 A1 00 ?? ?? ?? 05 00 ?? ?? ?? A3 08 ?? ?? ?? A1 08 ?? ?? ?? B9 81 ?? ?? ?? 2B 48 18 89 0D 0C ?? ?? ?? 83 3D 10 ?? ?? ?? 00 74 16 A1 08 ?? ?? ?? 8B 0D 0C ?? ?? ?? 03 48 14 89 4D CC\nep_only = true\n\n[eXPressor.PacK 1.5.0.X -> CGSoftLabs]\nsignature = 55 8B EC 81 EC ?? ?? ?? ?? 53 56 57 83 A5 ?? ?? ?? ?? ?? F3 EB 0C 65 58 50 72 2D 76 2E 31 2E 35 2E 00 83 7D 0C ?? 75 23 8B 45 08 A3 ?? ?? ?? ?? 6A 04 68 00 10 00 00 68 20 03 00 00 6A 00 FF 15 ?? ?? ?? ?? A3 ?? ?? ?? ?? EB 04\nep_only = true\n\n[eXPressor.Protection 1.5.0.X -> CGSoftLabs]\nsignature = EB 01 68 EB 01 ?? ?? ?? ?? 83 EC 0C 53 56 57 EB 01 ?? 83 3D ?? ?? ?? ?? 00 74 08 EB 01 E9 E9 56 01 00 00 EB 02 E8 E9 C7 05 ?? ?? ?? ?? 01 00 00 00 EB 01 C2 E8 E2 05 00 00 EB 02 DA 9F 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? B8 ?? ?? ?? ?? FF D0 59 59 EB 01 C8 EB 02 66 F0 68 ?? ?? ?? ?? E8 0E 05 00 00 59 EB 01 DD 83 65 F4 00 EB 07 8B 45 F4 40 89 45 F4 83 7D F4 61 73 1F EB 02 DA 1A 8B 45 F4 0F ?? ?? ?? ?? ?? ?? 33 45 F4 8B 4D F4 88 ?? ?? ?? ?? ?? EB 01 EB EB\nep_only = false\n\n[EZIP v1.0]\nsignature = E9 19 32 00 00 E9 7C 2A 00 00 E9 19 24 00 00 E9 FF 23 00 00 E9 1E 2E 00 00 E9 88 2E 00 00 E9 2C\nep_only = true\n\n[FACRYPT v1.0]\nsignature = B9 ?? ?? B3 ?? 33 D2 BE ?? ?? 8B FE AC 32 C3 AA 49 43 32 E4 03 D0 E3\nep_only = true\n\n[FakeNinja v2.8 (Anti-Debug) -> Spirit]\nsignature = 64 A1 18 00 00 00 EB 02 C3 11 8B 40 30 EB 01 0F 0F B6 40 02 83 F8 01 74 FE EB 01 E8 90 C0 FF FF EB 03 BD F4 B5 64 A1 30 00 00 00 0F B6 40 02 74 01 BA 74 E0 50 00 64 A1 30 00 00 00 83 C0 68 8B 00 EB 00 83 F8 70 74 CF EB 02 EB FE 90 90 90 0F 31 33 C9 03 C8 0F 31 2B C1 3D FF 0F 00 00 73 EA E8 08 00 00 00 C1 3D FF 0F 00 00 74 AA EB 07 E8 8B 40 30 EB 08 EA 64 A1 18 00 00 00 EB F2 90 90 90 BA ?? ?? ?? ?? FF E2 64 11 40 00 FF 35 84 11 40 00 E8 40 11 00 00 6A 00 6A 00 FF 35 70 11 40 00 FF 35 84 11 40 00 E8 25 11 00 00 FF\nep_only = false\n\n[FakeNinja v2.8 -> Spirit]\nsignature = BA ?? ?? ?? ?? FF E2 64 11 40 00 FF 35 84 11 40 00 E8 40\nep_only = false\n\n[Feokt]\nsignature = 89 25 A8 11 40 00 BF ?? ?? ?? 00 31 C0 B9 ?? ?? ?? 00 29 F9 FC F3 AA ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8\nep_only = true\n\n[FileShield]\nsignature = 50 1E EB ?? 90 00 00 8B D8\nep_only = true\n\n[Fish PE Shield 1.01 -> HellFish]\nsignature = 55 8B EC 83 C4 D0 53 56 57 8B 45 10 83 C0 0C 8B 00 89 45 DC 83 7D DC 00 75 08 E8 AD FF FF FF 89 45 DC E8 C1 FE FF FF 8B 10 03 55 DC 89 55 E4 83 C0 04 8B 10 89 55 FC 83 C0 04 8B 10 89 55 F4 83 C0 04 8B 10 89 55 F8 83 C0 04 8B 10 89 55 F0 83 C0 04 8B 10 89 55 EC 83 C0 04 8B 00 89 45 E8 8B 45 E4 8B 58 04 03 5D E4 8B FB 8B 45 E4 8B 30 4E 85 F6 72 2B 46 C7 45 E0 00 00 00 00 83 7B 04 00 74 14\nep_only = false\n\n[Fish PE Shield 1.01 -> HellFish]\nsignature = 60 E8 12 FE FF FF C3 90 09 00 00 00 2C 00 00 00 ?? ?? ?? ?? C4 03 00 00 BC A0 00 00 00 40 01 00 ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 99 00 00 00 00 8A 00 00 00 10 00 00 28 88 00 00 40 ?? 4B 00 00 00 02 00 00 00 A0 00 00 18 01 00 00 40 ?? 4C 00 00 00 0C 00 00 00 B0 00 00 38 0A 00 00 40 ?? 4E 00 00 00 00 00 00 00 C0 00 00 40 39 00 00 40 ?? 4E 00 00 00 08 00 00 00 00 01 00 C8 06 00 00 40\nep_only = true\n\n[Fish PE Shield 1.12/1.16 -> HellFish]\nsignature = 55 8B EC 83 C4 D0 53 56 57 8B 45 10 83 C0 0C 8B 00 89 45 DC 83 7D DC 00 75 08 E8 BD FE FF FF 89 45 DC E8 E1 FD FF FF 8B 00 03 45 DC 89 45 E4 E8 DC FE FF FF 8B D8 BA 8E 4E 0E EC 8B C3 E8 2E FF FF FF 89 45 F4 BA 04 49 32 D3 8B C3 E8 1F FF FF FF 89 45 F8 BA 54 CA AF 91 8B C3 E8 10 FF FF FF 89 45 F0 BA AC 33 06 03 8B C3 E8 01 FF FF FF 89 45 EC BA 1B C6 46 79 8B C3 E8 F2 FE FF FF 89 45 E8 BA AA FC 0D 7C 8B C3 E8 E3 FE FF FF 89 45 FC 8B 45 E4 8B 58 04 03 5D E4 8B FB 8B 45 E4 8B 30 4E 85 F6 72 2B\nep_only = false\n\n[Fish PE Shield 1.12/1.16 -> HellFish]\nsignature = 60 E8 EA FD FF FF FF D0 C3 8D 40 00 ?? 00 00 00 2C 00 00 00 ?? ?? ?? 00 ?? ?? 00 00 ?? ?? ?? 00 00 ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? 00 00 00 00 ?? ?? 00 ?? ?? 00 00 ?? 00 00 00 00 ?? ?? 00 00 10 00 00 ?? ?? ?? 00 40 ?? ?? ?? 00 00 ?? ?? 00 00 ?? ?? 00 ?? ?? ?? 00 40 ?? ?? ?? 00 00 ?? 00 00 00 ?? ?? 00 ?? ?? 00 00 40\nep_only = true\n\n[FishPE V1.0X -> hellfish]\nsignature = 60 E8 ?? ?? ?? ?? C3 90 09 00 00 00 2C 00 00 00 ?? ?? ?? ?? C4 03 00 00 BC A0 00 00 00 40 01 00 ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 99 00 00 00 00 8A 00 00 00 10 00 00 ?? ?? 00 00 ?? ?? ?? ?? 00 00 02 00 00 00 A0 00 00 18 01 00 00 ?? ?? ?? ?? 00 00 0C 00 00 00 B0 00 00 38 0A 00 00 ?? ?? ?? ?? 00 00 00 00 00 00 C0 00 00 40 39 00 00 ?? ?? ?? ?? 00 00 08 00 00 00 00 01 00 C8 06 00 00\nep_only = true\n\n[FixupPak v1.20]\nsignature = 55 E8 00 00 00 00 5D 81 ED ?? ?? 00 00 BE 00 ?? 00 00 03 F5 BA 00 00 ?? ?? 2B D5 8B DD 33 C0 AC 3C 00 74 3D 3C 01 74 0E 3C 02 74 0E 3C 03 74 0D 03 D8 29 13 EB E7 66 AD EB F6 AD EB F3 AC 0F B6 C8 3C 00 74 06 3C 01 74 09 EB 0A 66 AD 0F B7 C8 EB 03 AD 8B C8\nep_only = true\n\n[Fly-Crypter 1.0 -> ut1lz]\nsignature = 53 56 57 55 BB 2C ?? ?? 44 BE 00 30 44 44 BF 20 ?? ?? 44 80 7B 28 00 75 16 83 3F 00 74 11 8B 17 89 D0 33 D2 89 17 8B E8 FF D5 83 3F 00 75 EF 83 3D 04 30 44 44 00 74 06 FF 15 58 30 44 44 80 7B 28 02 75 0A 83 3E 00 75 05 33 C0 89 43 0C FF 15 20 30 44 44 80 7B 28 01 76 05 83 3E 00 74 22 8B 43 10 85 C0 74 1B FF 15 18 30 44 44 8B 53 10 8B 42 10 3B 42 04 74 0A 85 C0 74 06 50 E8 2F FA FF FF FF 15 24 30 44 44 80 7B 28 01 75 03 FF 53 24 80 7B 28 00 74 05 E8 35 FF FF FF 83 3B 00 75 17 83 3D 10 ?? ?? 44 00 74 06 FF 15 10 ?? ?? 44 8B 06 50 E8 51 FA FF FF 8B 03 56 8B F0 8B FB B9 0B 00 00 00 F3 A5 5E E9 73 FF FF FF 5D 5F 5E 5B C3 A3 00 30 44 44 E8 26 FF FF FF C3\nep_only = false\n\n[Fly-Crypter 1.0 -> ut1lz]\nsignature = 55 8B EC 83 C4 F0 53 B8 18 22 44 44 E8 7F F7 FF FF E8 0A F1 FF FF B8 09 00 00 00 E8 5C F1 FF FF 8B D8 85 DB 75 05 E8 85 FD FF FF 83 FB 01 75 05 E8 7B FD FF FF 83 FB 02 75 05 E8 D1 FD FF FF 83 FB 03 75 05 E8 87 FE FF FF 83 FB 04 75 05 E8 5D FD FF FF 83 FB 05 75 05 E8 B3 FD FF FF 83 FB 06 75 05 E8 69 FE FF FF 83 FB 07 75 05 E8 5F FE FF FF 83 FB 08 75 05 E8 95 FD FF FF 83 FB 09 75 05 E8 4B FE FF FF 5B E8 9D F2 FF FF 90\nep_only = true\n\n[FreeBASIC 0.16b]\nsignature = 55 89 E5 83 EC 08 C7 04 24 01 00 00 00 FF 15 ?? ?? ?? 00 E8 88 FF FF FF 89 EC 31 C0 5D C3 89 F6 55 89 E5 83 EC 08 C7 04 24 02 00 00 00 FF 15 ?? ?? ?? 00 E8 68 FF FF FF 89 EC 31 C0 5D C3 89 F6 55 89 E5 83 EC 08 8B 45 08 89 04 24 FF 15 ?? ?? ?? 00 89 EC 5D C3 8D 76 00 8D BC 27 00 00 00 00 55 89 E5 83 EC 08 8B 45 08 89 04 24 FF 15 ?? ?? ?? 00 89 EC 5D C3 90 90 90 90 90 90 90 90 90 90\nep_only = true\n\n[FreeCryptor 0.1 (build 001)-> GlOFF]\nsignature = 8B 04 24 40 90 83 C0 07 80 38 90 90 74 02 EB FF 68 26 ?? ?? 00 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 FF E4 90 8B 04 24 64 A3 00 00 00 00 8B 64 24 08 90 83 C4 08\nep_only = false\n\n[FreeCryptor 0.1 (build 002) -> GlOFF]\nsignature = 8B 04 24 40 90 83 C0 07 80 38 90 90 74 02 EB FF 90 68 27 ?? ?? 00 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 FF E4 90 8B 04 24 64 A3 00 00 00 00 8B 64 24 08 90 83 C4 08\nep_only = false\n\n[FreeCryptor 0.2 (build 002) -> GlOFF]\nsignature = 33 D2 90 1E 68 1B ?? ?? ?? 0F A0 1F 8B 02 90 50 54 8F 02 90 90 8E 64 24 08 FF E2 58 50 33 D2 52 83 F8 01 9B 40 8A 10 89 14 24 90 D9 04 24 90 D9 FA D9 5C 24 FC 8B 5C 24 FC 81 F3 C2 FC 1D 1C 75 E3 74 01 62 FF D0 90 5A 33 C0 8B 54 24 08 90 64 8F 00 90 83 C2 08 52 5C 5A\nep_only = false\n\n[FreeJoiner 1.5.1 -> GlOFF]\nsignature = 90 87 FF 90 90 B9 2B 00 00 00 BA 07 10 40 00 83 C2 03 90 87 FF 90 90 B9 04 00 00 00 90 87 FF 90 33 C9 C7 05 09 30 40 00 00 00 00 00 68 00 01 00 00 68 21 30 40 00 6A 00 E8 B7 02 00 00 6A 00 68 80 00 00 00 6A 03 6A 00 6A 00 68 00 00 00 80 68 21 30 40 00 E8 8F 02 00 00 A3 19 30 40 00 90 87 FF 90 8B 15 09 30 40 00 81 C2 04 01 00 00 F7 DA 6A 02 6A 00 52\nep_only = true\n\n[FreeJoiner 1.5.2 (Stub engine 1.6) -> GlOFF]\nsignature = E8 46 FD FF FF 50 E8 0C 00 00 00 FF 25 08 20 40 00 FF 25 0C 20 40 00 FF 25 10 20 40 00 FF 25 14 20 40 00 FF 25 18 20 40 00 FF 25 1C 20 40 00 FF 25 20 20 40 00 FF 25 24 20 40 00 FF 25 28 20 40 00 FF 25 00 20 40 00\nep_only = true\n\n[FreeJoiner 1.5.3 (Stub engine 1.7) -> GlOFF]\nsignature = E8 33 FD FF FF 50 E8 0D 00 00 00 CC FF 25 08 20 40 00 FF 25 0C 20 40 00 FF 25 10 20 40 00 FF 25 14 20 40 00 FF 25 18 20 40 00 FF 25 1C 20 40 00 FF 25 20 20 40 00 FF 25 24 20 40 00 FF 25 28 20 40 00 FF 25 00 20 40 00\nep_only = true\n\n[FreeJoiner 1.5.3 (Stub engine 1.7.1) -> GlOFF]\nsignature = E8 02 FD FF FF 6A 00 E8 0D 00 00 00 CC FF 25 80 10 40 00 FF 25 84 10 40 00 FF 25 88 10 40 00 FF 25 8C 10 40 00 FF 25 90 10 40 00 FF 25 94 10 40 00 FF 25 98 10 40 00 FF 25 9C 10 40 00 FF 25 A0 10 40 00 FF 25 A8 10 40 00\nep_only = true\n\n[FreeJoiner Small (build 014-021/024-027) -> GlOFF]\nsignature = E8 ?? ?? FF FF 6A 00 E8 0D 00 00 00 CC FF 25 78 10 40 00 FF 25 7C 10 40 00 FF 25 80 10 40 00 FF 25 84 10 40 00 FF 25 88 10 40 00 FF 25 8C 10 40 00 FF 25 90 10 40 00 FF 25 94 10 40 00 FF 25 98 10 40 00 FF 25 9C 10 40 00 FF 25 A0 10 40 00 FF 25 A4 10 40 00 FF 25 AC 10 40 00\nep_only = true\n\n[FreeJoiner Small (build 023) -> GlOFF]\nsignature = E8 E1 FD FF FF 6A 00 E8 0C 00 00 00 FF 25 78 10 40 00 FF 25 7C 10 40 00 FF 25 80 10 40 00 FF 25 84 10 40 00 FF 25 88 10 40 00 FF 25 8C 10 40 00 FF 25 90 10 40 00 FF 25 94 10 40 00 FF 25 98 10 40 00 FF 25 9C 10 40 00 FF 25 A0 10 40 00 FF 25 A4 10 40 00 FF 25 AC 10 40 00\nep_only = true\n\n[FreeJoiner Small (build 029) -> GlOFF]\nsignature = 50 32 C4 8A C3 58 E8 DE FD FF FF 6A 00 E8 0D 00 00 00 CC FF 25 78 10 40 00 FF 25 7C 10 40 00 FF 25 80 10 40 00 FF 25 84 10 40 00 FF 25 88 10 40 00 FF 25 8C 10 40 00 FF 25 90 10 40 00 FF 25 94 10 40 00 FF 25 98 10 40 00 FF 25 9C 10 40 00 FF 25 A0 10 40 00 FF 25 A4 10 40 00 FF 25 AC 10 40 00\nep_only = true\n\n[FreeJoiner Small (build 031/032) -> GlOFF]\nsignature = 50 32 ?? 66 8B C3 58 E8 ?? FD FF FF 6A 00 E8 0D 00 00 00 CC FF 25 78 10 40 00 FF 25 7C 10 40 00 FF 25 80 10 40 00 FF 25 84 10 40 00 FF 25 88 10 40 00 FF 25 8C 10 40 00 FF 25 90 10 40 00 FF 25 94 10 40 00 FF 25 98 10 40 00 FF 25 9C 10 40 00 FF 25 A0 10 40 00 FF 25 A4 10 40 00 FF 25 AC 10 40 00\nep_only = true\n\n[FreeJoiner Small (build 033) -> GlOFF]\nsignature = 50 66 33 C3 66 8B C1 58 E8 AC FD FF FF 6A 00 E8 0D 00 00 00 CC FF 25 78 10 40 00 FF 25 7C 10 40 00 FF 25 80 10 40 00 FF 25 84 10 40 00 FF 25 88 10 40 00 FF 25 8C 10 40 00 FF 25 90 10 40 00 FF 25 94 10 40 00 FF 25 98 10 40 00 FF 25 9C 10 40 00 FF 25 A0 10 40 00 FF 25 A4 10 40 00 FF 25 AC 10 40 00\nep_only = true\n\n[FreeJoiner Small (build 035) -> GlOFF]\nsignature = 51 33 CB 86 C9 59 E8 9E FD FF FF 66 87 DB 6A 00 E8 0C 00 00 00 FF 25 78 10 40 00 FF 25 7C 10 40 00 FF 25 80 10 40 00 FF 25 84 10 40 00 FF 25 88 10 40 00 FF 25 8C 10 40 00 FF 25 90 10 40 00 FF 25 94 10 40 00 FF 25 98 10 40 00 FF 25 9C 10 40 00 FF 25 A0 10 40 00 FF 25 A4 10 40 00 FF 25 AC 10 40 00\nep_only = true\n\n[Freshbind v2.0 -> gFresh]\nsignature = 64 A1 00 00 00 00 55 89 E5 6A FF 68 1C A0 41 00\nep_only = true\n\n[Frusion -> biff]\nsignature = 83 EC 0C 53 55 56 57 68 04 01 00 00 C7 44 24 14\nep_only = true\n\n[FSG 1.31 -> dulek/xt]\nsignature = BE ?? ?? ?? 00 BF ?? ?? ?? 00 BB ?? ?? ?? 00 53 BB ?? ?? ?? 00 B2 80\nep_only = true\n\n[FSG v1.0]\nsignature = BB D0 01 40 00 BF 00 10 40 00 BE ?? ?? ?? ?? 53 E8 0A 00 00 00 02 D2 75 05 8A 16 46 12 D2 C3 FC B2 80 A4 6A 02 5B\nep_only = true\n\n[FSG v1.00 (Eng) -> dulek/xt]\nsignature = BB D0 01 40 00 BF 00 10 40 00 BE ?? ?? ?? 00 53 E8 0A 00 00 00 02 D2 75 05 8A 16 46 12 D2 C3 FC B2 80 A4 6A 02 5B FF 14 24 73 F7 33 C9 FF 14 24 73 18 33 C0 FF 14 24 73 21 B3 02 41 B0 10 FF 14 24 12 C0 73 F9 75 3F AA EB DC E8 43 00 00 00 2B CB 75 10 E8 38\nep_only = true\n\n[FSG v1.1]\nsignature = BB D0 01 40 ?? BF ?? 10 40 ?? BE ?? ?? ?? ?? FC B2 80 8A 06 46 88 07 47 02 D2 75 05 8A 16\nep_only = true\n\n[FSG v1.10 (Eng) -> bart/xt]\nsignature = BB D0 01 40 00 BF 00 10 40 00 BE ?? ?? ?? 00 53 E8 0A 00 00 00 02 D2 75 05 8A 16 46 12 D2 C3 B2 80 A4 6A 02 5B FF 14 24 73 F7 33 C9 FF 14 24 73 18 33 C0 FF 14 24 73 21 B3 02 41 B0 10 FF 14 24 12 C0 73 F9 75 3F AA EB DC E8 43 00 00 00 2B CB 75 10 E8 38 00\nep_only = true\n\n[FSG v1.10 (Eng) -> bart/xt -> (Watcom C/C++ EXE)]\nsignature = EB 02 CD 20 03 ?? 8D ?? 80 ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? EB 02\nep_only = true\n\n[FSG v1.10 (Eng) -> bart/xt -> WinRAR-SFX]\nsignature = 80 E9 A1 C1 C1 13 68 E4 16 75 46 C1 C1 05 5E EB 01 9D 68 64 86 37 46 EB 02 8C E0 5F F7 D0\nep_only = true\n\n[FSG v1.10 (Eng) -> bart/xt -> WinRAR-SFX]\nsignature = EB 01 02 EB 02 CD 20 B8 80 ?? 42 00 EB 01 55 BE F4 00 00 00 13 DF 13 D8 0F B6 38 D1 F3 F7\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt]\nsignature = BB D0 01 40 ?? BF ?? 10 40 ?? BE\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt]\nsignature = E8 01 00 00 00 ?? ?? E8 ?? 00 00 00\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt]\nsignature = EB 01 ?? EB 02 ?? ?? ?? 80 ?? ?? 00\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Borland C++ 1999)]\nsignature = EB 02 CD 20 2B C8 68 80 ?? ?? 00 EB 02 1E BB 5E EB 02 CD 20 68 B1 2B 6E 37 40 5B 0F B6 C9\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Borland C++)]\nsignature = 23 CA EB 02 5A 0D E8 02 00 00 00 6A 35 58 C1 C9 10 BE 80 ?? ?? 00 0F B6 C9 EB 02 CD 20 BB\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Borland C++)]\nsignature = 23 CA EB 02 5A 0D E8 02 00 00 00 6A 35 58 C1 C9 10 BE 80 ?? ?? 00 0F B6 C9 EB 02 CD 20 BB F4 00 00 00 EB 02 04 FA EB 01 FA EB 01 5F EB 02 CD 20 8A 16 EB 02 11 31 80 E9 31 EB 02 30 11 C1 E9 11 80 EA 04 EB 02 F0 EA 33 CB 81 EA AB AB 19 08 04 D5 03 C2 80 EA\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Borland Delphi / Borland C++)]\nsignature = 2B C2 E8 02 00 00 00 95 4A 59 8D 3D 52 F1 2A E8 C1 C8 1C BE 2E ?? ?? 18 EB 02 AB A0 03 F7\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Borland Delphi / Borland C++)]\nsignature = 2B C2 E8 02 00 00 00 95 4A 59 8D 3D 52 F1 2A E8 C1 C8 1C BE 2E ?? ?? 18 EB 02 AB A0 03 F7 EB 02 CD 20 68 F4 00 00 00 0B C7 5B 03 CB 8A 06 8A 16 E8 02 00 00 00 8D 46 59 EB 01 A4 02 D3 EB 02 CD 20 02 D3 E8 02 00 00 00 57 AB 58 81 C2 AA 87 AC B9 0F BE C9 80\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Borland Delphi / Borland C++)]\nsignature = EB 01 2E EB 02 A5 55 BB 80 ?? ?? 00 87 FE 8D 05 AA CE E0 63 EB 01 75 BA 5E CE E0 63 EB 02\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Borland Delphi / Microsoft Visual C++ / ASM)]\nsignature = EB 02 CD 20 EB 02 CD 20 EB 02 CD 20 C1 E6 18 BB 80 ?? ?? 00 EB 02 82 B8 EB 01 10 8D 05 F4\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Borland Delphi / Microsoft Visual C++)]\nsignature = 1B DB E8 02 00 00 00 1A 0D 5B 68 80 ?? ?? 00 E8 01 00 00 00 EA 5A 58 EB 02 CD 20 68 F4 00 00 00 EB 02 CD 20 5E 0F B6 D0 80 CA 5C 8B 38 EB 01 35 EB 02 DC 97 81 EF F7 65 17 43 E8 02 00 00 00 97 CB 5B 81 C7 B2 8B A1 0C 8B D1 83 EF 17 EB 02 0C 65 83 EF 43 13\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Borland Delphi / Microsoft Visual C++)]\nsignature = C1 C8 10 EB 01 0F BF 03 74 66 77 C1 E9 1D 68 83 ?? ?? 77 EB 02 CD 20 5E EB 02 CD 20 2B F7\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Borland Delphi / Microsoft Visual C++)x]\nsignature = 1B DB E8 02 00 00 00 1A 0D 5B 68 80 ?? ?? 00 E8 01 00 00 00 EA 5A 58 EB 02 CD 20 68 F4 00\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Borland Delphi 2.0)]\nsignature = EB 01 56 E8 02 00 00 00 B2 D9 59 68 80 ?? 41 00 E8 02 00 00 00 65 32 59 5E EB 02 CD 20 BB\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (MASM32 / TASM32 / Microsoft Visual Basic)]\nsignature = F7 D8 0F BE C2 BE 80 ?? ?? 00 0F BE C9 BF 08 3B 65 07 EB 02 D8 29 BB EC C5 9A F8 EB 01 94\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (MASM32 / TASM32)]\nsignature = 03 F7 23 FE 33 FB EB 02 CD 20 BB 80 ?? 40 00 EB 01 86 EB 01 90 B8 F4 00 00 00 83 EE 05 2B\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (MASM32 / TASM32)]\nsignature = 03 F7 23 FE 33 FB EB 02 CD 20 BB 80 ?? 40 00 EB 01 86 EB 01 90 B8 F4 00 00 00 83 EE 05 2B F2 81 F6 EE 00 00 00 EB 02 CD 20 8A 0B E8 02 00 00 00 A9 54 5E C1 EE 07 F7 D7 EB 01 DE 81 E9 B7 96 A0 C4 EB 01 6B EB 02 CD 20 80 E9 4B C1 CF 08 EB 01 71 80 E9 1C EB\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (MASM32)]\nsignature = EB 01 DB E8 02 00 00 00 86 43 5E 8D 1D D0 75 CF 83 C1 EE 1D 68 50 ?? 8F 83 EB 02 3D 0F 5A\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual Basic / MASM32)]\nsignature = EB 02 09 94 0F B7 FF 68 80 ?? ?? 00 81 F6 8E 00 00 00 5B EB 02 11 C2 8D 05 F4 00 00 00 47\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual Basic 5.0 / 6.0)]\nsignature = C1 CB 10 EB 01 0F B9 03 74 F6 EE 0F B6 D3 8D 05 83 ?? ?? EF 80 F3 F6 2B C1 EB 01 DE 68 77\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 4.x / LCC Win32 1.x)]\nsignature = 2C 71 1B CA EB 01 2A EB 01 65 8D 35 80 ?? ?? 00 80 C9 84 80 C9 68 BB F4 00 00 00 EB 01 EB\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 5.0 / 6.0)]\nsignature = 33 D2 0F BE D2 EB 01 C7 EB 01 D8 8D 05 80 ?? ?? ?? EB 02 CD 20 EB 01 F8 BE F4 00 00 00 EB\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0 / 7.0 / ASM)]\nsignature = E8 01 00 00 00 5A 5E E8 02 00 00 00 BA DD 5E 03 F2 EB 01 64 BB 80 ?? ?? 00 8B FA EB 01 A8\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0 / 7.0)]\nsignature = 0B D0 8B DA E8 02 00 00 00 40 A0 5A EB 01 9D B8 80 ?? ?? 00 EB 02 CD 20 03 D3 8D 35 F4 00 00 00 EB 01 35 EB 01 88 80 CA 7C 80 F3 74 8B 38 EB 02 AC BA 03 DB E8 01 00 00 00 A5 5B C1 C2 0B 81 C7 DA 10 0A 4E EB 01 08 2B D1 83 EF 14 EB 02 CD 20 33 D3 83 EF 27\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0 / 7.0)]\nsignature = 0B D0 8B DA E8 02 00 00 00 40 A0 5A EB 01 9D B8 80 ?? ?? ?? EB 02 CD 20 03 D3 8D 35 F4 00\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0 / 7.0)]\nsignature = 87 FE E8 02 00 00 00 98 CC 5F BB 80 ?? ?? 00 EB 02 CD 20 68 F4 00 00 00 E8 01 00 00 00 E3\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0 / 7.0)]\nsignature = F7 D8 40 49 EB 02 E0 0A 8D 35 80 ?? ?? ?? 0F B6 C2 EB 01 9C 8D 1D F4 00 00 00 EB 01 3C 80\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0 / 7.0)]\nsignature = F7 DB 80 EA BF B9 2F 40 67 BA EB 01 01 68 AF ?? A7 BA 80 EA 9D 58 C1 C2 09 2B C1 8B D7 68\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0 / ASM)]\nsignature = F7 D0 EB 02 CD 20 BE BB 74 1C FB EB 02 CD 20 BF 3B ?? ?? FB C1 C1 03 33 F7 EB 02 CD 20 68\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0)]\nsignature = 03 DE EB 01 F8 B8 80 ?? 42 00 EB 02 CD 20 68 17 A0 B3 AB EB 01 E8 59 0F B6 DB 68 0B A1 B3\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0)]\nsignature = 03 DE EB 01 F8 B8 80 ?? 42 00 EB 02 CD 20 68 17 A0 B3 AB EB 01 E8 59 0F B6 DB 68 0B A1 B3 AB EB 02 CD 20 5E 80 CB AA 2B F1 EB 02 CD 20 43 0F BE 38 13 D6 80 C3 47 2B FE EB 01 F4 03 FE EB 02 4F 4E 81 EF 93 53 7C 3C 80 C3 29 81 F7 8A 8F 67 8B 80 C3 C7 2B FE\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0)]\nsignature = 91 EB 02 CD 20 BF 50 BC 04 6F 91 BE D0 ?? ?? 6F EB 02 CD 20 2B F7 EB 02 F0 46 8D 1D F4 00\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0)]\nsignature = C1 CE 10 C1 F6 0F 68 00 ?? ?? 00 2B FA 5B 23 F9 8D 15 80 ?? ?? 00 E8 01 00 00 00 B6 5E 0B\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0)]\nsignature = D1 E9 03 C0 68 80 ?? ?? 00 EB 02 CD 20 5E 40 BB F4 00 00 00 33 CA 2B C7 0F B6 16 EB 01 3E\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0)]\nsignature = E8 01 00 00 00 0E 59 E8 01 00 00 00 58 58 BE 80 ?? ?? 00 EB 02 61 E9 68 F4 00 00 00 C1 C8\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0)]\nsignature = EB 01 4D 83 F6 4C 68 80 ?? ?? 00 EB 02 CD 20 5B EB 01 23 68 48 1C 2B 3A E8 02 00 00 00 38\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0)]\nsignature = EB 02 AB 35 EB 02 B5 C6 8D 05 80 ?? ?? 00 C1 C2 11 BE F4 00 00 00 F7 DB F7 DB 0F BE 38 E8\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0)]\nsignature = EB 02 CD 20 ?? CF ?? ?? 80 ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? ?? 00\nep_only = true\n\n[FSG v1.10 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0)]\nsignature = F7 DB 80 EA BF B9 2F 40 67 BA EB 01 01 68 AF ?? ?? BA 80 EA 9D 58 C1 C2 09 2B C1 8B D7 68\nep_only = true\n\n[FSG v1.2]\nsignature = 4B 45 52 4E 45 4C 33 32 2E 64 6C 6C 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 ?? 00 00 00 00 00\nep_only = true\n\n[FSG v1.20 (Eng) -> dulek/xt -> (Borland C++)]\nsignature = C1 F0 07 EB 02 CD 20 BE 80 ?? ?? 00 1B C6 8D 1D F4 00 00 00 0F B6 06 EB 02 CD 20 8A 16 0F B6 C3 E8 01 00 00 00 DC 59 80 EA 37 EB 02 CD 20 2A D3 EB 02 CD 20 80 EA 73 1B CF 32 D3 C1 C8 0E 80 EA 23 0F B6 C9 02 D3 EB 01 B5 02 D3 EB 02 DB 5B 81 C2 F6 56 7B F6\nep_only = true\n\n[FSG v1.20 (Eng) -> dulek/xt -> (Borland Delphi / Borland C++)]\nsignature = 0F BE C1 EB 01 0E 8D 35 C3 BE B6 22 F7 D1 68 43 ?? ?? 22 EB 02 B5 15 5F C1 F1 15 33 F7 80 E9 F9 BB F4 00 00 00 EB 02 8F D0 EB 02 08 AD 8A 16 2B C7 1B C7 80 C2 7A 41 80 EA 10 EB 01 3C 81 EA CF AE F1 AA EB 01 EC 81 EA BB C6 AB EE 2C E3 32 D3 0B CB 81 EA AB\nep_only = true\n\n[FSG v1.20 (Eng) -> dulek/xt -> (Borland Delphi / Microsoft Visual C++)]\nsignature = 0F B6 D0 E8 01 00 00 00 0C 5A B8 80 ?? ?? 00 EB 02 00 DE 8D 35 F4 00 00 00 F7 D2 EB 02 0E EA 8B 38 EB 01 A0 C1 F3 11 81 EF 84 88 F4 4C EB 02 CD 20 83 F7 22 87 D3 33 FE C1 C3 19 83 F7 26 E8 02 00 00 00 BC DE 5A 81 EF F7 EF 6F 18 EB 02 CD 20 83 EF 7F EB 01\nep_only = true\n\n[FSG v1.20 (Eng) -> dulek/xt -> (MASM32 / TASM32)]\nsignature = 33 C2 2C FB 8D 3D 7E 45 B4 80 E8 02 00 00 00 8A 45 58 68 02 ?? 8C 7F EB 02 CD 20 5E 80 C9 16 03 F7 EB 02 40 B0 68 F4 00 00 00 80 F1 2C 5B C1 E9 05 0F B6 C9 8A 16 0F B6 C9 0F BF C7 2A D3 E8 02 00 00 00 99 4C 58 80 EA 53 C1 C9 16 2A D3 E8 02 00 00 00 9D CE\nep_only = true\n\n[FSG v1.20 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0 / 7.0)]\nsignature = EB 02 CD 20 EB 01 91 8D 35 80 ?? ?? 00 33 C2 68 83 93 7E 7D 0C A4 5B 23 C3 68 77 93 7E 7D EB 01 FA 5F E8 02 00 00 00 F7 FB 58 33 DF EB 01 3F E8 02 00 00 00 11 88 58 0F B6 16 EB 02 CD 20 EB 02 86 2F 2A D3 EB 02 CD 20 80 EA 2F EB 01 52 32 D3 80 E9 CD 80 EA\nep_only = true\n\n[FSG v1.20 (Eng) -> dulek/xt -> (Microsoft Visual C++ 6.0)]\nsignature = C1 E0 06 EB 02 CD 20 EB 01 27 EB 01 24 BE 80 ?? 42 00 49 EB 01 99 8D 1D F4 00 00 00 EB 01 5C F7 D8 1B CA EB 01 31 8A 16 80 E9 41 EB 01 C2 C1 E0 0A EB 01 A1 81 EA A8 8C 18 A1 34 46 E8 01 00 00 00 62 59 32 D3 C1 C9 02 EB 01 68 80 F2 1A 0F BE C9 F7 D1 2A D3\nep_only = true\n\n[FSG v1.3]\nsignature = BB D0 01 40 00 BF 00 10 40 00 BE ?? ?? ?? ?? 53 E8 0A 00 00 00 02 D2 75 05 8A 16 46 12 D2 C3 B2 80 A4 6A 02 5B FF 14 24 73 F7 33 C9 FF 14 24 73 18 33 C0 FF 14 24 73 21 B3 02 41 B0 10 FF 14 24 12 C0 73 F9 75 3F AA EB DC E8 43 00 00 00 2B CB 75 10 E8 38 00\nep_only = true\n\n[FSG v1.31]\nsignature = BB D0 01 40 00 BF 00 10 40 00 BE ?? ?? ?? ?? 53 BB ?? ?? ?? ?? B2 80 A4 B6 80 FF D3 73 F9 33 C9\nep_only = true\n\n[FSG v1.31 (Eng) -> dulek/xt]\nsignature = BB D0 01 40 00 BF 00 10 40 00 BE ?? ?? ?? 00 53 BB ?? ?? ?? 00 B2 80 A4 B6 80 FF D3 73 F9 33 C9 FF D3 73 16 33 C0 FF D3 73 23 B6 80 41 B0 10 FF D3 12 C0 73 FA 75 42 AA EB E0 E8 46 00 00 00 02 F6 83 D9 01 75 10 E8 38 00 00 00 EB 28 AC D1 E8 74 48 13 C9 EB\nep_only = true\n\n[FSG v1.33]\nsignature = BE A4 01 40 00 AD 93 AD 97 AD 56 96 B2 80 A4 B6 80 FF 13 73\nep_only = true\n\n[FSG v1.33 (Eng) -> dulek/xt]\nsignature = BE A4 01 40 00 AD 93 AD 97 AD 56 96 B2 80 A4 B6 80 FF 13 73 F9 33 C9 FF 13 73 16 33 C0 FF\nep_only = true\n\n[FSG v1.33 (Eng) -> dulek/xt]\nsignature = BE A4 01 40 00 AD 93 AD 97 AD 56 96 B2 80 A4 B6 80 FF 13 73 F9 33 C9 FF 13 73 16 33 C0 FF 13 73 1F B6 80 41 B0 10 FF 13 12 C0 73 FA 75 3C AA EB E0 FF 53 08 02 F6 83 D9 01 75 0E FF 53 04 EB 26 AC D1 E8 74 2F 13 C9 EB 1A 91 48 C1 E0 08 AC FF 53 04 3D 00 7D\nep_only = true\n\n[FSG v2.0]\nsignature = 87 25 ?? ?? ?? ?? 61 94 55 A4 B6 80 FF 13 73 F9 33 C9 FF 13 73 16 33 C0 FF 13 73 1F B6 80 41 B0 10 FF 13 12 C0 73 FA 75\nep_only = false\n\n[FSG v2.0 -> bart/xt]\nsignature = 87 25 ?? ?? ?? 00 61 94 55 A4 B6 80 FF 13\nep_only = true\n\n[Fuck'n'Joy v1.0c -> UsAr]\nsignature = 60 E8 00 00 00 00 5D 81 ED D8 05 40 00 FF 74 24 20 E8 8C 02 00 00 0B C0 0F 84 2C 01 00 00 89 85 6C 08 40 00 8D 85 2F 08 40 00 50 FF B5 6C 08 40 00 E8 EF 02 00 00 0B C0 0F 84 0C 01 00 00 89 85 3B 08 40 00 8D 85 3F 08 40 00 50 FF B5 6C 08 40 00 E8 CF 02 00\nep_only = true\n\n[Fuck'n'Joy v1.0c -> UsAr]\nsignature = 60 E8 00 00 00 00 5D 81 ED D8 05 40 00 FF 74 24 20 E8 8C 02 00 00 0B C0 0F 84 2C 01 00 00 89 85 6C 08 40 00 8D 85 2F 08 40 00 50 FF B5 6C 08 40 00 E8 EF 02 00 00 0B C0 0F 84 0C 01 00 00 89 85 3B 08 40 00 8D 85 3F 08 40 00 50 FF B5 6C 08 40 00 E8 CF 02 00 00 0B C0 0F 84 EC 00 00 00 89 85 4D 08 40 00 8D 85 51 08 40 00 50 FF B5 6C 08 40 00 E8 AF 02 00 00 0B C0 0F 84 CC 00 00 00 89 85 5C 08 40 00 8D 85 67 07 40 00 E8 7B 02 00 00 8D B5 C4 07 40 00 56 6A 64 FF 95 74 07 40 00 46 80 3E 00 75 FA C7 06 74 6D 70 2E 83 C6 04 C7 06 65 78 65 00 8D 85 36 07 40 00 E8 4C 02 00 00 33 DB 53 53 6A 02 53 53 68 00 00 00 40 8D 85 C4 07 40 00 50 FF 95 74 07 40 00 89 85 78 07 40 00 8D 85 51 07 40 00 E8 21 02 00 00 6A 00 8D 85 7C 07 40 00 50 68 00 ?? ?? 00 8D 85 F2 09 40 00 50 FF\nep_only = true\n\n[Fusion 1.0 -> jaNooNi]\nsignature = 68 04 30 40 00 68 04 30 40 00 E8 09 03 00 00 68 04 30 40 00 E8 C7 02 00 00\nep_only = true\n\n[GameGuard - nProtect]\nsignature = 31 FF 74 06 61 E9 4A 4D 50 30 5A BA 7D 00 00 00 80 7C 24 08 01 E9 00 00 00 00 60 BE ?? ?? ?? ?? 31 FF 74 06 61 E9 4A 4D 50 30 8D BE ?? ?? ?? ?? 31 C9 74 06 61 E9 4A 4D 50 30 B8 7D 00 00 00 39 C2 B8 4C 00 00 00 F7 D0 75 3F 64 A1 30 00 00 00 85 C0 78 23 8B 40 0C 8B 40 0C C7 40 20 00 10 00 00 64 A1 18 00 00 00 8B 40 30 0F B6 40 02 85 C0 75 16 E9 12 00 00 00 31 C0 64 A0 20 00 00 00 85 C0 75 05 E9 01 00 00 00 61 57 83 CD FF EB 0B 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB 72 ED B8 01 00 00 00 01 DB 75 07\nep_only = true\n\n[GameGuard v2006.5.x.x (*.dll) -> sign by hot_UNP]\nsignature = 31 FF 74 06 61 E9 4A 4D 50 30 BA 4C 00 00 00 80 7C 24 08 01 0F 85 ?? 01 00 00 60 BE 00\nep_only = true\n\n[GameGuard v2006.5.x.x (*.exe) -> sign by hot_UNP]\nsignature = 31 FF 74 06 61 E9 4A 4D 50 30 5A BA 7D 00 00 00 80 7C 24 08 01 E9 00 00 00 00 60 BE 00\nep_only = true\n\n[Gamehouse Media Protector Version Unknown]\nsignature = 68 ?? ?? ?? ?? 6A 00 FF 15 ?? ?? ?? ?? 50 FF 15 ?? ?? ?? 00 00 00 00 00 00 00 00\nep_only = true\n\n[Gardian Angel 1.0]\nsignature = 06 8C C8 8E D8 8E C0 FC BF ?? ?? EB\nep_only = true\n\n[GHF Protector (pack only) --> GPcH]\nsignature = 60 68 ?? ?? ?? ?? B8 ?? ?? ?? ?? FF 10 68 ?? ?? ?? ?? 50 B8 ?? ?? ?? ?? FF 10 68 00 00 00 00 6A 40 FF D0 89 05 ?? ?? ?? ?? 89 C7 BE ?? ?? ?? ?? 60 FC B2 80 31 DB A4 B3 02 E8 6D 00 00 00 73 F6 31 C9 E8 64 00 00 00 73 1C 31 C0 E8 5B 00 00 00 73 23 B3 02 41 B0 10 E8 4F 00 00 00 10 C0 73 F7 75 3F AA EB D4 E8 4D 00 00 00 29 D9 75 10 E8 42 00 00 00 EB 28 AC D1 E8 74 4D 11 C9 EB 1C 91 48 C1 E0 08 AC E8 2C 00 00 00 3D 00 7D 00 00 73 0A 80 FC 05 73 06 83 F8 7F 77 02 41 41 95 89 E8 B3 01 56 89 FE 29 C6 F3 A4 5E EB 8E 00 D2 75 05 8A 16 46 10 D2 C3 31 C9 41 E8 EE FF FF FF 11 C9 E8 E7 FF FF FF 72 F2 C3 61 B9 FC FF FF FF 8B 1C 08 89 99 ?? ?? ?? ?? E2 F5 90 90 BA ?? ?? ?? ?? BE ?? ?? ?? ?? 01 D6 8B 46 0C 85 C0 0F 84 87 00 00 00 01 D0 89 C3 50 B8 ?? ?? ?? ?? FF 10 85 C0 75 08 53 B8 ?? ?? ?? ?? FF 10 89 05 ?? ?? ?? ?? C7 05 ?? ?? ?? ?? 00 00 00 00 BA ?? ?? ?? ?? 8B 06 85 C0 75 03 8B 46 10 01 D0 03 05 ?? ?? ?? ?? 8B 18 8B 7E 10 01 D7 03 3D ?? ?? ?? ?? 85 DB 74 2B F7 C3 00 00 00 80 75 04 01 D3 43 43 81 E3 FF FF FF 0F 53 FF 35 ?? ?? ?? ?? B8 ?? ?? ?? ?? FF 10 89 07 83 05 ?? ?? ?? ?? 04 EB AE 83 C6 14 BA ?? ?? ?? ?? E9 6E FF FF FF 68 ?? ?? ?? ?? B8 ?? ?? ?? ?? FF 10 68 ?? ?? ?? ?? 50 B8 ?? ?? ?? ?? FF 10 8B 15 ?? ?? ?? ?? 52 FF D0 61 BA ?? ?? ?? ?? FF E2 90 C3\nep_only = true\n\n[GHF Protector (pack only) -> GPcH]\nsignature = 60 68 ?? ?? ?? ?? B8 ?? ?? ?? ?? FF 10 68 ?? ?? ?? ?? 50 B8 ?? ?? ?? ?? FF 10 68 00 00 00 00 6A 40 FF D0 89 05 ?? ?? ?? ?? 89 C7 BE ?? ?? ?? ?? 60 FC B2 80 31 DB A4 B3 02 E8 6D 00 00 00 73 F6 31 C9 E8 64 00 00 00 73 1C 31 C0 E8 5B 00 00 00 73 23 B3 02 41\nep_only = false\n\n[Goats Mutilator V1.6 -> Goat/_e0f]\nsignature = E8 EA 0B 00 00 ?? ?? ?? 8B 1C 79 F6 63 D8 8D 22 B0 BF F6 49 08 C3 02 BD 3B 6C 29 46 13 28 5D\nep_only = true\n\n[GP-Install v5.0.3.32]\nsignature = 55 8B EC 33 C9 51 51 51 51 51 51 51 53 56 57 B8 C4 1C 41 00 E8 6B 3E FF FF 33 C0 55 68 76 20 41 00 64 FF 30 64 89 20 BA A0 47 41 00 33 C0 E8 31 0A FF FF 33 D2 A1 A0\nep_only = false\n\n[HACKSTOP v1.00]\nsignature = FA BD ?? ?? FF E5 6A 49 48 0C ?? E4 ?? 3F 98 3F\nep_only = true\n\n[HACKSTOP v1.10, v1.11]\nsignature = B4 30 CD 21 86 E0 3D ?? ?? 73 ?? B4 2F CD 21 B0 ?? B4 4C CD 21 50 B8 ?? ?? 58 EB\nep_only = true\n\n[HACKSTOP v1.10p1]\nsignature = B4 30 CD 21 86 E0 3D 00 03 73 ?? B4 2F CD 21 B4 2A CD 21 B4 2C CD 21 B0 FF B4 4C CD 21 50 B8 ?? ?? 58 EB\nep_only = true\n\n[HACKSTOP v1.11c]\nsignature = B4 30 CD 21 86 E0 3D ?? ?? 73 ?? B4 ?? CD 21 B0 ?? B4 4C CD 21 53 BB ?? ?? 5B EB\nep_only = true\n\n[HACKSTOP v1.13]\nsignature = 52 B8 ?? ?? 1E CD 21 86 E0 3D ?? ?? 73 ?? CD 20 0E 1F B4 09 E8 ?? ?? 24 ?? EA\nep_only = true\n\n[HACKSTOP v1.18]\nsignature = 52 BA ?? ?? 5A EB ?? 9A ?? ?? ?? ?? 30 CD 21 ?? ?? ?? FD 02 ?? ?? CD 20 0E 1F 52 BA ?? ?? 5A EB\nep_only = true\n\n[HACKSTOP v1.19]\nsignature = 52 BA ?? ?? 5A EB ?? 9A ?? ?? ?? ?? 30 CD 21 ?? ?? ?? D6 02 ?? ?? CD 20 0E 1F 52 BA ?? ?? 5A EB\nep_only = true\n\n[Hardlock dongle (Alladin)]\nsignature = 5C 5C 2E 5C 48 41 52 44 4C 4F 43 4B 2E 56 58 44 00 00 00 00 5C 5C 2E 5C 46 45 6E 74 65 44 65 76\nep_only = true\n\n[Hasp dongle (Alladin)]\nsignature = 50 53 51 52 57 56 8B 75 1C 8B 3E ?? ?? ?? ?? ?? 8B 5D 08 8A FB ?? ?? 03 5D 10 8B 45 0C 8B 4D 14 8B 55 18 80 FF 32\nep_only = true\n\n[HASP HL Protection V1.X -> Aladdin]\nsignature = 55 8B EC 53 56 57 60 8B C4 A3 ?? ?? ?? ?? B8 ?? ?? ?? ?? 2B 05 ?? ?? ?? ?? A3 ?? ?? ?? ?? 83 3D ?? ?? ?? ?? 00 74 15 8B 0D ?? ?? ?? ?? 51 FF 15 ?? ?? ?? ?? 83 C4 04 E9 A5 00 00 00 68 ?? ?? ?? ?? FF 15 ?? ?? ?? ?? A3 ?? ?? ?? ?? 68 ?? ?? ?? ?? FF 15\nep_only = true\n\n[HASP HL Protection V1.X -> Aladdin]\nsignature = 55 8B EC 53 56 57 60 8B C4 A3 ?? ?? ?? ?? B8 ?? ?? ?? ?? 2B 05 ?? ?? ?? ?? A3 ?? ?? ?? ?? 83 3D ?? ?? ?? ?? 00 74 15 8B 0D ?? ?? ?? ?? 51 FF 15 ?? ?? ?? ?? 83 C4 04 E9 A5 00 00 00 68 ?? ?? ?? ?? FF 15 ?? ?? ?? ?? A3 ?? ?? ?? ?? 68 ?? ?? ?? ?? FF 15 ?? ?? ?? ?? A3 ?? ?? ?? ?? 8B 15\nep_only = true\n\n[HEALTH v.5.1 by Muslim M.Polyak]\nsignature = 1E E8 ?? ?? 2E 8C 06 ?? ?? 2E 89 3E ?? ?? 8B D7 B8 ?? ?? CD 21 8B D8 0E 1F E8 ?? ?? 06 57 A1 ?? ?? 26\nep_only = true\n\n[Hide PE 1.01 -> BGCorp]\nsignature = ?? BA ?? ?? ?? 00 B8 ?? ?? ?? ?? 89 02 83 C2 04 B8 ?? ?? ?? ?? 89 02 83 C2 04 B8 ?? ?? ?? ?? 89 02 83 C2 F8 FF E2 0D 0A 2D 3D 5B 20 48 69 64 65 50 45 20 62 79 20 42 47 43 6F 72 70 20 5D 3D 2D\nep_only = true\n\n[hmimys Protect v1.0]\nsignature = E8 BA 00 00 00 ?? 00 00 00 00 ?? ?? 00 00 10 40 00 ?? ?? ?? 00 ?? ?? ?? 00 00 ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? 00 00 00 00 00 00 00 ?? ?? ?? 00 00 00 00 00 00 00 00 00 ?? ?? ?? 00 ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 00 00 00 00 4B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 56 69 72 74 75 61 6C 46 72 65 65 00 00 00 56 69 72 74 75 61 6C 41 6C 6C 6F 63 00 5E 83 C6 64 AD 50 AD 50 83 EE 6C AD 50 AD 50 AD 50 AD 50 AD 50 E8 E7 07 00 00 AD 8B DE 8B F0 83 C3 44 AD 85 C0 74 32 8B F8 56 FF 13 8B E8 AC 84 C0 75 FB AC 84 C0 74 EA 4E AD A9\nep_only = true\n\n[hmimys Protect v1.0]\nsignature = E8 BA 00 00 00 ?? 00 00 00 00 ?? ?? 00 00 10 40 00 ?? ?? ?? 00 ?? ?? ?? 00 00 ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? 00 00 00 00 00 00 00 ?? ?? ?? 00 00 00 00 00 00 00 00 00 ?? ?? ?? 00 ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 00 00 00 00 4B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 56 69 72 74 75 61 6C 46 72 65 65 00 00 00 56 69 72 74 75 61 6C 41 6C 6C 6F 63 00 5E 83 C6 64 AD 50 AD 50 83 EE 6C AD 50 AD 50 AD 50 AD 50 AD 50 E8 E7 07 00 00 AD 8B DE 8B F0 83 C3 44 AD 85 C0 74 32 8B F8 56 FF 13 8B E8 AC 84 C0 75 FB AC 84 C0 74 EA 4E AD A9 00 00 00\nep_only = false\n\n[hmimys's PE-Pack 0.1 -> hmimys]\nsignature = E8 00 00 00 00 5D 83 ED 05 6A 00 FF 95 E1 0E 00 00 89 85 85 0E 00 00 8B 58 3C 03 D8 81 C3 F8 00 00 00 80 AD 89 0E 00 00 01 89 9D 63 0F 00 00 8B 4B 0C 03 8D 85 0E 00 00 8B 53 08 80 BD 89 0E 00 00 00 75 0C 03 8D 91 0E 00 00 2B 95 91 0E 00 00 89 8D 57 0F 00 00 89 95 5B 0F 00 00 8B 5B 10 89 9D 5F 0F 00 00 8B 9D 5F 0F 00 00 8B 85 57 0F 00 00 53 50 E8 B7 0B 00 00 89 85 73 0F 00 00 6A 04 68 00 10 00 00 50 6A 00 FF 95 E9 0E 00 00 89 85 6B 0F 00 00 6A 04 68 00 10 00 00 68 D8 7C 00 00 6A 00 FF 95 E9 0E 00 00 89 85 6F 0F 00 00 8D 85 67 0F 00 00 8B 9D 73 0F 00 00 8B 8D 6B 0F 00 00 8B 95 5B 0F 00 00 83 EA 0E 8B B5 57 0F 00 00 83 C6 0E 8B BD 6F 0F 00 00 50 53 51 52 56 68 D8 7C 00 00 57 E8 01 01 00 00 8B 9D 57 0F 00 00 8B 03 3C 01 75\nep_only = true\n\n[hmimys-Packer 1.0 -> hmimys]\nsignature = 5E 83 C6 64 AD 50 AD 50 83 EE 6C AD 50 AD 50 AD 50 AD 50 AD 50 E8 E7 07\nep_only = false\n\n[hmimys-Packer V1.2 -> hmimys]\nsignature = E8 95 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 5E AD 50 AD 50 97 AD 50 AD 50 AD 50 E8 C0 01 00 00 AD 50 AD 93 87 DE B9 ?? ?? ?? ?? E3 1D 8A 07 47 04 ?? 3C ?? 73 F7 8B 07 3C ?? 75 F3 B0 00 0F C8 05 ?? ?? ?? ?? 2B C7 AB E2 E3 AD 85 C0 74 2B 97 56 FF 13 8B E8 AC 84 C0 75 FB 66 AD 66 85 C0 74 E9 AC 83 EE 03 84 C0 74 08 56 55 FF 53 04 AB EB E4 AD 50 55 FF 53 04 AB EB E0 C3 8B 0A 3B 4A 04 75 0A C7 42 10 01 00 00 00 0C FF C3\nep_only = true\n\n[HPA]\nsignature = E8 ?? ?? 5E 8B D6 83 ?? ?? 83 ?? ?? 06 0E 1E 0E 1F 33 FF 8C D3\nep_only = true\n\n[Hying's PE-Armor 0.75.exe -> Hying [CCG]]\nsignature = 00 00 00 00 00 00 00 00 ?? ?? 00 00 00 00 00 00 ?? ?? 01 00 00 00 00 00 00 00 00 00 56 69 72 74 75 61 6C 41 6C 6C 6F 63 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 74 ?? ?? ?? 00 00 00 00 00\nep_only = false\n\n[hying's PEArmor V0.76 -> hying]\nsignature = E9 00 00 00 00 60 E8 14 00 00 00 5D 81 ED 00 00 00 00 6A ?? E8 A3 00 00 00\nep_only = true\n\n[ICrypt 1.0 - by BuGGz]\nsignature = 55 8B EC 83 C4 EC 53 56 57 33 C0 89 45 EC B8 70 3B 00 10 E8 3C FA FF FF 33 C0 55 68 6C 3C 00 10 64 FF 30 64 89 20 6A 0A 68 7C 3C 00 10 A1 50 56 00 10 50 E8 D8 FA FF FF 8B D8 53 A1 50 56 00 10 50 E8 0A FB FF FF 8B F8 53 A1 50 56 00 10 50 E8 D4 FA FF FF 8B D8 53 E8 D4 FA FF FF 8B F0 85 F6 74 26 8B D7 4A B8 64 56 00 10 E8 25 F6 FF FF B8 64 56 00 10 E8 13 F6 FF FF 8B CF 8B D6 E8 E6 FA FF FF 53 E8 90 FA FF FF 8D 4D EC BA 8C 3C 00 10 A1 64 56 00 10 E8 16 FB FF FF 8B 55 EC B8 64 56 00 10 E8 C5 F4 FF FF B8 64 56 00 10 E8 DB F5 FF FF E8 56 FC FF FF 33 C0 5A 59 59 64 89 10 68 73 3C 00 10 8D 45 EC E8 4D F4 FF FF C3 E9 E3 EE FF FF EB F0 5F 5E 5B E8 4D F3 FF FF 00 53 45 54 ?? ?? ?? ?? 00 FF FF FF FF 08 00 00 00 76 6F 74 72 65 63 6C 65\nep_only = true\n\n[ID Application Protector 1.2 -> ID Security Suite]\nsignature = 60 E8 00 00 00 00 5D 81 ED F2 0B 47 00 B9 19 22 47 00 81 E9 EA 0E 47 00 89 EA 81 C2 EA 0E 47 00 8D 3A 89 FE 31 C0 E9 D3 02 00 00 CC CC CC CC E9 CA 02 00 00 43 3A 5C 57 69 6E 64 6F 77 73 5C 53 6F 66 74 57 61 72 65 50 72 6F 74 65 63 74 6F 72 5C\nep_only = true\n\n[ILUCRYPT v4.015 [exe]]\nsignature = 8B EC FA C7 46 F7 ?? ?? 42 81 FA ?? ?? 75 F9 FF 66 F7\nep_only = true\n\n[iLUCRYPT v4.018 [exe]]\nsignature = 8B EC FA C7 ?? ?? ?? ?? 4C 4C C3 FB BF ?? ?? B8 ?? ?? 2E ?? ?? D1 C8 4F 81\nep_only = true\n\n[IMP-Packer 1.0 -> Mahdi Hezavehi [IMPOSTER]]\nsignature = 28 ?? ?? ?? 00 00 00 00 00 00 00 00 40 ?? ?? ?? 34 ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4C ?? ?? ?? 5C ?? ?? ?? 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 4B 45 52 4E 45 4C 33 32 2E 64 6C 6C 00 00 47 65 74 50 72 6F 63\nep_only = false\n\n[Imploder v1.04 --> BoB / BobSoft]\nsignature = 60 E8 A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 36 ?? ?? ?? 2E ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 80 00 00 00 00 4B 65 72 6E 65 6C 33 32 2E 44\nep_only = true\n\n[IMPostor Pack 1.0 -> Mahdi Hezavehi]\nsignature = BE ?? ?? ?? 00 83 C6 01 FF E6 00 00 00 00 ?? ?? 00 00 00 00 00 00 00 00 00 ?? ?? ?? 00 ?? 02 ?? ?? 00 10 00 00 00 02 00\nep_only = true\n\n[Inbuild v1.0 [hard]]\nsignature = B9 ?? ?? BB ?? ?? 2E ?? ?? 2E ?? ?? 43 E2\nep_only = true\n\n[INCrypter 0.3 (INinY) - by z3e_NiFe]\nsignature = 60 64 A1 30 00 00 00 8B 40 0C 8B 40 0C 8D 58 20 C7 03 00 00 00 00 E8 00 00 00 00 5D 81 ED 4D 16 40 00 8B 9D 0E 17 40 00 64 A1 18 00 00 00 8B 40 30 0F B6 40 02 83 F8 01 75 05 03 DB C1 CB 10 8B 8D 12 17 40 00 8B B5 06 17 40 00 51 81 3E 2E 72 73 72 74 65 8B 85 16 17 40 00 E8 23 00 00 00 8B 85 1A 17 40 00 E8 18 00 00 00 8B 85 1E 17 40 00 E8 0D 00 00 00 8B 85 22 17 40 00 E8 02 00 00 00 EB 18 8B D6 3B 46 0C 72 0A 83 F9 01 74 0B 3B 46 34 72 06 BA 00 00 00 00 C3 58 83 FA 00 75 1A 8B 4E 10 8B 7E 0C 03 BD 02 17 40 00 83 F9 00 74 09 F6 17 31 0F 31 1F 47 E2 F7 59 83 C6 28 49 83 F9 00 75 88 8B 85 0A 17 40 00 89 44 24 1C 61 50 C3\nep_only = false\n\n[Inno Setup Module]\nsignature = 49 6E 6E 6F 53 65 74 75 70 4C 64 72 57 69 6E 64 6F 77 00 00 53 54 41 54 49 43\nep_only = true\n\n[Inno Setup Module]\nsignature = 55 8B EC 83 C4 ?? 53 56 57 33 C0 89 45 F0 89 45 ?? 89 45 ?? E8 ?? ?? FF FF E8 ?? ?? FF FF E8 ?? ?? FF FF E8 ?? ?? FF FF E8 ?? ?? FF FF\nep_only = false\n\n[Inno Setup Module v1.09a]\nsignature = 55 8B EC 83 C4 C0 53 56 57 33 C0 89 45 F0 89 45 C4 89 45 C0 E8 A7 7F FF FF E8 FA 92 FF FF E8 F1 B3 FF FF 33 C0\nep_only = true\n\n[Inno Setup Module v1.2.9]\nsignature = 55 8B EC 83 C4 C0 53 56 57 33 C0 89 45 F0 89 45 EC 89 45 C0 E8 5B 73 FF FF E8 D6 87 FF FF E8 C5 A9 FF FF E8 E0\nep_only = true\n\n[Inno Setup Module v2.0.18]\nsignature = 55 8B EC 83 C4 B8 53 56 57 33 C0 89 45 F0 89 45 BC 89 45 B8 E8 73 71 FF FF E8 DA 85 FF FF E8 81 A7 FF FF E8 C8\nep_only = false\n\n[Inno Setup Module v3.0.4-beta/v3.0.6/v3.0.7]\nsignature = 55 8B EC 83 C4 B8 53 56 57 33 C0 89 45 F0 89 45 BC 89 45 B8 E8 B3 70 FF FF E8 1A 85 FF FF E8 25 A7 FF FF E8 6C\nep_only = false\n\n[Install Stub 32-bit]\nsignature = 55 8B EC 81 EC 14 ?? 00 00 53 56 57 6A 00 FF 15 ?? ?? ?? ?? 68 ?? ?? ?? ?? FF 15 ?? ?? ?? ?? 85 C0 74 29\nep_only = true\n\n[InstallAnywhere 6.1 -> Zero G Software Inc]\nsignature = 60 BE 00 A0 42 00 8D BE 00 70 FD FF 57 83 CD FF EB 10 90 90 90 90 90 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB 72 ED B8 01 00 00 00 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C0 01 DB 73 EF 75 09 8B 1E 83 EE FC 11 DB 73 E4 31 C9 83 E8 03 72 0D C1 E0\nep_only = true\n\n[InstallAnywhere 6.1 ->Zero G Software Inc]\nsignature = 60 BE 00 A0 42 00 8D BE 00 70 FD FF 57 83 CD FF EB 10 90 90 90 90 90 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB 72 ED B8 01 00 00 00 01 DB 75 07\nep_only = true\n\n[InstallShield 2000]\nsignature = 55 8B EC 6A FF 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 C4 ?? 53 56 57\nep_only = true\n\n[InstallShield Custom]\nsignature = 55 8B EC 83 EC 44 56 FF 15 ?? ?? 41 00 8B F0 85 F6 75 08 6A FF FF 15 ?? ?? 41 00 8A 06 57 8B 3D ?? ?? 41 00 3C 22 75 1B 56 FF D7 8B F0 8A 06 3C 22 74 04 84 C0 75 F1 80 3E 22 75 15 56 FF D7 8B\nep_only = true\n\n[Ionic Wind Software]\nsignature = 9B DB E3 9B DB E2 D9 2D 00 ?? ?? 00 55 89 E5 E8\nep_only = true\n\n[iPB Protect 0.1.3 - 0.1.7 -> forgot]\nsignature = 55 8B EC 6A FF 68 4B 43 55 46 68 54 49 48 53 64 A1 00 00 00 00\nep_only = true\n\n[iPBProtect v0.1.3]\nsignature = 55 8B EC 6A FF 68 4B 43 55 46 68 54 49 48 53 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 68 53 56 57 89 65 FA 33 DB 89 5D F8 6A 02 EB 01 F8 58 5F 5E 5B 64 8B 25 00 00 00 00 64 8F 05 00 00 00 00 58 58 58 5D 68 9F 6F 56 B6 50 E8 5D 00 00 00 EB FF 71 78\nep_only = false\n\n[IProtect 1.0 (Fxlib.dll mode) - by FuXdas]\nsignature = EB 33 2E 46 55 58 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 46 78 4C 69 62 2E 64 6C 6C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? 00 60 E8 00 00 00 00 5D 81 ED 71 10 40 00 FF 74 24 20 E8 40 00 00 00 0B C0 74 2F 89 85 63 10 40 00 8D 85 3C 10 40 00 50 FF B5 63 10 40 00 E8 92 00 00 00 0B C0 74 13 89 85 5F 10 40 00 8D 85 49 10 40 00 50 FF 95 5F 10 40 00 8B 85 67 10 40 00 89 44 24 1C 61 FF E0 8B 7C 24 04 8D 85 00 10 40 00 50 64 FF 35 00 00 00 00 8D 85 53 10 40 00 89 20 89 68 04 8D 9D 0A 11 40 00 89 58 08 64 89 25 00 00 00 00 81 E7 00 00 FF FF 66 81 3F 4D 5A 75 0F 8B F7 03 76 3C 81 3E 50 45 00 00 75 02 EB 17 81 EF 00 00 01 00 81 FF 00 00 00 70 73 07 BF 00 00 F7 BF EB 02 EB D3 97 64 8F 05 00 00 00 00 83 C4 04 C2 04 00 8D 85 00 10 40 00 50 64 FF 35 00 00 00 00 8D 85 53 10 40 00 89 20 89 68 04 8D 9D 0A 11 40 00 89 58 08 64 89 25 00 00 00 00 8B 74 24 0C 66 81 3E 4D 5A 74 05 E9 8A 00 00 00 03 76 3C 81 3E 50 45 00 00 74 02 EB 7D 8B 7C 24 10 B9 96 00 00 00 32 C0 F2 AE 8B CF 2B 4C 24 10 8B 56 78 03 54 24 0C 8B 5A 20 03 5C 24 0C 33 C0 8B 3B 03 7C 24 0C 8B 74 24 10 51 F3 A6 75 05 83 C4 04 EB 0A 59 83 C3 04 40 3B 42 18 75 E2 3B 42 18 75 02 EB 35 8B 72 24 03 74 24 0C 52 BB 02 00 00 00 33 D2 F7 E3 5A 03 C6 33 C9 66 8B 08 8B 7A 1C 33 D2 BB 04 00 00 00 8B C1 F7 E3 03 44 24 0C 03 C7 8B 00 03 44 24 0C EB 02 33 C0 64 8F 05 00 00 00 00 83 C4 04 C2 08 00 E8 FA FD FF FF\nep_only = true\n\n[IProtect 1.0 (FxSub.dll mode) - by FuXdas]\nsignature = EB 33 2E 46 55 58 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 46 78 53 75 62 2E 64 6C 6C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? 00 60 E8 00 00 00 00 5D 81 ED B6 13 40 00 FF 74 24 20 E8 40 00 00 00 0B C0 74 2F 89 85 A8 13 40 00 8D 85 81 13 40 00 50 FF B5 A8 13 40 00 E8 92 00 00 00 0B C0 74 13 89 85 A4 13 40 00 8D 85 8E 13 40 00 50 FF 95 A4 13 40 00 8B 85 AC 13 40 00 89 44 24 1C 61 FF E0 8B 7C 24 04 8D 85 00 10 40 00 50 64 FF 35 00 00 00 00 8D 85 98 13 40 00 89 20 89 68 04 8D 9D 4F 14 40 00 89 58 08 64 89 25 00 00 00 00 81 E7 00 00 FF FF 66 81 3F 4D 5A 75 0F 8B F7 03 76 3C 81 3E 50 45 00 00 75 02 EB 17 81 EF 00 00 01 00 81 FF 00 00 00 70 73 07 BF 00 00 F7 BF EB 02 EB D3 97 64 8F 05 00 00 00 00 83 C4 04 C2 04 00 8D 85 00 10 40 00 50 64 FF 35 00 00 00 00 8D 85 98 13 40 00 89 20 89 68 04 8D 9D 4F 14 40 00 89 58 08 64 89 25 00 00 00 00 8B 74 24 0C 66 81 3E 4D 5A 74 05 E9 8A 00 00 00 03 76 3C 81 3E 50 45 00 00 74 02 EB 7D 8B 7C 24 10 B9 96 00 00 00 32 C0 F2 AE 8B CF 2B 4C 24 10 8B 56 78 03 54 24 0C 8B 5A 20 03 5C 24 0C 33 C0 8B 3B 03 7C 24 0C 8B 74 24 10 51 F3 A6 75 05 83 C4 04 EB 0A 59 83 C3 04 40 3B 42 18 75 E2 3B 42 18 75 02 EB 35 8B 72 24 03 74 24 0C 52 BB 02 00 00 00 33 D2 F7 E3 5A 03 C6 33 C9 66 8B 08 8B 7A 1C 33 D2 BB 04 00 00 00 8B C1 F7 E3 03 44 24 0C 03 C7 8B 00 03 44 24 0C EB 02 33 C0 64 8F 05 00 00 00 00 83 C4 04 C2 08 00 E8 B5 FA FF FF\nep_only = true\n\n[JAM v2.11]\nsignature = 50 06 16 07 BE ?? ?? 8B FE B9 ?? ?? FD FA F3 2E A5 FB 06 BD ?? ?? 55 CB\nep_only = true\n\n[JDPack]\nsignature = 60 E8 ?? ?? ?? ?? 5D 8B D5 81 ED ?? ?? ?? ?? 2B 95 ?? ?? ?? ?? 81 EA 06 ?? ?? ?? 89 95 ?? ?? ?? ?? 83 BD 45\nep_only = true\n\n[JDPack 2.x -> JDPack]\nsignature = 55 8B EC 6A FF 68 68 51 40 00 68 04 25 40 00 64 A1 00 00 00 00\nep_only = true\n\n[JDPack V2.00 -> JDPack]\nsignature = 55 8B EC 6A FF 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 ?? ?? ?? E8 01 00 00 00 ?? ?? ?? ?? ?? ?? 05 00 00 00 00 83 C4 0C 5D 60 E8 00 00 00 00 5D 8B D5 64 FF 35 00 00 00 00 EB\nep_only = true\n\n[JExeCompressor 1.0 - by Arash Veyskarami]\nsignature = 8D 2D D3 4A E5 14 0F BB F7 0F BA E5 73 0F AF D5 8D 0D 0C 9F E6 11 C0 F8 EF F6 DE 80 DC 5B F6 DA 0F A5 C1 0F C1 F1 1C F3 4A 81 E1 8C 1F 66 91 0F BE C6 11 EE 0F C0 E7 33 D9 64 F2 C0 DC 73 0F C0 D5 55 8B EC BA C0 1F 41 00 8B C2 B9 97 00 00 00 80 32 79 50 B8 02 00 00 00 50 03 14 24 58 58 51 2B C9 B9 01 00 00 00 83 EA 01 E2 FB 59 E2 E1 FF E0\nep_only = true\n\n[Joiner (sign from pinch 25.03.2007 20:10)]\nsignature = 81 EC 04 01 00 00 8B F4 68 04 01 00 00 56 6A 00 E8 7C 01 00 00 33 C0 6A 00 68 80 00 00 00 6A 03 6A 00 6A 00 68 00 00 00 80 56 E8 50 01 00 00 8B D8 6A 00 6A 00 6A 00 6A 02 6A 00 53 E8 44 01\nep_only = true\n\n[KBys Packer 0.28 Beta -> Shoooo]\nsignature = 60 E8 00 00 00 00 5E 83 EE 0A 8B 06 03 C2 8B 08 89 4E F3 83 EE 0F 56 52 8B F0 AD AD 03 C2 8B D8 6A 04 BF 00 10 00 00 57 57 6A 00 FF 53 08 5A 59 BD 00 80 00 00 55 6A 00 50 51 52 50 89 06 AD AD 03 C2 50 AD 03 C2 FF D0 6A 04 57 AD 50 6A 00 FF 53\nep_only = false\n\n[KByS V0.22 -> shoooo]\nsignature = 68 ?? ?? ?? ?? E8 01 00 00 00 C3 C3 11 55 07 8B EC B8 ?? ?? ?? ?? E8\nep_only = true\n\n[KByS V0.28 -> shoooo]\nsignature = 68 ?? ?? ?? ?? E8 01 00 00 00 C3 C3 60 8B 74 24 24 8B 7C 24 28 FC B2 80 33 DB A4\nep_only = true\n\n[KByS V0.28 DLL -> shoooo]\nsignature = B8 ?? ?? ?? ?? BA ?? ?? ?? ?? 03 C2 FF E0 ?? ?? ?? ?? 60 E8 00 00 00 00\nep_only = true\n\n[KGB SFX]\nsignature = 60 BE 00 A0 46 00 8D BE 00 70 F9 FF 57 83 CD FF EB 10 90 90 90 90 90 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB 72 ED B8 01 00 00 00 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C0 01 DB 73\nep_only = true\n\n[KGCrypt vx.x]\nsignature = E8 ?? ?? ?? ?? 5D 81 ED ?? ?? ?? ?? 64 A1 30 ?? ?? ?? 84 C0 74 ?? 64 A1 20 ?? ?? ?? 0B C0 74\nep_only = true\n\n[kkrunchy -> Ryd]\nsignature = BD 08 ?? ?? 00 C7 45 00 ?? ?? ?? 00 FF 4D 08 C6 45 0C 05 8D 7D 14 31 C0 B4 04 89 C1 F3 AB BF ?? ?? ?? 00 57 BE ?? ?? ?? 00 31 C9 41 FF 4D 0C 8D 9C 8D A0 00 00 00 FF D6 10 C9 73 F3 FF 45 0C 91 AA 83 C9 FF 8D 5C 8D 18 FF D6 74 DD E3 17 8D 5D 1C FF D6 74 10\nep_only = true\n\n[kkrunchy 0.23 alpha -> Ryd]\nsignature = BD 08 ?? ?? 00 C7 45 00 ?? ?? ?? 00 FF 4D 08 C6 45 0C 05 8D 7D 14 31 C0 B4 04 89 C1 F3 AB BF ?? ?? ?? 00 57 BE ?? ?? ?? 00 31 C9 41 FF 4D 0C 8D 9C 8D A0 00 00 00 FF D6 10 C9 73 F3 FF 45 0C 91 AA 83 C9 FF 8D 5C 8D 18 FF D6 74 DD E3 17 8D 5D 1C FF D6 74 10 8D 9D A0 08 00 00 E8 ?? 00 00 00 8B 45 10 EB 42 8D 9D A0 04 00 00 E8 ?? 00 00 00 49 49 78 40 8D 5D 20 74 03 83 C3 40 31 D2 42 E8 ?? 00 00 00 8D 0C 48 F6 C2 10 74 F3 41 91 8D 9D A0 08 00 00 E8 ?? 00 00 00 3D 00 08 00 00 83 D9 FF 83 F8 60 83 D9 FF 89 45 10 56 89 FE 29 C6 F3 A4 5E EB 90 BE ?? ?? ?? 00 BB ?? ?? ?? 00 55 46 AD 85 C0 74 ?? 97 56 FF 13 85 C0 74 16 95 AC 84 C0 75 FB 38 06 74 E8 78 ?? 56 55 FF 53 04 AB 85 C0\nep_only = true\n\n[kkrunchy 0.23 alpha 2 -> Ryd]\nsignature = BD ?? ?? ?? ?? C7 45 00 ?? ?? ?? 00 B8 ?? ?? ?? 00 89 45 04 89 45 54 50 C7 45 10 ?? ?? ?? 00 FF 4D 0C FF 45 14 FF 45 58 C6 45 1C 08 B8 00 08 00 00 8D 7D 30 AB AB AB AB BB 00 00 D8 00 BF\nep_only = true\n\n[kkrunchy 0.23 alpha 2 -> Ryd]\nsignature = BD ?? ?? ?? ?? C7 45 00 ?? ?? ?? 00 B8 ?? ?? ?? 00 89 45 04 89 45 54 50 C7 45 10 ?? ?? ?? 00 FF 4D 0C FF 45 14 FF 45 58 C6 45 1C 08 B8 00 08 00 00 8D 7D 30 AB AB AB AB BB 00 00 D8 00 BF ?? ?? ?? 01 31 C9 41 8D 74 09 01 B8 CA 8E 2A 2E 99 F7 F6 01 C3 89 D8 C1 E8 15 AB FE C1 75 E8 BE\nep_only = true\n\n[kkrunchy v0.17 -> F. Giesen]\nsignature = FC FF 4D 08 31 D2 8D 7D 30 BE\nep_only = false\n\n[kkrunchy V0.2X -> Ryd]\nsignature = BD ?? ?? ?? ?? C7 45 ?? ?? ?? ?? ?? FF 4D 08 C6 45 0C 05 8D 7D 14 31 C0 B4 04 89 C1 F3 AB BF ?? ?? ?? ?? 57 BE ?? ?? ?? ?? 31 C9 41 FF 4D 0C 8D 9C 8D A0 00 00 00 FF D6\nep_only = true\n\n[Krypton v0.2]\nsignature = 8B 0C 24 E9 0A 7C 01 ?? AD 42 40 BD BE 9D 7A 04\nep_only = true\n\n[Krypton v0.3]\nsignature = 8B 0C 24 E9 C0 8D 01 ?? C1 3A 6E CA 5D 7E 79 6D B3 64 5A 71 EA\nep_only = true\n\n[Krypton v0.4]\nsignature = 54 E8 ?? ?? ?? ?? 5D 8B C5 81 ED 61 34 ?? ?? 2B 85 60 37 ?? ?? 83 E8 06\nep_only = true\n\n[Krypton v0.5]\nsignature = 54 E8 ?? ?? ?? ?? 5D 8B C5 81 ED 71 44 ?? ?? 2B 85 64 60 ?? ?? EB 43 DF\nep_only = true\n\n[kryptor 5]\nsignature = E8 03 ?? ?? ?? E9 EB 6C 58 40 FF E0\nep_only = true\n\n[kryptor 6]\nsignature = E8 03 ?? ?? ?? E9 EB 68 58 33 D2 74 02 E9 E9 40 42 75 02\nep_only = true\n\n[kryptor 9]\nsignature = 60 E8 ?? ?? ?? ?? 5E B9 ?? ?? ?? ?? 2B C0 02 04 0E D3 C0 49 79 F8 41 8D 7E 2C 33 46 ?? 66 B9\nep_only = true\n\n[LameCrypt -> LaZaRus]\nsignature = 60 66 9C BB 00 ?? ?? 00 80 B3 00 10 40 00 90 4B 83 FB FF 75 F3 66 9D 61 B8 ?? ?? 40 00 FF E0\nep_only = true\n\n[LameCrypt v1.0]\nsignature = 60 66 9C BB ?? ?? ?? ?? 80 B3 00 10 40 00 90 4B 83 FB FF 75 F3 66 9D 61\nep_only = true\n\n[LamerStop v1.0c (c) Stefan Esser]\nsignature = E8 ?? ?? 05 ?? ?? CD 21 33 C0 8E C0 26 ?? ?? ?? 2E ?? ?? ?? 26 ?? ?? ?? 2E ?? ?? ?? BA ?? ?? FA\nep_only = true\n\n[LaunchAnywhere v4.0.0.1]\nsignature = 55 89 E5 53 83 EC 48 55 B8 FF FF FF FF 50 50 68 E0 3E 42 00 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 68 C0 69 44 00 E8 E4 80 FF FF 59 E8 4E 29 00 00 E8 C9 0D 00 00 85 C0 75 08 6A FF E8 6E 2B 00 00 59 E8 A8 2C 00 00 E8 23 2E 00 00 FF 15 4C C2 44 00 89 C3\nep_only = true\n\n[Launcher Generator v1.03]\nsignature = 68 00 20 40 00 68 10 20 40 00 6A 00 6A 00 6A 20 6A 00 6A 00 6A 00 68 F0 22 40 00 6A 00 E8 93 00 00 00 85 C0 0F 84 7E 00 00 00 B8 00 00 00 00 3B 05 68 20 40 00 74 13 6A ?? 68 60 23 40 00 68 20 23 40 00 6A 00 E8 83 00 00 00 A1 58 20 40 00 3B 05 6C 20 40 00\nep_only = false\n\n[LOCK98 V1.00.28 -> keenvim]\nsignature = 55 E8 00 00 00 00 5D 81 ?? ?? ?? ?? ?? EB 05 E9 ?? ?? ?? ?? EB 08\nep_only = true\n\n[Lockless Intro Pack]\nsignature = 2C E8 ?? ?? ?? ?? 5D 8B C5 81 ED F6 73 ?? ?? 2B 85 ?? ?? ?? ?? 83 E8 06 89 85\nep_only = true\n\n[LTC v1.3]\nsignature = 54 E8 00 00 00 00 5D 8B C5 81 ED F6 73 40 00 2B 85 87 75 40 00 83 E8 06\nep_only = true\n\n[LY_WGKX -> www.szleyu.com]\nsignature = 4D 79 46 75 6E 00 62 73\nep_only = false\n\n[Macromedia Windows Flash Projector/Player v3.0]\nsignature = 55 8B EC 83 EC 44 56 FF 15 94 13 42 00 8B F0 B1 22 8A 06 3A C1 75 13 8A 46 01 46 3A C1 74 04 84 C0 75 F4 38 0E 75 0D 46 EB 0A 3C 20 7E 06\nep_only = true\n\n[Macromedia Windows Flash Projector/Player v4.0]\nsignature = 83 EC 44 56 FF 15 24 41 43 00 8B F0 8A 06 3C 22 75 1C 8A 46 01 46 3C 22 74 0C 84 C0 74 08 8A 46 01 46 3C 22 75 F4 80 3E 22 75 0F 46 EB 0C\nep_only = true\n\n[Macromedia Windows Flash Projector/Player v5.0]\nsignature = 83 EC 44 56 FF 15 70 61 44 00 8B F0 8A 06 3C 22 75 1C 8A 46 01 46 3C 22 74 0C 84 C0 74 08 8A 46 01 46 3C 22 75 F4 80 3E 22 75 0F 46 EB 0C 3C 20 7E 08 8A 46 01 46 3C 20 7F F8 8A 06 84 C0 74 0C 3C 20 7F 08 8A 46 01 46 84 C0 75 F4 8D 44 24 04 C7 44 24 30 00\nep_only = true\n\n[Macromedia Windows Flash Projector/Player v6.0]\nsignature = 83 EC 44 56 FF 15 24 81 49 00 8B F0 8A 06 3C 22 75 1C 8A 46 01 46 3C 22 74 0C 84 C0 74 08 8A 46 01 46 3C 22 75 F4 80 3E 22 75 0F 46 EB 0C\nep_only = true\n\n[MarjinZ EXE-Scrambler SE - by MarjinZ]\nsignature = E8 A3 02 00 00 E9 35 FD FF FF FF 25 C8 20 00 10 6A 14 68 C0 21 00 10 E8 E4 01 00 00 FF 35 7C 33 00 10 8B 35 8C 20 00 10 FF D6 59 89 45 E4 83 F8 FF 75 0C FF 75 08 FF 15 88 20 00 10 59 EB 61 6A 08 E8 02 03 00 00 59 83 65 FC 00 FF 35 7C 33 00 10 FF D6 89 45 E4 FF 35 78 33 00 10 FF D6 89 45 E0 8D 45 E0 50 8D 45 E4 50 FF 75 08 E8 D1 02 00 00 89 45 DC FF 75 E4 8B 35 74 20 00 10 FF D6 A3 7C 33 00 10 FF 75 E0 FF D6 83 C4 1C A3 78 33 00 10 C7 45 FC FE FF FF FF E8 09 00 00 00 8B 45 DC E8 A0 01 00 00 C3\nep_only = false\n\n[MaskPE 1.6 -> yzkzero]\nsignature = 36 81 2C 24 ?? ?? ?? 00 C3 60\nep_only = false\n\n[MaskPE V2.0 -> yzkzero]\nsignature = B8 18 00 00 00 64 8B 18 83 C3 30 C3 40 3E 0F B6 00 C1 E0 ?? 83 C0 ?? 36 01 04 24 C3\nep_only = false\n\n[MASM32]\nsignature = 6A ?? 68 00 30 40 00 68 ?? 30 40 00 6A 00 E8 07 00 00 00 6A 00 E8 06 00 00 00 FF 25 08 20\nep_only = true\n\n[Matrix Dongle -> TDi GmbH]\nsignature = 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 4B 45 52 4E 45 4C 33 32 2E 44 4C 4C 00 E8 B6 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? E8 00 00 00 00 5B 2B D9 8B F8 8B 4C 24 2C 33 C0 2B CF F2 AA 8B 3C 24 8B 0A 2B CF 89 5C 24 20 80 37 A2 47 49 75 F9 8D 64 24 04 FF 64 24 FC 60 C7 42 08 ?? ?? ?? ?? E8 C5 FF FF FF C3 C2 F7 29 4E 29 5A 29 E6 86 8A 89 63 5C A2 65 E2 A3 A2\nep_only = false\n\n[Matrix Dongle -> TDi GmbH]\nsignature = E8 00 00 00 00 E8 00 00 00 00 59 5A 2B CA 2B D1 E8 1A FF FF FF\nep_only = true\n\n[MEGALITE v1.20a]\nsignature = B8 ?? ?? BA ?? ?? 05 ?? ?? 3B 2D 73 ?? 72 ?? B4 09 BA ?? ?? CD 21 CD 90\nep_only = true\n\n[MESS v1.20]\nsignature = ?? ?? ?? ?? FA B9 ?? ?? F3 ?? ?? E3 ?? EB ?? EB ?? B6\nep_only = true\n\n[Metrowerks CodeWarrior (DLL) v2.0]\nsignature = 55 89 E5 53 56 57 8B 75 0C 8B 5D 10 83 FE 01 74 05 83 FE 02 75 12 53 56 FF 75 08 E8 6E FF FF FF 09 C0 75 04 31 C0 EB 21 53 56 FF 75 08 E8 ?? ?? ?? ?? 89 C7 09 F6 74 05 83 FE 03 75 0A 53 56 FF 75 08 E8 47 FF FF FF 89 F8 8D 65 F4 5F 5E 5B 5D C2 0C 00 C9\nep_only = false\n\n[Metrowerks CodeWarrior v2.0 (Console)]\nsignature = 55 89 E5 55 B8 FF FF FF FF 50 50 68 ?? ?? ?? ?? 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 68 ?? ?? ?? ?? E8 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 ?? ?? 00 00 E8 ?? ?? 00 00 E8\nep_only = false\n\n[Metrowerks CodeWarrior v2.0 (GUI)]\nsignature = 55 89 E5 53 56 83 EC 44 55 B8 FF FF FF FF 50 50 68 ?? ?? 40 00 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 68 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 ?? ?? 00 00 E8 ?? ?? 00 00 E8\nep_only = false\n\n[MEW 10 by Northfox]\nsignature = 33 C0 E9 ?? ?? FF FF ?? 1C ?? ?? 40\nep_only = false\n\n[Mew 10 exe-coder 1.0  -> Northfox [HCC]]\nsignature = 33 C0 E9 ?? ?? FF FF 6A ?? ?? ?? ?? ?? 70\nep_only = true\n\n[MEW 11 SE v1.1]\nsignature = E9 ?? ?? ?? FF 0C ?? 00 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[MEW 11 SE v1.2]\nsignature = E9 ?? ?? ?? FF 0C ?? 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? 00 0C ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[Mew 11 SE v1.2 (Eng) -> Northfox]\nsignature = E9 ?? ?? ?? FF 0C ?? ?? 00 00 00 00 00 00 00 00 00 ?? ?? ?? 00 0C\nep_only = true\n\n[MEW 11 SE v1.2 -> Northfox[HCC]]\nsignature = E9 ?? ?? ?? FF 0C ?? ?? 00 00 00 00 00 00 00 00 00 ?? ?? ?? 00 0C ?? ?? 00\nep_only = true\n\n[MEW 5 1.0 -> Northfox]\nsignature = BE 5B 00 40 00 AD 91 AD 93 53 AD 96 56 5F AC C0 C0\nep_only = true\n\n[Mew 5.0.1 -> NorthFox / HCC]\nsignature = BE 5B 00 40 00 AD 91 AD 93 53 AD 96 56 5F AC C0 C0 ?? 04 ?? C0 C8 ?? AA E2 F4 C3 00 ?? ?? 00 ?? ?? ?? 00 00 10 40 00 4D 45 57 20 30 2E 31 20 62 79 20 4E 6F 72 74 68 66 6F 78 00 4D 45 57 20 30 2E 31 20 62 79 20 4E 6F 72 74 68 66 6F 78 00 4D 45 57 20 30 2E 31 20 62 79 20 4E 6F 72 74 68 66 6F 78 00 4D 45 57 20 30 2E 31 20 62 79 20 4E 6F 72 74 68 66 6F 78 00 4D\nep_only = true\n\n[MicroJoiner 1.1 -> coban2k]\nsignature = BE 0C 70 40 00 BB F8 11 40 00 33 ED 83 EE 04 39 2E 74 11\nep_only = true\n\n[MicroJoiner 1.5 -> coban2k]\nsignature = BF 05 10 40 00 83 EC 30 8B EC E8 C8 FF FF FF E8 C3 FF FF FF\nep_only = true\n\n[MicroJoiner 1.6 -> coban2k]\nsignature = 33 C0 64 8B 38 48 8B C8 F2 AF AF 8B 1F 66 33 DB 66 81 3B\nep_only = true\n\n[MicroJoiner 1.7 -> coban2k]\nsignature = BF 00 10 40 00 8D 5F 21 6A 0A 58 6A 04 59 60 57 E8 8E 00 00 00\nep_only = true\n\n[Microsoft Visual C++ V8.0]\nsignature = 6A 14 68 ?? ?? ?? ?? E8 ?? ?? ?? ?? BB 94 00 00 00 53 6A 00 8B ?? ?? ?? ?? ?? FF D7 50 FF ?? ?? ?? ?? ?? 8B F0 85 F6 75 0A 6A 12 E8 ?? ?? ?? ?? 59 EB 18 89 1E 56 FF ?? ?? ?? ?? ?? 56 85 C0 75 14 50 FF D7 50 FF ?? ?? ?? ?? ?? B8\nep_only = true\n\n[Microsoft Visual C++ V8.0 (Debug)]\nsignature = E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9 ?? ?? ?? ?? E9\nep_only = true\n\n[MinGW GCC 3.x]\nsignature = 55 89 E5 83 EC 08 C7 04 24 ?? 00 00 00 FF 15 ?? ?? ?? ?? E8 ?? ?? FF FF ?? ?? ?? ?? ?? ?? ?? ?? 55\nep_only = true\n\n[Minke 1.0.1 - by Codius]\nsignature = 55 8B EC 83 C4 F0 53 ?? ?? ?? ?? ?? 10 E8 7A F6 FF FF BE 68 66 00 10 33 C0 55 68 DB 40 00 10 64 FF 30 64 89 20 E8 FA F8 FF FF BA EC 40 00 10 8B C6 E8 F2 FA FF FF 8B D8 B8 6C 66 00 10 8B 16 E8 88 F2 FF FF B8 6C 66 00 10 E8 76 F2 FF FF 8B D0 8B C3 8B 0E E8 E3 E4 FF FF E8 2A F9 FF FF E8 C1 F8 FF FF B8 6C 66 00 10 8B 16 E8 6D FA FF FF E8 14 F9 FF FF E8 AB F8 FF FF 8B 06 E8 B8 E3 FF FF 8B D8 B8 6C 66 00 10 E8 38 F2 FF FF 8B D3 8B 0E E8 A7 E4 FF ?? ?? ?? ?? C4 FB FF FF E8 E7 F8 FF FF 8B C3 E8 B0 E3 FF FF E8 DB F8 FF FF 33 C0 5A 59 59 64 89 10 68 E2 40 00 10 C3 E9 50 EB FF FF EB F8 5E 5B E8 BB EF FF FF 00 00 00 43 41 31 38\nep_only = true\n\n[Minke V1.0.1 -> Codius]\nsignature = 26 3D 4F 38 C2 82 37 B8 F3 24 42 03 17 9B 3A 83 01 00 00 CC 00 00 00 00 06 00 00 00 01 64 53 74 75 62 00 10 55 54 79 70 65 73 00 00 C7 53 79 73 74 65 6D 00 00 81 53 79 73 49 6E 69 74 00 0C 4B 57 69 6E 64 6F 77 73 00 00 8A 75 46 75 6E 63 74 69 6F 6E 73\nep_only = false\n\n[mkfpack -> llydd]\nsignature = E8 00 00 00 00 5B 81 EB 05 00 00 00 8B 93 9F 08 00 00 53 6A 40 68 00 10 00 00 52 6A 00 FF 93 32 08 00 00 5B 8B F0 8B BB 9B 08 00 00 03 FB 56 57 E8 86 08 00 00 83 C4 08 8D 93 BB 08 00 00 52 53 FF E6\nep_only = false\n\n[modified HACKSTOP v1.11f]\nsignature = 52 B4 30 CD 21 52 FA ?? FB 3D ?? ?? EB ?? CD 20 0E 1F B4 09 E8\nep_only = true\n\n[MoleBox v2.0]\nsignature = E8 ?? ?? ?? ?? 60 E8 4F\nep_only = false\n\n[MoleBox v2.3.0 -> Teggo]\nsignature = 42 04 E8 ?? ?? 00 00 A3 ?? ?? ?? 00 8B 4D F0 8B 11 89 15 ?? ?? ?? 00 ?? 45 FC A3 ?? ?? ?? 00 5F 5E 8B E5 5D C3 CC CC CC CC CC CC CC CC CC CC CC E8 EB FB FF FF 58 E8 ?? 07 00 00 58 89 44 24 20 61 58 FF D0 E8 ?? ?? 00 00 CC CC CC CC CC CC CC\nep_only = false\n\n[MoleBox V2.3X -> MoleStudio.com]\nsignature = E8 00 00 00 00 60 E8 4F 00 00 00\nep_only = true\n\n[MoleBox v2.5.4 -> Teggo]\nsignature = ?? ?? ?? 00 8B 4D F0 8B 11 89 15 ?? ?? ?? 00 8B 45 FC A3 ?? ?? ?? 00 5F 5E 8B E5 5D C3 CC CC CC E8 EB FB FF FF 58 E8 ?? 07 00 00 58 89 44 24 24 61 58 58 FF D0 E8 ?? ?? 00 00 6A 00 FF 15 ?? ?? ?? 00 CC CC CC CC CC CC CC CC CC CC CC CC CC CC\nep_only = false\n\n[Morphine v2.7 --> Holy_Father & Ratter/29A]\nsignature = 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[Morphine v2.7 --> Holy_Father & Ratter/29A]\nsignature = ?? ?? ?? ?? 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 47 65 74 50 72 6F 63\nep_only = false\n\n[Morphine V2.7 -> Holy_Father & Ratter/29A]\nsignature = 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 4B 65 52 6E 45 6C 33 32 2E 64 4C 6C 00 00 47 65 74 50 72 6F 63 41 64 64 72\nep_only = false\n\n[Morphine v3.3 -> Silent Software & Silent Shield (c)2005]\nsignature = 28 ?? ?? ?? 00 00 00 00 00 00 00 00 40 ?? ?? ?? 34 ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4C ?? ?? ?? 5C ?? ?? ?? 00 00 00 00 4C ?? ?? ?? 5C ?? ?? ?? 00 00 00 00 4B 65 52 6E 45 6C 33 32 2E 64 4C 6C 00 00 47 65 74 50 72 6F 63\nep_only = false\n\n[Morphine v3.3 -> Silent Software & Silent Shield (c)2005]\nsignature = 28 ?? ?? ?? 00 00 00 00 00 00 00 00 40 ?? ?? ?? 34 ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4C ?? ?? ?? 5C ?? ?? ?? 00 00 00 00 4C ?? ?? ?? 5C ?? ?? ?? 00 00 00 00 4B 65 52 6E 45 6C 33 32 2E 64 4C 6C 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41\nep_only = false\n\n[mPack 0.0.3 -> DeltaAziz]\nsignature = 55 8B EC 83 C4 F0 33 C0 89 45 F0 B8 A8 76 00 10 E8 67 C4 FF FF 33 C0 55 68 C2 78 00 10 64 FF 30 64 89 20 8D 55 F0 33 C0 E8 93 C8 FF FF 8B 45 F0 E8 87 CB FF FF A3 08 A5 00 10 33 C0 55 68 A5 78 00 10 64 FF 30 64 89 20 A1 08 A5 00 10 E8 FA C9 FF FF 83 F8 FF 75 0A E8 88 B2 FF FF E9 1B 01 00 00 C7 05 14 A5 00 10 32 00 00 00 A1 08 A5 00 10 8B 15 14 A5 00 10 E8 C9 C9 FF FF BA 14 A5 00 10 A1 08 A5 00 10 B9 04 00 00 00 E8 C5 C9 FF FF 83 3D 14 A5 00 10 32 77 0A E8 47 B2 FF FF E9 DA 00 00 00 A1 08 A5 00 10 8B 15 14 A5 00 10 E8 92 C9 FF FF BA 18 A5\nep_only = true\n\n[MS Visual C++ v.8 DLL (h-small sig1)]\nsignature = 8B FF 55 8B EC 83 7D 0C 01 75 05 E8 ?? ?? ?? FF 5D E9 D6 FE FF FF CC CC CC CC CC\nep_only = true\n\n[MS Visual C++ v.8 DLL (h-small sig2)]\nsignature = 8B FF 55 8B EC 53 8B 5D 08 56 8B 75 0C 85 F6 57 8B 7D 10 0F 84 ?? ?? 00 00 83 FE 01\nep_only = true\n\n[mucki's protector I -> mucki]\nsignature = BE ?? ?? ?? ?? B9 ?? ?? ?? ?? 8A 06 F6 D0 88 06 46 E2 F7 E9\nep_only = true\n\n[mucki's protector II -> mucki]\nsignature = E8 24 00 00 00 8B 4C 24 0C C7 01 17 00 01 00 C7 81 B8 00 00 00 00 00 00 00 31 C0 89 41 14 89 41 18 80 6A 00 E8 85 C0 74 12 64 8B 3D 18 00 00 00 8B 7F 30 0F B6 47 02 85 C0 74 01 C3 C7 04 24 ?? ?? ?? ?? BE ?? ?? ?? ?? B9 ?? ?? ?? ?? 8A 06 F6 D0 88 06 46 E2 F7 C3\nep_only = true\n\n[MZ0oPE 1.0.6b --> TaskFall]\nsignature = EB CA 89 03 83 C3 04 87 FE 32 C0 AE 75 FD 87 FE 80 3E FF 75 E2 46 5B 83 C3 04 53 8B 1B 80 3F FF 75 C9 8B E5 61 68 ?? ?? ?? ?? C3\nep_only = true\n\n[MZ0oPE 1.0.6b -> TaskFall]\nsignature = EB CA 89 03 83 C3 04 87 FE 32 C0 AE 75 FD 87 FE 80 3E FF 75 E2 46 5B 83 C3 04 53 8B 1B 80 3F FF 75 C9 8B E5 61 68 ?? ?? ?? ?? C3 FC B2 80 33 DB A4 B3 02 E8 6D 00 00 00 73 F6 33 C9 E8 64 00 00 00 73 1C 33 C0 E8 5B 00 00 00 73 23 B3 02 41 B0 10 E8 4F 00 00 00 12 C0 73 F7 75 3F AA EB D4 E8 4D 00 00 00 2B CB 75 10 E8 42 00 00 00 EB 28 AC D1 E8 74 4C 13 C9 EB 1C 91 48 C1 E0 08 AC E8 2C 00 00 00 3D 00 7D 00 00 73 0A 80 FC 05 73 06 83 F8 7F 77 02 41 41 95 8B C5 B3 01 56 8B F7 2B F0 F3 A4 5E EB 8E 02 D2 75 05 8A 16 46 12 D2 C3 33 C9 41 E8 EE FF FF FF 13 C9 E8 E7 FF FF FF 72 F2 C3\nep_only = true\n\n[MZ_Crypt 1.0 - by BrainSt0rm]\nsignature = 60 E8 00 00 00 00 5D 81 ED 25 14 40 00 8B BD 77 14 40 00 8B 8D 7F 14 40 00 EB 28 83 7F 1C 07 75 1E 8B 77 0C 03 B5 7B 14 40 00 33 C0 EB 0C 50 8A A5 83 14 40 00 30 26 58 40 46 3B 47 10 76 EF 83 C7 28 49 0B C9 75 D4 8B 85 73 14 40 00 89 44 24 1C 61 FF E0\nep_only = false\n\n[N-Joiner 0.1 (Asm Version) -> NEX]\nsignature = 6A 00 68 00 14 40 00 68 00 10 40 00 6A 00 E8 14 00 00 00 6A 00 E8 13 00 00 00 CC FF 25 AC 12 40 00 FF 25 B0 12 40 00 FF 25 B4 12 40 00 FF 25 B8 12 40 00 FF 25 BC 12 40 00 FF 25 C0 12 40 00 FF 25 C4 12 40 00 FF 25 C8 12 40 00 FF 25 CC 12 40 00 FF 25 D0 12 40 00 FF 25 D4 12 40 00 FF 25 D8 12 40 00 FF 25 DC 12 40 00 FF 25 E4 12 40 00 FF 25 EC 12 40 00\nep_only = true\n\n[N-Joy 1.0 -> NEX]\nsignature = 55 8B EC 83 C4 F0 B8 9C 3B 40 00 E8 8C FC FF FF 6A 00 68 E4 39 40 00 6A 0A 6A 00 E8 40 FD FF FF E8 EF F5 FF FF 8D 40 00\nep_only = true\n\n[N-Joy 1.1 -> NEX]\nsignature = 55 8B EC 83 C4 F0 B8 0C 3C 40 00 E8 24 FC FF FF 6A 00 68 28 3A 40 00 6A 0A 6A 00 E8 D8 FC FF FF E8 7F F5 FF FF 8D 40 00\nep_only = true\n\n[N-Joy 1.2 -> NEX]\nsignature = 55 8B EC 83 C4 F0 B8 A4 32 40 00 E8 E8 F1 FF FF 6A 00 68 54 2A 40 00 6A 0A 6A 00 E8 A8 F2 FF FF E8 C7 EA FF FF 8D 40 00\nep_only = true\n\n[N-Joy 1.3 -> NEX]\nsignature = 55 8B EC 83 C4 F0 B8 48 36 40 00 E8 54 EE FF FF 6A 00 68 D8 2B 40 00 6A 0A 6A 00 E8 2C EF FF FF E8 23 E7 FF FF 8D 40 00\nep_only = true\n\n[Nakedbind 1.0 -> nakedcrew]\nsignature = 64 8B 38 48 8B C8 F2 AF AF 8B 1F 66 33 DB 66 81 3B 4D 5A 74 08 81 EB 00 00\nep_only = true\n\n[NakedPacker 1.0 - by BigBoote]\nsignature = 60 FC 0F B6 05 34 ?? ?? ?? 85 C0 75 31 B8 50 ?? ?? ?? 2B 05 04 ?? ?? ?? A3 30 ?? ?? ?? A1 00 ?? ?? ?? 03 05 30 ?? ?? ?? A3 38 ?? ?? ?? E8 9A 00 00 00 A3 50 ?? ?? ?? C6 05 34 ?? ?? ?? 01 83 3D 50 ?? ?? ?? 00 75 07 61 FF 25 38 ?? ?? ?? 61 FF 74 24 04 6A 00 FF 15 44 ?? ?? ?? 50 FF 15 40 ?? ?? ?? C3 FF 74 24 04 6A 00 FF 15 44 ?? ?? ?? 50 FF 15 48 ?? ?? ?? C3 8B 4C 24 04 56 8B 74 24 10 57 85 F6 8B F9 74 0D 8B 54 24 10 8A 02 88 01\nep_only = false\n\n[Native UD Packer 1.1 (Modded Poison Ivy Shellcode) -> okkixot]\nsignature = 31 C0 31 DB 31 C9 EB 0E 6A 00 6A 00 6A 00 6A 00 FF 15 28 41 40 00 FF 15 94 40 40 00 89 C7 68 88 13 00 00 FF 15 98 40 40 00 FF 15 94 40 40 00 81 C7 88 13 00 00 39 F8 73 05 E9 84 00 00 00 6A 40 68 00 10 00 00 FF 35 04 30 40 00 6A 00 FF 15 A4 40 40 00 89 C7 FF 35 04 30 40 00 68 CA 10 40 00 50 FF 15 A8 40 40 00 6A 40 68 00 10 00 00 FF 35 08 30 40 00 6A 00 FF 15 A4 40 40 00 89 C6 68 00 30 40 00 FF 35 04 30 40 00 57 FF 35 08 30 40 00 50 6A 02 FF 15 4E 41 40 00 6A 00 6A 00 6A 00 56 6A 00 6A 00 FF 15 9C 40 40 00 50 6A 00 6A 00 6A 11 50 FF 15 4A 41 40 00 58 6A FF 50 FF 15 AC 40 40 00 6A 00 FF 15 A0 40\nep_only = true\n\n[nBinder v3.6.1]\nsignature = 6E 35 36 34 35 36 35 33 32 33 34 35 34 33 5F 6E 62 33 5C 00 5C 6E 35 36 34 35 36 35 33 32 33 34 35 34 33 5F 6E 62 33 5C\nep_only = false\n\n[nBinder v4.0]\nsignature = 5C 6E 62 34 5F 74 6D 70 5F 30 31 33 32 34 35 34 33 35 30 5C 00 00 00 00 00 00 00 00 00 E9 55 43 4C FF 01 1A 00 00 00 00 96 30 07 77 2C 61 0E EE BA 51 09 99 19 C4 6D 07 8F F4 6A 70 35 A5 63 E9 A3 95 64 9E 32 88 DB 0E A4 B8 DC 79\nep_only = false\n\n[nbuild v1.0 [soft]]\nsignature = B9 ?? ?? BB ?? ?? C0 ?? ?? 80 ?? ?? 43 E2\nep_only = true\n\n[NeoLite v1.0]\nsignature = 8B 44 24 04 8D 54 24 FC 23 05 ?? ?? ?? ?? E8 ?? ?? ?? ?? FF 35 ?? ?? ?? ?? 50 FF 25\nep_only = true\n\n[NeoLite v2.0]\nsignature = E9 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 4E 65 6F 4C 69 74 65\nep_only = true\n\n[NeoLite v2.00]\nsignature = 8B 44 24 04 23 05 ?? ?? ?? ?? 50 E8 ?? ?? ?? ?? 83 C4 04 FE 05 ?? ?? ?? ?? 0B C0 74\nep_only = true\n\n[NFO v1.0]\nsignature = 8D 50 12 2B C9 B1 1E 8A 02 34 77 88 02 42 E2 F7 C8 8C\nep_only = true\n\n[Ningishzida 1.0 -> CyberDoom]\nsignature = 9C 60 96 E8 00 00 00 00 5D 81 ED 03 25 40 00 B9 04 1B 00 00 8D BD 4B 25 40 00 8B F7 AC ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? AA E2 CC\nep_only = true\n\n[nMacro recorder 1.0]\nsignature = 5C 6E 6D 72 5F 74 65 6D 70 2E 6E 6D 72 00 00 00 72 62 00 00 58 C7 41 00 10 F8 41 00 11 01 00 00 00 00 00 00 46 E1 00 00 46 E1 00 00 35 00 00 00 F6 88 41 00\nep_only = false\n\n[NME 1.1 Public - by redlime]\nsignature = 55 8B EC 83 C4 F0 53 56 B8 30 35 14 13 E8 9A E6 FF FF 33 C0 55 68 6C 36 14 13 64 FF 30 64 89 20 B8 08 5C 14 13 BA 84 36 14 13 E8 7D E2 FF FF E8 C0 EA FF FF 8B 15 CC 45 14 13 A1 C8 45 14 13 E8 04 F8 FF FF 8B 15 D0 45 14 13 A1 C8 45 14 13 E8 F4 F7 FF FF 8B 15 CC 45 14 13 A1 C8 45 14 13 E8 2C F9 FF FF A3 F8 5A 14 13 8B 15 D0 45 14 13 A1 C8 45 14 13 E8 17 F9 FF FF A3 FC 5A 14 13 B8 04 5C 14 13 E8 20 FB FF FF 8B D8 85 DB 74 48 B8 00 5B 14 13 8B 15 C4 45 14 13 E8 1E E7 FF FF A1 04 5C 14 13 E8 A8 DA FF FF ?? ?? ?? ?? 5C 14 13 50 8B CE 8B D3 B8 00 5B 14 13 ?? ?? ?? ?? FF 8B C6 E8 DF FB FF FF 8B C6 E8 9C DA FF FF B8 00 5B 14 13 E8 72 E7 FF FF 33 C0 5A 59 59 64 89 10 68 73 36 14 13 C3 E9 0F DF FF FF EB F8 5E 5B E8 7E E0 FF FF 00 00 FF FF FF FF 0C 00 00 00 4E 4D 45 20 31 2E 31 20 53 74 75 62\nep_only = false\n\n[NoodleCrypt v2.0]\nsignature = EB 01 9A E8 3D 00 00 00 EB 01 9A E8 EB 01 00 00 EB 01 9A E8 2C 04 00 00 EB 01\nep_only = true\n\n[NoodleCrypt v2.0]\nsignature = EB 01 9A E8 ?? 00 00 00 EB 01 9A E8 ?? ?? 00 00 EB 01 9A E8 ?? ?? 00 00 EB 01\nep_only = false\n\n[NoodleCrypt v2.00 (Eng) -> NoodleSpa]\nsignature = EB 01 9A E8 76 00 00 00 EB 01 9A E8 65 00 00 00 EB 01 9A E8 7D 00 00 00 EB 01 9A E8 55 00 00 00 EB 01 9A E8 43 04 00 00 EB 01 9A E8 E1 00 00 00 EB 01 9A E8 3D 00 00 00 EB 01 9A E8 EB 01 00 00 EB 01 9A E8 2C 04 00 00 EB 01 9A E8 25 00 00 00 EB 01 9A E8 02\nep_only = true\n\n[Noodlecrypt2 -> r!sc]\nsignature = EB 01 9A E8 76 00 00 00\nep_only = true\n\n[North Star PE Shrinker 1.3 -> Liuxingping]\nsignature = 9C 60 E8 00 00 00 00 5D B8 B3 85 40 00 2D AC 85 40 00 2B E8 8D B5\nep_only = true\n\n[North Star PE Shrinker v1.3 by Liuxingping]\nsignature = 9C 60 E8 00 00 00 00 5D B8 B3 85 40 00 2D AC 85 40 00 2B E8 8D B5 73 ?? FF FF 8B 06 83 F8 00 74 11 8D B5 7F ?? FF FF 8B 06 83 F8 01 0F 84 F1 01 00 00 C7 06 01 00 00 00 8B D5 8B 85 4F ?? FF FF 2B D0 89 95 4F ?? FF FF 01 95 67 ?? FF FF 8D B5 83 ?? FF FF 01\nep_only = false\n\n[nPack 1.1.150.2006.Beta -> NEOx]\nsignature = 83 3D ?? ?? ?? ?? ?? 75 05 E9 01 00 00 00 C3 E8 41 00 00 00 B8 ?? ?? ?? ?? 2B 05 ?? ?? ?? ?? A3 ?? ?? ?? ?? E8 5E 00 00 00 E8 E0 01 00 00 E8 EC 06 00 00 E8 F7 05 00 00 A1 ?? ?? ?? ?? C7 05 ?? ?? ?? ?? ?? ?? ?? ?? 01 05 ?? ?? ?? ?? FF 35 ?? ?? ?? ?? C3 C3 56 57 68 ?? ?? ?? ?? FF 15 ?? ?? ?? ?? 8B 35 ?? ?? ?? ?? 8B F8 68 ?? ?? ?? ?? 57 FF D6 68 ?? ?? ?? ?? 57 A3 ?? ?? ?? ?? FF D6 5F A3 ?? ?? ?? ?? 5E C3\nep_only = true\n\n[nPack 1.1.300.2006 Beta -> NEOx]\nsignature = 83 3D ?? ?? ?? ?? ?? 75 05 E9 01 00 00 00 C3 E8 46 00 00 00 E8 73 00 00 00 B8 ?? ?? ?? ?? 2B 05 ?? ?? ?? ?? A3 ?? ?? ?? ?? E8 9C 00 00 00 E8 2D 02 00 00 E8 DD 06 00 00 E8 2C 06 00 00 A1 ?? ?? ?? ?? C7 05 ?? ?? ?? ?? ?? ?? ?? ?? 01 05 ?? ?? ?? ?? FF 35 ?? ?? ?? ?? C3 C3 56 57 68 ?? ?? ?? ?? FF 15 ?? ?? ?? ?? 8B 35 ?? ?? ?? ?? 8B F8 68 ?? ?? ?? ?? 57 FF D6 68 ?? ?? ?? ?? 57 A3 ?? ?? ?? ?? FF D6 5F A3 ?? ?? ?? ?? 5E C3\nep_only = true\n\n[nPack v1.1 150-200 Beta -> NEOx]\nsignature = 83 3D 40 ?? ?? ?? 00 75 05 E9 01 00 00 00 C3 E8 41 00 00 00 B8 80 ?? ?? ?? 2B 05 08 ?? ?? ?? A3 3C ?? ?? 00 E8 5E 00 00 00 E8 E0 01 00 00 E8 EC 06 00 00 E8 F7 05 00 00\nep_only = true\n\n[nPack v1.1 250 Beta -> NEOx]\nsignature = 83 3D 04 ?? ?? ?? 00 75 05 E9 01 00 00 00 C3 E8 46 00 00 00 E8 73 00 00 00 B8 2E ?? ?? ?? 2B 05 08 ?? ?? ?? A3 00 ?? ?? ?? E8 9C 00 00 00 E8 04 02 00 00 E8 FB 06 00 00 E8 1B 06 00 00 A1 00 ?? ?? ?? C7 05 04 ?? ?? ?? 01 00 00 00 01 05 00 ?? ?? ?? FF 35 00\nep_only = true\n\n[nPack V1.1.150.2006.Beta -> NEOx/[uinC]]\nsignature = 83 3D 40 ?? ?? ?? 00 75 05 E9 01 00 00 00 C3 E8 41 00 00 00 B8 80 ?? ?? ?? 2B 05 08 ?? ?? ?? A3 3C ?? ?? ?? E8 5E 00 00 00 E8 E0 01 00 00 E8 EC 06 00 00 E8 F7 05 00 00 A1 3C ?? ?? ?? C7 05 40 ?? ?? ?? 01 00 00 00 01 05 00 ?? ?? ?? FF 35 00 ?? ?? ?? C3 C3\nep_only = true\n\n[nPack V1.1.200.2006.Beta -> NEOx/[uinC]]\nsignature = 83 3D 40 ?? ?? ?? 00 75 05 E9 01 00 00 00 C3 E8 41 00 00 00 B8 80 ?? ?? ?? 2B 05 08 ?? ?? ?? A3 3C ?? ?? ?? E8 5E 00 00 00 E8 EC 01 00 00 E8 F8 06 00 00 E8 03 06 00 00 A1 3C ?? ?? ?? C7 05 40 ?? ?? ?? 01 00 00 00 01 05 00 ?? ?? ?? FF 35 00 ?? ?? ?? C3 C3\nep_only = true\n\n[NSIS Installer --> NullSoft]\nsignature = 83 EC 20 53 55 56 33 DB 57 89 5C 24 18 C7 44 24 10 ?? ?? ?? ?? C6 44 24 14 20 FF 15 30 70 40 00 53 FF 15 80 72 40 00 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? A3 ?? ?? ?? ?? E8 ?? ?? ?? ?? BE\nep_only = true\n\n[NsPacK .Net -> LiuXingPing]\nsignature = 56 69 72 74 75 61 6C 50 72 6F 74 65 63 74 00 00 BB 01 47 65 74 53 79 73 74 65 6D 49 6E 66 6F 00 4B 45 52 4E 45 4C 33 32 2E 64 6C 6C 00 00 5E 00 5F 43 6F 72 ?? ?? ?? 4D 61 69 6E 00 6D 73 63 6F 72 65 65 2E 64 6C 6C\nep_only = false\n\n[NsPack 1.4 -> Liuxingping]\nsignature = 9C 60 E8 00 00 00 00 5D B8 ?? ?? 40 00 2D ?? ?? 40 00\nep_only = true\n\n[NsPack 1.4 by North Star (Liu Xing Ping)]\nsignature = 8B DF 83 3F 00 75 0A 83 C7 04 B9 00 00 00 00 EB 16 B9 01 00 00 00 03 3B 83 C3 04 83 3B 00 74 2D 01 13 8B 33 03 7B 04 57 51 52 53\nep_only = false\n\n[NsPack 2.9 -> North Star]\nsignature = 9C 60 E8 00 00 00 00 5D B8 07 00 00 00 2B E8 8D B5 ?? ?? FF FF 8A 06 3C 00 74 12 8B F5 8D B5 ?? ?? FF FF 8A 06 3C 01 0F 84 42 02 00 00 C6 06 01 8B D5 2B 95 ?? ?? FF FF 89 95 ?? ?? FF FF 01 95 ?? ?? FF FF 8D B5 ?? ?? FF FF 01 16 60 6A 40 68 00 10 00 00 68 00 10 00 00 6A 00 FF 95 ?? ?? FF FF 85 C0 0F 84 6A 03 00 00 89 85 ?? ?? FF FF E8 00 00 00 00 5B B9 68 03 00 00 03 D9 50 53 E8 B1 02 00 00 61 8B 36 8B FD 03 BD ?? ?? FF FF 8B DF 83 3F 00 75 0A 83 C7 04 B9 00 00 00 00 EB 16 B9 01 00 00 00 03 3B 83 C3 04 83 3B 00 74 36\nep_only = true\n\n[NsPack 3.0 -> North Star]\nsignature = 9C 60 E8 00 00 00 00 5D B8 07 00 00 00 2B E8 8D B5 ?? ?? FF FF 66 8B 06 66 83 F8 00 74 15 8B F5 8D B5 ?? ?? FF FF 66 8B 06 66 83 F8 01 0F 84 42 02 00 00 C6 06 01 8B D5 2B 95 ?? ?? FF FF 89 95 ?? ?? FF FF 01 95 ?? ?? FF FF 8D B5 ?? ?? FF FF 01 16 60 6A 40 68 00 10 00 00 68 00 10 00 00 6A 00 FF 95 ?? ?? FF FF 85 C0 0F 84 6A 03 00 00 89 85 ?? ?? FF FF E8 00 00 00 00 5B B9 68 03 00 00 03 D9 50 53 E8 B1 02 00 00 61 8B 36 8B FD 03 BD ?? ?? FF FF 8B DF 83 3F 00 75 0A 83 C7 04 B9 00 00 00 00 EB 16 B9 01 00 00 00 03 3B 83 C3 04 83 3B 00 74 36\nep_only = true\n\n[NsPack 3.4 -> North Star]\nsignature = 9C 60 E8 00 00 00 00 5D 83 ED 07 8D 85 ?? ?? FF FF 80 38 01 0F 84 42 02 00 00 C6 00 01 8B D5 2B 95 ?? ?? FF FF 89 95 ?? ?? FF FF 01 95 ?? ?? FF FF 8D B5 ?? ?? FF FF 01 16 60 6A 40 68 00 10 00 00 68 00 10 00 00 6A 00 FF 95 ?? ?? FF FF 85 C0 0F 84 6A 03 00 00 89 85 ?? ?? FF FF E8 00 00 00 00 5B B9 68 03 00 00 03 D9 50 53 E8 B1 02 00 00 61 8B 36 8B FD 03 BD ?? ?? FF FF 8B DF 83 3F 00 75 0A 83 C7 04 B9 00 00 00 00 EB 16 B9 01 00 00 00 03 3B 83 C3 04 83 3B 00 74 36 01 13 8B 33 03 7B 04 57 51 52 53 FF B5 ?? ?? FF FF FF B5 ?? ?? FF FF 8B D6 8B CF 8B 85 ?? ?? FF FF 05 AA 05 00 00 FF D0 5B 5A 59 5F 83 F9 00 74 05 83 C3 08 EB C5\nep_only = true\n\n[NSPack 3.x -> Liu Xing Ping]\nsignature = 9C 60 E8 00 00 00 00 5D 83 ED 07 8D 85 ?? ?? FF FF ?? 38 01 0F 84 ?? 02 00 00 ?? 00 01\nep_only = true\n\n[NsPack V1.1 -> LiuXingPing]\nsignature = 9C 60 E8 00 00 00 00 5D B8 57 84 40 00 2D 50 84 40 00\nep_only = true\n\n[NsPack V1.3 -> LiuXingPing]\nsignature = 9C 60 E8 00 00 00 00 5D B8 B3 85 40 00 2D AC 85 40 00\nep_only = true\n\n[NsPack V1.4 -> LiuXingPing]\nsignature = 9C 60 E8 00 00 00 00 5D B8 B1 85 40 00 2D AA 85 40 00\nep_only = true\n\n[nSpack V2.3 -> LiuXingPing]\nsignature = 9C 60 70 61 63 6B 24 40\nep_only = false\n\n[NsPack v2.3 -> North Star]\nsignature = 9C 60 E8 00 00 00 00 5D B8 07 00 00 00 2B E8 8D B5 ?? ?? FF FF 8B 06 83 F8 00 74 11 8D B5 ?? ?? FF FF 8B 06 83 F8 01 0F 84 4B 02 00 00 C7 06 01 00 00 00 8B D5 8B 85 ?? ?? FF FF 2B D0 89 95 ?? ?? FF FF 01 95 ?? ?? FF FF 8D B5 ?? ?? FF FF 01 16 8B 36 8B FD\nep_only = false\n\n[NsPack v2.3 -> North Star]\nsignature = 9C 60 E8 00 00 00 00 5D B8 07 00 00 00 2B E8 8D B5 ?? ?? FF FF 8B 06 83 F8 00 74 11 8D B5 ?? ?? FF FF 8B 06 83 F8 01 0F 84 4B 02 00 00 C7 06 01 00 00 00 8B D5 8B 85 ?? ?? FF FF 2B D0 89 95 ?? ?? FF FF 01 95 ?? ?? FF FF 8D B5 ?? ?? FF FF 01 16 8B 36 8B FD 60 6A 40 68 00 10 00 00 68 00 10 00 00 6A 00 FF 95 ?? ?? FF FF 85 C0 0F 84 56 03 00 00 89 85 ?? ?? FF FF E8 00 00 00 00 5B B9 54 03 00 00 03 D9 50 53 E8 9D 02 00 00 61\nep_only = false\n\n[NsPack V2.X -> LiuXingPing]\nsignature = 6E 73 70 61 63 6B 24 40\nep_only = false\n\n[nSpack V2.x -> LiuXingPing]\nsignature = 9C 60 E8 00 00 00 00 5D B8 07 00 00 00 2B E8 8D B5\nep_only = false\n\n[NsPacK V3.0 -> LiuXingPing]\nsignature = 9C 60 E8 00 00 00 00 5D B8 07 00 00 00 2B E8 8D B5 ?? ?? ?? ?? 66 8B 06 66 83 F8 00 74\nep_only = true\n\n[NsPacK V3.1 -> LiuXingPing]\nsignature = 9C 60 E8 00 00 00 00 5D 83 ED 07 8D 9D ?? ?? ?? ?? 8A 03 3C 00 74\nep_only = true\n\n[NsPack v3.1 -> North Star]\nsignature = 9C 60 E8 00 00 00 00 5D 83 ED 07 8D 9D ?? ?? FF FF 8A 03 3C 00 74 10 8D 9D ?? ?? FF FF 8A 03 3C 01 0F 84 42 02 00 00 C6 03 01 8B D5 2B 95 ?? ?? FF FF 89 95 ?? ?? FF FF 01 95 ?? ?? FF FF 8D B5 ?? ?? FF FF 01 16 60 6A 40 68 00 10 00 00 68 00 10 00 00 6A 00\nep_only = true\n\n[NsPack v3.1 -> North Star]\nsignature = 9C 60 E8 00 00 00 00 5D 83 ED 07 8D 9D ?? ?? FF FF 8A 03 3C 00 74 10 8D 9D ?? ?? FF FF 8A 03 3C 01 0F 84 42 02 00 00 C6 03 01 8B D5 2B 95 ?? ?? FF FF 89 95 ?? ?? FF FF 01 95 ?? ?? FF FF 8D B5 ?? ?? FF FF 01 16 60 6A 40 68 00 10 00 00 68 00 10 00 00 6A 00 FF 95 ?? ?? FF FF 85 C0 0F 84 6A 03 00 00 89 85 ?? ?? FF FF E8 00 00 00 00 5B B9 68 03 00 00 03 D9 50 53 E8 B1 02 00 00 61 8B 36 8B FD 03 BD ?? ?? FF FF 8B DF 83 3F 00 75 0A 83 C7 04 B9 00 00 00 00 EB 16 B9 01 00 00 00 03 3B 83 C3 04 83 3B 00 74 36 01 13 8B 33 03 7B 04 57 51 52 53 FF B5 ?? ?? FF FF FF B5 ?? ?? FF FF 8B D6 8B CF 8B 85 ?? ?? FF FF 05 AA 05 00 00 FF D0 5B 5A 59 5F 83 F9 00 74 05 83 C3 08 EB C5 68 00 80 00 00 6A 00\nep_only = false\n\n[NsPacK V3.3 -> LiuXingPing]\nsignature = 9C 60 E8 00 00 00 00 5D 83 ED 07 8D 85 ?? ?? ?? ?? 80 38 00 74\nep_only = true\n\n[NsPacK V3.4-V3.5 -> LiuXingPing]\nsignature = 9C 60 E8 00 00 00 00 5D 83 ED 07 8D 85 ?? ?? ?? ?? 80 38 01 0F 84\nep_only = true\n\n[NsPacK V3.6 -> LiuXingPing]\nsignature = 9C 60 E8 00 00 00 00 5D 83 ED 07 8D ?? ?? ?? ?? ?? 83 38 01 0F 84 47 02 00 00\nep_only = true\n\n[NsPacK V3.7 -> LiuXingPing]\nsignature = 9C 60 E8 00 00 00 00 5D 83 ED 07 8D ?? ?? ?? ?? ?? 80 39 01 0F ?? ?? ?? 00 00\nep_only = true\n\n[NTkrnl Secure Suite -> NTkrnl team]\nsignature = 34 10 00 00 28 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 10 00 00 50 10 00 00 00 00 00 00 4B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73\nep_only = false\n\n[NTkrnl Secure Suite 0.1-0.15 -> NTkrnl Software]\nsignature = 00 00 00 00 00 00 00 00 00 00 00 00 34 10 00 00 28 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 4B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 68 ?? ?? ?? ?? E8 01 00 00 00 C3 C3\nep_only = false\n\n[NTkrnl Secure Suite 0.1-0.15 DLL -> NTkrnl Software]\nsignature = 00 00 00 00 00 00 00 00 00 00 00 00 34 10 00 00 28 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 4B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 8B 44 24 04 05 ?? ?? ?? ?? 50 E8 01 00 00 00 C3 C3\nep_only = false\n\n[NTKrnlPacker -> Ashkbiz Danehkar]\nsignature = 00 00 00 00 00 00 00 00 00 00 00 00 34 10 00 00 28 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 10 00 00 50 10 00 00 00 00 00 00 4B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74\nep_only = false\n\n[NTPacker 1.0 -> ErazerZ]\nsignature = 55 8B EC 83 C4 E0 53 33 C0 89 45 E0 89 45 E4 89 45 E8 89 45 EC B8 ?? ?? 40 00 E8 ?? ?? FF FF 33 C0 55 68 ?? ?? 40 00 64 FF 30 64 89 20 8D 4D EC BA ?? ?? 40 00 A1 ?? ?? 40 00 E8 ?? FC FF FF 8B 55 EC B8 ?? ?? 40 00 E8 ?? ?? FF FF 8D 4D E8 BA ?? ?? 40 00 A1 ?? ?? 40 00 E8 ?? FE FF FF 8B 55 E8 B8 ?? ?? 40 00 E8 ?? ?? FF FF B8 ?? ?? 40 00 E8 ?? FB FF FF 8B D8 A1 ?? ?? 40 00 BA ?? ?? 40 00 E8 ?? ?? FF FF 75 26 8B D3 A1 ?? ?? 40 00 E8 ?? ?? FF FF 84 C0 75 2A 8D 55 E4 33 C0 E8 ?? ?? FF FF 8B 45 E4 8B D3 E8 ?? ?? FF FF EB 14 8D 55 E0 33 C0 E8 ?? ?? FF FF 8B 45 E0 8B D3 E8 ?? ?? FF FF 6A 00 E8 ?? ?? FF FF 33 C0 5A 59 59 64 89 10 68 ?? ?? 40 00 8D 45 E0 BA 04 00 00 00 E8 ?? ?? FF FF C3 E9 ?? ?? FF FF EB EB 5B E8 ?? ?? FF FF 00 00 00 FF FF FF FF 01 00 00 00 25 00 00 00 FF FF FF FF 01 00 00 00 5C 00 00 00 FF FF FF FF 06 00 00 00 53 45 52 56 45 52 00 00 FF FF FF FF 01 00 00 00 31\nep_only = true\n\n[NTPacker V2.X -> ErazerZ]\nsignature = 4B 57 69 6E 64 6F 77 73 00 10 55 54 79 70 65 73 00 00 3F 75 6E 74 4D 61 69 6E 46 75 6E 63 74 69 6F 6E 73 00 00 47 75 6E 74 42 79 70 61 73 73 00 00 B7 61 50 4C 69 62 75 00 00 00\nep_only = false\n\n[Nullsoft Install System v1.98]\nsignature = 83 EC 0C 53 56 57 FF 15 2C 81 40\nep_only = true\n\n[Nullsoft Install System v1.xx]\nsignature = 55 8B EC 83 EC 2C 53 56 33 F6 57 56 89 75 DC 89 75 F4 BB A4 9E 40 00 FF 15 60 70 40 00 BF C0 B2 40 00 68 04 01 00 00 57 50 A3 AC B2 40 00 FF 15 4C 70 40 00 56 56 6A 03 56 6A 01 68 00 00 00 80 57 FF 15 9C 70 40 00 8B F8 83 FF FF 89 7D EC 0F 84 C3 00 00 00\nep_only = true\n\n[Nullsoft Install System v1.xx]\nsignature = 83 EC 0C 53 56 57 FF 15 20 71 40 00 05 E8 03 00 00 BE 60 FD 41 00 89 44 24 10 B3 20 FF 15 28 70 40 00 68 00 04 00 00 FF 15 28 71 40 00 50 56 FF 15 08 71 40 00 80 3D 60 FD 41 00 22 75 08 80 C3 02 BE 61 FD 41 00 8A 06 8B 3D F0 71 40 00 84 C0 74 0F 3A C3 74\nep_only = true\n\n[Nullsoft Install System v2.0]\nsignature = 83 EC 0C 53 55 56 57 C7 44 24 10 70 92 40 00 33 DB C6 44 24 14 20 FF 15 2C 70 40 00 53 FF 15 84 72 40 00 BE 00 54 43 00 BF 00 04 00 00 56 57 A3 A8 EC 42 00 FF 15 C4 70 40 00 E8 8D FF FF FF 8B 2D 90 70 40 00 85 C0 75 21 68 FB 03 00 00 56 FF 15 5C 71 40 00\nep_only = false\n\n[Nullsoft Install System v2.0 RC2]\nsignature = 83 EC 10 53 55 56 57 C7 44 24 14 70 92 40 00 33 ED C6 44 24 13 20 FF 15 2C 70 40 00 55 FF 15 84 72 40 00 BE 00 54 43 00 BF 00 04 00 00 56 57 A3 A8 EC 42 00 FF 15 C4 70 40 00 E8 8D FF FF FF 8B 1D 90 70 40 00 85 C0 75 21 68 FB 03 00 00 56 FF 15 5C 71 40 00\nep_only = false\n\n[Nullsoft Install System v2.0a0]\nsignature = 83 EC 0C 53 56 57 FF 15 B4 10 40 00 05 E8 03 00 00 BE E0 E3 41 00 89 44 24 10 B3 20 FF 15 28 10 40 00 68 00 04 00 00 FF 15 14 11 40 00 50 56 FF 15 10 11 40 00 80 3D E0 E3 41 00 22 75 08 80 C3 02 BE E1 E3 41 00 8A 06 8B 3D 14 12 40 00 84 C0 74 19 3A C3 74\nep_only = false\n\n[Nullsoft Install System v2.0b2, v2.0b3]\nsignature = 83 EC 0C 53 55 56 57 FF 15 ?? 70 40 00 8B 35 ?? 92 40 00 05 E8 03 00 00 89 44 24 14 B3 20 FF 15 2C 70 40 00 BF 00 04 00 00 68 ?? ?? ?? 00 57 FF 15 ?? ?? 40 00 57 FF 15\nep_only = true\n\n[Nullsoft Install System v2.0b4]\nsignature = 83 EC 10 53 55 56 57 C7 44 24 14 F0 91 40 00 33 ED C6 44 24 13 20 FF 15 2C 70 40 00 55 FF 15 88 72 40 00 BE 00 D4 42 00 BF 00 04 00 00 56 57 A3 60 6F 42 00 FF 15 C4 70 40 00 E8 9F FF FF FF 8B 1D 90 70 40 00 85 C0 75 21 68 FB 03 00 00 56 FF 15 60 71 40 00\nep_only = false\n\n[Nullsoft Install System v2.0b4]\nsignature = 83 EC 14 83 64 24 04 00 53 55 56 57 C6 44 24 13 20 FF 15 30 70 40 00 BE 00 20 7A 00 BD 00 04 00 00 56 55 FF 15 C4 70 40 00 56 E8 7D 2B 00 00 8B 1D 8C 70 40 00 6A 00 56 FF D3 BF 80 92 79 00 56 57 E8 15 26 00 00 85 C0 75 38 68 F8 91 40 00 55 56 FF 15 60 71\nep_only = false\n\n[Nullsoft PIMP Install System v1.3x]\nsignature = 55 8B EC 81 EC ?? ?? 00 00 56 57 6A ?? BE ?? ?? ?? ?? 59 8D BD\nep_only = true\n\n[Nullsoft PiMP Install System v1.x]\nsignature = 83 EC 0C 53 56 57 FF 15 ?? ?? 40 00 05 E8 03 00 00 BE ?? ?? ?? 00 89 44 24 10 B3 20 FF 15 28 ?? 40 00 68 00 04 00 00 FF 15 ?? ?? 40 00 50 56 FF 15 ?? ?? 40 00 80 3D ?? ?? ?? 00 22 75 08 80 C3 02 BE ?? ?? ?? 00 8A 06 8B 3D ?? ?? 40 00 84 C0 74 ?? 3A C3 74\nep_only = false\n\n[Nullsoft PIMP Install System v1.x]\nsignature = 83 EC 5C 53 55 56 57 FF 15 ?? ?? ?? 00\nep_only = true\n\n[NX PE Packer v1.0]\nsignature = FF 60 FF CA FF 00 BA DC 0D E0 40 00 50 00 60 00 70 00 80 00\nep_only = true\n\n[Obsidium 1.2.0.0 -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 3F 1E 00 00\nep_only = true\n\n[Obsidium 1.2.5.8 -> Obsidium Software]\nsignature = EB 01 ?? E8 29 00 00 00 EB 02 ?? ?? EB 01 ?? 8B 54 24 0C EB 04 ?? ?? ?? ?? 83 82 B8 00 00 00 24 EB 04 ?? ?? ?? ?? 33 C0 EB 02 ?? ?? C3 EB 02 ?? ?? EB 03 ?? ?? ?? 64 67 FF 36 00 00 EB 01 ?? 64 67 89 26 00 00 EB 03 ?? ?? ?? EB 01 ?? 50 EB 03 ?? ?? ?? 33 C0 EB 04 ?? ?? ?? ?? 8B 00 EB 03 ?? ?? ?? C3 EB 01 ?? E9 FA 00 00 00 EB 02 ?? ?? E8 D5 FF FF FF EB 04 ?? ?? ?? ?? EB 03 ?? ?? ?? EB 01 ?? 58 EB 01 ?? EB 02 ?? ?? 64 67 8F 06 00 00 EB 04 ?? ?? ?? ?? 83 C4 04 EB 01 ?? E8 7B 21 00 00\nep_only = true\n\n[Obsidium 1.3.0.0 -> Obsidium Software]\nsignature = EB 04 ?? ?? ?? ?? E8 29 00 00 00 EB 02 ?? ?? EB 01 ?? 8B 54 24 0C EB 02 ?? ?? 83 82 B8 00 00 00 22 EB 02 ?? ?? 33 C0 EB 04 ?? ?? ?? ?? C3 EB 04 ?? ?? ?? ?? EB 04 ?? ?? ?? ?? 64 67 FF 36 00 00 EB 04 ?? ?? ?? ?? 64 67 89 26 00 00 EB 04 ?? ?? ?? ?? EB 01 ?? 50 EB 03 ?? ?? ?? 33 C0 EB 02 ?? ?? 8B 00 EB 01 ?? C3 EB 04 ?? ?? ?? ?? E9 FA 00 00 00 EB 01 ?? E8 D5 FF FF FF EB 02 ?? ?? EB 03 ?? ?? ?? 58 EB 04 ?? ?? ?? ?? EB 01 ?? 64 67 8F 06 00 00 EB 02 ?? ?? 83 C4 04 EB 02 ?? ?? E8 47 26 00 00\nep_only = true\n\n[Obsidium 1.3.0.13 -> Obsidium Software]\nsignature = EB 01 ?? E8 26 00 00 00 EB 02 ?? ?? EB 02 ?? ?? 8B 54 24 0C EB 01 ?? 83 82 B8 00 00 00 21 EB 04 ?? ?? ?? ?? 33 C0 EB 02 ?? ?? C3 EB 01 ?? EB 04 ?? ?? ?? ?? 64 67 FF 36 00 00 EB 02 ?? ?? 64 67 89 26 00 00 EB 01 ?? EB 03 ?? ?? ?? 50 EB 01 ?? 33 C0 EB 03 ?? ?? ?? 8B 00 EB 02 ?? ?? C3 EB 02 ?? ?? E9 FA 00 00 00 EB 01 ?? E8 D5 FF FF FF EB 03 ?? ?? ?? EB 02 ?? ?? 58 EB 03 ?? ?? ?? EB 04 ?? ?? ?? ?? 64 67 8F 06 00 00 EB 03 ?? ?? ?? 83 C4 04 EB 03 ?? ?? ?? E8 13 26 00 00\nep_only = true\n\n[Obsidium 1.3.0.17 -> Obsidium software]\nsignature = EB 02 ?? ?? E8 28 00 00 00 EB 04 ?? ?? ?? ?? EB 01 ?? 8B 54 24 0C EB 01 ?? 83 82 B8 00 00 00 25 EB 02 ?? ?? 33 C0 EB 03 ?? ?? ?? C3 EB 03 ?? ?? ?? EB 02 ?? ?? 64 67 FF 36 00 00 EB 01 ?? 64 67 89 26 00 00 EB 03 ?? ?? ?? EB 04 ?? ?? ?? ?? 50 EB 04\nep_only = true\n\n[Obsidium 1.3.0.21 -> Obsidium Software]\nsignature = EB 03 ?? ?? ?? E8 2E 00 00 00 EB 04 ?? ?? ?? ?? EB 04 ?? ?? ?? ?? 8B 54 24 0C EB 04 ?? ?? ?? ?? 83 82 B8 00 00 00 23 EB 01 ?? 33 C0 EB 04 ?? ?? ?? ?? C3 EB 03 ?? ?? ?? EB 02 ?? ?? 64 67 FF 36 00 00 EB 01 ?? 64 67 89 26 00 00 EB 02 ?? ?? EB 02 ?? ?? 50 EB 01 ?? 33 C0 EB 03 ?? ?? ?? 8B 00 EB 03 ?? ?? ?? C3 EB 03 ?? ?? ?? E9 FA 00 00 00 EB 04 ?? ?? ?? ?? E8 D5 FF FF FF EB 01 ?? EB 01 ?? 58 EB 04 ?? ?? ?? ?? EB 04 ?? ?? ?? ?? 64 67 8F 06 00 00 EB 03 ?? ?? ?? 83 C4 04 EB 04 ?? ?? ?? ?? E8 2B 26 00 00\nep_only = true\n\n[Obsidium 1.3.0.37 -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 26 00 00 00 EB 03 ?? ?? ?? EB 01 ?? 8B 54 24 0C EB 04 ?? ?? ?? ?? 83 82 B8 00 00 00 26 EB 01 ?? 33 C0 EB 02 ?? ?? C3 EB 01 ?? EB 04 ?? ?? ?? ?? 64 67 FF 36 00 00 EB 01 ?? 64 67 89 26 00 00 EB 01 ?? EB 03 ?? ?? ?? 50 EB 03 ?? ?? ?? 33 C0 EB 03 ?? ?? ?? 8B 00 EB 04 ?? ?? ?? ?? C3 EB 03 ?? ?? ?? E9 FA 00 00 00 EB 03 ?? ?? ?? E8 D5 FF FF FF EB 04 ?? ?? ?? ?? EB 01 ?? 58 EB 02 ?? ?? EB 03 ?? ?? ?? 64 67 8F 06 00 00 EB 01 ?? 83 C4 04 EB 03 ?? ?? ?? E8 23 27 00 00\nep_only = true\n\n[Obsidium 1.3.1.1 -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 27 00 00 00 EB 02 ?? ?? EB 03 ?? ?? ?? 8B 54 24 0C EB 01 ?? 83 82 B8 00 00 00 22 EB 04 ?? ?? ?? ?? 33 C0 EB 01 ?? C3 EB 02 ?? ?? EB 02 ?? ?? 64 67 FF 36 00 00 EB 04 ?? ?? ?? ?? 64 67 89 26 00 00 EB 01 ?? EB 03 ?? ?? ?? 50 EB 03 ?? ?? ?? 33 C0 EB 01 ?? 8B 00 EB 03 ?? ?? ?? C3 EB 01 ?? E9 FA 00 00 00 EB 03 ?? ?? ?? E8 D5 FF FF FF EB 01 ?? EB 03 ?? ?? ?? 58 EB 03 ?? ?? ?? EB 01 ?? 64 67 8F 06 00 00 EB 01 ?? 83 C4 04 EB 03\nep_only = true\n\n[Obsidium 1.3.2.2 -> Obsidium Software]\nsignature = EB 04 ?? ?? ?? ?? E8 2A 00 00 00 EB 03 ?? ?? ?? EB 04 ?? ?? ?? ?? 8B 54 24 0C EB 02 ?? ?? 83 82 B8 00 00 00 26 EB 04 ?? ?? ?? ?? 33 C0 EB 02 ?? ?? C3 EB 01 ?? EB 03 ?? ?? ?? 64 67 FF 36 00 00 EB 02 ?? ?? 64 67 89 26 00 00 EB 02 ?? ?? EB 01 ?? 50 EB 04 ?? ?? ?? ?? 33 C0 EB 04 ?? ?? ?? ?? 8B 00 EB 02 ?? ?? C3 EB 03 ?? ?? ?? E9 FA 00 00 00 EB 04 ?? ?? ?? ?? E8 D5 FF FF FF EB 02 ?? ?? EB 04 ?? ?? ?? ?? 58 EB 01 ?? EB 01 ?? 64 67 8F 06 00 00 EB 01 ?? 83 C4 04 EB 04\nep_only = true\n\n[Obsidium 1.3.3.1 -> Obsidium Software]\nsignature = EB 01 ?? E8 29 00 00 00 EB 02 ?? ?? EB 03 ?? ?? ?? 8B 54 24 0C EB 02 ?? ?? 83 82 B8 00 00 00 24 EB 04 ?? ?? ?? ?? 33 C0 EB 02 ?? ?? C3 EB 02 ?? ?? EB 02 ?? ?? 64 67 FF 36 00 00 EB 04 ?? ?? ?? ?? 64 67 89 26 00 00 EB 01 ?? EB 02 ?? ?? 50 EB 01 ?? 33 C0 EB 04 ?? ?? ?? ?? 8B 00 EB 03 ?? ?? ?? C3 EB 03 ?? ?? ?? E9 FA 00 00 00 EB 02 ?? ?? E8 D5 FF FF FF EB 01 ?? EB 04 ?? ?? ?? ?? 58 EB 02 ?? ?? EB 04 ?? ?? ?? ?? 64 67 8F 06 00 00 EB 01 ?? 83 C4 04 EB 02 ?? ?? E8 5F 27 00 00\nep_only = true\n\n[Obsidium 1.3.3.2 -> Obsidium Software]\nsignature = EB 01 ?? E8 2B 00 00 00 EB 02 ?? ?? EB 02 ?? ?? 8B 54 24 0C EB 03 ?? ?? ?? 83 82 B8 00 00 00 24 EB 04 ?? ?? ?? ?? 33 C0 EB 04 ?? ?? ?? ?? C3 EB 02 ?? ?? EB 01 ?? 64 67 FF 36 00 00 EB 03 ?? ?? ?? 64 67 89 26 00 00 EB 01 ?? EB 02 ?? ?? 50 EB 02 ?? ?? 33 C0 EB 02 ?? ?? 8B 00 EB 02 ?? ?? C3 EB 04 ?? ?? ?? ?? E9 FA 00 00 00 EB 03 ?? ?? ?? E8 D5 FF FF FF EB 03 ?? ?? ?? EB 01 ?? 58 EB 01 ?? EB 02 ?? ?? 64 67 8F 06 00 00 EB 02 ?? ?? 83 C4 04 EB 02 ?? ?? E8 3B 27 00 00\nep_only = true\n\n[Obsidium 1.3.3.3 -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 29 00 00 00 EB 03 ?? ?? ?? EB 03 ?? ?? ?? 8B 54 24 0C EB 01 ?? 83 82 B8 00 00 00 28 EB 03 ?? ?? ?? 33 C0 EB 01 ?? C3 EB 04 ?? ?? ?? ?? EB 02 ?? ?? 64 67 FF 36 00 00 EB 04 ?? ?? ?? ?? 64 67 89 26 00 00 EB 02 ?? ?? EB 04 ?? ?? ?? ?? 50 EB 04\nep_only = true\n\n[Obsidium 1.3.3.3 -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 29 00 00 00 EB 03 ?? ?? ?? EB 03 ?? ?? ?? 8B 54 24 0C EB 01 ?? 83 82 B8 00 00 00 28 EB 03 ?? ?? ?? 33 C0 EB 01 ?? C3 EB 04 ?? ?? ?? ?? EB 02 ?? ?? 64 67 FF 36 00 00 EB 04 ?? ?? ?? ?? 64 67 89 26 00 00 EB 02 ?? ?? EB 04 ?? ?? ?? ?? 50 EB 04 ?? ?? ?? ?? 33 C0 EB 01 ?? 8B 00 EB 03 ?? ?? ?? C3 EB 03 ?? ?? ?? E9 FA 00 00 00 EB 03 ?? ?? ?? E8 D5 FF FF FF EB 04 ?? ?? ?? ?? EB 04 ?? ?? ?? ?? 58 EB 01 ?? EB 03 ?? ?? ?? 64 67 8F 06 00 00 EB 04 ?? ?? ?? ?? 83 C4 04 EB 04 ?? ?? ?? ?? E8 2B 27\nep_only = true\n\n[Obsidium 1.3.3.4 -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 29 00 00 00 EB 03 ?? ?? ?? EB 02 ?? ?? 8B 54 24 0C EB 03 ?? ?? ?? 83 82 B8 00 00 00 25 EB 02 ?? ?? 33 C0 EB 02 ?? ?? C3 EB 03 ?? ?? ?? EB 01 ?? 64 67 FF 36 00 00 EB 02 ?? ?? 64 67 89 26 00 00 EB 02 ?? ?? EB 04 ?? ?? ?? ?? 50 EB 02 ?? ?? 33\nep_only = true\n\n[Obsidium 1.3.3.4 -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 29 00 00 00 EB 03 ?? ?? ?? EB 02 ?? ?? 8B 54 24 0C EB 03 ?? ?? ?? 83 82 B8 00 00 00 25 EB 02 ?? ?? 33 C0 EB 02 ?? ?? C3 EB 03 ?? ?? ?? EB 01 ?? 64 67 FF 36 00 00 EB 02 ?? ?? 64 67 89 26 00 00 EB 02 ?? ?? EB 04 ?? ?? ?? ?? 50 EB 02 ?? ?? 33 C0 EB 01 ?? 8B 00 EB 04 ?? ?? ?? ?? C3 EB 03 ?? ?? ?? E9 FA 00 00 00 EB 02 ?? ?? E8 D5 FF FF FF EB 02 ?? ?? EB 03 ?? ?? ?? 58 EB 02 ?? ?? EB 03 ?? ?? ?? 64 67 8F 06 00 00 EB 03\nep_only = true\n\n[Obsidium 1.3.3.6 -> Obsidium Software]\nsignature = EB 04 ?? ?? ?? ?? E8 28 00 00 00 EB 01 ?? ?? ?? ?? ?? ?? ?? 8B 54 24 0C EB 01 ?? 83 82 B8 00 00 00 26 EB 04 ?? ?? ?? ?? 33 C0 EB 01 ?? C3 EB 03 ?? ?? ?? EB 04 ?? ?? ?? ?? 64 67 FF 36 00 00 EB 04 ?? ?? ?? ?? 64 67 89 26 00 00 EB 03 ?? ?? ?? EB 04 ?? ?? ?? ?? 50 EB 01 ?? 33 C0 EB 02 ?? ?? 8B 00 EB 04 ?? ?? ?? ?? C3 EB 04 ?? ?? ?? ?? E9 FA 00 00 00 EB 03 ?? ?? ?? E8 D5 FF FF FF EB 01 ?? EB 03 ?? ?? ?? 58 EB 02 ?? ?? EB 04 ?? ?? ?? ?? 64 67 8F 06 00 00 EB 04\nep_only = false\n\n[Obsidium 1.3.3.7 (2007.06.23) -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 27 00 00 00 EB 03 ?? ?? ?? EB 01 ?? 8B 54 24 0C EB 03 ?? ?? ?? 83 82 B8 00 00 00 23 EB 03 ?? ?? ?? 33 C0 EB 02 ?? ?? C3 EB 01 ?? EB 03 ?? ?? ?? 64 67 FF 36 00 00 EB 04 ?? ?? ?? ?? 64 67 89 26 00 00 EB 01 ?? EB 01 ?? 50 EB 02 ?? ?? 33 C0 EB 01 ?? 8B 00 EB 04 ?? ?? ?? ?? C3 EB 02 ?? ?? E9 FA 00 00 00 EB 04 ?? ?? ?? ?? E8 D5 FF FF FF EB 01 ?? EB 01 ?? 58 EB 04 ?? ?? ?? ?? EB 01 ?? 64 67 8F 06 00 00 EB 02 ?? ?? 83 C4 04 EB 01 ?? E8 F7 26 00 00\nep_only = true\n\n[Obsidium 1.3.3.7 -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 2C 00 00 00 EB 04 ?? ?? ?? ?? EB 04 ?? ?? ?? ?? 8B 54 24 0C EB 02 ?? ?? 83 82 B8 00 00 00 27 EB 04 ?? ?? ?? ?? 33 C0 EB 02 ?? ?? C3 EB 02 ?? ?? EB 03 ?? ?? ?? 64 67 FF 36 00 00 EB 04 ?? ?? ?? ?? 64 67 89 26 00 00 EB 03 ?? ?? ?? EB 01 ?? 50 EB 02 ?? ?? 33 C0 EB 02 ?? ?? 8B 00 EB 04 ?? ?? ?? ?? C3 EB 02 ?? ?? E9 FA 00 00 00 EB 04 ?? ?? ?? ?? E8 D5 FF FF FF EB 02 ?? ?? EB 04 ?? ?? ?? ?? 58 EB 04 ?? ?? ?? ?? EB 03 ?? ?? ?? 64 67 8F 06 00 00 EB 01 ?? 83 C4 04 EB 03 ?? ?? ?? E8 23 27 00 00\nep_only = true\n\n[Obsidium 1.3.3.8 -> Obsidium Software]\nsignature = EB 04 ?? ?? ?? ?? E8 28 00 00 00 EB 01 ?? EB 01 ?? 8B 54 24 0C EB 04 ?? ?? ?? ?? 83 82 B8 00 00 00 ?? EB 04 ?? ?? ?? ?? 33 C0 EB 03 ?? ?? ?? C3 EB 01 ?? EB 01 ?? 64 67 FF 36 00 00 EB 03 ?? ?? ?? 64 67 89 26 00 00 EB 02 ?? ?? EB 01 ?? 50 EB 04 ?? ?? ?? ?? 33 C0 EB 02 ?? ?? 8B 00 EB 03 ?? ?? ?? C3 EB 03 ?? ?? ?? E9 FA 00 00 00 EB 03 ?? ?? ?? E8 D5 FF FF FF EB 02 ?? ?? EB 04 ?? ?? ?? ?? 58 EB 04 ?? ?? ?? ?? EB 02 ?? ?? 64 67 8F 06 00 00 EB 04 ?? ?? ?? ?? 83 C4 04 EB 04 ?? ?? ?? ?? E8 57 27 00 00\nep_only = true\n\n[Obsidium 1.3.3.9 -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 29 00 00 00 EB 03 ?? ?? ?? EB 01 ?? 8B 54 24 0C EB 04 ?? ?? ?? ?? 83 82 B8 00 00 00 28 EB 02 ?? ?? 33 C0 EB 02 ?? ?? C3 EB 03 ?? ?? ?? EB 04 ?? ?? ?? ?? 64 67 FF 36 00 00 EB 03 ?? ?? ?? 64 67 89 26 00 00 EB 01 ?? EB 01 ?? 50 EB 03 ?? ?? ?? 33 C0 EB 03 ?? ?? ?? 8B 00 EB 04 ?? ?? ?? ?? C3 EB 04 ?? ?? ?? ?? E9 FA 00 00 00 EB 03 ?? ?? ?? E8 D5 FF FF FF EB 02 ?? ?? EB 04 ?? ?? ?? ?? 58 EB 03 ?? ?? ?? EB 04 ?? ?? ?? ?? 64 67 8F 06 00 00 EB 03 ?? ?? ?? 83 C4 04 EB 04 ?? ?? ?? ?? E8 CF 27 00 00\nep_only = true\n\n[Obsidium 1.3.4.1 -> Obsidium Software]\nsignature = EB 01 ?? E8 2A 00 00 00 EB 04 ?? ?? ?? ?? EB 02 ?? ?? 8B 54 24 0C EB 03 ?? ?? ?? 83 82 B8 00 00 00 21 EB 02 ?? ?? 33 C0 EB 03 ?? ?? ?? C3 EB 02 ?? ?? EB 01 ?? 64 67 FF 36 00 00 EB 01 ?? 64 67 89 26 00 00 EB 02 ?? ?? EB 03 ?? ?? ?? 50 EB 04 ?? ?? ?? ?? 33 C0 EB 02 ?? ?? 8B 00 EB 04 ?? ?? ?? ?? C3 EB 02 ?? ?? E9 FA 00 00 00 EB 02 ?? ?? E8 D5 FF FF FF EB 01 ?? EB 01 ?? 58 EB 03 ?? ?? ?? EB 04 ?? ?? ?? ?? 64 67 8F 06 00 00 EB 04 ?? ?? ?? ?? 83 C4 04 EB 02 ?? ?? E8 C3 27 00 00\nep_only = true\n\n[Obsidium v1.1.1.1]\nsignature = EB 02 ?? ?? E8 E7 1C 00 00\nep_only = true\n\n[Obsidium V1.2 -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 77 1E 00 00\nep_only = true\n\n[Obsidium v1.2.5.0 -> Obsidium Software]\nsignature = E8 0E 00 00 00 8B 54 24 0C 83 82 B8 00 00 00 0D 33 C0 C3 64 67 FF 36 00 00 64 67 89 26 00 00 50 33 C0 8B 00 C3 E9 FA 00 00 00 E8 D5 FF FF FF 58 64 67 8F 06 00 00 83 C4 04 E8 2B 13 00 00\nep_only = true\n\n[Obsidium V1.2.5.8 -> Obsidium Software]\nsignature = EB 01 ?? E8 ?? 00 00 00\nep_only = true\n\n[Obsidium V1.2.5.8-V1.3.3.X -> Obsidium Software]\nsignature = EB 01 ?? E8 ?? 00 00 00 EB 02 ?? ?? EB\nep_only = true\n\n[Obsidium V1.2.X -> Obsidium Software]\nsignature = E8 0E 00 00 00 33 C0 8B 54 24 0C 83 82 B8 00 00 00 0D C3 64 67 FF 36 00 00 64 67 89 26 00 00 50 33 C0 8B 00 C3 E9 FA 00 00 00 E8 D5 FF FF FF 58 64 67 8F 06 00 00 83 C4 04 E8 2B 13 00 00\nep_only = true\n\n[Obsidium V1.25 -> Obsidium Software]\nsignature = E8 0E 00 00 00 8B 54 24 0C 83 82 B8 00 00 00 0D 33 C0 C3\nep_only = true\n\n[Obsidium v1.3.0.0 -> Obsidium Software]\nsignature = EB 04 25 80 34 CA E8 29 00 00 00 EB 02 C1 81 EB 01 3A 8B 54 24 0C EB 02 32 92 83 82 B8 00 00 00 22 EB 02 F2 7F 33 C0 EB 04 65 7E 14 79 C3 EB 04 05 AD 7F 45 EB 04 05 65 0B E8 64 67 FF 36 00 00 EB 04 0D F6 A8 7F 64 67 89 26 00 00 EB 04 8D 68 C7 FB EB 01 6B\nep_only = true\n\n[Obsidium v1.3.0.0 -> Obsidium Software]\nsignature = EB 04 25 80 34 CA E8 29 00 00 00 EB 02 C1 81 EB 01 3A 8B 54 24 0C EB 02 32 92 83 82 B8 00 00 00 22 EB 02 F2 7F 33 C0 EB 04 65 7E 14 79 C3 EB 04 05 AD 7F 45 EB 04 05 65 0B E8 64 67 FF 36 00 00 EB 04 0D F6 A8 7F 64 67 89 26 00 00 EB 04 8D 68 C7 FB EB 01 6B 50 EB 03 8A 0B 93 33 C0 EB 02 28 B9 8B 00 EB 01 04 C3 EB 04 65 B3 54 0A E9 FA 00 00 00 EB 01 A2 E8 D5 FF FF FF EB 02 2B 49 EB 03 7C 3E 76 58 EB 04 B8 94 92 56 EB 01 72 64 67 8F 06 00 00 EB 02 23 72 83 C4 04 EB 02 A9 CB E8 47 26 00 00\nep_only = true\n\n[Obsidium V1.3.0.0 -> Obsidium Software]\nsignature = EB 04 ?? ?? ?? ?? E8 29 00 00 00\nep_only = true\n\n[Obsidium V1.3.0.0 -> Obsidium Software]\nsignature = EB 04 ?? ?? ?? ?? E8 ?? 00 00 00\nep_only = true\n\n[Obsidium v1.3.0.37 -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 26 00 00 00 EB 03 ?? ?? ?? EB 01 ?? 8B 54 24 0C EB 04 ?? ?? ?? ?? 83 82 B8 00 00 00 26 EB 01 ?? 33 C0 EB 02 ?? ?? C3 EB 01 ?? EB 04 ?? ?? ?? ?? 64 67 FF 36 00 00 EB 01 ?? 64 67 89 26 00 00 EB 01 ?? EB 03 ?? ?? ?? 50 EB 03 ?? ?? ?? 33 C0 EB 03 ?? ?? ?? 8B 00 EB 04 ?? ?? ?? ?? C3 EB 03 ?? ?? ?? E9 FA 00 00 00 EB 03 ?? ?? ?? E8 D5 FF FF FF EB 04 ?? ?? ?? ?? EB 01 ?? 58 EB 02 ?? ?? EB 03 ?? ?? ?? 64 67 8F 06 00 00 EB 01 ?? 83 C4 04 EB 03 ?? ?? ?? E8 23 27\nep_only = true\n\n[Obsidium v1.3.0.4 -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 25 00 00 00 EB 04 ?? ?? ?? ?? EB 01 ?? 8B 54 24 0C EB 01 ?? 83 82 B8 00 00 00 23 EB 01 ?? 33 C0 EB 02 ?? ?? C3 EB 02 ?? ?? EB 04 ?? ?? ?? ?? 64 67 FF 36 00 00 EB 03 ?? ?? ?? 64 67 89 26 00 00 EB 02 ?? ?? EB 01 ?? 50 EB 01 ?? 33 C0 EB 01\nep_only = true\n\n[Obsidium v1.3.0.4 -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 25 00 00 00 EB 04 ?? ?? ?? ?? EB 01 ?? 8B 54 24 0C EB 01 ?? 83 82 B8 00 00 00 23 EB 01 ?? 33 C0 EB 02 ?? ?? C3 EB 02 ?? ?? EB 04 ?? ?? ?? ?? 64 67 FF 36 00 00 EB 03 ?? ?? ?? 64 67 89 26 00 00 EB 02 ?? ?? EB 01 ?? 50 EB 01 ?? 33 C0 EB 01 ?? 8B 00 EB 01 ?? C3 EB 02 ?? ?? E9 FA 00 00 00 EB 02 ?? ?? E8 D5 FF FF FF EB 03 ?? ?? ?? EB 04 ?? ?? ?? ?? 58 EB 02 ?? ?? EB 04 ?? ?? ?? ?? 64 67 8F 06 00 00 EB 03 ?? ?? ?? 83 C4 04 EB 01 ?? E8 3B 26 00 00\nep_only = true\n\n[Obsidium V1.3.0.4 -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 ?? 00 00 00\nep_only = true\n\n[Obsidium V1.3.0.X -> Obsidium Software]\nsignature = EB 03 ?? ?? ?? E8 2E 00 00 00 EB 04 ?? ?? ?? ?? EB 04 ?? ?? ?? ?? 8B ?? ?? ?? EB 04 ?? ?? ?? ?? 83 ?? ?? ?? ?? ?? ?? EB 01 ?? 33 C0 EB 04 ?? ?? ?? ?? C3\nep_only = true\n\n[Obsidium V1.3.4.2 -> Obsidium Software]\nsignature = EB 02 ?? ?? E8 26 00 00 00 EB 03 ?? ?? ?? EB 01 ?? 8B 54 24 0C EB 02 ?? ?? 83 82 B8 00 00 00 24 EB 03 ?? ?? ?? 33 C0 EB 01 ?? C3 EB 02 ?? ?? EB 02 ?? ?? 64 67 FF 36 00 00 EB 03 ?? ?? ?? 64 67 89 26 00 00 EB 03 ?? ?? ?? EB 03 ?? ?? ?? 50 EB 04 ?? ?? ?? ?? 33 C0 EB 03 ?? ?? ?? 8B 00 EB 03 ?? ?? ?? C3 EB 03 ?? ?? ?? E9 FA 00 00 00 EB 03 ?? ?? ?? E8 D5 FF FF FF EB 01 ?? EB 03 ?? ?? ?? 58 EB 04 ?? ?? ?? ?? EB 04 ?? ?? ?? ?? 64 67 8F 06 00 00 EB 04 ?? ?? ?? ?? 83 C4 04 EB 01 ?? E8 C3 27 00 00\nep_only = true\n\n[Obsidium V1.3.5.0 -> Obsidium Software]\nsignature = EB 03 ?? ?? ?? E8 ?? ?? ?? ?? EB 02 ?? ?? EB 04 ?? ?? ?? ?? 8B 54 24 0C EB 04 ?? ?? ?? ?? 83 82 B8 00 00 00 20 EB 03 ?? ?? ?? 33 C0 EB 01 ?? C3 EB 02 ?? ?? EB 03 ?? ?? ?? 64 67 FF 36 00 00 EB 03 ?? ?? ?? 64 67 89 26 00 00 EB 01 ?? EB 04 ?? ?? ?? ?? 50 EB 04 ?? ?? ?? ?? 33 C0 EB 04 ?? ?? ?? ?? 8B 00 EB 03 ?? ?? ?? C3 EB 02 ?? ?? E9 FA 00 00 00 EB 01 ?? E8 ?? ?? ?? ?? EB 01 ?? EB 02 ?? ?? 58 EB 04 ?? ?? ?? ?? EB 02 ?? ?? 64 67 8F 06 00 00 EB 02 ?? ?? 83 C4 04 EB 01 ?? E8\nep_only = true\n\n[Obsiduim 1.3.0.4 -> Obsiduim Software]\nsignature = EB 02 ?? ?? E8 25 00 00 00 EB 04 ?? ?? ?? ?? EB 01 ?? 8B 54 24 0C EB 01 ?? 83 82 B8 00 00 00 23 EB 01 ?? 33 C0 EB 02 ?? ?? C3 EB 02 ?? ?? EB 04 ?? ?? ?? ?? 64 67 FF 36 00 00 EB 03 ?? ?? ?? 64\nep_only = true\n\n[ocBat2Exe 1.0 -> OC]\nsignature = 55 8B EC B9 08 00 00 00 6A 00 6A 00 49 75 F9 53 56 57 B8 58 3C 40 00 E8 6C FA FF FF 33 C0 55 68 8A 3F 40 00 64 FF 30 64 89 20 6A 00 6A 00 6A 03 6A 00 6A 01 68 00 00 00 80 8D 55 EC 33 C0 E8 81 E9 FF FF 8B 45 EC E8 41 F6 FF FF 50 E8 F3 FA FF FF 8B F8 83 FF FF 0F 84 83 02 00 00 6A 02 6A 00 6A EE 57 E8 FC FA FF FF 6A 00 68 60 99 4F 00 6A 12 68 18 57 40 00 57 E8 E0 FA FF FF 83 3D 60 99 4F 00 12 0F 85 56 02 00 00 8D 45 E4 50 8D 45 E0 BA 18 57 40 00 B9 40 42 0F 00 E8 61 F4 FF FF 8B 45 E0 B9 12 00 00 00 BA 01 00 00 00 E8 3B F6 FF FF 8B 45 E4 8D 55 E8 E8 04 FB ?? ?? ?? ?? E8 B8 58 99 4F 00 E8 67 F3 FF FF 33 C0 A3 60 99 4F 00 8D 45 DC 50 B9 05 00 00 00 BA 01 00 00 00 A1 58 99 4F 00 E8 04 F6 FF FF 8B 45 DC BA A4 3F 40 00 E8 E3 F4 FF FF\nep_only = false\n\n[Open Source Code Crypter -> p0ke]\nsignature = 55 8B EC B9 09 00 00 00 6A 00 6A 00 49 75 F9 53 56 57 B8 34 44 40 00 E8 28 F8 FF FF 33 C0 55 68 9F 47 40 00 64 FF 30 64 89 20 BA B0 47 40 00 B8 1C 67 40 00 E8 07 FD FF FF 8B D8 85 DB 75 07 6A 00 E8 C2 F8 FF FF BA 28 67 40 00 8B C3 8B 0D 1C 67 40 00 E8 F0 E0 FF FF BE 01 00 00 00 B8 2C 68 40 00 E8 E1 F0 FF FF BF 0A 00 00 00 8D 55 EC 8B C6 E8 92 FC FF FF 8B 4D EC B8 2C 68 40 00 BA BC 47 40 00 E8 54 F2 FF FF A1 2C 68 40 00 E8 52 F3 FF FF 8B D0 B8 20 67 40 00 E8 A2 FC FF FF 8B D8 85 DB 0F 84 52 02 00 00 B8 24 67 40 00 8B 15 20 67 40 00 E8 78 F4 FF FF B8 24 67 40 00 E8 7A F3 FF FF 8B D0 8B C3 8B 0D 20 67 40 00 E8 77 E0 FF FF 8D 55 E8 A1 24 67 40 00 E8 42 FD FF FF 8B 55 E8 B8 24 67 40 00\nep_only = false\n\n[ORiEN V1.X-V2.X -> Fisun A.V.]\nsignature = 4F 52 69 45 4E 20 65 78 65 63 75 74 61 62 6C 65 20 66 69 6C 65 73 20 70 72 6F 74 65 63 74 69 6F 6E 20 73 79 73 74 65 6D\nep_only = false\n\n[ORiEN v2.11 (DEMO)]\nsignature = E9 5D 01 00 00 CE D1 CE CE 0D 0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0D 0A 2D 20 4F 52 69 45 4E 20 65 78 65 63 75 74 61 62 6C 65 20 66 69 6C 65 73 20 70 72 6F\nep_only = true\n\n[ORiEN v2.11 - 2.12 -> Fisun Alexander]\nsignature = E9 5D 01 00 00 CE D1 CE ?? 0D 0A 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 2D 0D 0A 2D 20 4F 52 69 45 4E 20 65 78 65 63 75 74 61 62 6C 65 20 66 69 6C 65 73 20 70 72 6F\nep_only = true\n\n[ORiEN V2.12 -> Fisun A.V.]\nsignature = E9 5D 01 00 00 CE D1 CE CD 0D\nep_only = true\n\n[Pack Master v1.0]\nsignature = 60 E8 01 00 00 00 E8 83 C4 04 E8 01 00 00 00 E9 5D 81 ED D3 22 40 00 E8 04 02 00 00 E8 EB 08 EB 02 CD 20 FF 24 24 9A 66 BE 47 46\nep_only = true\n\n[Pack Master v1.0]\nsignature = 60 E8 01 ?? ?? ?? E8 83 C4 04 E8 01 ?? ?? ?? E9 5D 81 ED D3 22 40 ?? E8 04 02 ?? ?? E8 EB 08 EB 02 CD 20 FF 24 24 9A 66 BE 47 46\nep_only = true\n\n[Packanoid -> Arkanoid]\nsignature = BF 00 10 40 00 BE ?? ?? ?? 00 E8 9D 00 00 00 B8\nep_only = true\n\n[Packanoid 1.0 -> ackanoid]\nsignature = BF 00 ?? 40 00 BE ?? ?? ?? 00 E8 9D 00 00 00 B8 ?? ?? ?? 00 8B 30 8B 78 04 BB ?? ?? ?? 00 8B 43 04 91 E3 1F 51 FF D6 56 96 8B 13 8B 02 91 E3 0D 52 51 56 FF D7 5A 89 02 83 C2 04 EB EE 83 C3 08 5E EB DB B9 ?? ?? 00 00 BE 00 ?? ?? 00 EB 01 00 BF ?? ?? ?? 00\nep_only = true\n\n[Packanoid v1 -> Arkanoid]\nsignature = BF ?? ?? ?? ?? BE ?? ?? ?? ?? E8 9D 00 00 00 B8 ?? ?? ?? ?? 8B 30 8B 78 04 BB ?? ?? ?? ?? 8B 43 04 91 E3 1F 51 FF D6 56 96 8B 13 8B 02 91 E3 0D 52 51 56 FF D7 5A 89 02 83 C2 04 EB EE 83 C3 08\nep_only = true\n\n[Packed with: PKLITE v1.50 with CRC check (1)]\nsignature = 1F B4 09 BA ?? ?? CD 21 B8 ?? ?? CD 21\nep_only = true\n\n[PackItBitch 1.0 -> archphase]\nsignature = 00 00 00 00 00 00 00 00 00 00 00 00 28 ?? ?? ?? 35 ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4B 45 52 4E 45 4C 33 32 2E 44 4C 4C 00 41 ?? ?? ?? 50 ?? ?? ?? 00 00 00 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 ?? ?? ?? ?? ?? ?? ?? 79 ?? ?? ?? 7D ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[PackItBitch V1.0-> archphase]\nsignature = 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4B 45 52 4E 45 4C 33 32 2E 44 4C 4C 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 ?? 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[Packman 0.0.0.1 -> bubba]\nsignature = 60 E8 00 00 00 00 58 8D A8 ?? FE FF FF 8D 98 ?? ?? ?? FF 8D ?? ?? 01 00 00\nep_only = true\n\n[Packman 0.0.0.1 -> Bubbasoft]\nsignature = 0F 85 ?? FF FF FF 8D B3 ?? ?? ?? ?? EB 3D 8B 46 0C 03 C3 50 FF 55 00 56 8B 36 0B F6 75 02 8B F7 03 F3 03 FB EB 1B D1 C1 D1 E9 73 05 0F B7 C9 EB 05 03 CB 8D 49 02 50 51 50 FF 55 04 AB 58 83 C6 04 8B 0E 85 C9 75 DF 5E 83 C6 14 8B 7E 10 85 FF 75 BC 8D 8B 00\nep_only = false\n\n[Packman v0.0.0.1]\nsignature = 60 E8 00 00 00 00 58 8D A8 ?? ?? FF FF 8D 98 ?? ?? ?? FF 8D ?? ?? 01 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00\nep_only = true\n\n[Packman V0.0.0.1 -> Bubbasoft]\nsignature = 60 E8 00 00 00 00 58 8D ?? ?? ?? ?? ?? 8D ?? ?? ?? ?? ?? 8D ?? ?? ?? ?? ?? 8D ?? ?? 48\nep_only = true\n\n[Packman V1.0 -> Brandon LaCombe]\nsignature = 60 E8 00 00 00 00 5B 8D 5B C6 01 1B 8B 13 8D 73 14 6A 08 59 01 16 AD 49 75 FA\nep_only = true\n\n[Packman v1.0 -> Brandon LaCombe]\nsignature = 60 E8 00 00 00 00 5B 8D 5B C6 01 1B 8B 13 8D 73 14 6A 08 59 01 16 AD 49 75 FA 8B E8 C6 06 E9 8B 43 0C 89 46 01 6A 04 68 00 10 00 00 FF 73 08 51 FF 55 08 8B\nep_only = true\n\n[PACKWIN v1.01p]\nsignature = 8C C0 FA 8E D0 BC ?? ?? FB 06 0E 1F 2E ?? ?? ?? ?? 8B F1 4E 8B FE 8C DB 2E ?? ?? ?? ?? 8E C3 FD F3 A4 53 B8 ?? ?? 50 CB\nep_only = true\n\n[PAK-SFX Archive]\nsignature = 55 8B EC 83 ?? ?? A1 ?? ?? 2E ?? ?? ?? 2E ?? ?? ?? ?? ?? 8C D7 8E C7 8D ?? ?? BE ?? ?? FC AC 3C 0D\nep_only = true\n\n[PassEXE v2.0]\nsignature = 06 1E 0E 0E 07 1F BE ?? ?? B9 ?? ?? 87 14 81 ?? ?? ?? EB ?? C7 ?? ?? ?? 84 00 87 ?? ?? ?? FB 1F 58 4A\nep_only = true\n\n[PassLock 2000 v1.0 (Eng) -> Moonlight-Software]\nsignature = 55 8B EC 53 56 57 BB 00 50 40 00 66 2E F7 05 34 20 40 00 04 00 0F 85 98 00 00 00 E8 1F 01 00 00 C7 43 60 01 00 00 00 8D 83 E4 01 00 00 50 FF 15 F0 61 40 00 83 EC 44 C7 04 24 44 00 00 00 C7 44 24 2C 00 00 00 00 54 FF 15 E8 61 40 00 B8 0A 00 00 00 F7 44 24\nep_only = true\n\n[Password Protector (c) MiniSoft 1992]\nsignature = 06 0E 0E 07 1F E8 00 00 5B 83 EB 08 BA 27 01 03 D3 E8 3C 02 BA EA\nep_only = true\n\n[Password protector my SMT]\nsignature = E8 ?? ?? ?? ?? 5D 8B FD 81 ?? ?? ?? ?? ?? 81 ?? ?? ?? ?? ?? 83 ?? ?? 89 ?? ?? ?? ?? ?? 8D ?? ?? ?? ?? ?? 8D ?? ?? ?? ?? ?? 46 80 ?? ?? 74\nep_only = true\n\n[PAV.Cryptor (Pawning AntiVirus Cryptor) -> masha_dev]\nsignature = 53 56 57 55 BB 2C ?? ?? 70 BE 00 30 00 70 BF 20 ?? ?? 70 80 7B 28 00 75 16 83 3F 00 74 11 8B 17 89 D0 33 D2 89 17 8B E8 FF D5 83 3F 00 75 EF 83 3D 04 30 00 70 00 74 06 FF 15 54 30 00 70 80 7B 28 02 75 0A 83 3E 00 75 05 33 C0 89 43 0C FF 15 1C 30 00 70 80 7B 28 01 76 05 83 3E 00 74 22 8B 43 10 85 C0 74 1B FF 15 14 30 00 70 8B 53 10 8B 42 10 3B 42 04 74 0A 85 C0 74 06 50 E8 8F FA FF FF FF 15 20 30 00 70 80 7B 28 01 75 03 FF 53 24 80 7B 28 00 74 05 E8 35 FF FF FF 83 3B 00 75 17 83 3D 10 ?? ?? 70 00 74 06 FF 15 10 ?? ?? 70 8B 06 50 E8 A9 FA FF FF 8B 03 56 8B F0 8B FB B9 0B 00 00 00 F3 A5 5E E9 73 FF FF FF 5D 5F 5E 5B C3 A3 00 30 00 70 E8 26 FF FF FF C3 90 8F 05 04 30 00 70 E9 E9 FF FF FF C3\nep_only = false\n\n[PC Guard for Win32 v5.00 -> SofPro/Blagoje Ceklic]\nsignature = FC 55 50 E8 00 00 00 00 5D 60 E8 03 00 00 00 83 EB 0E EB 01 0C 58 EB 01 35 40 EB 01 36 FF E0 0B 61 B8 ?? ?? ?? 00 EB 01 E3 60 E8 03 00 00 00 D2 EB 0B 58 EB 01 48 40 EB 01 35 FF E0 E7 61 2B E8 9C EB 01 D5 9D EB 01 0B 58 60 E8 03 00 00 00 83 EB 0E EB 01 0C\nep_only = true\n\n[PC PE Encryptor Alpha preview]\nsignature = 53 51 52 56 57 55 E8 00 00 00 00 5D 8B CD 81 ED 33 30 40 ?? 2B 8D EE 32 40 00 83 E9 0B 89 8D F2 32 40 ?? 80 BD D1 32 40 ?? 01 0F 84\nep_only = true\n\n[PC Shrinker v0.20]\nsignature = E8 E8 01 ?? ?? 60 01 AD B3 27 40 ?? 68\nep_only = true\n\n[PC Shrinker v0.29]\nsignature = ?? BD ?? ?? ?? ?? 01 AD 55 39 40 ?? 8D B5 35 39 40\nep_only = true\n\n[PC Shrinker v0.45]\nsignature = ?? BD ?? ?? ?? ?? 01 AD E3 38 40 ?? FF B5 DF 38 40\nep_only = true\n\n[PC Shrinker v0.71]\nsignature = 9C 60 BD ?? ?? ?? ?? 01 AD 54 3A 40 ?? FF B5 50 3A 40 ?? 6A 40 FF 95 88 3A 40 ?? 50 50 2D ?? ?? ?? ?? 89 85\nep_only = true\n\n[PC-Guard v3.03d, v3.05d]\nsignature = 55 50 E8 ?? ?? ?? ?? 5D EB 01 E3 60 E8 03 ?? ?? ?? D2 EB 0B 58 EB 01 48 40 EB 01\nep_only = true\n\n[PC-Guard v4.05d, v4.10d, v4.15d]\nsignature = FC 55 50 E8 00 00 00 00 5D EB 01\nep_only = true\n\n[PC-Guard v5.00d]\nsignature = FC 55 50 E8 00 00 00 00 5D 60 E8 03 00 00 00 83 EB 0E EB 01 0C 58 EB 01 35 40 EB 01 36 FF E0 0B 61 B8 30 D2 40 00 EB 01 E3 60 E8 03 00 00 00 D2 EB 0B 58 EB 01 48 40 EB 01 35 FF E0 E7 61 2B E8 9C EB 01 D5 9D EB 01 0B 58 60 E8 03 00 00 00 83 EB 0E EB 01 0C\nep_only = true\n\n[PCPEC \"alpha - preview\"]\nsignature = 53 51 52 56 57 55 E8 00 00 00 00 5D 8B CD 81 ED 33 30 40 00\nep_only = true\n\n[PCPEC [alpha]]\nsignature = 53 51 52 56 57 55 E8 ?? ?? ?? ?? 5D 8B CD 81 ?? ?? ?? ?? ?? 2B ?? ?? ?? ?? ?? 83\nep_only = true\n\n[PCrypt v3.51]\nsignature = 50 43 52 59 50 54 FF 76 33 2E 35 31 00 E9\nep_only = true\n\n[PcShare ļ v4.0 -> ޿ɷ]\nsignature = 55 8B EC 6A FF 68 90 34 40 00 68 B6 28 40 00 64 A1\nep_only = true\n\n[PCShrink 0.71 beta]\nsignature = 01 AD 54 3A 40 00 FF B5 50 3A 40 00 6A 40 FF 95 88 3A 40 00\nep_only = true\n\n[PCShrink v0.40b]\nsignature = 9C 60 BD ?? ?? ?? ?? 01 ?? ?? ?? ?? ?? FF ?? ?? ?? ?? ?? 6A ?? FF ?? ?? ?? ?? ?? 50 50 2D\nep_only = true\n\n[PE Crypt 1.5 -> BitShape Software]\nsignature = 60 E8 00 00 00 00 5D 81 ED 55 20 40 00 B9 7B 09 00 00 8D BD 9D 20 40 00 8B F7 AC ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? AA E2 CC\nep_only = true\n\n[PE Crypt v1.00/v1.01]\nsignature = E8 ?? ?? ?? ?? 5B 83 EB 05 EB 04 52 4E 44 21 EB 02 CD 20 EB\nep_only = true\n\n[PE Crypt v1.02]\nsignature = E8 ?? ?? ?? ?? 5B 83 EB 05 EB 04 52 4E 44\nep_only = true\n\n[PE Crypt32 (Console v1.0, v1.01, v1.02)]\nsignature = E8 00 00 00 00 5B 83 EB 05 EB 04 52 4E 44 21 EB 02 CD 20 EB\nep_only = true\n\n[PE Crypt32 v1.02]\nsignature = E8 00 00 00 00 5B 83 ?? ?? EB ?? 52 4E 44 21\nep_only = true\n\n[PE Diminisher v0.1]\nsignature = 53 51 52 56 57 55 E8 00 00 00 00 5D 8B D5 81 ED A2 30 40 00 2B 95 91 33 40 00 81 EA 0B 00 00 00 89 95 9A 33 40 00 80 BD 99 33 40 00 00 74\nep_only = true\n\n[PE Diminisher v0.1]\nsignature = 5D 8B D5 81 ED A2 30 40 ?? 2B 95 91 33 40 ?? 81 EA 0B ?? ?? ?? 89 95 9A 33 40 ?? 80 BD 99\nep_only = true\n\n[PE Diminisher V0.1 -> Teraphy]\nsignature = 53 51 52 56 57 55 E8 00 00 00 00\nep_only = true\n\n[PE Diminisher v0.1 -> Teraphy]\nsignature = 53 51 52 56 57 55 E8 00 00 00 00 5D 8B D5 81 ED A2 30 40 00 2B 95 91 33 40 00 81 EA 0B 00 00 00 89 95 9A 33 40 00 80 BD 99 33 40 00 00 74 50 E8 02 01 00 00 8B FD 8D 9D 9A 33 40 00 8B 1B 8D 87\nep_only = true\n\n[PE Encrypt 1.0 -> Liwuyue]\nsignature = 55 8B EC 83 C4 D0 53 56 57 8D 75 FC 8B 44 24 30 25 00 00 FF FF 81 38 4D 5A 90 00 74 07 2D 00 10 00 00 EB F1 89 45 FC E8 C8 FF FF FF 2D 0F 05 00 00 89 45 F4 8B 06 8B 40 3C 03 06 8B 40 78 03 06 8B C8 8B 51 20 03 16 8B 59 24 03 1E 89 5D F0 8B 59 1C 03 1E 89 5D EC 8B 41 18 8B C8 49 85 C9 72 5A 41 33 C0 8B D8 C1 E3 02 03 DA 8B 3B 03 3E 81 3F 47 65 74 50 75 40 8B DF 83 C3 04 81 3B 72 6F 63 41 75 33 8B DF 83 C3 08 81 3B 64 64 72 65 75 26 83 C7 0C 66 81 3F 73 73\nep_only = true\n\n[PE Intro v1.0]\nsignature = 8B 04 24 9C 60 E8 ?? ?? ?? ?? 5D 81 ED 0A 45 40 ?? 80 BD 67 44 40 ?? ?? 0F 85 48\nep_only = true\n\n[PE Lock NT v2.01]\nsignature = EB 03 CD 20 EB EB 01 EB 1E EB 01 EB EB 02 CD 20 9C EB 03 CD\nep_only = true\n\n[PE Lock NT v2.02c]\nsignature = EB 02 C7 85 1E EB 03 CD 20 EB EB 01 EB 9C EB 01 EB EB 02 CD\nep_only = true\n\n[PE Lock NT v2.03]\nsignature = EB 02 C7 85 1E EB 03 CD 20 C7 9C EB 02 69 B1 60 EB 02 EB 01\nep_only = true\n\n[PE Lock NT v2.04]\nsignature = EB ?? CD ?? ?? ?? ?? ?? CD ?? ?? ?? ?? ?? EB ?? EB ?? EB ?? EB ?? CD ?? ?? ?? ?? ?? E8 ?? ?? ?? ?? E9 ?? ?? ?? ?? 50 C3\nep_only = true\n\n[PE Lock v1.06]\nsignature = 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 56 69 72 74 75 61 6C 41 6C 6C 6F 63 00 4B 45\nep_only = true\n\n[PE Ninja v1.0 -> +DzA kRAker TNT]\nsignature = BE 5B 2A 40 00 BF 35 12 00 00 E8 40 12 00 00 3D 22 83 A3 C6 0F 85 67 0F 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90\nep_only = true\n\n[PE Pack v0.99]\nsignature = 60 E8 ?? ?? ?? ?? 5D 83 ED 06 80 BD E0 04 ?? ?? 01 0F 84 F2\nep_only = true\n\n[PE Packer]\nsignature = FC 8B 35 70 01 40 ?? 83 EE 40 6A 40 68 ?? 30 10\nep_only = true\n\n[PE Password v0.2 SMT/SMF]\nsignature = E8 04 ?? ?? ?? 8B EC 5D C3 33 C0 5D 8B FD 81 ED 33 26 40 ?? 81 EF ?? ?? ?? ?? 83 EF 05 89 AD 88 27 40 ?? 8D 9D 07 29 40 ?? 8D B5 62 28 40 ?? 46 80\nep_only = true\n\n[PE Protect v0.9]\nsignature = 52 51 55 57 64 67 A1 30 00 85 C0 78 0D E8 ?? ?? ?? ?? 58 83 C0 07 C6 ?? C3\nep_only = true\n\n[PE Protect v0.9]\nsignature = E9 ?? 00 00 00 0D 0A 0D 0A C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 0D 0A 50 45 2D 50 52 4F 54 45 43 54 20 30 2E 39 20 28 43 29 6F\nep_only = false\n\n[PE Protector 0.9.3 --> CRYPToCRACk]\nsignature = 5B 81 E3 00 FF FF FF 66 81 3B 4D 5A 75 33 8B F3 03 73 3C 81 3E 50 45 00 00 75 26 0F B7 46 18 8B C8 69 C0 AD 0B 00 00 F7 E0 2D AB 5D 41 4B 69 C9 DE C0 00 00 03 C1 75 09 83 EC 04 0F 85 DD 00 00\nep_only = true\n\n[PE Spin v0.4x]\nsignature = EB 01 68 60 E8 00 00 00 00 8B\nep_only = false\n\n[PE Spin v0.b]\nsignature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 72 C8 46 00 0B E4 74 9E 75 01 C7 81 73 04 D7 7A F7 2F 81 73 19 77 00 43 B7 F6 C3 6B B7 00 00 F9 FF E3 C9 C2 08 00 A3 68 72 01 FF 5D 33 C9 41 E2 26 E8 01 00 00 00 EA 5A 33 C9\nep_only = true\n\n[PE-Armor 0.46 -> China Cracking Group]\nsignature = E8 AA 00 00 00 2D ?? ?? 00 00 00 00 00 00 00 00 00 3D ?? ?? 00 2D ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4B ?? ?? 00 5C ?? ?? 00 6F ?? ?? 00 00 00 00 00 4B 45 52 4E 45 4C 33 32 2E 64 6C 6C 00 00 00 00 47 65 74 50 72 6F 63 41\nep_only = true\n\n[PE-Armor 0.46 -> Hying]\nsignature = E8 AA 00 00 00 2D ?? ?? 00 00 00 00 00 00 00 00 00 3D ?? ?? 00 2D ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4B ?? ?? 00 5C ?? ?? 00 6F ?? ?? 00 00 00 00 00 4B 45 52 4E 45 4C 33 32 2E 64 6C 6C 00 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41\nep_only = true\n\n[PE-Armor 0.46 -> Hying]\nsignature = E8 AA 00 00 00 2D ?? ?? ?? 00 00 00 00 00 00 00 00 3D\nep_only = true\n\n[PE-Armor 0.460-0.759 -> hying]\nsignature = 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 4B 45 52 4E 45 4C 33 32 2E 64 6C 6C 00 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00\nep_only = false\n\n[PE-Armor 0.49 -> Hying]\nsignature = 56 52 51 53 55 E8 15 01 00 00 32 ?? ?? 00 00 00 00 00\nep_only = true\n\n[PE-Armor 0.760-0.765 -> hying]\nsignature = 00 00 00 00 00 00 00 00 ?? ?? ?? ?? 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 4B 45 52 4E 45 4C 33 32 2E 64 6C 6C 00 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 00 00 00 08 00 00 00 00 00 00 00 60 E8 00 00 00 00\nep_only = false\n\n[PE-Armor V0.7X -> hying]\nsignature = 60 E8 00 00 00 00 5D 81 ED ?? ?? ?? ?? 8D B5 ?? ?? ?? ?? 55 56 81 C5 ?? ?? ?? ?? 55 C3\nep_only = true\n\n[PE-Crypt 1.02]\nsignature = E8 00 00 00 00 5B 83 EB 05 EB 04 52 4E 44 21 85 C0 73 02 F7\nep_only = true\n\n[PE-Crypter]\nsignature = 60 E8 00 00 00 00 5D EB 26\nep_only = true\n\n[PE-PACK 0.99]\nsignature = 60 E8 00 00 00 00 5D 83 ED 06 80 BD E0 04 00 00 01 0F 84 F2\nep_only = true\n\n[PE-PaCK v1.0 -> (C) Copyright 1998 by ANAKiN]\nsignature = C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 0D 0A 20 2D 3D FE 20 50 45 2D 50 41 43 4B 20 76 31 2E 30 20 2D FE 2D 20 28 43 29 20 43 6F 70\nep_only = false\n\n[PE-PACK v1.0 by ANAKiN 1998 (???)]\nsignature = 74 ?? E9 ?? ?? ?? ?? 00 00 00 00\nep_only = true\n\n[PE-PROTECT 0.9]\nsignature = E9 CF 00 00 00 0D 0A 0D 0A C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4\nep_only = true\n\n[PE-Protect 0.9 by Cristoph Gabler 1998]\nsignature = 50 45 2D 50 52 4F 54 45 43 54 20 30 2E 39\nep_only = false\n\n[PE-SHiELD 0.2]\nsignature = 60 E8 00 00 00 00 41 4E 41 4B 49 4E 5D 83 ED 06 EB 02 EA 04\nep_only = true\n\n[Pe123  v2006.4.12]\nsignature = 8B C0 60 9C E8 01 00 00 00 C3 53 E8 72 00 00 00 50 E8 1C 03 00 00 8B D8 FF D3 5B C3 8B C0 E8 00 00 00 00 58 83 C0 05 C3 8B C0 55 8B EC 60 8B 4D 10 8B 7D 0C 8B 75 08 F3 A4 61 5D C2 0C 00 E8 00 00 00 00 58 83 E8 05 C3 8B C0 E8 00 00 00 00 58 83 C0 05 C3 8B\nep_only = true\n\n[Pe123  v2006.4.4]\nsignature = 8B C0 EB 01 34 60 EB 01 2A 9C EB 02 EA C8 E8 0F 00 00 00 EB 03 3D 23 23 EB 01 4A EB 01 5B C3 8D 40 00 53 EB 01 6C EB 01 7E EB 01 8F E8 15 01 00 00 50 E8 67 04 00 00 EB 01 9A 8B D8 FF D3 5B C3 8B C0 E8 00 00 00 00 58 83 C0 05 C3 8B C0 55 8B EC 60 8B 4D 10\nep_only = true\n\n[PEBundle v0.2 - v2.0x]\nsignature = 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB ?? ?? 40 ?? 87 DD 6A 04 68 ?? 10 ?? ?? 68 ?? 02 ?? ?? 6A ?? FF 95\nep_only = true\n\n[PEBundle v2.0b5 - v2.3]\nsignature = 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB ?? ?? 40 ?? 87 DD 01 AD ?? ?? ?? ?? 01 AD\nep_only = true\n\n[PEBundle v2.44]\nsignature = 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB ?? ?? 40 ?? 87 DD 83 BD\nep_only = true\n\n[PEBundle v3.10]\nsignature = 9C 60 E8 02 00 00 00 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 07 20 40 00 87 DD ?? ?? ?? ?? 40 00 01\nep_only = false\n\n[PeCompact 2.53 DLL (Slim Loader) --> BitSum Technologies]\nsignature = B8 ?? ?? ?? ?? 50 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 33 C0 89 08 50 45 43 32 00 00 08 0C 00 48 E1 01 56 57 53 55 8B 5C 24 1C 85 DB 0F 84 AB 21 E8 BD 0E E6 60 0D 0B 6B 65 72 6E 6C 33 32\nep_only = true\n\n[PECompact 2.xx (Slim Loader) --> BitSum Technologies]\nsignature = B8 ?? ?? ?? ?? 50 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 33 C0 89 08 50 45 43 32 00\nep_only = true\n\n[PECompact 2.xx --> BitSum Technologies]\nsignature = B8 ?? ?? ?? ?? 50 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 33 C0 89 08 50 45 43 6F 6D 70 61 63 74 32 00\nep_only = true\n\n[PECompact v0.90]\nsignature = EB 06 68 ?? ?? 40 00 C3 9C 60 BD ?? ?? 00 00 B9 02 00 00 00 B0 90 8D BD 7A 42 40 00 F3 AA 01 AD D9 43 40 00 FF B5\nep_only = true\n\n[PECompact v0.92]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 BD ?? ?? ?? ?? B9 02 ?? ?? ?? B0 90 8D BD A5 4F 40 ?? F3 AA 01 AD 04 51 40 ?? FF B5\nep_only = true\n\n[PECompact v0.94]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 ?? ?? ?? ?? 5D 55 58 81 ED ?? ?? ?? ?? 2B 85 ?? ?? ?? ?? 01 85 ?? ?? ?? ?? 50 B9 02\nep_only = true\n\n[PECompact v0.971 - v0.976]\nsignature = EB 06 68 C3 9C 60 E8 5D 55 5B 81 ED 8B 85 01 85 66 C7 85\nep_only = true\n\n[PECompact v0.977]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB A0 86 40 ?? 87 DD 8B 85 2A 87\nep_only = true\n\n[PECompact v0.978]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 24 88 40 ?? 87 DD 8B 85 A9 88\nep_only = true\n\n[PECompact v0.978.1]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 49 87 40 ?? 87 DD 8B 85 CE 87\nep_only = true\n\n[PECompact v0.978.2]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB D1 84 40 ?? 87 DD 8B 85 56 85\nep_only = true\n\n[PECompact v0.98]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB D7 84 40 ?? 87 DD 8B 85 5C 85\nep_only = true\n\n[PECompact v0.99]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 2F 85 40 ?? 87 DD 8B 85 B4 85\nep_only = true\n\n[PECompact v1.00]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB C4 84 40 ?? 87 DD 8B 85 49 85\nep_only = true\n\n[PECompact v1.10b1]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 28 63 40 ?? 87 DD 8B 85 AD 63\nep_only = true\n\n[PECompact v1.10b2]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 60 40 ?? 87 DD 8B 85 94 60\nep_only = true\n\n[PECompact v1.10b3]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 60 40 ?? 87 DD 8B 85 95 60 40 ?? 01 85 03 60 40 ?? 66 C7 85 ?? 60 40 ?? 90 90 BB 95\nep_only = true\n\n[PECompact v1.10b4]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 60 40 ?? 87 DD 8B 85 95 60 40 ?? 01 85 03 60 40 ?? 66 C7 85 ?? 60 40 ?? 90 90 BB 44\nep_only = true\n\n[PECompact v1.10b5]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 60 40 ?? 87 DD 8B 85 95 60 40 ?? 01 85 03 60 40 ?? 66 C7 85 ?? 60 40 ?? 90 90 BB 49\nep_only = true\n\n[PECompact v1.10b6]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 60 ?? 00 87 DD 8B 85 9A 60 40 ?? 01 85 03 60 40 ?? 66 C7 85 ?? 60 40 ?? 90 90 01 85 92 60 40 ?? BB B7\nep_only = true\n\n[PECompact v1.10b7]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 60 40 ?? 87 DD 8B 85 9A 60 40 ?? 01 85 03 60 40 ?? 66 C7 85 ?? 60 40 ?? 90 90 01 85 92 60 40 ?? BB 14\nep_only = true\n\n[PECompact v1.20 - v1.20.1]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 70 40 ?? 87 DD 8B 85 9A 70 40\nep_only = true\n\n[PECompact v1.22]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 70 40 ?? 87 DD 8B 85 A6 70 40 ?? 01 85 03 70 40 ?? 66 C7 85 ?? 70 40 ?? 90 90 01 85 9E 70 40 ?? BB F3 08\nep_only = true\n\n[PECompact v1.23b3 - v1.24.1]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 70 40 ?? 87 DD 8B 85 A6 70 40 ?? 01 85 03 70 40 ?? 66 C7 85 70 40 90 ?? 90 01 85 9E 70 40 BB ?? D2 08\nep_only = true\n\n[PECompact v1.24.2 - v1.24.3]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 70 40 ?? 87 DD 8B 85 A6 70 40 ?? 01 85 03 70 40 ?? 66 C7 85 70 40 90 ?? 90 01 85 9E 70 40 BB ?? D2 09\nep_only = true\n\n[PECompact v1.25]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 70 40 ?? 87 DD 8B 85 A6 70 40 ?? 01 85 03 70 40 ?? 66 C7 85 70 40 90 ?? 90 01 85 9E 70 40 BB ?? F3 0D\nep_only = true\n\n[PECompact v1.26b1 - v1.26b2]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 70 40 ?? 87 DD 8B 85 A6 70 40 ?? 01 85 03 70 40 ?? 66 C7 85 70 40 90 ?? 90 01 85 9E 70 40 BB ?? 05 0E\nep_only = true\n\n[PECompact v1.33]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 80 40 ?? 87 DD 8B 85 A6 80 40 ?? 01 85 03 80 40 ?? 66 C7 85 00 80 40 ?? 90 90 01 85 9E 80 40 ?? BB E8 0E\nep_only = true\n\n[PECompact v1.34 - v1.40b1]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 80 40 ?? 87 DD 8B 85 A6 80 40 ?? 01 85 03 80 40 ?? 66 C7 85 ?? 00 80 ?? 40 90 90 01 85 9E 80 ?? 40 BB F8 10\nep_only = true\n\n[PECompact v1.40 - v1.45]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F A0 40 ?? 87 DD 8B 85 A6 A0 40 ?? 01 85 03 A0 40 ?? 66 C7 85 ?? A0 40 ?? 90 90 01 85 9E A0 40 ?? BB C3 11\nep_only = true\n\n[PECompact v1.40b2 - v1.40b4]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F A0 40 ?? 87 DD 8B 85 A6 A0 40 ?? 01 85 03 A0 40 ?? 66 C7 85 ?? A0 40 ?? 90 90 01 85 9E A0 40 ?? BB 86 11\nep_only = true\n\n[PECompact v1.40b5 - v1.40b6]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F A0 40 ?? 87 DD 8B 85 A6 A0 40 ?? 01 85 03 A0 40 ?? 66 C7 85 ?? A0 40 ?? 90 90 01 85 9E A0 40 ?? BB 8A 11\nep_only = true\n\n[PECompact v1.46]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F A0 40 ?? 87 DD 8B 85 A6 A0 40 ?? 01 85 03 A0 40 ?? 66 C7 85 ?? A0 40 ?? 90 90 01 85 9E A0 40 ?? BB 60 12\nep_only = true\n\n[PECompact v1.47 - v1.50]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F A0 40 ?? 87 DD 8B 85 A6 A0 40 ?? 01 85 03 A0 40 ?? 66 C7 85 ?? A0 40 ?? 90 90 01 85 9E A0 40 ?? BB 5B 12\nep_only = true\n\n[PECompact v1.4x+]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81\nep_only = true\n\n[PECompact v1.55]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 80 40 ?? 87 DD 8B 85 A2 80 40 ?? 01 85 03 80 40 ?? 66 C7 85 ?? 80 40 ?? 90 90 01 85 9E 80 40 ?? BB 2D 12\nep_only = true\n\n[PECompact v1.56]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 0F 90 40 ?? 87 DD 8B 85 A2 90 40 ?? 01 85 03 90 40 ?? 66 C7 85 ?? 90 40 ?? 90 90 01 85 9E 90 40 ?? BB 2D 12\nep_only = true\n\n[PECompact v1.60 - v1.65]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 3F 80 40 ?? 87 DD 8B 85 D2 80 40 ?? 01 85 33 80 40 ?? 66 C7 85 ?? 80 40 ?? 90 90 01 85 CE 80 40 ?? BB BB 12\nep_only = true\n\n[PECompact v1.66]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 3F 90 40 ?? 87 DD 8B 85 E6 90 40 ?? 01 85 33 90 40 ?? 66 C7 85 ?? 90 40 ?? 90 90 01 85 DA 90 40 ?? 01 85 DE 90 40 ?? 01 85 E2 90 40 ?? BB 5B 11\nep_only = true\n\n[PECompact v1.67]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 3F 90 40 87 DD 8B 85 E6 90 40 01 85 33 90 40 66 C7 85 90 40 90 90 01 85 DA 90 40 01 85 DE 90 40 01 85 E2 90 40 BB 8B 11\nep_only = true\n\n[PECompact v1.68 - v1.84]\nsignature = EB 06 68 ?? ?? ?? ?? C3 9C 60 E8 02 ?? ?? ?? 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 3F 90 40 87 DD 8B 85 E6 90 40 01 85 33 90 40 66 C7 85 90 40 90 90 01 85 DA 90 40 01 85 DE 90 40 01 85 E2 90 40 BB 7B 11\nep_only = true\n\n[PECompact v1.84]\nsignature = 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81\nep_only = true\n\n[PECompact v2.0 beta -> Jeremy Collake]\nsignature = B8 ?? ?? ?? ?? 05 ?? ?? ?? ?? 50 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 CC 90 90 90 90\nep_only = true\n\n[PECompact v2.00 alpha 38]\nsignature = B8 ?? ?? ?? ?? 80 B8 BF 10 00 10 01 74 7A C6 80 BF 10 00 10 01 9C 55 53 51 57 52 56 8D 98 0F 10 00 10 8B 53 14 8B E8 6A 40 68 00 10 00 00 FF 73 04 6A 00 8B 4B 10 03 CA 8B 01 FF D0 8B F8 50 8B 33 8B 53 14 03 F2 8B 4B 0C 03 CA 8D 85 B7 10 00 10 FF 73 04 8F\nep_only = false\n\n[PECompact v2.5 Retail (Slim Loader) -> Bitsum Technologies]\nsignature = B8 ?? ?? ?? 01 50 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 33 C0 89 08 50 45 43 32 00\nep_only = true\n\n[PECompact v2.5 Retail -> Bitsum Technologies]\nsignature = B8 ?? ?? ?? 01 50 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 33 C0 89 08 50 45 43 6F 6D 70 61 63 74 32 00\nep_only = true\n\n[PECompact V2.X-> Bitsum Technologies]\nsignature = B8 ?? ?? ?? ?? 50 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 33 C0 89 08 50 45 43\nep_only = true\n\n[PECompact v2.xx]\nsignature = B8 ?? ?? ?? 00 50 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 33 C0 89 08 50 45 43 6F 6D 70 61 63 74 32 00\nep_only = false\n\n[PeCompact2 2.53-2.76 --> BitSum Technologies]\nsignature = B8 ?? ?? ?? ?? 55 53 51 57 56 52 8D 98 C9 11 00 10 8B 53 18 52 8B E8 6A 40 68 00 10 00 00 FF 73 04 6A 00 8B 4B 10 03 CA 8B 01 FF D0 5A 8B F8 50 52 8B 33 8B 43 20 03 C2 8B 08 89 4B 20 8B 43 1C 03 C2 8B 08 89 4B 1C 03 F2 8B 4B 0C 03 CA 8D 43 1C 50 57 56 FF\nep_only = false\n\n[PECrc32 0.88 -> ZhouJinYu]\nsignature = 60 E8 00 00 00 00 5D 81 ED B6 A4 45 00 8D BD B0 A4 45 00 81 EF 82 00 00 00\nep_only = true\n\n[PEcrypt - by archphase]\nsignature = 55 8B EC 83 C4 E0 53 56 33 C0 89 45 E4 89 45 E0 89 45 EC ?? ?? ?? ?? 64 82 40 00 E8 7C C7 FF FF 33 C0 55 68 BE 84 40 00 64 FF 30 64 89 20 68 CC 84 40 00 ?? ?? ?? ?? 00 A1 10 A7 40 00 50 E8 1D C8 FF FF 8B D8 85 DB 75 39 E8 3A C8 FF FF 6A 00 6A 00 68 A0 A9 40 00 68 00 04 00 00 50 6A 00 68 00 13 00 00 E8 FF C7 FF FF 6A 00 68 E0 84 40 00 A1 A0 A9 40 00 50 6A 00 E8 ?? ?? ?? ?? E9 7D 01 00 00 53 A1 10 A7 40 00 50 E8 42 C8 FF FF 8B F0 85 F6 75 18 6A 00 68 E0 84 40 00 68 E4 84 40 00 6A 00 E8 71 C8 FF FF E9 53 01 00 00 53 6A 00 E8 2C C8 FF FF A3 ?? ?? ?? ?? 83 3D 48 A8 40 00 00 75 18 6A 00 68 E0 84 40 00 68 F8 84 40 00 6A 00 E8 43 C8 FF FF E9 25 01 00 00 56 E8 F8 C7 FF FF A3 4C A8 40 00 A1 48 A8 40 00 E8 91 A1 FF FF 8B D8 8B 15 48 A8 40 00 85 D2 7C 16 42 33 C0 8B 0D 4C A8 40 00 03 C8 8A 09 8D 34 18 88 0E 40 4A 75 ED 8B 15 48 A8 40 00 85 D2 7C 32 42 33 C0 8D 34 18 8A 0E 80 F9 01 75 05 C6 06 FF EB 1C 8D 0C 18 8A 09 84 ?? ?? ?? ?? ?? 00 EB 0E 8B 0D 4C A8 40 00 03 C8 0F B6 09 49 88 0E 40 4A 75 D1 8D ?? ?? ?? ?? E8 A5 A3 FF FF 8B 45 E8 8D 55 EC E8 56 D5 FF FF 8D 45 EC BA 18 85 40 00 E8 79 BA FF FF 8B 45 EC E8 39 BB FF FF 8B D0 B8 54 A8 40 00 E8 31 A6 FF FF BA 01 00 00 00 B8 54 A8 40 00 E8 12 A9 FF FF E8 DD A1 FF FF 68 50 A8 40 00 8B D3 8B 0D 48 A8 40 00 B8 54 A8 40 00 E8 56 A7 FF FF E8 C1 A1 FF FF\nep_only = true\n\n[PEEncrypt v4.0b (JunkCode)]\nsignature = 66 ?? ?? 00 66 83 ?? 00\nep_only = true\n\n[PEiD-Bundle v1.00 - v1.01 --> BoB / BobSoft]\nsignature = 60 E8 ?? 02 00 00 8B 44 24 04 52 48 66 31 C0 66 81 38 4D 5A 75 F5 8B 50 3C 81 3C 02 50 45 00 00 75 E9 5A C2 04 00 60 89 DD 89 C3 8B 45 3C 8B 54 28 78 01 EA 52 8B 52 20 01 EA 31 C9 41 8B 34 8A\nep_only = true\n\n[PEiD-Bundle v1.00 --> BoB / BobSoft]\nsignature = 60 E8 21 02 00 00 8B 44 24 04 52 48 66 31 C0 66 81 38 4D 5A 75 F5 8B 50 3C 81 3C 02 50 45 00 00 75 E9 5A C2 04 00 60 89 DD 89 C3 8B 45 3C 8B 54 28 78 01 EA 52 8B 52 20 01 EA 31 C9 41 8B 34 8A\nep_only = true\n\n[PEiD-Bundle v1.01 --> BoB / BobSoft]\nsignature = 60 E8 23 02 00 00 8B 44 24 04 52 48 66 31 C0 66 81 38 4D 5A 75 F5 8B 50 3C 81 3C 02 50 45 00 00 75 E9 5A C2 04 00 60 89 DD 89 C3 8B 45 3C 8B 54 28 78 01 EA 52 8B 52 20 01 EA 31 C9 41 8B 34 8A\nep_only = true\n\n[PEiD-Bundle v1.02 - v1.03 --> BoB / BobSoft]\nsignature = 60 E8 9C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 36 ?? ?? ?? 2E ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 80 00 00 00 00 4B 65 72 6E 65 6C 33 32 2E 44\nep_only = true\n\n[PEiD-Bundle v1.02 - v1.03 DLL --> BoB / BobSoft]\nsignature = 83 7C 24 08 01 0F 85 ?? ?? ?? ?? 60 E8 9C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 41 00 08 00 39 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 80 00 00 00\nep_only = true\n\n[PEiD-Bundle v1.02 - v1.04 --> BoB / BobSoft]\nsignature = 60 E8 ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 36 ?? ?? ?? 2E ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 80 00 00 00 00 4B 65 72 6E 65 6C 33 32 2E 44\nep_only = true\n\n[Pelles C 2.8.x-4.5.x -> Pelle Orinius]\nsignature = 55 89 E5 6A FF 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 FF 35 ?? ?? ?? ?? 64 89 25 ?? ?? ?? ?? 83 EC\nep_only = true\n\n[Pelles C 2.80 -2.90 EXE (X86 CRT-LIB)]\nsignature = 55 89 E5 6A FF 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 FF 35 ?? ?? ?? ?? 64 89 25 ?? ?? ?? ?? 83 EC ?? 83 EC ?? 53 56 57 89 65 E8 68 00 00 00 ?? E8 ?? ?? ?? ?? 59 A3\nep_only = true\n\n[Pelles C 2.90, 3.00, 4.00 DLL (X86 CRT-LIB)]\nsignature = 55 89 E5 53 56 57 8B 5D 0C 8B 75 10 BF 01 00 00 00 85 DB 75 10 83 3D ?? ?? ?? ?? 00 75 07 31 C0 E9 ?? ?? ?? ?? 83 FB 01 74 05 83 FB 02 75 ?? 85 FF 74\nep_only = true\n\n[Pelles C 2.x-4.x DLL -> Pelle Orinius]\nsignature = 55 89 E5 53 56 57 8B 5D 0C 8B 75 10\nep_only = true\n\n[Pelles C 3.00, 4.00, 4.50 EXE (X86 CRT-DLL)]\nsignature = 55 89 E5 6A FF 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 FF 35 ?? ?? ?? ?? 64 89 25 ?? ?? ?? ?? 83 EC ?? 53 56 57 89 65 E8 C7 45 FC ?? ?? ?? ?? 68 ?? ?? ?? ?? E8 ?? ?? ?? ?? 59 BE ?? ?? ?? ?? EB\nep_only = true\n\n[Pelles C 3.00, 4.00, 4.50 EXE (X86 CRT-LIB)]\nsignature = 55 89 E5 6A FF 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 FF 35 ?? ?? ?? ?? 64 89 25 ?? ?? ?? ?? 83 EC ?? 53 56 57 89 65 E8 68 00 00 00 02 E8 ?? ?? ?? ?? 59 A3\nep_only = true\n\n[Pelles C 4.50 DLL (X86 CRT-LIB)]\nsignature = 55 89 E5 53 56 57 8B 5D 0C 8B 75 10 85 DB 75 0D 83 3D ?? ?? ?? ?? 00 75 04 31 C0 EB 57 83 FB 01 74 05 83 FB 02 75\nep_only = true\n\n[PELOCKnt 2.04]\nsignature = EB 03 CD 20 C7 1E EB 03 CD 20 EA 9C EB 02 EB 01 EB 01 EB 60\nep_only = true\n\n[PEMangle]\nsignature = 60 9C BE ?? ?? ?? ?? 8B FE B9 ?? ?? ?? ?? BB 44 52 4F 4C AD 33 C3\nep_only = true\n\n[PEncrypt 1.0 -> JunkCode]\nsignature = 60 9C BE 00 10 40 00 8B FE B9 ?? ?? ?? ?? BB 78 56 34 12 AD 33 C3 AB E2 FA 9D 61 E9 ?? ?? ?? FF\nep_only = true\n\n[PEncrypt 2.0 -> junkcode]\nsignature = EB 25 00 00 F7 BF 00 00 00 00 00 00 00 00 00 00 12 00 E8 00 56 69 72 74 75 61 6C 50 72 6F 74 65 63 74 00 00 00 00 00 E8 00 00 00 00 5D 81 ED 2C 10 40 00 8D B5 14 10 40 00 E8 33 00 00 00 89 85 10 10 40 00 BF 00 00 40 00 8B F7 03 7F 3C 8B 4F 54 51 56 8D 85\nep_only = true\n\n[PEncrypt v1.0]\nsignature = 60 9C BE 00 10 40 00 8B FE B9 28 03 00 00 BB 78 56 34 12 AD 33 C3 AB E2 FA 9D 61\nep_only = true\n\n[PEncrypt v3.0]\nsignature = E8 00 00 00 00 5D 81 ED 05 10 40 00 8D B5 24 10 40 00 8B FE B9 0F 00 00 00 BB ?? ?? ?? ?? AD 33 C3 E2 FA\nep_only = true\n\n[PEncrypt v3.1]\nsignature = E9 ?? ?? ?? 00 F0 0F C6\nep_only = true\n\n[PEnguinCrypt v1.0]\nsignature = B8 93 ?? ?? 00 55 50 67 64 FF 36 00 00 67 64 89 26 00 00 BD 4B 48 43 42 B8 04 00 00 00 CC 3C 04 75 04 90 90 C3 90 67 64 8F 06 00 00 58 5D BB 00 00 40 00 33 C9 33 C0\nep_only = true\n\n[PENightMare 2 Beta]\nsignature = 60 E9 ?? ?? ?? ?? EF 40 03 A7 07 8F 07 1C 37 5D 43 A7 04 B9 2C 3A\nep_only = true\n\n[PENightMare v1.3]\nsignature = 60 E8 00 00 00 00 5D B9 ?? ?? ?? ?? 80 31 15 41 81 F9\nep_only = true\n\n[PENinja]\nsignature = 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90\nep_only = true\n\n[PENinja modified]\nsignature = 5D 8B C5 81 ED B2 2C 40 00 2B 85 94 3E 40 00 2D 71 02 00 00 89 85 98 3E 40 00 0F B6 B5 9C 3E 40 00 8B FD\nep_only = true\n\n[PEQuake 0.06-> forgat]\nsignature = E8 A5 00 00 00 2D ?? ?? 00 00 00 00 00 00 00 00 00 3D ?? ?? 00 2D ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4A ?? ?? 00 5B ?? ?? 00 6E ?? ?? 00 00 00 00 00 6B 45 72 4E 65 4C 33 32 2E 64 4C 6C 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 ?? ?? 00 00 56 69 72 74 75 61 6C 41 6C 6C 6F 63 00 00 00 00 00 00\nep_only = false\n\n[PEQuake v0.06 by fORGAT]\nsignature = E8 A5 00 00 00 2D ?? 00 00 00 00 00 00 00 00 00 00 3D ?? 00 00 2D ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4A ?? 00 00 5B ?? 00 00 6E ?? 00 00 00 00 00 00 6B 45 72 4E 65 4C 33 32 2E 64 4C 6C 00 00 00 47 65 74 50 72 6F 63 41 64\nep_only = false\n\n[PerlApp 6.0.2 -> ActiveState]\nsignature = 68 2C EA 40 00 FF D3 83 C4 0C 85 C0 0F 85 CD 00 00 00 6A 09 57 68 20 EA 40 00 FF D3 83 C4 0C 85 C0 75 12 8D 47 09 50 FF 15 1C D1 40 00 59 A3 B8 07 41 00 EB 55 6A 08 57 68 14 EA 40 00 FF D3 83 C4 0C 85 C0 75 11 8D 47 08 50 FF 15 1C D1 40 00 59 89 44 24 10 EB 33 6A 09 57 68 08 EA 40 00 FF D3 83 C4 0C 85 C0 74 22 6A 08 57 68 FC E9 40 00 FF D3 83 C4 0C 85 C0 74 11 6A 0B 57 68 F0 E9 40 00 FF D3 83 C4 0C 85 C0 75 55\nep_only = false\n\n[PerlApp 6.0.2 -> ActiveState]\nsignature = 68 9C E1 40 00 FF 15 A4 D0 40 00 85 C0 59 74 0F 50 FF 15 1C D1 40 00 85 C0 59 89 45 FC 75 62 6A 00 8D 45 F8 FF 75 0C F6 45 14 01 50 8D 45 14 50 E8 9B 01 00 00 83 C4 10 85 C0 0F 84 E9 00 00 00 8B 45 F8 83 C0 14 50 FF D6 85 C0 59 89 45 FC 75 0E FF 75 14 FF 15 78 D0 40 00 E9 C9 00 00 00 68 8C E1 40 00 FF 75 14 50\nep_only = false\n\n[PESHiELD v0.1b MTE]\nsignature = E8 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? B9 1B 01 ?? ?? D1\nep_only = true\n\n[PESHiELD v0.2 / v0.2b / v0.2b2]\nsignature = 60 E8 ?? ?? ?? ?? 41 4E 41 4B 49 4E 5D 83 ED 06 EB 02 EA 04\nep_only = true\n\n[PESHiELD v0.251]\nsignature = 5D 83 ED 06 EB 02 EA 04 8D\nep_only = true\n\n[PEShit]\nsignature = B8 ?? ?? ?? ?? B9 ?? ?? ?? ?? 83 F9 00 7E 06 80 30 ?? 40 E2 F5 E9 ?? ?? ?? FF\nep_only = true\n\n[PESpin v0.1 -> Cyberbob]\nsignature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 5C CB 46 00 0B E4 74 9E 75 01 C7 81 73 04 D7 7A F7 2F 81 73 19 77 00 43 B7 F6 C3 6B B7 00 00 F9 FF E3 C9 C2 08 00 A3 68 72 01 FF 5D 33 C9 41 E2 17 EB 07 EA EB 01 EB EB 0D FF\nep_only = true\n\n[PESpin v0.1 -> Cyberbob]\nsignature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 5C CB 46 00 0B E4 74 9E 75 01 C7 81 73 04 D7 7A F7 2F 81 73 19 77 00 43 B7 F6 C3 6B B7 00 00 F9 FF E3 C9 C2 08 00 A3 68 72 01 FF 5D 33 C9 41 E2 17 EB 07 EA EB 01 EB EB 0D FF E8 01 00 00 00 EA 5A 83 EA 0B FF E2 8B 95 B3 28 40 00 8B 42 3C 03 C2 89 85 BD 28 40 00 41 C1 E1 07 8B 0C 01 03 CA 8B 59 10 03 DA 8B 1B 89 9D D1 28 40 00 53 8F 85 C4 27 40 00 BB ?? 00 00 00 B9 A5 08 00 00 8D BD 75 29 40 00 4F 30 1C 39 FE CB E2 F9 68 2D 01 00 00 59 8D BD AA 30 40 00 C0 0C 39 02 E2 FA E8 02 00 00 00 FF 15 5A 8D 85 07 4F 56 00 BB 54 13 0B 00 D1 E3 2B C3 FF E0 E8 01 00 00 00 68 E8 1A 00 00 00 8D 34 28 B8 ?? ?? ?? ?? 2B C9 83 C9 15 0F A3 C8 0F 83 81 00 00 00 8D B4 0D C4 28 40 00 8B D6 B9 10 00 00 00 AC 84 C0 74 06 C0 4E FF 03 E2 F5 E8 00 00 00 00 59 81 C1 1D 00 00 00 52 51 C1 E9 05 23 D1 FF\nep_only = true\n\n[PESpin v0.3 (Eng) -> cyberbob]\nsignature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 B7 CD 46\nep_only = true\n\n[PESpin v0.3 (Eng) -> cyberbob]\nsignature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 B7 CD 46 00 0B E4 74 9E 75 01 C7 81 73 04 D7 7A F7 2F 81 73 19 77 00 43 B7 F6 C3 6B B7 00 00 F9 FF E3 C9 C2 08 00 A3 68 72 01 FF 5D 33 C9 41 E2 17 EB 07 EA EB 01 EB EB 0D FF\nep_only = true\n\n[PESpin V0.3 -> cyberbob]\nsignature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 B7 CD 46 00 0B E4 74 9E 75 01 C7 81 73 04 D7 7A F7 2F 81 73 19 77 00 43 B7 F6 C3 6B B7 00 00 F9 FF E3 C9 C2 08 00 A3 68 72 01 FF 5D 33 C9 41 E2 17 EB 07 EA EB 01 EB EB 0D FF E8 01 00 00 00 EA 5A 83 EA 0B FF E2 8B 95 CB 2C 40 00 8B 42 3C 03 C2 89 85 D5 2C 40 00 41 C1 E1 07 8B 0C 01 03 CA 8B 59 10 03 DA 8B 1B 89 9D E9 2C 40 00 53 8F 85 B6 2B 40 00 BB ?? 00 00 00 B9 75 0A 00 00 8D BD 7E 2D 40 00 4F 30 1C 39 FE CB E2 F9 68 3C 01 00 00 59 8D BD B6 36 40 00 C0 0C 39 02 E2 FA E8 02 00 00 00 FF 15 5A 8D 85 1F 53 56 00 BB 54 13 0B 00 D1 E3 2B C3 FF E0 E8 01 00 00 00 68 E8 1A 00 00 00 8D 34 28 B9 08 00 00 00 B8 ?? ?? ?? ?? 2B C9 83 C9 15 0F A3 C8 0F 83 81 00 00 00 8D B4 0D DC 2C 40 00\nep_only = true\n\n[PESpin v0.7 -> Cyberbob]\nsignature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 83 D5 46 00 0B E4 74 9E 75 01 C7 81 73 04 D7 7A F7 2F 81 73 19 77 00 43 B7 F6 C3 6B B7 00 00 F9 FF E3 C9 C2 08 00 A3 68 72 01 FF 5D 33 C9 41 E2 17 EB 07 EA EB 01 EB EB 0D FF\nep_only = true\n\n[PESpin V0.71 -> cyberbob]\nsignature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 83 D5 46 00 0B E4 74 9E\nep_only = true\n\n[PESpin V1.1 -> cyberbob]\nsignature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 7D DE 46 00 0B E4 74 9E\nep_only = true\n\n[PESpin v1.1 -> Cyberbob]\nsignature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 7D DE 46 00 0B E4 74 9E 75 01 C7 81 73 04 D7 7A F7 2F 81 73 19 77 00 43 B7 F6 C3 6B B7 00 00 F9 FF E3 C9 C2 08 00 A3 68 72 01 FF 5D 33 C9 41 E2 17 EB 07 EA EB 01 EB EB 0D FF\nep_only = true\n\n[PESPin v1.3 -> Cyberbob]\nsignature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 AC DF 46 00 0B E4 74 9E 75 01 C7 81 73 04 D7 7A F7 2F 81 73 19 77 00 43 B7 F6 C3 6B B7 00 00 F9 FF E3 C9 C2 08 00 A3 68 72 01 FF 5D 33 C9 41 E2 17 EB 07 EA EB 01 EB EB 0D FF\nep_only = true\n\n[PESpin v1.304 -> Cyberbob]\nsignature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 88 DF 46 00 0B E4 74 9E 75 01 C7 81 73 04 D7 7A F7 2F 81 73 19 77 00 43 B7 F6 C3 6B B7 00 00 F9 FF E3 C9 C2 08 00 A3 68 72 01 FF 5D 33 C9 41 E2 17 EB 07 EA EB 01 EB EB 0D FF\nep_only = true\n\n[PESpin v1.3beta -> Cyberbob]\nsignature = EB 01 68 60 E8 00 00 00 00 8B 1C 24 83 C3 12 81 2B E8 B1 06 00 FE 4B FD 82 2C 24 71 DF 46 00 0B E4 74 9E 75 01 C7 81 73 04 D7 7A F7 2F 81 73 19 77 00 43 B7 F6 C3 6B B7 00 00 F9 FF E3 C9 C2 08 00 A3 68 72 01 FF 5D 33 C9 41 E2 17 EB 07 EA EB 01 EB EB 0D FF\nep_only = true\n\n[PEStubOEP v1.x]\nsignature = 40 48 BE 00 ?? ?? 00 40 48 60 33 C0 B8 ?? ?? ?? 00 FF E0 C3 C3\nep_only = false\n\n[PeStubOEP v1.x]\nsignature = 90 33 C9 33 D2 B8 ?? ?? ?? 00 B9 FF\nep_only = false\n\n[PeStubOEP v1.x]\nsignature = E8 05 00 00 00 33 C0 40 48 C3 E8 05\nep_only = false\n\n[Petite 1.2]\nsignature = 66 9C 60 E8 CA 00 00 00 03 00 04 00 05 00 06 00 07 00 08 00\nep_only = true\n\n[Petite 1.2 -> (c)1998 Ian Luck]\nsignature = 66 9C 60 E8 CA 00 00 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0A 00 0B 00 0D 00 0F 00 11 00 13 00 17 00 1B 00 1F 00 23 00 2B 00 33 00 3B 00 43 00 53 00 63 00 73 00 83 00 A3 00 C3 00 E3 00 02 01 00 00 00 00 00 00 00 00 00 00 00 00 01 01 01 01 02 02 02\nep_only = true\n\n[Petite 1.3]\nsignature = 66 9C 60 50 8D 88 00 F0 00 00 8D 90 04 16 00 00 8B DC 8B E1\nep_only = false\n\n[Petite 1.3 -> (c)1998 Ian Luck]\nsignature = ?? ?? ?? ?? ?? ?? 9C 60 50 8D 88 00 ?? ?? ?? 8D 90 ?? ?? 00 00 8B DC 8B E1 68 00 00 ?? ?? 53 50 80 04 24 08 50 80 04 24 42 50 80 04 24 61 50 80 04 24 9D 50 80 04 24 BB 83 3A 00 0F 84 DA 14 00 00 8B 44 24 18 F6 42 03 80 74 19 FD 80 72 03 80 8B F0 8B F8 03\nep_only = true\n\n[Petite 1.4]\nsignature = 66 9C 60 50 8B D8 03 00 68 54 BC 00 00 6A 00 FF 50 14 8B CC\nep_only = false\n\n[Petite 1.4 -> (c)1998-99 Ian Luck]\nsignature = ?? ?? ?? ?? ?? 66 9C 60 50 8B D8 03 00 68 54 BC 00 00 6A 00 FF 50 14 8B CC 8D A0 54 BC 00 00 50 8B C3 8D 90 ?? 16 00 00 68 00 00 ?? ?? 51 50 80 04 24 08 50 80 04 24 42 50 80 04 24 61 50 80 04 24 9D 50 80 04 24 BB 83 3A 00 0F 84 D8 14 00 00 8B 44 24 18 F6\nep_only = true\n\n[Petite 2.1]\nsignature = 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 66 9C 60 50 8B D8\nep_only = false\n\n[Petite 2.2 -> (c)1998-99 Ian Luck]\nsignature = ?? ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 66 9C 60 50 68 00 00 ?? ?? 8B 3C 24 8B 30 66 81 C7 80 07 8D 74 06 08 89 38 8B 5E 10 50 56 6A 02 68 80 08 00 00 57 6A ?? 6A 06 56 6A 04 68 80 08 00 00 57 FF D3 83 EE 08 59 F3 A5 59 66\nep_only = true\n\n[PEtite v1.2]\nsignature = 9C 60 E8 CA ?? ?? ?? 03 ?? 04 ?? 05 ?? 06 ?? 07 ?? 08\nep_only = true\n\n[PEtite v1.3]\nsignature = ?? ?? ?? ?? ?? 66 9C 60 50 8D 88 ?? F0 ?? ?? 8D 90 04 16 ?? ?? 8B DC 8B E1 68 ?? ?? ?? ?? 53 50 80 04 24 08 50 80 04 24 42\nep_only = true\n\n[PEtite v1.4]\nsignature = 66 9C 60 50 8B D8 03 ?? 68 54 BC ?? ?? 6A ?? FF 50 14 8B CC\nep_only = true\n\n[PEtite v1.4]\nsignature = ?? ?? ?? ?? ?? 66 9C 60 50 8B D8 03 00 68 54 BC 00 00 6A 00 FF 50 14 8B CC\nep_only = true\n\n[Petite v1.4]\nsignature = B8 ?? ?? ?? ?? 66 9C 60 50 8B D8 03 00 68 ?? ?? ?? ?? 6A 00\nep_only = true\n\n[PEtite v2.0]\nsignature = B8 ?? ?? ?? ?? 66 9C 60 50 8B D8 03 ?? 68 54 BC ?? ?? 6A ?? FF 50 18 8B CC 8D A0 54 BC ?? ?? 8B C3 8D 90 E0 15 ?? ?? 68\nep_only = true\n\n[PEtite v2.1]\nsignature = B8 ?? ?? ?? ?? 6A ?? 68 ?? ?? ?? ?? 64 FF 35 ?? ?? ?? ?? 64 89 25 ?? ?? ?? ?? 66 9C 60 50\nep_only = true\n\n[Petite v2.1 (1)]\nsignature = B8 ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 ?? ?? ?? ?? ?? ?? 64 ?? ?? ?? ?? ?? ?? 66 9C 60 50\nep_only = true\n\n[Petite v2.1 (2)]\nsignature = B8 ?? ?? ?? ?? 6A 00 68 ?? ?? ?? ?? 64 ?? ?? ?? ?? ?? ?? 64 ?? ?? ?? ?? ?? ?? 66 9C 60 50\nep_only = true\n\n[PEtite v2.2]\nsignature = B8 ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 FF 35 ?? ?? ?? ?? 64 89 25 ?? ?? ?? ?? 66 9C 60 50\nep_only = true\n\n[Petite v?.? (after v1.4)]\nsignature = B8 ?? ?? ?? ?? 66 9C 60 50 8D ?? ?? ?? ?? ?? 68 ?? ?? ?? ?? 83\nep_only = true\n\n[PEtite vx.x]\nsignature = B8 ?? ?? ?? ?? 66 9C 60 50\nep_only = true\n\n[PeX 0.99 -> bart^CrackPl]\nsignature = E9 F5 ?? ?? ?? 0D 0A C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4\nep_only = true\n\n[PEX v0.99]\nsignature = 60 E8 01 ?? ?? ?? ?? 83 C4 04 E8 01 ?? ?? ?? ?? 5D 81\nep_only = true\n\n[PeX v0.99 (Eng) -> bart/CrackPl]\nsignature = E9 F5 00 00 00 0D 0A C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4 C4\nep_only = true\n\n[PEZip v1.0 by BaGIE]\nsignature = D9 D0 F8 74 02 23 DB F5 F5 50 51 52 53 8D 44 24 10 50 55 56 57 D9 D0 22 C9 C1 F7 A0 55 66 C1 C8 B0 5D 81 E6 FF FF FF FF F8 77 07 52 76 03 72 01 90 5A C1 E0 60 90 BD 1F 01 00 00 87 E8 E2 07 E3 05 17 5D 47 E4 42 41 7F 06 50 66 83 EE 00 58 25 FF FF FF FF 51\nep_only = false\n\n[PE_Admin 1.0 (EncryptPE 1.2003.5.18 Sold) -> Flying Cat]\nsignature = 60 9C 64 FF 35 00 00 00 00 E8 79 01 00 00 90 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 47 65 74 53 79 73 74 65 6D 44 69 72 65 63 74 6F 72 79 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 4D 61 70 70 69 6E 67 41 00 00 00 4D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 55 6E 6D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 43 6C 6F 73 65 48 61 6E 64 6C 65 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 45 78 69 74 50 72 6F 63 65 73 73\nep_only = true\n\n[PE_Admin 1.0 (EncryptPE 1.2003.5.18 Sold) -> Flying Cat]\nsignature = 60 9C 64 FF 35 00 00 00 00 E8 79 01 00 00 90 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 47 65 74 53 79 73 74 65 6D 44 69 72 65 63 74 6F 72 79 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 41 00 00 00 43 72 65 61 74 65 46 69 6C 65 4D 61 70 70 69 6E 67 41 00 00 00 4D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 55 6E 6D 61 70 56 69 65 77 4F 66 46 69 6C 65 00 00 00 43 6C 6F 73 65 48 61 6E 64 6C 65 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 45 78 69 74 50 72 6F 63 65 73 73 00 00 00 00\nep_only = true\n\n[PGMPACK v0.13]\nsignature = FA 1E 17 50 B4 30 CD 21 3C 02 73 ?? B4 4C CD 21 FC BE ?? ?? BF ?? ?? E8 ?? ?? E8 ?? ?? BB ?? ?? BA ?? ?? 8A C3 8B F3\nep_only = true\n\n[PGMPACK v0.14]\nsignature = 1E 17 50 B4 30 CD 21 3C 02 73 ?? B4 4C CD 21 FC BE ?? ?? BF ?? ?? E8 ?? ?? E8 ?? ?? BB ?? ?? BA ?? ?? 8A C3 8B F3\nep_only = true\n\n[Pi Cryptor 1.0 - by Scofield]\nsignature = 55 8B EC 83 C4 EC 53 56 57 31 C0 89 45 EC B8 40 1E 06 00 E8 48 FA FF FF 33 C0 55 68 36 1F 06 00 64 FF 30 64 89 20 6A 00 68 80 00 00 00 6A 03 6A 00 6A 01 68 00 00 00 80 8D 55 EC 31 C0 E8 4E F4 FF FF 8B 45 EC E8 F6 F7 FF FF 50 E8 CC FA FF FF 8B D8 83 FB FF 74 4E 6A 00 53 E8 CD FA FF FF 8B F8 81 EF AC 26 00 00 6A 00 6A 00 68 AC 26 00 00 53 E8 DE FA FF FF 89 F8 E8 E3 F1 FF FF 89 C6 6A 00 68 28 31 06 00 57 56 53 E8 AE FA FF FF 53 E8 80 FA FF FF 89 FA 81 EA 72 01 00 00 8B C6 E8 55 FE FF FF 89 C6 89 F0 09 C0 74 05 E8 A8 FB FF FF 31 C0\nep_only = false\n\n[Pi Cryptor 1.0 - by Scofield]\nsignature = 55 8B EC 83 C4 EC 53 56 57 31 C0 89 45 EC B8 40 1E 06 00 E8 48 FA FF FF 33 C0 55 68 36 1F 06 00 64 FF 30 64 89 20 6A 00 68 80 00 00 00 6A 03 6A 00 6A 01 68 00 00 00 80 8D 55 EC 31 C0 E8 4E F4 FF FF 8B 45 EC E8 F6 F7 FF FF 50 E8 CC FA FF FF 8B D8 83 FB FF 74 4E 6A 00 53 E8 CD FA FF FF 8B F8 81 EF AC 26 00 00 6A 00 6A 00 68 AC 26 00 00 53 E8 DE FA FF FF 89 F8 E8 E3 F1 FF FF 89 C6 6A 00 68 28 31 06 00 57 56 53 E8 AE FA FF FF 53 E8 80 FA FF FF 89 FA 81 EA 72 01 00 00 8B C6 E8 55 FE FF FF 89 C6 89 F0 09 C0 74 05 E8 A8 FB FF FF 31 C0 5A 59 59 64 89 10 68 3D 1F 06 00 8D 45 EC E8 C3 F6 FF FF C3\nep_only = true\n\n[Pi Cryptor 1.0 - by Scofield]\nsignature = 89 55 F8 BB 01 00 00 00 8A 04 1F 24 0F 8B 55 FC 8A 14 32 80 E2 0F 32 C2 8A 14 1F 80 E2 F0 02 D0 88 14 1F 46 8D 45 F4 8B 55 FC E8 ?? ?? ?? ?? 8B 45 F4 E8 ?? ?? ?? ?? 3B F0 7E 05 BE 01 00 00 00 43 FF 4D F8 75 C2 ?? ?? ?? ?? 5A 59 59 64 89 10 68 ?? ?? ?? ?? 8D 45 F4 E8 ?? ?? ?? ?? C3 E9\nep_only = false\n\n[PKLITE v1.00, v1.03]\nsignature = B8 ?? ?? BA ?? ?? 8C DB 03 D8 3B\nep_only = true\n\n[PKLITE v1.00c (1)]\nsignature = 2E 8C 1E ?? ?? 8B 1E ?? ?? 8C DA 81 C2 ?? ?? 3B DA 72 ?? 81 EB ?? ?? 83 EB ?? FA 8E D3 BC ?? ?? FB FD BE ?? ?? 8B FE\nep_only = true\n\n[PKLITE v1.00c (2)]\nsignature = BA ?? ?? A1 ?? ?? 2D ?? ?? 8C CB 81 C3 ?? ?? 3B C3 77 ?? 05 ?? ?? 3B C3 77 ?? B4 09 BA ?? ?? CD 21 CD 20 90\nep_only = true\n\n[PKLITE v1.12, v1.15, v1.20 (1)]\nsignature = B8 ?? ?? BA ?? ?? 05 ?? ?? 3B 06 ?? ?? 73 ?? 2D ?? ?? FA 8E D0 FB 2D ?? ?? 8E C0 50 B9 ?? ?? 33 FF 57 BE ?? ?? FC F3 A5 CB B4 09 BA ?? ?? CD 21 CD 20\nep_only = true\n\n[PKLITE v1.12, v1.15, v1.20 (2)]\nsignature = B8 ?? ?? BA ?? ?? 3B C4 73\nep_only = true\n\n[PKLITE v1.14, v1.15, v1.20 (3)]\nsignature = B8 ?? ?? BA ?? ?? 05 ?? ?? 3B ?? ?? ?? 72 ?? B4 09 BA ?? 01 CD 21 CD 20 4E 6F\nep_only = true\n\n[PKLITE v1.14, v1.20]\nsignature = B8 ?? ?? BA ?? ?? 05 ?? ?? 3B 06 ?? ?? 72 ?? B4 09 BA ?? ?? CD 21 CD 20\nep_only = true\n\n[PKLITE v1.20]\nsignature = B8 ?? ?? BA ?? ?? 05 ?? ?? 3B 06 ?? ?? 72 ?? B4 09 BA ?? ?? CD 21 B4 4C CD 21\nep_only = true\n\n[PKLITE v1.50 (1)]\nsignature = 50 B8 ?? ?? BA ?? ?? 05 ?? ?? 3B 06 ?? ?? 72 ?? B4 ?? BA ?? ?? CD 21 B8 ?? ?? CD 21\nep_only = true\n\n[PKLITE v1.50 (Device driver compression)]\nsignature = B4 09 BA 14 01 CD 21 B8 00 4C CD 21 F8 9C 50 53 51 52 56 57 55 1E 06 BB\nep_only = true\n\n[PKLITE v2.00b]\nsignature = 50 B8 ?? ?? BA ?? ?? 05 ?? ?? 3B 06 02 00 72 ?? B4 09 BA ?? ?? CD 21 B8 01 4C CD 21 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 59 2D ?? ?? 8E D0 51 2D ?? ?? 8E C0 50 B9\nep_only = true\n\n[PKLITE v2.00b [extra]]\nsignature = 50 B8 ?? ?? BA ?? ?? 05 ?? ?? 3B 06 02 00 72 ?? B4 09 BA ?? ?? CD 21 B8 01 4C CD 21 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? EA ?? ?? ?? ?? F3 A5 C3 59 2D ?? ?? 8E D0 51 2D ?? ?? 50 80\nep_only = true\n\n[PKLITE v2.00c]\nsignature = 50 B8 ?? ?? BA ?? ?? 3B C4 73 ?? 8B C4 2D ?? ?? 25 ?? ?? 8B F8 B9 ?? ?? BE ?? ?? FC\nep_only = true\n\n[PKLITE32 1.1]\nsignature = 50 4B 4C 49 54 45 33 32 20 43 6F 70 79 72 69 67 68 74 20 31\nep_only = true\n\n[PKLITE32 1.1 -> PKWARE Inc.]\nsignature = 68 ?? ?? ?? 00 68 ?? ?? ?? 00 68 00 00 00 00 E8 ?? ?? ?? ?? E9\nep_only = true\n\n[PKLITE32 v1.1]\nsignature = 55 8B EC A1 ?? ?? ?? ?? 85 C0 74 09 B8 01 00 00 00 5D C2 0C 00 8B 45 0C 57 56 53 8B 5D 10\nep_only = true\n\n[PKLITE32 v1.1]\nsignature = 55 8B EC A1 ?? ?? ?? ?? 85 C0 74 09 B8 01 ?? ?? ?? 5D C2 0C ?? 8B 45 0C 57 56 53 8B 5D 10\nep_only = false\n\n[PKLITE32 v1.1]\nsignature = 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 00 00 00 00 E8\nep_only = true\n\n[PKLITE32 v1.1]\nsignature = 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? B8 ?? ?? ?? ?? 2B 44 24 0C 50\nep_only = true\n\n[PKLITE32 v1.1]\nsignature = ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 50 4B 4C 49 54 45 33 32 20 43 6F 70 79 72 69 67 68 74 20 31\nep_only = true\n\n[Pksmart 1.0b]\nsignature = BA ?? ?? 8C C8 8B C8 03 C2 81 ?? ?? ?? 51 B9 ?? ?? 51 1E 8C D3\nep_only = true\n\n[PKTINY v1.0 with TINYPROG v3.8]\nsignature = 2E C6 06 ?? ?? ?? 2E C6 06 ?? ?? ?? 2E C6 06 ?? ?? ?? E9 ?? ?? E8 ?? ?? 83\nep_only = true\n\n[PKZIP-SFX v1.1 1989-90]\nsignature = FC 2E 8C 0E ?? ?? A1 ?? ?? 8C CB 81 C3 ?? ?? 3B C3 72 ?? 2D ?? ?? 2D ?? ?? FA BC ?? ?? 8E D0 FB\nep_only = true\n\n[PLINK86 1984, 1985]\nsignature = FA 8C C7 8C D6 8B CC BA ?? ?? 8E C2 26\nep_only = true\n\n[PluginToExe v1.00 -> BoB / BobSoft]\nsignature = E8 00 00 00 00 29 C0 5D 81 ED D1 40 40 00 50 FF 95 B8 40 40 00 89 85 09 40 40 00 FF 95 B4 40 40 00 89 85 11 40 40 00 50 FF 95 C0 40 40 00 8A 08 80 F9 22 75 07 50 FF 95 C4 40 40 00 89 85 0D 40 40 00 8B 9D 09 40 40 00 60 6A 00 6A 01 53 81 C3 ?? ?? ?? 00 FF D3 61 6A 00 68 44 69 45 50 FF B5 0D 40 40 00 6A 00 81 C3 ?? ?? ?? 00 FF D3 83 C4 10 FF 95 B0 40 40 00\nep_only = true\n\n[PluginToExe v1.01 -> BoB / BobSoft]\nsignature = E8 00 00 00 00 29 C0 5D 81 ED C6 41 40 00 50 8F 85 71 40 40 00 50 FF 95 A5 41 40 00 89 85 6D 40 40 00 FF 95 A1 41 40 00 50 FF 95 B5 41 40 00 80 38 00 74 16 8A 08 80 F9 22 75 07 50 FF 95 B9 41 40 00 89 85 75 40 40 00 EB 6C 6A 01 8F 85 71 40 40 00 6A 58 6A 40 FF 95 A9 41 40 00 89 85 69 40 40 00 89 C7 68 00 08 00 00 6A 40 FF 95 A9 41 40 00 89 47 1C C7 07 58 00 00 00 C7 47 20 00 08 00 00 C7 47 18 01 00 00 00 C7 47 34 04 10 88 00 8D 8D B9 40 40 00 89 4F 0C 8D 8D DB 40 40 00 89 4F 30 FF B5 69 40 40 00 FF 95 95 41 40 00 FF 77 1C 8F 85 75 40 40 00 8B 9D 6D 40 40 00 60 6A 00 6A 01 53 81 C3 ?? ?? ?? 00 FF D3 61 6A 00 68 44 69 45 50 FF B5 75 40 40 00 6A 00 81 C3 ?? ?? 00 00 FF D3 83 C4 10 83 BD 71 40 40 00 00 74 10 FF 77 1C FF 95 AD 41 40 00 57 FF 95 AD 41 40 00 6A 00 FF 95 9D 41 40 00\nep_only = true\n\n[PluginToExe v1.02 -> BoB / BobSoft]\nsignature = E8 00 00 00 00 29 C0 5D 81 ED 32 42 40 00 50 8F 85 DD 40 40 00 50 FF 95 11 42 40 00 89 85 D9 40 40 00 FF 95 0D 42 40 00 50 FF 95 21 42 40 00 80 38 00 74 16 8A 08 80 F9 22 75 07 50 FF 95 25 42 40 00 89 85 E1 40 40 00 EB 6C 6A 01 8F 85 DD 40 40 00 6A 58 6A 40 FF 95 15 42 40 00 89 85 D5 40 40 00 89 C7 68 00 08 00 00 6A 40 FF 95 15 42 40 00 89 47 1C C7 07 58 00\nep_only = true\n\n[PMODE/W v.1.12, 1.16, 1.21, 1.33 DOS extender]\nsignature = FC 16 07 BF ?? ?? 8B F7 57 B9 ?? ?? F3 A5 06 1E 07 1F 5F BE ?? ?? 06 0E A4\nep_only = true\n\n[PocketPC ARM]\nsignature = F0 40 2D E9 00 40 A0 E1 01 50 A0 E1 02 60 A0 E1 03 70 A0 E1 ?? 00 00 EB 07 30 A0 E1 06 20 A0 E1 05 10 A0 E1 04 00 A0 E1 ?? ?? ?? EB F0 40 BD E8 ?? 00 00 EA ?? 40 2D E9 ?? ?? 9F E5 ?? ?? ?? ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? ?? 9F E5 00 ?? ?? ?? ?? 00\nep_only = true\n\n[PocketPC MIB]\nsignature = E8 FF BD 27 14 00 BF AF 18 00 A4 AF 1C 00 A5 AF 20 00 A6 AF 24 00 A7 AF ?? ?? ?? 0C 00 00 00 00 18 00 A4 8F 1C 00 A5 8F 20 00 A6 8F ?? ?? ?? 0C 24 00 A7 8F ?? ?? ?? 0C 25 20 40 00 14 00 BF 8F 08 00 E0 03 18 00 BD 27 ?? FF BD 27 18 00 ?? AF ?? 00\nep_only = true\n\n[PocketPC SHA]\nsignature = 86 2F 96 2F A6 2F B6 2F 22 4F 43 68 53 6B 63 6A 73 69 F0 7F 0B D0 0B 40 09 00 09 D0 B3 65 A3 66 93 67 0B 40 83 64 03 64 04 D0 0B 40 09 00 10 7F 26 4F F6 6B F6 6A F6 69 0B 00 F6 68 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 22 4F F0 7F 0A D0 06 D4 06 D5 0B 40 09\nep_only = true\n\n[Pohernah 1.0.0 - by Kas]\nsignature = 58 60 E8 00 00 00 00 5D 81 ED 20 25 40 00 8B BD 86 25 40 00 8B 8D 8E 25 40 00 6B C0 05 83 F0 04 89 85 92 25 40 00 83 F9 00 74 2D 81 7F 1C AB 00 00 00 75 1E 8B 77 0C 03 B5 8A 25 40 00 31 C0 3B 47 10 74 0E 50 8B 85 92 25 40 00 30 06 58 40 46 EB ED 83 C7 28 49 EB CE 8B 85 82 25 40 00 89 44 24 1C 61 FF E0\nep_only = true\n\n[Pohernah 1.0.1 - by Kas]\nsignature = 60 E8 00 00 00 00 5D 81 ED F1 26 40 00 8B BD 18 28 40 00 8B 8D 20 28 40 00 B8 38 28 40 00 01 E8 80 30 05 83 F9 00 74 71 81 7F 1C AB 00 00 00 75 62 8B 57 0C 03 95 1C 28 40 00 31 C0 51 31 C9 66 B9 FA 00 66 83 F9 00 74 49 8B 57 0C 03 95 1C 28 40 00 8B 85 24 28 40 00 83 F8 02 75 06 81 C2 00 02 00 00 51 8B 4F 10 83 F8 02 75 06 81 E9 00 02 00 00 57 BF C8 00 00 00 89 CE E8 27 00 00 00 89 C1 5F B8 38 28 40 00 01 E8 E8 24 00 00 00 59 49 EB B1 59 83 C7 28 49 EB 8A 8B 85 14 28 40 00 89 44 24 1C 61 FF E0 56 57 4F F7 D7 21 FE 89 F0 5F 5E C3 60 83 F0 05 40 90 48 83 F0 05 89 C6 89 D7 60 E8 0B 00 00 00 61 83 C7 08 83 E9 07 E2 F1 61 C3 57 8B 1F 8B 4F 04 68 B9 79 37 9E 5A 42 89 D0 48 C1 E0 05 BF 20 00 00 00 4A 89 DD C1 E5 04 29 E9 8B 6E 08 31 DD 29 E9 89 DD C1 ED 05 31 C5 29 E9 2B 4E 0C 89 CD C1 E5 04 29 EB 8B 2E 31 CD 29 EB 89 CD C1 ED 05 31 C5 29 EB 2B 5E 04 29 D0 4F 75 C8 5F 89 1F 89 4F 04 C3\nep_only = true\n\n[Pohernah 1.0.2 - by Kas]\nsignature = 60 E8 00 00 00 00 5D 81 ED DE 26 40 00 8B BD 05 28 40 00 8B 8D 0D 28 40 00 B8 25 28 40 00 01 E8 80 30 05 83 F9 00 74 71 81 7F 1C AB 00 00 00 75 62 8B 57 0C 03 95 09 28 40 00 31 C0 51 31 C9 66 B9 F7 00 66 83 F9 00 74 49 8B 57 0C 03 95 09 28 40 00 8B 85 11 28 40 00 83 F8 02 75 06 81 C2 00 02 00 00 51 8B 4F 10 83 F8 02 75 06 81 E9 00 02 00 00 57 BF C8 00 00 00 89 CE E8 27 00 00 00 89 C1 5F B8 25 28 40 00 01 E8 E8 24 00 00 00 59 49 EB B1 59 83 C7 28 49 EB 8A 8B 85 01 28 40 00 89 44 24 1C 61 FF E0 56 57 4F F7 D7 21 FE 89 F0 5F 5E C3 60 83 F0 05 40 90 48 83 F0 05 89 C6 89 D7 60 E8 0B 00 00 00 61 83 C7 08 83 E9 07 E2 F1 61 C3 57 8B 1F 8B 4F 04 68 B9 79 37 9E 5A 42 89 D0 48 C1 E0 05 BF 20 00 00 00 4A 89 DD C1 E5 04 29 E9 8B 6E 08 31 DD 29 E9 89 DD C1 ED 05 31 C5 29 E9 2B 4E 0C 89 CD C1 E5 04 29 EB 8B 2E 31 CD 29 EB 89 CD C1 ED 05 31 C5 29 EB 2B 5E 04 29 D0 4F 75 C8 5F 89 1F 89 4F 04 C3\nep_only = true\n\n[Pohernah 1.0.3 - by Kas]\nsignature = 60 E8 00 00 00 00 5D 81 ED 2A 27 40 00 31 C0 40 83 F0 06 40 3D 40 1F 00 00 75 07 BE 6A 27 40 00 EB 02 EB EB 8B 85 9E 28 40 00 83 F8 01 75 17 31 C0 01 EE 3D 99 00 00 00 74 0C 8B 8D 86 28 40 00 30 0E 40 46 EB ED ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 56 57 4F F7 D7 21 FE 89 F0 5F 5E C3 60 83 F0 05 40 90 48 83 F0 05 89 C6 89 D7 60 E8 0B 00 00 00 61 83 C7 08 83 E9 07 E2 F1 61 C3 57 8B 1F 8B 4F 04 68 B9 79 37 9E 5A 42 89 D0 48 C1 E0 05 BF 20 00 00 00 4A 89 DD C1 E5 04 29 E9 8B 6E 08 31 DD 29 E9 89 DD C1 ED 05 31 C5 29 E9 2B 4E 0C 89 CD C1 E5 04 29 EB 8B 2E 31 CD 29 EB 89 CD C1 ED 05 31 C5 29 EB 2B 5E 04 29 D0 4F 75 C8 5F 89 1F 89 4F 04 C3\nep_only = true\n\n[PolyBox C -> Anskya]\nsignature = 55 8B EC 83 C4 F0 53 56 B8 E4 41 00 10 E8 3A E1 FF FF 33 C0 55 68 11 44 00 10 64 FF 30 64 89 20 EB 08 FC FC FC FC FC FC 27 54 6A 0A 68 20 44 00 10 A1 1C 71 00 10 50 E8 CC E1 ?? ?? ?? ?? 85 DB 0F 84 77 01 00 00 53 A1 1C 71 00 10 50 E8 1E E2 FF FF 8B F0 85 F6 0F 84 61 01 00 00 53 A1 1C 71 00 10 50 E8 E0 E1 FF FF 85 C0 0F 84 4D 01 00 00 50 E8 DA E1 FF FF 8B D8 85 DB 0F 84 3D 01 00 00 56 B8 70 80 00 10 B9 01 00 00 00 8B 15 98 41 00 10 E8 9E DE FF FF 83 C4 04 A1 70 80 00 10 8B CE 8B D3 E8 E1 E1 FF FF 6A 00 6A 00 A1 70 80 00 10 B9 30 44 00 10 8B D6 E8 F8 FD FF FF\nep_only = false\n\n[PolyBox D -> Anskya]\nsignature = 55 8B EC 33 C9 51 51 51 51 51 53 33 C0 55 68 84 2C 40 00 64 FF 30 64 89 20 C6 45 FF 00 B8 B8 46 40 00 BA 24 00 00 00 E8 8C F3 FF FF 6A 24 BA B8 46 40 00 8B 0D B0 46 40 00 A1 94 46 40 00 E8 71 FB FF FF 84 C0 0F 84 6E 01 00 00 8B 1D D0 46 40 00 8B C3 83 C0 24 03 05 D8 46 40 00 3B 05 B4 46 40 00 0F 85 51 01 00 00 8D 45 F4 BA B8 46 40 00 B9 10 00 00 00 E8 A2 EC FF FF 8B 45 F4 BA 9C 2C 40 00 E8 F1 ED FF FF\nep_only = false\n\n[PolyCrypt PE - 2.1.4b/2.1.5 -> JLab Software Creations (h-oep)]\nsignature = 91 8B F4 AD FE C9 80 34 08 ?? E2 FA C3 60 E8 ED FF FF FF EB\nep_only = false\n\n[PolyCrypt PE - 2.1.4b/2.1.5 -> JLab Software Creations (h-signed)]\nsignature = 50 6F 6C 79 43 72 79 70 74 20 50 45 20 28 63 29 20 32 30 30 34 2D 32 30 30 35 2C 20 4A 4C 61 62 53 6F 66 74 77 61 72 65 2E 00 50 00 43 00 50 00 45\nep_only = false\n\n[PolyCryptor by SMT Version %v3.%v4]\nsignature = EB ?? 28 50 6F 6C 79 53 63 72 79 70 74 20 ?? ?? ?? 20 62 79 20 53 4D 54 29\nep_only = true\n\n[PolyEnE V0.01+ -> Lennart Hedlund]\nsignature = 50 6F 6C 79 45 6E 45 00 4D 65 73 73 61 67 65 42 6F 78 41 00 55 53 45 52 33 32 2E 64 6C 6C\nep_only = false\n\n[PoPa 0.01 (Packer on Pascal) -> bagie]\nsignature = 55 8B EC 83 C4 EC 53 56 57 33 C0 89 45 EC B8 A4 3E 00 10 E8 30 F6 FF FF 33 C0 55 68 BE 40 00 10 ?? ?? ?? ?? 89 20 6A 00 68 80 00 00 00 6A 03 6A 00 6A 01 68 00 00 00 80 8D 55 EC 33 C0 E8 62 E7 FF FF 8B 45 EC E8 32 F2 FF FF 50 E8 B4 F6 FF FF A3 64 66 00 10 33 D2 55 68 93 40 00 10 64 FF 32 64 89 22 83 3D 64 66 00 10 FF 0F 84 3A 01 00 00 6A 00 6A 00 6A 00 A1 64 66 00 10 50 E8 9B F6 FF FF 83 E8 10 50 A1 64 66 00 10 50 E8 BC F6 FF FF 6A 00 68 80 66 00 10 6A 10 68 68 66 00 10 A1 64 66 00 10 50 E8 8B F6 FF FF\nep_only = true\n\n[PPC-PROTECT 1.1X -> Alexey Gorchakov]\nsignature = FF 5F 2D E9 20 00 9F E5 00 00 90 E5 18 00 8F E5 18 00 9F E5 00 00 90 E5 10 00 8F E5 01 00 A0 E3 00 00 00 EB 02 00 00 EA 04 F0 1F E5\nep_only = true\n\n[PrincessSandy v1.0 eMiNENCE Process Patcher Patch]\nsignature = 68 27 11 40 00 E8 3C 01 00 00 6A 00 E8 41 01 00 00 A3 00 20 40 00 8B 58 3C 03 D8 0F B7 43 14 0F B7 4B 06 8D 7C 18 18 81 3F 2E 4C 4F 41 74 0B 83 C7 28 49 75 F2 E9 A7 00 00 00 8B 5F 0C 03 1D 00 20 40 00 89 1D 04 20 40 00 8B FB 83 C7 04 68 4C 20 40 00 68 08\nep_only = false\n\n[Private EXE Protector 1.8]\nsignature = BB DC EE 0D 76 D9 D0 8D 16 85 D8 90 D9 D0\nep_only = false\n\n[Private EXE Protector 1.8 -> SetiSoft]\nsignature = A4 B3 02 E8 6D 00 00 00 73 F6 31 C9 E8 64 00 00 00 73 1C 31 C0 E8 5B 00 00 00 73 23 B3 02 41 B0 10 E8 4F 00 00 00 10 C0 73 F7 75 3F AA EB D4 E8 4D 00 00 00 29 D9 75 10 E8 42 00 00 00 EB 28 AC D1 E8 74 4D 11 C9 EB 1C 91 48 C1 E0 08 AC E8 2C 00 00 00 3D 00 7D 00 00 73 0A 80 FC 05 73 06 83 F8 7F 77 02 41 41 95 89 E8 B3 01 56 89 FE 29 C6 F3 A4 5E EB 8E 00 D2 75 05 8A 16 46 10 D2 C3 31 C9 41 E8 EE FF FF FF 11 C9 E8 E7 FF FF FF 72 F2 C3 31 FF 31 F6 C3\nep_only = false\n\n[Private EXE Protector 1.9.7 -> SetiSoft]\nsignature = 55 8B EC 83 C4 F4 FC 53 57 56 8B 74 24 20 8B 7C 24 24 66 81 3E 4A 43 0F 85 A5 02 00 00 83 C6 0A 33 DB BA 00 00 00 80 C7 44 24 14 08 00 00 00 43 8D A4 24 00 00 00 00 8B FF 03 D2 75 08 8B 16 83 C6 04 F9 13 D2 73 2C 8B 4C 24 10 33 C0 8D A4 24 00 00 00 00 05 00 00 00 00 03 D2 75 08 8B 16 83 C6 04 F9 13 D2 13 C0 49 75 EF 02 44 24 0C 88 07 47 EB C6 03 D2 75 08 8B 16 83 C6 04 F9 13 D2 0F 82 6E 01 00 00 03 D2 75 08 8B 16 83 C6 04 F9 13 D2 0F 83 DC 00 00 00 B9 04 00 00 00 33 C0 8D A4 24 00 00 00 00 8D 64 24 00 03 D2 75 08 8B 16 83 C6 04 F9 13 D2 13 C0 49 75 EF 48 74 B1 0F 89 EF 01 00 00 03 D2 75 08 8B 16 83 C6 04 F9 13 D2 73 42 BD 00 01 00 00 B9 08 00 00 00 33 C0 8D A4 24 00 00 00 00 05 00 00 00 00 03 D2 75 08 8B 16 83 C6 04 F9 13 D2 13 C0 49 75 EF 88 07 47 4D 75 D6\nep_only = false\n\n[Private Exe Protector 1.x -> setisoft]\nsignature = B8 ?? ?? ?? ?? B9 ?? 90 01 ?? BE ?? 10 40 ?? 68 50 91 41 ?? 68 01 ?? ?? ?? C3\nep_only = true\n\n[Private EXE Protector 2.0 -> SetiSoft]\nsignature = 89 ?? ?? 38 00 00 00 8B ?? 00 00 00 00 81 ?? ?? ?? ?? ?? 89 ?? 00 00 00 00 81 ?? 04 00 00 00 81 ?? 04 00 00 00 81 ?? 00 00 00 00 0F 85 D6 FF FF FF\nep_only = false\n\n[Private exe Protector 2.0 -> SetiSoft Team]\nsignature = 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4B 45 52 4E 45 4C 33 32 2E 44 4C 4C 00 ?? ?? ?? ?? 00 00 00 00 00 00\nep_only = false\n\n[Private exe Protector 2.15-2.2X -> SetiSoft Team]\nsignature = 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4B 45 52 4E 45 4C 33 32 2E 44 4C 4C 00 00 00 00 00\nep_only = false\n\n[Private exe Protector V1.8 -> SetiSoft Team]\nsignature = 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4B 45 52 4E 45 4C 33 32 2E 44 4C 4C 00 ?? ?? ?? ?? 00 00 00 00 00 00 45 78 69 74 50 72 6F 63 65 73 73\nep_only = false\n\n[Private EXE v2.0a]\nsignature = 53 E8 00 00 00 00 5B 8B C3 2D\nep_only = true\n\n[Private Personal Packer (PPP) 1.0.2 -> ConquestOfTroy.com]\nsignature = E8 17 00 00 00 E8 68 00 00 00 FF 35 2C 37 00 10 E8 ED 01 00 00 6A 00 E8 2E 04 00 00 E8 41 04 00 00 A3 74 37 00 10 6A 64 E8 5F 04 00 00 E8 30 04 00 00 A3 78 37 00 10 6A 64 E8 4E 04 00 00 E8 1F 04 00 00 A3 7C 37 00 10 A1 74 37 00 10 8B 1D 78 37 00 10 2B D8 8B 0D 7C 37 00 10 2B C8 83 FB 64 73 0F 81 F9 C8 00 00 00 73 07 6A 00 E8 D9 03 00 00 C3 6A 0A 6A 07 6A 00 E8 D3 03 00 00 A3 20 37 00 10 50 6A 00 E8 DE 03 00 00 A3 24 37 00 10 FF 35 20 37 00 10 6A 00 E8 EA 03 00 00 A3 30 37 00 10 FF 35 24 37 00 10 E8 C2 03 00 00 A3 28 37 00 10 8B 0D 30 37 00 10 8B 3D 28 37 00 10 EB 09 49 C0 04 39 55 80 34 39 24 0B C9\nep_only = false\n\n[Private Personal Packer (PPP) 1.0.3 -> ConquestOfTroy.com]\nsignature = E8 19 00 00 00 90 90 E8 68 00 00 00 FF 35 2C 37 00 10 E8 ED 01 00 00 6A 00 E8 2E 04 00 00 E8 41 04 00 00 A3 74 37 00 10 6A 64 E8 5F 04 00 00 E8 30 04 00 00 A3 78 37 00 10 6A 64 E8 4E 04 00 00 E8 1F 04 00 00 A3 7C 37 00 10 A1 74 37 00 10 8B 1D 78 37 00 10 2B D8 8B 0D 7C 37 00 10 2B C8 83 FB 64 73 0F 81 F9 C8 00 00 00 73 07 6A 00 E8 D9 03 00 00 C3 6A 0A 6A 07 6A 00 E8 D3 03 00 00 A3 20 37 00 10 50 6A 00 E8 DE 03 00 00 A3 24 37 00 10 FF 35 20 37 00 10 6A 00 E8 EA 03 00 00 A3 30 37 00 10 FF 35 24 37 00 10 E8 C2 03 00 00 A3 28 37 00 10 8B 0D 30 37 00 10 8B 3D 28 37 00 10 EB 09 49 C0 04 39 55 80 34 39 24 0B C9\nep_only = true\n\n[Private Personal Packer (PPP) v1.0.2 --> ConquestOfTroy.com]\nsignature = E8 17 00 00 00 E8 68 00 00 00 FF 35 2C 37 00 10 E8 ED 01 00 00 6A 00 E8 2E 04 00 00 E8 41 04 00 00 A3 74 37 00 10 6A 64 E8 5F 04 00 00 E8 30 04 00 00 A3 78 37 00 10 6A 64 E8 4E 04 00 00 E8 1F 04 00 00 A3 7C 37 00 10 A1 74 37 00 10 8B 1D 78 37 00 10 2B D8 8B 0D 7C 37 00 10 2B C8 83 FB 64 73 0F 81 F9 C8 00 00 00 73 07 6A 00 E8 D9 03 00 00 C3 6A 0A 6A 07 6A 00\nep_only = true\n\n[PrivateEXE v2.0a]\nsignature = 06 60 C8 ?? ?? ?? 0E 68 ?? ?? 9A ?? ?? ?? ?? 3D ?? ?? 0F ?? ?? ?? 50 50 0E 68 ?? ?? 9A ?? ?? ?? ?? 0E\nep_only = true\n\n[PrivateEXE v2.0a]\nsignature = 53 E8 ?? ?? ?? ?? 5B 8B C3 2D ?? ?? ?? ?? 50 81 ?? ?? ?? ?? ?? 8B\nep_only = true\n\n[PRO-PACK v2.08]\nsignature = 8C D3 8E C3 8C CA 8E DA 8B 0E ?? ?? 8B F1 83 ?? ?? 8B FE D1 ?? FD F3 A5 53\nep_only = true\n\n[PRO-PACK v2.08, emphasis on packed size, locked]\nsignature = 83 EC ?? 8B EC BE ?? ?? FC E8 ?? ?? 05 ?? ?? 8B C8 E8 ?? ?? 8B\nep_only = true\n\n[ProActivate V1.0X -> TurboPower Software Company]\nsignature = 55 8B EC B9 0E 00 00 00 6A 00 6A 00 49 75 F9 51 53 56 57 B8 ?? ?? ?? ?? 90 90 90 90 90 33 C0 55 68 ?? ?? ?? ?? 64 FF 30 64 89 20 A1 ?? ?? ?? ?? 83 C0 05 A3 ?? ?? ?? ?? C7 05 ?? ?? ?? ?? 0D 00 00 00 E8 85 E2 FF FF 81 3D ?? ?? ?? ?? 21 7E 7E 40 75 7A 81 3D ?? ?? ?? ?? 43 52 43 33 75 6E 81 3D ?? ?? ?? ?? 32 40 7E 7E 75 62 81 3D ?? ?? ?? ?? 21 7E 7E 40 75 56 81 3D ?? ?? ?? ?? 43 52 43 33 75 4A 81 3D ?? ?? ?? ?? 32 40 7E 7E 75 3E 81 3D ?? ?? ?? ?? 21 7E 7E 40 75 32 81 3D ?? ?? ?? ?? 43 52 43 33\nep_only = true\n\n[Program Protector XP v1.0]\nsignature = E8 ?? ?? ?? ?? 58 83 D8 05 89 C3 81 C3 ?? ?? ?? ?? 8B 43 64 50\nep_only = true\n\n[Protect Shareware V1.1 -> eCompserv CMS]\nsignature = 53 00 74 00 72 00 69 00 6E 00 67 00 46 00 69 00 6C 00 65 00 49 00 6E 00 66 00 6F 00 00 00 ?? 01 00 00 01 00 30 00 34 00 30 00 39 00 30 00 34 00 42 00 30 00 00 00 34 00 ?? 00 01 00 43 00 6F 00 6D 00 70 00 61 00 6E 00 79 00 4E 00 61 00 6D 00 65 00 00 00 00\nep_only = false\n\n[PROTECT! EXE/COM v6.0]\nsignature = 1E B4 30 CD 21 3C 02 73 ?? CD 20 BE ?? ?? E8\nep_only = true\n\n[Protection Plus vx.x]\nsignature = 50 60 29 C0 64 FF 30 E8 ?? ?? ?? ?? 5D 83 ED 3C 89 E8 89 A5 14 ?? ?? ?? 2B 85 1C ?? ?? ?? 89 85 1C ?? ?? ?? 8D 85 27 03 ?? ?? 50 8B ?? 85 C0 0F 85 C0 ?? ?? ?? 8D BD 5B 03 ?? ?? 8D B5 43 03 ?? ?? E8 DD ?? ?? ?? 89 85 1F 03 ?? ?? 6A 40 68 ?? 10 ?? ?? 8B 85\nep_only = true\n\n[pscrambler 1.2 -> by p0ke]\nsignature = 55 8B EC B9 04 00 00 00 6A 00 6A 00 49 75 F9 51 53 ?? ?? ?? ?? 10 E8 2D F3 FF FF 33 C0 55 68 E8 31 00 10 64 FF 30 64 89 20 8D 45 E0 E8 53 F5 FF FF 8B 45 E0 8D 55 E4 E8 30 F6 FF FF 8B 45 E4 8D 55 E8 E8 A9 F4 FF FF 8B 45 E8 8D 55 EC E8 EE F7 FF FF 8B 55 EC B8 C4 54 00 10 E8 D9 EC FF FF 83 3D C4 54 00 10 00 0F 84 05 01 00 00 80 3D A0 40 00 10 00 74 41 A1 C4 54 00 10 E8 D9 ED FF FF E8 48 E0 FF FF 8B D8 A1 C4 54 00 10 E8 C8 ED FF FF 50 B8 C4 54 00 10 E8 65 EF FF FF 8B D3 59 E8 69 E1 FF FF 8B C3 E8 12 FA FF FF 8B C3 E8 33 E0 FF FF E9 AD 00 00 00 B8 05 01 00 00 E8 0C E0 FF FF 8B D8 53 68 05 01 00 00 E8 57 F3 FF FF 8D 45 DC 8B D3 E8 39 ED FF FF 8B 55 DC B8 14 56 00 10 B9 00 32 00 10 E8 BB ED FF FF 8B 15 14 56 00 10 B8 C8 54 00 10 E8 53 E5 FF FF BA 01 00 00 00 B8 C8 54 00 10 E8 8C E8 FF FF E8 DF E0 FF FF 85 C0 75 52 6A 00 A1 C4 54 00 10 E8 3B ED FF FF 50 B8 C4 54 00 10 E8 D8 EE FF FF 8B D0 B8 C8 54 00 10 59 E8 3B E6 FF FF E8 76 E0 FF FF B8 C8 54 00 10 E8 4C E6 FF FF E8 67 E0 FF FF 6A 00 6A 00 6A 00 A1 14 56 00 10 E8 53 EE FF FF 50 6A 00 6A 00 E8 41 F3 FF FF 80 3D 9C 40 00 10 00 74 05 E8 EF FB FF FF 33 C0 5A 59 59 64 89 10 68 EF 31 00 10 8D 45 DC BA 05 00 00 00 E8 7D EB FF FF C3 E9 23 E9 FF FF EB EB 5B E8 63 EA FF FF 00 00 00 FF FF FF FF 08 00 00 00 74 65 6D 70 2E 65 78 65\nep_only = true\n\n[PUNiSHER v1.5 (DEMO) -> FEUERRADER/AHTeam]\nsignature = EB 04 83 A4 BC CE 60 EB 04 80 BC 04 11 E8 00 00 00 00 81 2C 24 CA C2 41 00 EB 04 64 6B 88 18 5D E8 00 00 00 00 EB 04 64 6B 88 18 81 2C 24 86 00 00 00 EB 04 64 6B 88 18 8B 85 9C C2 41 00 EB 04 64 6B 88 18 29 04 24 EB 04 64 6B 88 18 EB 04 64 6B 88 18 8B 04\nep_only = true\n\n[PUNiSHER v1.5 (DEMO) -> FEUERRADER/AHTeam]\nsignature = EB 04 83 A4 BC CE 60 EB 04 80 BC 04 11 E8 00 00 00 00 81 2C 24 CA C2 41 00 EB 04 64 6B 88 18 5D E8 00 00 00 00 EB 04 64 6B 88 18 81 2C 24 86 00 00 00 EB 04 64 6B 88 18 8B 85 9C C2 41 00 EB 04 64 6B 88 18 29 04 24 EB 04 64 6B 88 18 EB 04 64 6B 88 18 8B 04 24 EB 04 64 6B 88 18 89 85 9C C2 41 00 EB 04 64 6B 88 18 58 68 9F 6F 56 B6 50 E8 5D 00 00 00 EB FF 71 78 C2 50 00 EB D3 5B F3 68 89 5C 24 48 5C 24 58 FF 8D 5C 24 58 5B 83 C3 4C 75 F4 5A 8D 71 78 75 09 81 F3 EB FF 52 BA 01 00 83 EB FC 4A FF 71 0F 75 19 8B 5C 24 00 00 81 33 50 53 8B 1B 0F FF C6 75 1B 81 F3 EB 87 1C 24 8B 8B 04 24 83 EC FC EB 01 E8 83 EC FC E9 E7 00 00 00 58 EB FF F0 EB FF C0 83 E8 FD EB FF 30 E8 C9 00 00 00 89 E0 EB FF D0 EB FF 71 0F 83 C0 01 EB FF 70 F0 71 EE EB FA EB 83 C0 14 EB FF 70 ED\nep_only = true\n\n[PUNiSHER V1.5 Demo-> FEUERRADER]\nsignature = EB 04 83 A4 BC CE 60 EB 04 80 BC 04 11 E8 00 00 00 00\nep_only = true\n\n[PUNiSHER V1.5-> FEUERRADER]\nsignature = 3F 00 00 80 66 20 ?? 00 7E 20 ?? 00 92 20 ?? 00 A4 20 ?? 00 00 00 00 00 4B 45 52 4E 45 4C 33 32\nep_only = false\n\n[PuNkMoD 1.x -> PuNkDuDe]\nsignature = 94 B9 ?? ?? 00 00 BC ?? ?? ?? ?? 80 34 0C\nep_only = false\n\n[PureBasic 4.x -> Neil Hodgson]\nsignature = 68 ?? ?? 00 00 68 00 00 00 00 68 ?? ?? ?? 00 E8 ?? ?? ?? 00 83 C4 0C 68 00 00 00 00 E8 ?? ?? ?? 00 A3 ?? ?? ?? 00 68 00 00 00 00 68 00 10 00 00 68 00 00 00 00 E8 ?? ?? ?? 00 A3\nep_only = true\n\n[PureBasic 4.x DLL -> Neil Hodgson]\nsignature = 83 7C 24 08 01 75 0E 8B 44 24 04 A3 ?? ?? ?? 10 E8 22 00 00 00 83 7C 24 08 02 75 00 83 7C 24 08 00 75 05 E8 ?? 00 00 00 83 7C 24 08 03 75 00 B8 01 00 00 00 C2 0C 00 68 00 00 00 00 68 00 10 00 00 68 00 00 00 00 E8 ?? 0F 00 00 A3\nep_only = true\n\n[PureBasic DLL -> Neil Hodgson]\nsignature = 83 7C 24 08 01 75 ?? 8B 44 24 04 A3 ?? ?? ?? 10 E8\nep_only = true\n\n[QrYPt0r - by NuTraL]\nsignature = 80 F9 00 0F 84 8D 01 00 00 8A C3 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 32 C1 3C F3 75 89 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? BA D9 04 00 00 E8 00 00 00 00 5F 81 C7 16 01 00 00 80 2C 3A 01\nep_only = false\n\n[QrYPt0r - by NuTraL]\nsignature = 86 18 CC 64 FF 35 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 64 89 25 00 00 00 00 BB 00 00 F7 BF ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? B8 78 56 34 12 87 03 E8 CD FE FF FF E8 B3\nep_only = false\n\n[QrYPt0r - by NuTraL]\nsignature = EB 00 E8 B5 00 00 00 E9 2E 01 00 00 64 FF 35 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 64 89 25 00 00 00 00 8B 44 24 04\nep_only = true\n\n[R!SC's Process Patcher v1.4]\nsignature = E8 E1 01 00 00 80 38 22 75 13 80 38 00 74 2E 80 38 20 75 06 80 78 FF 22 74 18 40 EB ED 80 38 00 74 1B EB 19 40 80 78 FF 20 75 F9 80 38 00 74 0D EB 0B 40 80 38 00 74 05 80 38 22 74 00 8B F8 B8 04 60 40 00 68 00 20 40 00 C7 05 A2 20 40 00 44 00 00 00 68 92\nep_only = false\n\n[R!SC's Process Patcher v1.5.1]\nsignature = 68 00 20 40 00 E8 C3 01 00 00 80 38 00 74 0D 66 81 78 FE 22 20 75 02 EB 03 40 EB EE 8B F8 B8 04 60 40 00 68 C4 20 40 00 68 D4 20 40 00 6A 00 6A 00 6A 04 6A 00 6A 00 6A 00 57 50 E8 9F 01 00 00 85 C0 0F 84 39 01 00 00 BE 00 60 40 00 8B 06 A3 28 21 40 00 83\nep_only = false\n\n[RatPacker (Glue) stub]\nsignature = 40 20 FF 00 00 00 00 00 00 00 ?? BE 00 60 40 00 8D BE 00 B0 FF FF\nep_only = true\n\n[RAZOR 1911 encruptor]\nsignature = E8 ?? ?? BF ?? ?? 3B FC 72 ?? B4 4C CD 21 BE ?? ?? B9 ?? ?? FD F3 A5 FC\nep_only = true\n\n[RCryptor 1.5 -> Vaska]\nsignature = 83 2C 24 4F 68 ?? ?? ?? ?? FF 54 24 04 83 44 24 04 4F B8 ?? ?? ?? ?? 3D ?? ?? ?? ?? 74 06 80 30 ?? ?? EB F3 B8 ?? ?? ?? ?? 3D ?? ?? ?? ?? 74 06 80 30 ?? 40 EB F3\nep_only = true\n\n[RCryptor 1.6c -> Vaska]\nsignature = 8B C7 03 04 24 2B C7 80 38 50 0F 85 1B 8B 1F FF 68 ?? ?? ?? ?? B8 ?? ?? ?? ?? 3D ?? ?? ?? ?? 74 06 80 30 ?? 40 EB F3 B8 ?? ?? ?? ?? 3D ?? ?? ?? ?? 74 06 80 30 ?? 40 EB F3\nep_only = true\n\n[RCryptor 2.0 -> Vaska]\nsignature = F7 D1 83 F1 FF 6A 00 F7 D1 83 F1 FF 81 04 24 ?? ?? ?? ?? F7 D1 83 F1 FF\nep_only = true\n\n[RCryptor v1.1 --> Vaska]\nsignature = 8B 04 24 83 E8 4F 68 ?? ?? ?? ?? FF D0\nep_only = false\n\n[RCryptor v1.1 --> Vaska]\nsignature = 8B 04 24 83 E8 4F 68 ?? ?? ?? ?? FF D0 B8 ?? ?? ?? ?? 3D ?? ?? ?? ?? 74 06 80 30 ?? 40 EB F3\nep_only = false\n\n[RCryptor v1.3 / v1.4 --> Vaska]\nsignature = 55 8B EC 8B 44 24 04 83 E8 4F 68 ?? ?? ?? ?? FF D0 58 59 50\nep_only = true\n\n[RCryptor v1.3 / v1.4 --> Vaska]\nsignature = 55 8B EC 8B 44 24 04 83 E8 4F 68 ?? ?? ?? ?? FF D0 58 59 50 B8 ?? ?? ?? ?? 3D ?? ?? ?? ?? 74 06 80 30 ?? 40 EB F3\nep_only = true\n\n[RCryptor v1.3b --> Vaska]\nsignature = 61 83 EF 4F 60 68 ?? ?? ?? ?? FF D7\nep_only = true\n\n[RCryptor v1.3b --> Vaska]\nsignature = 61 83 EF 4F 60 68 ?? ?? ?? ?? FF D7 B8 ?? ?? ?? ?? 3D ?? ?? ?? ?? 74 06 80 30 ?? 40 EB F3\nep_only = true\n\n[RCryptor v1.5 (Private) --> Vaska]\nsignature = 83 2C 24 4F 68 ?? ?? ?? ?? FF 54 24 04 83 44 24 04 4F B8 ?? ?? ?? ?? 3D ?? ?? ?? ?? 74 06 80 30 ?? 40 EB F3\nep_only = true\n\n[RCryptor v1.5 --> Vaska]\nsignature = 83 2C 24 4F 68 ?? ?? ?? ?? FF 54 24 04 83 44 24 04 4F\nep_only = true\n\n[RCryptor v1.6 -> Vaska]\nsignature = 33 D0 68 ?? ?? ?? ?? FF D2\nep_only = true\n\n[RCryptor v1.6 -> Vaska]\nsignature = 33 D0 68 ?? ?? ?? ?? FF D2 B8 ?? ?? ?? ?? 3D ?? ?? ?? ?? 74 06 80 30 ?? 40 EB F3\nep_only = true\n\n[RCryptor v1.6b / v1.6c --> Vaska]\nsignature = 8B C7 03 04 24 2B C7 80 38 50 0F 85 1B 8B 1F FF 68\nep_only = true\n\n[RCryptor v1.6b / v1.6c --> Vaska]\nsignature = 8B C7 03 04 24 2B C7 80 38 50 0F 85 1B 8B 1F FF 68 ?? ?? ?? ?? B8 ?? ?? ?? ?? 3D ?? ?? ?? ?? 74 06 80 30 ?? 40 EB F3\nep_only = true\n\n[RCryptor v1.6d --> Vaska]\nsignature = 60 90 61 61 80 7F F0 45 90 60 0F 85 1B 8B 1F FF 68\nep_only = true\n\n[RCryptor v1.6d --> Vaska]\nsignature = 60 90 61 61 80 7F F0 45 90 60 0F 85 1B 8B 1F FF 68 ?? ?? ?? ?? B8 ?? ?? ?? ?? 90 3D ?? ?? ?? ?? 74 06 80 30 ?? 40 EB F3\nep_only = false\n\n[RCryptor V1.6d -> Vaska]\nsignature = 60 90 61 61 80 7F F0 45 90 60 0F 85 1B 8B 1F FF 68 ?? ?? ?? ?? B8 ?? ?? ?? ?? 90 3D ?? ?? ?? ?? 74 06 80 30 ?? 40 EB F3 B8 ?? ?? ?? ?? 90 3D ?? ?? ?? ?? 74 06 80 30 ?? 40 EB F3\nep_only = true\n\n[RCryptor v1.6x --> Vaska]\nsignature = 60 90 61 61 80 7F F0 45 90 60 0F 85 1B 8B 1F FF 68 ?? ?? ?? ?? C3\nep_only = true\n\n[RCryptor v1.?? -> Vaska]\nsignature = 90 58 90 50 90 8B 00 90 3C 50 90 58 0F 85 67 D6 EF 11 50 68\nep_only = true\n\n[RCryptor v1.?? -> Vaska]\nsignature = 90 58 90 50 90 8B 00 90 3C 50 90 58 0F 85 67 D6 EF 11 50 68 ?? ?? ?? ?? B8 ?? ?? ?? ?? 3D ?? ?? ?? ?? 74 06 80 30 ?? 40 EB F3\nep_only = true\n\n[RCryptor v2.0 (Hide EP) --> Vaska]\nsignature = F7 D1 83 F1 FF 6A 00 F7 D1 83 F1 FF 81 04 24 DC 20 ?? 00 F7 D1 83 F1 FF E8 00 00 00 00 F7 D1 83 F1 FF C3\nep_only = true\n\n[RCryptor v2.0 --> Vaska]\nsignature = F7 D1 83 F1 FF 6A 00 F7 D1 83 F1 FF 81 04 24 ?? 02 00 00 F7 D1 83 F1 FF 59 BA 32 21 ?? 00 F7 D1 83 F1 FF F7 D1 83 F1 FF 80 02 E3 F7 D1 83 F1 FF C0 0A 05 F7 D1 83 F1 FF 80 02 6F F7 D1 83 F1 FF 80 32 A4 F7 D1 83 F1 FF 80 02 2D F7 D1 83 F1 FF 42 49 85 C9 75 CD 1C 4F 8D 5B FD 62 1E 1C 4F 8D 5B FD 4D 9D B9 ?? ?? ?? 1E 1C 4F 8D 5B FD 22 1C 4F 8D 5B FD 8E A2 B9 B9 E2 83 DB E2 E5 4D CD 1E BF 60 AB 1F 4D DB 1E 1E 3D 1E 92 1B 8E DC 7D EC A4 E2 4D E5 20 C6 CC B2 8E EC 2D 7D DC 1C 4F 8D 5B FD 83 56 8E E0 3A 7D D0 8E 9D 6E 7D D6 4D 25 06 C2 AB 20 CC 3A 4D 2D 9D 6B 0B 81 45 CC 18 4D 2D 1F A1 A1 6B C2 CC F7 E2 4D 2D 9E 8B 8B CC DE 2E 2D F7 1E AB 7D 45 92 30 8E E6 B9 7D D6 8E 9D 27 DA FD FD 1E 1E 8E DF B8 7D CF 8E A3 4D 7D DC 1C 4F 8D 5B FD 33 D7 1E 1E 1E A6 0B 41 A1 A6 42 61 6B 41 6B 4C 45 1E 21 F6 26 BC E2 62 1E 62 1E 62 1E 23 63 59 ?? 1E 62 1E 62 1E 33 D7 1E 1E 1E 85 6B C2 41 AB C2 9F 23 6B C2 41 A1 1E C0 FD F0 FD 30 20 33 9E 1E 1E 1E 85 A2 0B 8B C2 27 41 EB A1 A2 C2 1E C0 FD F0 FD 30 62 1E 33 7E 1E 1E 1E C6 2D 42 AB 9F 23 6B C2 41 A1 1E C0 FD F0 FD 30 C0 FD F0 8E 1D 1C 4F 8D 5B FD E0 00 33 5E 1E 1E 1E BF 0B EC C2 E6 42 A2 C2 45 1E C0 FD F0 FD 30 CE 36 CC F2 1C 4F 8D 5B FD\nep_only = true\n\n[RE-Crypt v0.7x -> Crudd [RET] (h1)]\nsignature = 60 E8 00 00 00 00 5D 81 ED F3 1D 40 00 B9 7B 09 00 00 8D BD 3B 1E 40 00 8B F7 61 60 E8 00 00 00 00 5D 55 81 04 24 0A 00 00 00 C3 8B F5 81 C5 ?? ?? 00 00 89 6D 34 89 75 38 8B 7D 38 81 E7 00 FF FF FF 81 C7 48 00 00 00 47 03 7D 60 8B 4D 5C 83 F9 00 7E 0F 8B\nep_only = true\n\n[RE-Crypt v0.7x -> Crudd [RET] (h2)]\nsignature = 60 E8 00 00 00 00 5D 55 81 04 24 0A 00 00 00 C3 8B F5 81 C5 ?? ?? 00 00 89 6D 34 89 75 38 8B 7D 38 81 E7 00 FF FF FF 81 C7 48 00 00 00 47 03 7D 60 8B 4D 5C 83 F9 00 7E 0F 8B 17 33 55 58 89 17 83 C7 04 83 C1 FC EB EC 8B\nep_only = true\n\n[Reflexive Arcade Wrapper]\nsignature = 55 8B EC 6A FF 68 98 68 42 00 68 14 FA 41 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8 FF 15 F8 50 42 00 33 D2 8A D4 89 15 3C E8 42 00 8B C8 81 E1 FF 00 00 00 89 0D 38 E8 42 00 C1 E1 08 03 CA 89 0D 34 E8 42 00 C1 E8 10 A3 30 E8\nep_only = true\n\n[Reg2Exe 2.20/2.21 - by Jan Vorel]\nsignature = 6A 00 E8 7D 12 00 00 A3 A0 44 40 00 E8 79 12 00 00 6A 0A 50 6A 00 FF 35 A0 44 40 00 E8 0F 00 00 00 50 E8 69 12 00 00 CC CC CC CC CC CC CC CC CC 68 2C 02 00 00 68 00 00 00 00 68 B0 44 40 00 E8 3A 12 00 00 83 C4 0C 8B 44 24 04 A3 B8 44 40 00 68 00 00 00 00 68 A0 0F 00 00 68 00 00 00 00 E8 32 12 00 00 A3 B0 44 40 00 68 F4 01 00 00 68 BC 44 40 00 FF 35 B8 44 40 00 E8 1E 12 00 00 B8 BC 44 40 00 89 C1 8A 30 40 80 FE 5C 75 02 89 C1 80 FE 00 75 F1 C6 01 00 E8 EC 18 00 00 E8 28 16 00 00 E8 4A 12 00 00 68 00 FA 00 00 68 08 00 00 00 FF 35 B0 44 40 00 E8 E7 11 00 00 A3 B4 44 40 00 8B 15 D4 46 40 00 E8 65 0A 00 00 BB 00 00 10 00 B8 01 00 00 00 E8 72 0A 00 00 74 09 C7 00 01 00 00 00 83 C0 04 A3 D4 46 40 00 FF 35 B4 44 40 00 E8 26 05 00 00 8D 0D B8 46 40 00 5A E8 CF 0F 00 00 FF 35 B4 44 40 00 FF 35 B8 46 40 00 E8 EE 06 00 00 8D 0D B4 46 40 00 5A E8\nep_only = true\n\n[Reg2Exe 2.22/2.23 - by Jan Vorel]\nsignature = 6A 00 E8 2F 1E 00 00 A3 C4 35 40 00 E8 2B 1E 00 00 6A 0A 50 6A 00 FF 35 C4 35 40 00 E8 07 00 00 00 50 E8 1B 1E 00 00 CC 68 48 00 00 00 68 00 00 00 00 68 C8 35 40 00 E8 76 16 00 00 83 C4 0C 8B 44 24 04 A3 CC 35 40 00 68 00 00 00 00 68 A0 0F 00 00 68 00 00 00 00 E8 EC 1D 00 00 A3 C8 35 40 00 E8 62 1D 00 00 E8 92 1A 00 00 E8 80 16 00 00 E8 13 14 00 00 68 01 00 00 00 68 08 36 40 00 68 00 00 00 00 8B 15 08 36 40 00 E8 71 3F 00 00 B8 00 00 10 00 BB 01 00 00 00 E8 82 3F 00 00 FF 35 48 31 40 00 B8 00 01 00 00 E8 0D 13 00 00 8D 0D EC 35 40 00 5A E8 F2 13 00 00 68 00 01 00 00 FF 35 EC 35 40 00 E8 84 1D 00 00 A3 F4 35 40 00 FF 35 48 31 40 00 FF 35 F4 35 40 00 FF 35 EC 35 40 00 E8\nep_only = true\n\n[Reg2Exe 2.24 - by Jan Vorel]\nsignature = 6A 00 E8 CF 20 00 00 A3 F4 45 40 00 E8 CB 20 00 00 6A 0A 50 6A 00 FF 35 F4 45 40 00 E8 07 00 00 00 50 E8 BB 20 00 00 CC 68 48 00 00 00 68 00 00 00 00 68 F8 45 40 00 E8 06 19 00 00 83 C4 0C 8B 44 24 04 A3 FC 45 40 00 68 00 00 00 00 68 A0 0F 00 00 68 00 00 00 00 E8 8C 20 00 00 A3 F8 45 40 00 E8 02 20 00 00 E8 32 1D 00 00 E8 20 19 00 00 E8 A3 16 00 00 68 01 00 00 00 68 38 46 40 00 68 00 00 00 00 8B 15 38 46 40 00 E8 71 4F 00 00 B8 00 00 10 00 BB 01 00 00 00 E8 82 4F 00 00 FF 35 48 41 40 00 B8 00 01 00 00 E8 9D 15 00 00 8D 0D 1C 46 40 00 5A E8 82 16 00 00 68 00 01 00 00 FF 35 1C 46 40 00 E8 24 20 00 00 A3 24 46 40 00 FF 35 48 41 40 00 FF 35 24 46 40 00 FF 35 1C 46 40 00 E8 DC 10 00 00 8D 0D 14 46 40 00 5A E8 4A 16\nep_only = true\n\n[Reg2Exe 2.25 - by Jan Vorel]\nsignature = 68 68 00 00 00 68 00 00 00 00 68 70 7D 40 00 E8 AE 20 00 00 83 C4 0C 68 00 00 00 00 E8 AF 52 00 00 A3 74 7D 40 00 68 00 00 00 00 68 00 10 00 00 68 00 00 00 00 E8 9C 52 00 00 A3 70 7D 40 00 E8 24 50 00 00 E8 E2 48 00 00 E8 44 34 00 00 E8 54 28 00 00 E8 98 27 00 00 E8 93 20 00 00 68 01 00 00 00 68 D0 7D 40 00 68 00 00 00 00 8B 15 D0 7D 40 00 E8 89 8F 00 00 B8 00 00 10 00 68 01 00 00 00 E8 9A 8F 00 00 FF 35 A4 7F 40 00 68 00 01 00 00 E8 3A 23 00 00 8D 0D A8 7D 40 00 5A E8 5E 1F 00 00 FF 35 A8 7D 40 00 68 00 01 00 00 E8 2A 52 00 00 A3 B4 7D 40 00 FF 35 A4 7F 40 00 FF 35 B4 7D 40 00 FF 35 A8 7D 40 00 E8 5C 0C 00 00 8D 0D A0 7D 40 00 5A E8 26 1F 00 00 FF 35\nep_only = true\n\n[ReversingLabsProtector 0.7.4 beta -> Ap0x]\nsignature = 68 00 00 41 00 E8 01 00 00 00 C3 C3\nep_only = true\n\n[RJcrush v1.00]\nsignature = 06 FC 8C C8 BA ?? ?? 03 D0 52 BA ?? ?? 52 BA ?? ?? 03 C2 8B D8 05 ?? ?? 8E DB 8E C0 33 F6 33 FF B9\nep_only = true\n\n[RJoiner 1.2 by Vaska (25.03.2007 16:58)]\nsignature = 55 8B EC 81 EC 0C 02 00 00 8D 85 F4 FD FF FF 56 50 68 04 01 00 00 FF 15 14 10 40 00 90 8D 85 F4 FD FF FF 50 FF 15 10 10 40 00 90 BE 00 20 40 00 90 83 3E FF 0F 84 84 00 00 00 53 57 33 FF 8D 46\nep_only = true\n\n[RJoiner 1.2a -> Vaska]\nsignature = 55 8B EC 81 EC 0C 01 00 00 8D 85 F4 FE FF FF 56 50 68 04 01 00 00 FF 15 0C 10 40 00 94 90 94 8D 85 F4 FE FF FF 50 FF 15 08 10 40 00 94 90 94 BE 00 20 40 00 94 90 94 83 3E FF 74 7D 53 57 33 DB 8D 7E 04 94 90 94 53 68 80 00 00 00 6A 02 53 6A 01 68 00 00 00 C0 57 FF 15 04 10 40 00 89 45 F8 94 90 94 8B 06 8D 74 06 04 94 90 94 8D 45 FC 53 50 8D 46 04 FF 36 50 FF 75 F8 FF 15 00 10 40 00 94 90 94 FF 75 F8 FF 15 10 10 40 00 94 90 94 8D 85 F4 FE FF FF 6A 0A 50 53 57 68 20 10 40 00 53 FF 15 18 10 40 00 94 90 94 8B 06 8D 74 06 04 94 90 94 83 3E FF 75 89 5F 5B 33 C0 5E C9 C2 10 00 CC CC 24 11\nep_only = false\n\n[RJoiner by Vaska (Sign from pinch 25.03.2007 17:00)]\nsignature = E8 03 FD FF FF 6A 00 E8 0C 00 00 00 FF 25 6C 10 40 00 FF 25 70 10 40 00 FF 25 74 10 40 00 FF 25 78 10 40 00 FF 25 7C 10 40 00 FF 25 80 10 40 00 FF 25 84 10 40 00 FF 25 88 10 40 00 FF 25 8C 10\nep_only = true\n\n[RLP V0.7.3.beta -> ap0x]\nsignature = 2E 72 6C 70 00 00 00 00 00 50 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 E0\nep_only = false\n\n[RLP v0.7.3beta -> ap0x]\nsignature = 60 8B DD E8 00 00 00 00 5D 95 32 C0 95 89 9D 80 00 00 00 B8 42 31 40 00 BB 41 30 40 00 2B C3 03 C5 33 D2 8A 10 40 B9 ?? ?? 00 00 8B F9 30 10 8A 10 40 49 75 F8 64 EF 86 3D 30 00 00 0F B9 FF 4B 89 52 5C 4C BD 77 C2 0C CE 88 4E 2D E8 00 00 00 5D 0D DB 5E 56\nep_only = false\n\n[RLPack --> Ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 2C 0A 00 00 8D 9D 22 02 00 00 33 FF E8 83 01 00 00 6A 40 68 00 10 00 00 68 00 20 0C 00 6A 00 FF 95 CD 09 00 00 89 85 14 0A 00 00 EB 14 60 FF B5 14 0A\nep_only = true\n\n[RLPack --> Ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 5A 0A 00 00 8D 9D 40 02 00 00 33 FF E8 83 01 00 00 6A 40 68 00 10 00 00 68 00 20 0C 00 6A 00 FF 95 EB 09 00 00 89 85 3A 0A 00 00 EB 14 60 FF B5 3A 0A\nep_only = true\n\n[RLPack --> Ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 EB 03 0C 00 00 EB 03 0C 00 00 8D B5 CB 22 00 00 8D 9D F0 02 00 00 33 FF E8 47 02 00 00 EB 03 15 00 00 6A 40 68 00 10 00 00 68 00 20 0C 00 6A 00 FF 95 9B 0A\nep_only = true\n\n[RLPack -> Ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 2C 0A 00 00 8D 9D 22 02 00 00 33 FF E8 ?? ?? ?? ?? 6A 40 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A 00 FF 95 CD 09 00 00 89 85 ?? ?? ?? ?? EB 14 60 FF B5 14 0A\nep_only = true\n\n[RLPack -> Ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 5A 0A 00 00 8D 9D 40 02 00 00 33 FF E8 ?? ?? ?? ?? 6A 40 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A 00 FF 95 EB 09 00 00 89 85 ?? ?? ?? ?? EB 14 60 FF B5 3A 0A\nep_only = true\n\n[RLPack -> Ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 EB 03 ?? ?? ?? EB 03 ?? ?? ?? 8D B5 CB 22 00 00 8D 9D F0 02 00 00 33 FF E8 ?? ?? ?? ?? EB 03 ?? ?? ?? 6A 40 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A 00 FF 95 9B 0A\nep_only = true\n\n[RLPack 1.0 beta -> ap0x]\nsignature = 60 E8 00 00 00 00 8D 64 24 04 8B 6C 24 FC 8D B5 4C 02 00 00 8D 9D 13 01 00 00 33 FF EB 0F FF 74 37 04 FF 34 37 FF D3 83 C4 08 83 C7 08 83 3C 37 00 75 EB 8D 74 37 04 53 6A 40 68 00 10 00 00 68 ?? ?? ?? ?? 6A 00 FF 95 F9 01 00 00 89 85 48 02 00 00 5B FF B5\nep_only = true\n\n[RLPack 1.0 beta -> ap0x]\nsignature = 60 E8 00 00 00 00 8D 64 24 04 8B 6C 24 FC 8D B5 4C 02 00 00 8D 9D 13 01 00 00 33 FF EB 0F FF 74 37 04 FF 34 37 FF D3 83 C4 08 83 C7 08 83 3C 37 00 75 EB 8D 74 37 04 53 6A 40 68 00 10 00 00 68 ?? ?? ?? ?? 6A 00 FF 95 F9 01 00 00 89 85 48 02 00 00 5B FF B5 48 02 00 00 56 FF D3 83 C4 08 8B B5 48 02 00 00 8B C6 EB 01 40 80 38 01 75 FA 40 8B 38 83 C0 04 89 85 44 02 00 00 EB 7A 56 FF 95 F1 01 00 00 89 85 40 02 00 00 8B C6 EB 4F 8B 85 44 02 00 00 8B 00 A9 00 00 00 80 74 14 35 00 00 00 80 50 8B 85 44 02 00 00 C7 00 20 20 20 00 EB 06 FF B5 44 02 00 00 FF B5 40 02 00 00 FF 95 F5 01 00 00 89 07 83 C7 04 8B 85 44 02 00 00 EB 01 40 80 38 00 75 FA 40 89 85 44 02 00 00 80 38 00 75 AC EB 01 46 80 3E 00 75 FA 46 40 8B 38 83 C0 04 89 85 44 02 00 00 80 3E 01 75 81 68 00 40 00 00 68 ?? ?? ?? ?? FF B5 48 02 00 00 FF 95 FD 01 00 00 61 68 ?? ?? ?? ?? C3 60 8B 74 24 24 8B 7C\nep_only = true\n\n[RLPack 1.1 BasicEdition -> ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 4A 02 00 00 8D 9D 11 01 00 00 33 FF EB 0F FF 74 37 04 FF 34 37 FF D3 83 C4 08 83 C7 08 83 3C 37 00 75 EB 8D 74 37 04 53 6A 40 68 00 10 00 00 68\nep_only = true\n\n[RLPack 1.18 (aPlib 0.43) -> ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 ?? 8D B5 1A 04 00 00 8D 9D C1 02 00 00 33 FF E8 61 01 00 00 EB 0F FF 74 37 04 FF 34 37 FF D3 83 C4 ?? 83 C7 ?? 83 3C 37 00 75 EB 83 BD 06 04 00 00 00 74 0E 83 BD 0A 04 00 00 00 74 05 E8 D7 01 00 00 8D 74 37 04 53 6A ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A 00 FF 95 A7 03 00 00 89 85 16 04 00 00 5B FF B5 16 04 00 00 56 FF D3 83 C4 ?? 8B B5 16 04 00 00 8B C6 EB 01\nep_only = true\n\n[RLPack 1.18 (LZMA 4.30) -> ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 ?? 8D B5 21 0B 00 00 8D 9D FF 02 00 00 33 FF E8 9F 01 00 00 6A ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A 00 FF 95 AA 0A 00 00 89 85 F9 0A 00 00 EB 14 60 FF B5 F9 0A 00 00 FF 34 37 FF 74 37 04 FF D3 61 83 C7 ?? 83 3C 37 00 75 E6 83 BD 0D 0B 00 00 00 74 0E 83 BD 11 0B 00 00 00 74 05 E8 F6 01 00 00 8D 74 37 04 53 6A ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A 00 FF 95 AA 0A 00 00 89 85 1D 0B 00 00 5B 60 FF B5 F9 0A 00 00 56 FF B5 1D 0B 00 00 FF D3 61 8B B5 1D 0B 00 00 8B C6 EB 01\nep_only = true\n\n[RLPack 1.18 Dll (aPlib 0.43) -> ap0x]\nsignature = 80 7C 24 08 01 0F 85 5C 01 00 00 60 E8 00 00 00 00 8B 2C 24 83 C4 ?? 8D B5 1A 04 00 00 8D 9D C1 02 00 00 33 FF E8 61 01 00 00 EB 0F FF 74 37 04 FF 34 37 FF D3 83 C4 ?? 83 C7 ?? 83 3C 37 00 75 EB 83 BD 06 04 00 00 00 74 0E 83 BD 0A 04 00 00 00 74 05 E8 D7 01 00 00 8D 74 37 04 53 6A ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A ?? FF 95 A7 03 00 00 89 85 16 04 00 00 5B FF B5 16 04 00 00 56 FF D3 83 C4 ?? 8B B5 16 04 00 00 8B C6 EB 01\nep_only = true\n\n[RLPack 1.18 Dll (LZMA 4.30) -> ap0x]\nsignature = 80 7C 24 08 01 0F 85 ?? 01 00 00 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 ?? ?? ?? ?? 8D 9D ?? ?? ?? ?? 33 FF E8 9F 01 00 00 6A ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A ?? FF 95 AA 0A 00 00 89 85 F9 0A 00 00 EB 14 60 FF B5 F9 0A 00 00 FF 34 37 FF 74 37 04 FF D3 61 83 C7 08 83 3C 37 00 75 E6 83 BD 0D 0B 00 00 00 74 0E 83 BD 11 0B 00 00 00 74 05 E8 F6 01 00 00 8D 74 37 04 53 6A ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A ?? FF 95 AA 0A 00 00 89 85 1D 0B 00 00 5B 60 FF B5 F9 0A 00 00 56 FF B5 1D 0B 00 00 FF D3 61 8B B5 1D 0B 00 00 8B C6 EB 01\nep_only = true\n\n[RLPack 1.20 Basic Edition [aPLib] -> Ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 83 7C 24 28 01 75 0C 8B 44 24 24 89 85 92 05 00 00 EB 0C 8B 85 8E 05 00 00 89 85 92 05 00 00 8D B5 BA 05 00 00 8D 9D 41 04 00 00 33 FF E8 38 01 00 00 EB 1B 8B 85 92 05 00 00 FF 74 37 04 01 04 24 FF 34 37 01 04 24 FF D3 83 C4 08 83 C7 08 83 3C 37 00 75 DF 83 BD 9E 05 00 00 00 74 0E 83 BD A2 05 00 00 00 74 05 E8 D6 01 00 00\nep_only = true\n\n[RLPack 1.20 Basic Edition [LZMA] -> Ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 83 7C 24 28 01 75 0C 8B 44 24 24 89 85 9C 0C 00 00 EB 0C 8B 85 98 0C 00 00 89 85 9C 0C 00 00 8D B5 C4 0C 00 00 8D 9D 82 04 00 00 33 FF 6A 40 68 00 10 00 00 68 00 20 0C 00 6A 00 FF 95 2D 0C 00 00 89 85 94 0C 00 00 E8 59 01 00 00 EB 20 60 8B 85 9C 0C 00 00 FF B5 94 0C 00 00 FF 34 37 01 04 24 FF 74 37 04 01 04 24 FF D3 61 83\nep_only = true\n\n[RLPack Full Edition 1.17 -> Ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 8D B5 ?? ?? ?? ?? 8D 9D ?? ?? ?? ?? 33 FF\nep_only = true\n\n[RLPack Full Edition 1.17 DLL -> Ap0x]\nsignature = 80 7C 24 08 01 0F 85 ?? ?? ?? ?? 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 ?? ?? ?? ?? 8D 9D ?? ?? ?? ?? 33 FF E8\nep_only = true\n\n[RLPack Full Edition 1.17 DLL [aPLib] -> Ap0x]\nsignature = 80 7C 24 08 01 0F 85 ?? ?? ?? ?? 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 53 03 00 00 8D 9D 02 02 00 00 33 FF E8 ?? ?? ?? ?? EB 0F FF 74 37 04 FF 34 37 FF D3 83 C4 08 83 C7 08 83 3C 37 00 75\nep_only = true\n\n[RLPack Full Edition 1.17 DLL [LZMA] -> Ap0x]\nsignature = 80 7C 24 08 01 0F 85 ?? ?? ?? ?? 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 5A 0A 00 00 8D 9D 40 02 00 00 33 FF E8 ?? ?? ?? ?? 6A 40 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A 00 FF 95 EB 09 00 00 89 85\nep_only = true\n\n[RLPack Full Edition 1.17 iBox [aPLib] -> Ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 8D B5 79 29 00 00 8D 9D 2C 03 00 00 33 FF ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? EB 0F FF 74 37 04 FF 34\nep_only = true\n\n[RLPack Full Edition 1.17 iBox [LZMA] -> Ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 8D B5 67 30 00 00 8D 9D 66 03 00 00 33 FF ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 6A 40 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A\nep_only = true\n\n[RLPack Full Edition 1.17 [aPLib] -> Ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 8D B5 74 1F 00 00 8D 9D 1E 03 00 00 33 FF ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? EB 0F FF 74 37 04 FF 34\nep_only = true\n\n[RLPack Full Edition 1.17 [LZMA] -> Ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 8D B5 73 26 00 00 8D 9D 58 03 00 00 33 FF ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 6A 40 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A\nep_only = true\n\n[RLPack Full Edition V1.1X -> ap0x]\nsignature = 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 56 69 72 74 75 61 6C 41 6C 6C 6F 63 00 00 56 69 72 74 75 61 6C 46 72 65 65 00 00 56 69 72 74 75 61 6C 50 72 6F 74 65 63 74 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 00 10\nep_only = false\n\n[RLPack V1.0.beta -> ap0x]\nsignature = 60 E8 00 00 00 00 8D 64 24 04 8B 6C 24 FC 8D B5 4C 02 00 00 8D 9D 13 01 00 00 33 FF EB 0F FF 74 37 04 FF 34 37 FF D3 83 C4 08 83 C7 08 83 3C 37 00 75 EB\nep_only = true\n\n[RLPack V1.11 -> ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 4A 02 00 00 8D 9D 11 01 00 00 33 FF EB 0F FF 74 37 04 FF 34 37 FF D3 83 C4 08 83 C7 08 83 3C 37 00 75 EB\nep_only = true\n\n[RLPack V1.12-V1.14 (aPlib 0.43) -> ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 ?? ?? ?? ?? 8D 9D ?? ?? ?? ?? 33 FF EB 0F FF ?? ?? ?? FF ?? ?? ?? D3 83 C4 ?? 83 C7 ?? 83 3C 37 00 75 EB\nep_only = false\n\n[RLPack V1.12-V1.14 (LZMA 4.30) -> ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 ?? ?? ?? ?? 8D 9D ?? ?? ?? ?? 33 FF 6A ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A ?? FF 95 ?? ?? ?? ?? 89 85 ?? ?? ?? ?? EB ?? 60\nep_only = false\n\n[RLPack V1.15-V1.17 (aPlib 0.43) -> ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 ?? ?? ?? ?? 8D 9D ?? ?? ?? ?? 33 FF E8 45 01 00 00 EB 0F FF 74 37 04 FF 34 37 FF D3 83 C4 08 83 C7 08 83 3C 37 00 75 EB\nep_only = true\n\n[RLPack V1.15-V1.17 (LZMA 4.30) -> ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 ?? ?? ?? ?? 8D 9D ?? ?? ?? ?? 33 FF E8 83 01 00 00 6A ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A ?? FF 95 ?? ?? ?? ?? 89 85 ?? ?? ?? ?? EB 14\nep_only = true\n\n[RLPack V1.15-V1.17 Dll -> ap0x]\nsignature = 80 7C 24 08 01 0F 85 ?? 01 00 00 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 ?? ?? ?? ?? 8D 9D ?? ?? ?? ?? 33 FF E8\nep_only = true\n\n[RLPack v1.18 Basic DLL [aPLib] -> Ap0x]\nsignature = 80 7C 24 08 01 0F 85 ?? ?? ?? ?? 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 1A 04 00 00 8D 9D C1 02 00 00 33 FF E8 61 01 00 00 EB 0F FF 74 37 04 FF 34 37 FF D3 83 C4 08 83 C7 08 83 3C 37 00 75 EB 83 BD 06 04 00 00 00 74 0E 83\nep_only = true\n\n[RLPack v1.18 Basic DLL [LZMA] -> Ap0x]\nsignature = 80 7C 24 08 01 0F 85 ?? ?? ?? ?? 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 21 0B 00 00 8D 9D FF 02 00 00 33 FF E8 9F 01 00 00 6A 40 68 00 10 00 00 68 00 20 0C 00 6A 00 FF 95 AA 0A 00 00 89 85 F9 0A 00 00 EB 14 60 FF B5 F9 0A\nep_only = true\n\n[RLPack v1.18 Basic [aPLib] -> Ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 1A 04 00 00 8D 9D C1 02 00 00 33 FF E8 61 01 00 00 EB 0F FF 74 37 04 FF 34 37 FF D3 83 C4 08 83 C7 08 83 3C 37 00 75 EB 83 BD 06 04 00 00 00 74 0E 83\nep_only = true\n\n[RLPack v1.18 Basic [LZMA] -> Ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 8D B5 21 0B 00 00 8D 9D FF 02 00 00 33 FF E8 9F 01 00 00 6A 40 68 00 10 00 00 68 00 20 0C 00 6A 00 FF 95 AA 0A 00 00 89 85 F9 0A 00 00 EB 14 60 FF B5 F9 0A\nep_only = true\n\n[RLPack V1.19 (aPlib 0.43) -> ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 83 7C 24 28 01 75 0C 8B 44 24 24 89 85 3C 04 00 00 EB 0C 8B 85 38 04 00 00 89 85 3C 04 00 00 8D B5 60 04 00 00 8D 9D EB 02 00 00 33 FF E8 52 01 00 00 EB 1B 8B 85 3C 04 00 00 FF 74 37 04 01 04 24 FF 34 37 01 04 24 FF D3 83 C4 08 83 C7 08 83 3C 37 00 75 DF 83 BD 48 04 00 00 00 74 0E 83 BD 4C 04 00 00 00 74 05 E8 B8 01 00 00 8D 74 37 04 53 6A 40 68 00 10 00 00 68 ?? ?? ?? ?? 6A 00 FF 95 D1 03 00 00 89 85 5C 04 00 00 5B FF B5 5C 04 00 00 56 FF D3 83 C4 08 8B B5 5C 04 00 00 8B C6 EB 01 40 80 38 01 75 FA 40 8B 38 03 BD 3C 04 00 00 83 C0 04 89 85 58 04 00 00 E9 94 00 00 00 56 FF 95 C9 03 00 00 85 C0 0F 84 B4 00 00 00 89 85 54 04 00 00 8B C6 EB 5B 8B 85 58 04 00 00 8B 00 A9 00 00 00 80 74 14 35 00 00 00 80 50 8B 85 58 04 00 00 C7 00 20 20 20 00 EB 06 FF B5 58 04 00 00 FF B5 54 04 00 00 FF 95 CD 03 00 00 85 C0 74 71 89 07 83 C7 04 8B 85 58 04 00 00 EB 01 40 80 38 00 75 FA 40 89 85 58 04 00 00 66 81 78 02 00 80 74 A5 80 38 00 75 A0 EB 01 46 80 3E 00 75 FA 46 40 8B 38 03 BD 3C 04 00 00 83 C0 04 89 85 58 04 00 00 80 3E 01 0F 85 63 FF FF FF 68 00 40 00 00 68 ?? ?? ?? ?? FF B5 5C 04 00 00 FF 95 D5 03 00 00 E8 3D 00 00 00 E8 24 01 00 00 61 E9 ?? ?? ?? ?? 61 C3\nep_only = true\n\n[RLPack V1.19 (LZMA 4.30) -> ap0x]\nsignature = 60 E8 00 00 00 00 8B 2C 24 83 C4 04 83 7C 24 28 01 75 0C 8B 44 24 24 89 85 49 0B 00 00 EB 0C 8B 85 45 0B 00 00 89 85 49 0B 00 00 8D B5 6D 0B 00 00 8D 9D 2F 03 00 00 33 FF 6A 40 68 00 10 00 00 68 00 20 0C 00 6A 00 FF 95 DA 0A 00 00 89 85 41 0B 00 00 E8 76 01 00 00 EB 20 60 8B 85 49 0B 00 00 FF B5 41 0B 00 00 FF 34 37 01 04 24 FF 74 37 04 01 04 24 FF D3 61 83 C7 08 83 3C 37 00 75 DA 83 BD 55 0B 00 00 00 74 0E 83 BD 59 0B 00 00 00 74 05 E8 D7 01 00 00 8D 74 37 04 53 6A 40 68 00 10 00 00 68 ?? ?? ?? ?? 6A 00 FF 95 DA 0A 00 00 89 85 69 0B 00 00 5B 60 FF B5 41 0B 00 00 56 FF B5 69 0B 00 00 FF D3 61 8B B5 69 0B 00 00 8B C6 EB 01 40 80 38 01 75 FA 40 8B 38 03 BD 49 0B 00 00 83 C0 04 89 85 65 0B 00 00 E9 98 00 00 00 56 FF 95 D2 0A 00 00 89 85 61 0B 00 00 85 C0 0F 84 C8 00 00 00 8B C6 EB 5F 8B 85 65 0B 00 00 8B 00 A9 00 00 00 80 74 14 35 00 00 00 80 50 8B 85 65 0B 00 00 C7 00 20 20 20 00 EB 06 FF B5 65 0B 00 00 FF B5 61 0B 00 00 FF 95 D6 0A 00 00 85 C0 0F 84 87 00 00 00 89 07 83 C7 04 8B 85 65 0B 00 00 EB 01 40 80 38 00 75 FA 40 89 85 65 0B 00 00 66 81 78 02 00 80 74 A1 80 38 00 75 9C EB 01 46 80 3E 00 75 FA 46 40 8B 38 03 BD 49 0B 00 00 83 C0 04 89 85 65 0B 00 00 80 3E 01 0F 85 5F FF FF FF 68 00 40 00 00 68 ?? ?? ?? ?? FF B5 69 0B 00 00 FF 95 DE 0A 00 00 68 00 40 00 00 68 00 20 0C 00 FF B5 41 0B 00 00 FF 95 DE 0A 00 00 E8 3D 00 00 00 E8 24 01 00 00 61 E9 ?? ?? ?? ?? 61 C3\nep_only = true\n\n[RLPack V1.19 Dll (aPlib 0.43) -> ap0x]\nsignature = 80 7C 24 08 01 0F 85 89 01 00 00 60 E8 00 00 00 00 8B 2C 24 83 C4 04 83 7C 24 28 01 75 0C 8B 44 24 24 89 85 3C 04 00 00 EB 0C 8B 85 38 04 00 00 89 85 3C 04 00 00 8D B5 60 04 00 00 8D 9D EB 02 00 00 33 FF E8 52 01 00 00 EB 1B 8B 85 3C 04 00 00 FF 74 37 04 01 04 24 FF 34 37 01 04 24 FF D3 83 C4 08 83 C7 08 83 3C 37 00 75 DF 83 BD 48 04 00 00 00 74 0E 83 BD 4C 04 00 00 00 74 05 E8 B8 01 00 00 8D 74 37 04 53 6A 40 68 00 10 00 00 68 ?? ?? ?? ?? 6A 00 FF 95 D1 03 00 00 89 85 5C 04 00 00 5B FF B5 5C 04 00 00 56 FF D3 83 C4 08 8B B5 5C 04 00 00 8B C6 EB 01 40 80 38 01 75 FA 40 8B 38 03 BD 3C 04 00 00 83 C0 04 89 85 58 04 00 00 E9 94 00 00 00 56 FF 95 C9 03 00 00 85 C0 0F 84 B4 00 00 00 89 85 54 04 00 00 8B C6 EB 5B 8B 85 58 04 00 00 8B 00 A9 00 00 00 80 74 14 35 00 00 00 80 50 8B 85 58 04 00 00 C7 00 20 20 20 00 EB 06 FF B5 58 04 00 00 FF B5 54 04 00 00 FF 95 CD 03 00 00 85 C0 74 71 89 07 83 C7 04 8B 85 58 04 00 00 EB 01 40 80 38 00 75 FA 40 89 85 58 04 00 00 66 81 78 02 00 80 74 A5 80 38 00 75 A0 EB 01 46 80 3E 00 75 FA 46 40 8B 38 03 BD 3C 04 00 00 83 C0 04 89 85 58 04 00 00 80 3E 01 0F 85 63 FF FF FF 68 00 40 00 00 68 ?? ?? ?? ?? FF B5 5C 04 00 00 FF 95 D5 03 00 00 E8 3D 00 00 00 E8 24 01 00 00 61 E9 ?? ?? ?? ?? 61 C3\nep_only = true\n\n[RLPack V1.19 Dll (LZMA 4.30) -> ap0x]\nsignature = 80 7C 24 08 01 0F 85 C7 01 00 00 60 E8 00 00 00 00 8B 2C 24 83 C4 04 83 7C 24 28 01 75 0C 8B 44 24 24 89 85 49 0B 00 00 EB 0C 8B 85 45 0B 00 00 89 85 49 0B 00 00 8D B5 6D 0B 00 00 8D 9D 2F 03 00 00 33 FF 6A 40 68 00 10 00 00 68 00 20 0C 00 6A 00 FF 95 DA 0A 00 00 89 85 41 0B 00 00 E8 76 01 00 00 EB 20 60 8B 85 49 0B 00 00 FF B5 41 0B 00 00 FF 34 37 01 04 24 FF 74 37 04 01 04 24 FF D3 61 83 C7 08 83 3C 37 00 75 DA 83 BD 55 0B 00 00 00 74 0E 83 BD 59 0B 00 00 00 74 05 E8 D7 01 00 00 8D 74 37 04 53 6A 40 68 00 10 00 00 68 ?? ?? ?? ?? 6A 00 FF 95 DA 0A 00 00 89 85 69 0B 00 00 5B 60 FF B5 41 0B 00 00 56 FF B5 69 0B 00 00 FF D3 61 8B B5 69 0B 00 00 8B C6 EB 01 40 80 38 01 75 FA 40 8B 38 03 BD 49 0B 00 00 83 C0 04 89 85 65 0B 00 00 E9 98 00 00 00 56 FF 95 D2 0A 00 00 89 85 61 0B 00 00 85 C0 0F 84 C8 00 00 00 8B C6 EB 5F 8B 85 65 0B 00 00 8B 00 A9 00 00 00 80 74 14 35 00 00 00 80 50 8B 85 65 0B 00 00 C7 00 20 20 20 00 EB 06 FF B5 65 0B 00 00 FF B5 61 0B 00 00 FF 95 D6 0A 00 00 85 C0 0F 84 87 00 00 00 89 07 83 C7 04 8B 85 65 0B 00 00 EB 01 40 80 38 00 75 FA 40 89 85 65 0B 00 00 66 81 78 02 00 80 74 A1 80 38 00 75 9C EB 01 46 80 3E 00 75 FA 46 40 8B 38 03 BD 49 0B 00 00 83 C0 04 89 85 65 0B 00 00 80 3E 01 0F 85 5F FF FF FF 68 00 40 00 00 68 ?? ?? ?? ?? FF B5 69 0B 00 00 FF 95 DE 0A 00 00 68 00 40 00 00 68 00 20 0C 00 FF B5 41 0B 00 00 FF 95 DE 0A 00 00 E8 3D 00 00 00 E8 24 01 00 00 61 E9 ?? ?? ?? ?? 61 C3\nep_only = true\n\n[ROD High TECH -> Ayman]\nsignature = 60 8B 15 1D 13 40 00 F7 E0 8D 82 83 19 00 00 E8 58 0C 00 00\nep_only = true\n\n[RosAsm 2050a -> Betov]\nsignature = 55 8B EC 60 8B 5D 08 B9 08 00 00 00 BF ?? ?? ?? ?? 83 C7 07 FD 8A C3 24 0F 04 30 3C 39 76 02 04 07 AA C1 EB 04 E2 EE FC 68 00 10 00 00 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 6A 00 FF 15 ?? ?? ?? ?? 61 8B E5 5D C2 04 00\nep_only = false\n\n[Rpoly crypt by Vaska (20.03.07 18:41)]\nsignature = 58 ?? ?? ?? ?? ?? ?? ?? E8 00 00 00 58 E8 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 ?? ?? 04\nep_only = false\n\n[RPolyCrypt v 1.0 (personal polycryptor) sign from pinch]\nsignature = 50 58 97 97 60 61 8B 04 24 80 78 F3 6A E8 00 00 00 00 58 E8 00 00 00 00 58 91 91 EB 00 0F 85 6B F4 76 6F E8 00 00 00 00 83 C4 04 E8 00 00 00 00 58 90 E8 00 00 00 00 83 C4 04 8B 04 24 80 78 F1\nep_only = true\n\n[Safe 2.0]\nsignature = 83 EC 10 53 56 57 E8 C4 01 00\nep_only = false\n\n[SafeDisc v4]\nsignature = 00 00 00 00 00 00 00 00 00 00 00 00 42 6F 47 5F\nep_only = false\n\n[SafeGuard V1.0X -> simonzh2000]\nsignature = E8 00 00 00 00 EB 29 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 59 9C 81 C1 E2 FF FF FF EB 01 ?? 9D FF E1\nep_only = true\n\n[SC Obfuscator -> SuperCRacker]\nsignature = 60 33 C9 8B 1D 00 ?? ?? ?? 03 1D 08 ?? ?? ?? 8A 04 19 84 C0 74 09 3C ?? 74 05 34 ?? 88 04 19 41 3B 0D 04 ?? ?? ?? 75 E7 A1 08 ?? ?? ?? 01 05 0C ?? ?? ?? 61 FF 25 0C\nep_only = false\n\n[Sc Obfuscator -> SuperCRacker]\nsignature = 60 33 C9 8B 1D ?? ?? ?? ?? 03 1D ?? ?? ?? ?? 8A 04 19 84 C0 74 09 3C ?? 74 05 34 ?? 88 04 19 41 3B 0D ?? ?? ?? ?? 75 E7 A1 ?? ?? ?? ?? 01 05 ?? ?? ?? ?? 61 FF 25 ?? ?? ?? ?? 00 00\nep_only = true\n\n[SDC 1.2 (Self Decrypting Binary Generator) - by Claes M Nyberg]\nsignature = 55 89 E5 83 EC 08 C7 04 24 01 00 00 00 FF 15 A0 91 40 00 E8 DB FE FF FF 55 89 E5 53 83 EC 14 8B 45 08 8B 00 8B 00 3D 91 00 00 C0 77 3B 3D 8D 00 00 C0 72 4B BB 01 00 00 00 C7 44 24 04 00 00 00 00 C7 04 24 08 00 00 00 E8 CE 24 00 00 83 F8 01 0F 84 C4 00 00 00 85 C0 0F 85 A9 00 00 00 31 C0 83 C4 14 5B 5D C2 04 00 3D 94 00 00 C0 74 56 3D 96 00 00 C0 74 1E 3D 93 00 00 C0 75 E1 EB B5 3D 05 00 00 C0 8D B4 26 00 00 00 00 74 43 3D 1D 00 00 C0 75 CA C7 44 24 04 00 00 00 00 C7 04 24 04 00 00 00 E8 73 24 00 00 83 F8 01 0F 84 99 00 00 00 85 C0 74 A9 C7 04 24 04 00 00 00 FF D0 B8 FF FF FF FF EB 9B 31 DB 8D 74 26 00 E9 69 FF FF FF C7 44 24 04 00 00 00 00 C7 04 24 0B 00 00 00 E8 37 24 00 00 83 F8 01 74 7F 85 C0 0F 84 6D FF FF FF C7 04 24 0B 00 00 00 8D 76 00 FF D0 B8 FF FF FF FF E9 59 FF FF FF C7 04 24 08 00 00 00 FF D0 B8 FF FF FF FF E9 46 FF FF FF C7 44 24 04 01 00 00 00 C7 04 24 08 00 00 00 E8 ED 23 00 00 B8 FF FF FF FF 85 DB 0F 84 25 FF FF FF E8 DB 15 00 00 B8 FF FF FF FF E9 16 FF FF FF C7 44 24 04 01 00 00 00 C7 04 24 04 00 00 00 E8 BD 23 00 00 B8 FF FF FF FF E9 F8 FE FF FF C7 44 24 04 01 00 00 00 C7 04 24 0B 00 00 00 E8 9F 23 00 00 B8 FF FF FF FF E9 DA FE FF FF\nep_only = true\n\n[SDProtect -> Randy Li]\nsignature = 55 8B EC 6A FF 68 ?? ?? ?? ?? 68 88 88 88 08 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 58 64 A3 00 00 00 00 58 58 58 58 8B E8 E8 3B 00 00 00 E8 01 00 00 00 FF 58 05\nep_only = true\n\n[SDProtector 1.x -> Randy Li]\nsignature = 55 8B EC 6A FF 68 1D 32 13 05 68 88 88 88 08 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 58 64 A3 00 00 00 00 58 58 58 58 8B E8 E8 3B 00 00 00 E8 01 00 00 00 FF 58 05 53 00 00 00 51 8B 4C 24 10 89 81 B8 00 00 00 B8 55 01 00 00 89 41 20 33 C0 89 41 04 89 41\nep_only = true\n\n[SDProtector Basic/Pro Edition 1.10 -> Randy Li]\nsignature = 55 8B EC 6A FF 68 1D 32 13 05 68 88 88 88 08 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 58 64 A3 00 00 00 00 58 58 58 58 8B E8 50 83 EC 08 64 A1 00 00 00 00 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 83 C4 08 50 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 64\nep_only = true\n\n[SDProtector Basic/Pro Edition 1.12 -> Randy Li]\nsignature = 55 8B EC 6A FF 68 1D 32 13 05 68 88 88 88 08 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 58 64 A3 00 00 00 00 58 58 58 58 8B E8 E8 3B 00 00 00 E8 01 00 00 00 FF 58 05 53 00 00 00 51 8B 4C 24 10 89 81 B8 00 00 00 B8 55 01 00 00 89 41 20 33 C0 89 41 04 89 41 08 89 41 0C 89 41 10 59 C3 C3 C3 C3 C3 C3 C3 C3 C3 C3 C3 C3 C3 33 C0 64 FF 30 64 89 20 9C 80 4C 24 01 01 9D 90 90 C3 C3 C3 C3 C3 C3 C3 C3 C3 C3 C3 C3 64 8F 00 58 74 07 75 05 19 32 67 E8 E8 74 27 75 25 EB 00 EB FC 68 39 44 CD 00 59 9C 50 74 0F 75 0D E8 59 C2 04 00 55 8B EC E9 FA FF FF 0E E8 EF FF FF FF 56 57 53 78 03 79 01 E8 68 A2 AF 47 01 59 E8 01 00 00 00 FF 58 05 7B 03 00 00 03 C8 74 C4 75 C2 E8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 E2\nep_only = true\n\n[SDProtector Pro Edition 1.16 -> Randy Li]\nsignature = 55 8B EC 6A FF 68 1D 32 13 05 68 88 88 88 08 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 58 64 A3 00 00 00 00 58 58 58 58 8B E8 E8 3B 00 00 00 E8 01 00 00 00 FF 58 05 53 00 00 00 51 8B 4C 24 10 89 81 B8 00 00 00 B8 55 01 00 00 89 41 18 33 C0 89 41 04 89 41\nep_only = true\n\n[SDProtector Pro Edition 1.16 -> Randy Li]\nsignature = 55 8B EC 6A FF 68 1D 32 13 05 68 88 88 88 08 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 58 64 A3 00 00 00 00 58 58 58 58 8B E8 E8 3B 00 00 00 E8 01 00 00 00 FF 58 05 53 00 00 00 51 8B 4C 24 10 89 81 B8 00 00 00 B8 55 01 00 00 89 41 18 33 C0 89 41 04 89 41 08 89 41 0C 89 41 10 59 C3 C3 C3 C3 C3 C3 C3 C3 C3 C3 C3 C3 C3 33 C0 64 FF 30 64 89 20 9C 80 4C 24 01 01 9D 90 90 C3 C3 C3 C3 C3 C3 C3 C3 C3 C3 C3 C3 64 8F 00 58 74 07 75 05 19 32 67 E8 E8 74 27 75 25 EB 00 EB FC 68 39 44 CD 00 59 9C 50 74 0F 75 0D E8 59 C2 04 00 55 8B EC E9 FA FF FF 0E E8 EF FF FF FF 56 57 53 78 03 79 01 E8 68 A2 AF 47 01 59 E8 01 00 00 00 FF 58 05 93 03 00 00 03 C8 74 C4 75 C2 E8\nep_only = true\n\n[SDProtector V1.1x -> Randy Li]\nsignature = 55 8B EC 6A FF 68 ?? ?? ?? ?? 68 88 88 88 08 64 A1\nep_only = true\n\n[SEA-AXE]\nsignature = FC BC ?? ?? 0E 1F E8 ?? ?? 26 A1 ?? ?? 8B 1E ?? ?? 2B C3 8E C0 B1 ?? D3 E3\nep_only = true\n\n[SEA-AXE v2.2]\nsignature = FC BC ?? ?? 0E 1F A3 ?? ?? E8 ?? ?? A1 ?? ?? 8B ?? ?? ?? 2B C3 8E C0 B1 03 D3 E3 8B CB BF ?? ?? 8B F7 F3 A5\nep_only = true\n\n[SecuPack v1.5]\nsignature = 55 8B EC 83 C4 F0 53 56 57 33 C0 89 45 F0 B8 CC 3A 40 ?? E8 E0 FC FF FF 33 C0 55 68 EA 3C 40 ?? 64 FF 30 64 89 20 6A ?? 68 80 ?? ?? ?? 6A 03 6A ?? 6A 01 ?? ?? ?? 80\nep_only = true\n\n[SecureEXE 3.0 -> ZipWorx]\nsignature = E9 B8 00 00 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 00 00 00 00 00\nep_only = true\n\n[SecurePE 1.X -> www.deepzone.org]\nsignature = 8B 04 24 E8 00 00 00 00 5D 81 ED 4C 2F 40 00 89 85 61 2F 40 00 8D 9D 65 2F 40 00 53 C3 00 00 00 00 8D B5 BA 2F 40 00 8B FE BB 65 2F 40 00 B9 C6 01 00 00 AD 2B C3 C1 C0 03 33 C3 AB 43 81 FB 8E 2F 40 00 75 05 BB 65 2F 40 00 E2 E7 89 AD 1A 31 40 00 89 AD 55 34 40 00 89 AD 68 34 40 00 8D 85 BA 2F 40 00 50 C3\nep_only = true\n\n[Securom7 -> Sony DADC]\nsignature = B8 ?? ?? ?? ?? 8B ?? ?? ?? ?? 0A ?? ?? ?? ?? ?? ?? E8\nep_only = true\n\n[SEN Debug Protector???]\nsignature = BB ?? ?? ?? ?? 00 ?? ?? ?? ?? ?? 29 ?? ?? 4E E8\nep_only = true\n\n[Sentinel SuperPro (Automatic Protection) v6.4.0 -> Safenet]\nsignature = 68 ?? ?? ?? ?? 6A 01 6A 00 FF 15 ?? ?? ?? ?? A3 ?? ?? ?? ?? FF 15 ?? ?? ?? ?? 33 C9 3D B7 00 00 00 A1 ?? ?? ?? ?? 0F 94 C1 85 C0 89 0D ?? ?? ?? ?? 0F 85 ?? ?? ?? ?? 55 56 C7 05 ?? ?? ?? ?? 01 00 00 00 FF 15 ?? ?? ?? ?? 01 05 ?? ?? ?? ?? FF 15\nep_only = true\n\n[Sentinel SuperPro (Automatic Protection) v6.4.1 -> Safenet]\nsignature = A1 ?? ?? ?? ?? 55 8B ?? ?? ?? 85 C0 74 ?? 85 ED 75 ?? A1 ?? ?? ?? ?? 50 55 FF 15 ?? ?? ?? ?? 8B 0D ?? ?? ?? ?? 55 51 FF 15 ?? ?? ?? ?? 85 C0 74 ?? 8B 15 ?? ?? ?? ?? 52 FF 15 ?? ?? ?? ?? 6A 00 6A 00 68 ?? ?? ?? ?? E8 ?? ?? ?? ?? B8 01 00 00 00 5D C2 0C 00\nep_only = true\n\n[Setup Factory v6.0.0.3 Setup Launcher]\nsignature = 55 8B EC 6A FF 68 90 61 40 00 68 70 3B 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8 FF 15 14 61 40 00 33 D2 8A D4 89 15 5C 89 40 00 8B C8 81 E1 FF 00 00 00 89 0D 58 89 40 00 C1 E1 08 03 CA 89 0D 54 89 40 00 C1 E8 10 A3 50 89\nep_only = false\n\n[Setup2Go Installer Stub]\nsignature = 5B 53 45 54 55 50 5F 49 4E 46 4F 5D 0D 0A 56 65 72\nep_only = false\n\n[Sexe Crypter 1.1 - by santasdad]\nsignature = 55 8B EC 83 C4 EC 53 56 57 33 C0 89 45 EC B8 D8 39 00 10 E8 30 FA FF FF 33 C0 55 68 D4 3A 00 10 64 FF 30 64 89 ?? ?? ?? ?? E4 3A 00 10 A1 00 57 00 10 50 E8 CC FA FF FF 8B D8 53 A1 00 57 00 10 50 E8 FE FA FF FF 8B F8 53 A1 00 57 00 10 50 E8 C8 FA FF FF 8B D8 53 E8 C8 FA FF FF 8B F0 85 F6 74 26 8B D7 4A B8 14 57 00 10 E8 AD F6 FF FF B8 14 57 00 10 E8 9B F6 FF FF 8B CF 8B D6 E8 DA FA FF FF 53 E8 84 FA FF FF 8D 4D EC BA F8 3A 00 10 A1 14 57 00 10 E8 0A FB FF FF 8B 55 EC B8 14 57 00 10 E8 65 F5 FF FF B8 14 57 00 10 E8 63 F6 FF FF E8 52 FC FF FF 33 C0 5A 59 59 64 89 10 68 DB 3A 00 10 8D 45 EC E8 ED F4 FF FF C3 E9 83 EF FF FF EB F0 5F 5E 5B E8 ED F3 FF FF 00 53 45 54 54 49 4E 47 53 00 00 00 00 FF FF FF FF 12 00 00 00 6B 75 74 68 37 36 67 62 62 67 36 37 34 76 38 38 67 79\nep_only = true\n\n[Shegerd Dongle V4.78 -> MS.Co.]\nsignature = E8 32 00 00 00 B8 ?? ?? ?? ?? 8B 18 C1 CB 05 89 DA 36 8B 4C 24 0C\nep_only = true\n\n[ShellModify 0.1 -> pll621]\nsignature = 55 8B EC 6A FF 68 98 66 41 00 68 3C 3D 41 00 64 A1 00 00 00 00\nep_only = true\n\n[Shrink v1.0]\nsignature = 50 9C FC BE ?? ?? BF ?? ?? 57 B9 ?? ?? F3 A4 8B ?? ?? ?? BE ?? ?? BF ?? ?? F3 A4 C3\nep_only = true\n\n[Shrink v2.0]\nsignature = E9 ?? ?? 50 9C FC BE ?? ?? 8B FE 8C C8 05 ?? ?? 8E C0 06 57 B9\nep_only = true\n\n[Shrink Wrap v1.4]\nsignature = 58 60 8B E8 55 33 F6 68 48 01 ?? ?? E8 49 01 ?? ?? EB\nep_only = true\n\n[Shrinker 3.2]\nsignature = 55 8B EC 56 57 75 65 68 00 01 00 00 E8 F1 E6 FF FF 83 C4 04\nep_only = false\n\n[Shrinker 3.3]\nsignature = 00 00 55 8B EC 56 57 75 65 68 00 01 00 00 E8\nep_only = false\n\n[Shrinker 3.4]\nsignature = 55 8B EC 56 57 75 6B 68 00 01 00 00 E8 11 0B 00 00 83 C4 04\nep_only = false\n\n[Shrinker v3.2]\nsignature = 83 3D ?? ?? ?? ?? ?? 55 8B EC 56 57 75 65 68 00 01 ?? ?? E8 ?? E6 FF FF 83 C4 04 8B 75 08 A3 ?? ?? ?? ?? 85 F6 74 1D 68 FF\nep_only = true\n\n[Shrinker v3.3]\nsignature = 83 3D ?? ?? ?? 00 00 55 8B EC 56 57 75 65 68 00 01 00 00 E8\nep_only = true\n\n[Shrinker v3.4]\nsignature = 83 3D B4 ?? ?? ?? ?? 55 8B EC 56 57 75 6B 68 00 01 00 00 E8 ?? 0B 00 00 83 C4 04 8B 75 08 A3 B4 ?? ?? ?? 85 F6 74 23 83 7D 0C 03 77 1D 68 FF\nep_only = true\n\n[Shrinker v3.4]\nsignature = BB ?? ?? BA ?? ?? 81 C3 07 00 B8 40 B4 B1 04 D3 E8 03 C3 8C D9 49 8E C1 26 03 0E 03 00 2B\nep_only = true\n\n[Silicon Realms Install Stub]\nsignature = 55 8B EC 6A FF 68 ?? 92 40 00 68 ?? ?? 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8 FF 15 ?? ?? 40 00 33 D2 8A D4 89 15 ?? ?? 40 00 8B C8 81 E1 FF 00 00 00 89 0D ?? ?? 40 00 C1 E1 08 03 CA 89 0D ?? ?? 40 00 C1 E8 10 A3\nep_only = false\n\n[SimbiOZ -> Extranger]\nsignature = 50 60 E8 00 00 00 00 5D 81 ED 07 10 40 00 68 80 0B 00 00 8D 85 1F 10 40 00 50 E8 84 0B 00 00\nep_only = true\n\n[SimbiOZ 1.3 -> Extranger]\nsignature = 57 57 8D 7C 24 04 50 B8 00 ?? ?? ?? AB 58 5F C3\nep_only = true\n\n[SimbiOZ Poly 2.1 -> Extranger]\nsignature = 55 50 8B C4 83 C0 04 C7 00 ?? ?? ?? ?? 58 C3 90\nep_only = true\n\n[SimbiOZ PolyCryptor v.xx-> Extranger]\nsignature = 55 60 E8 00 00 00 00 5D 81 ED ?? ?? ?? ?? 8D 85 ?? ?? ?? ?? 68 ?? ?? ?? ?? 50 E8\nep_only = true\n\n[Simple UPX Cryptor V30.4.2005 -> MANtiCORE]\nsignature = 60 B8 ?? ?? ?? ?? B9 ?? ?? ?? ?? ?? ?? ?? ?? E2 FA 61 68 ?? ?? ?? ?? C3\nep_only = true\n\n[Simple UPX Cryptor v30.4.2005 [multi layer encryption] --> MANtiCORE]\nsignature = 60 B8 ?? ?? ?? 00 B9 18 00 00 00 80 34 08 ?? E2 FA 61 68 ?? ?? ?? 00 C3\nep_only = true\n\n[Simple UPX Cryptor v30.4.2005 [multi layer encryption] --> MANtiCORE]\nsignature = 60 B8 ?? ?? ?? ?? B9 18 00 00 00 80 34 08 ?? E2 FA 61 68 ?? ?? ?? ?? C3\nep_only = true\n\n[Simple UPX Cryptor v30.4.2005 [One layer encryption] --> MANtiCORE]\nsignature = 60 B8 ?? ?? ?? 00 B9 ?? 01 00 00 80 34 08 ?? E2 FA 61 68 ?? ?? ?? 00 C3\nep_only = true\n\n[SimplePack 1.0X -> bagie]\nsignature = 60 E8 00 00 00 00 5B 8D 5B FA 6A 00 FF 93 ?? ?? 00 00 89 C5 8B 7D 3C 8D 74 3D 00 8D BE F8 00 00 00 8B 86 88 00 00 00 09 C0\nep_only = true\n\n[SimplePack 1.11 Method 1 -> bagie[TMX]]\nsignature = 60 E8 00 00 00 00 5B 8D 5B FA BD 00 00 ?? ?? 8B 7D 3C 8D 74 3D 00 8D BE F8 00 00 00 0F B7 76 06 4E 8B 47 10 09 C0 74 55 0F B7 47 22 09 C0 74 4D 6A 04 68 00 10 00 00 FF 77 10 6A 00 FF 93 38 03 00 00 50 56 57 89 EE 03 77 0C 8B 4F 10 89 C7 89 C8 C1 E9 02 FC\nep_only = true\n\n[SimplePack 1.11 Method 1 -> bagie[TMX]]\nsignature = 60 E8 00 00 00 00 5B 8D 5B FA BD 00 00 ?? ?? 8B 7D 3C 8D 74 3D 00 8D BE F8 00 00 00 0F B7 76 06 4E 8B 47 10 09 C0 74 55 0F B7 47 22 09 C0 74 4D 6A 04 68 00 10 00 00 FF 77 10 6A 00 FF 93 38 03 00 00 50 56 57 89 EE 03 77 0C 8B 4F 10 89 C7 89 C8 C1 E9 02 FC F3 A5 89 C1 83 E1 03 F3 A4 5F 5E 8B 04 24 89 EA 03 57 0C E8 3F 01 00 00 58 68 00 40 00 00 FF 77 10 50 FF 93 3C 03 00 00 83 C7 28 4E 75 9E BE ?? ?? ?? ?? 09 F6 0F 84 0C 01 00 00 01 EE 8B 4E 0C 09 C9 0F 84 FF 00 00 00 01 E9 89 CF 57 FF 93 30 03 00 00 09 C0 75 3D 6A 04 68 00 10 00 00 68 00 10 00 00 6A 00 FF 93 38 03 00 00 89 C6 8D 83 6F 02 00 00 57 50 56 FF 93 44 03 00 00 6A 10 6A 00 56 6A 00 FF 93 48 03 00 00 89 E5\nep_only = true\n\n[SimplePack 1.11 Method 2(NT) -> bagie[TMX]]\nsignature = 4D 5A 90 EB 01 00 52 E9 89 01 00 00 50 45 00 00 4C 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 E0 00 0F 03 0B 01\nep_only = true\n\n[SimplePack 1.2.build.30.09 (Method2) -> bagie]\nsignature = 4D 5A 90 EB 01 00 52 E9 86 01 00 00 50 45 00 00 4C 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 E0 00 0F 03 0B 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 ?? ?? ?? 00 10 00 00 00 02 00 00 01 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00\nep_only = false\n\n[SimplePack 1.21.build.09.09 (Method2) -> bagie]\nsignature = 4D 5A 90 EB 01 00 52 E9 8A 01 00 00 50 45 00 00 4C 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 E0 00 0F 03 0B 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 ?? ?? ?? 00 10 00 00 00 02 00 00 01 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00\nep_only = false\n\n[SimplePack 1.X (Method2) -> bagie]\nsignature = 4D 5A 90 EB 01 00 52 E9 ?? 01 00 00 50 45 00 00 4C 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 E0 00 0F 03 0B 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 ?? ?? ?? 00 10 00 00 00 02 00 00 01 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00\nep_only = false\n\n[SimplePack V1.1X (Method2) -> bagie]\nsignature = 4D 5A 90 EB 01 00 52 E9 89 01 00 00 50 45 00 00 4C 01 02 00\nep_only = false\n\n[SimplePack V1.1X (Method2) -> bagie]\nsignature = 4D 5A 90 EB 01 00 52 E9 89 01 00 00 50 45 00 00 4C 01 02 00 00 00 00 00 00 00 00 00 00 00 00 00 E0 00 0F 03 0B 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 00 00 00 00 ?? ?? ?? 00 10 00 00 00 02 00 00 01 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00\nep_only = false\n\n[SimplePack V1.1X-V1.2X (Method1) -> bagie]\nsignature = 60 E8 00 00 00 00 5B 8D 5B FA BD ?? ?? ?? ?? 8B 7D 3C 8D 74 3D 00 8D BE F8 00 00 00 0F B7 76 06 4E 8B 47 10 09 C0\nep_only = true\n\n[SkD Undetectabler 3 (No FSG 2 Method) -> SkD]\nsignature = 55 8B EC 81 EC 10 02 00 00 68 00 02 00 00 8D 85 F8 FD FF FF 50 6A 00 FF 15 38 10 00 01 50 FF 15 3C 10 00 01 8D 8D F8 FD FF FF 51 E8 4F FB FF FF 83 C4 04 8B 15 ?? 16 00 01 52 A1 ?? 16 00 01 50 E8 50 FF FF FF 83 C4 08 A3 ?? 16 00 01 C7 85 F4 FD FF FF 00 00 00 00 EB 0F 8B 8D F4 FD FF FF 83 C1 01 89 8D F4 FD FF FF 8B 95 F4 FD FF FF 3B 15 ?? 16 00 01 73 1C 8B 85 F4 FD FF FF 8B 0D ?? 16 00 01 8D 54 01 07 81 FA 74 10 00 01 75 02 EB 02 EB C7 8B 85 F4 FD FF FF 50 E8 ?? 00 00 00 83 C4 04 89 85 F0 FD FF FF 8B 8D F0 FD FF FF 89 4D FC C7 45 F8 00 00 00 00 EB 09 8B 55 F8 83 C2 01 89 55 F8 8B 45 F8 3B 85 F4 FD FF FF 73 15 8B 4D FC 03 4D F8 8B 15 ?? 16 00 01 03 55 F8 8A 02 88 01 EB D7 83 3D ?? 16 00 01 00 74\nep_only = true\n\n[SkD Undetectabler Pro 2.0 (No UPX Method) -> SkD]\nsignature = 55 8B EC 83 C4 F0 B8 FC 26 00 10 E8 EC F3 FF FF 6A 0F E8 15 F5 FF FF E8 64 FD FF FF E8 BB ED FF FF 8D 40\nep_only = true\n\n[SLVc0deProtector 0.60 -> SLV / ICU]\nsignature = EB 02 FA 04 E8 49 00 00 00 69 E8 49 00 00 00 95 E8 4F 00 00 00 68 E8 1F 00 00 00 49 E8 E9 FF FF FF 67 E8 1F 00 00 00 93 E8 31 00 00 00 78 E8 DD\nep_only = false\n\n[SLVc0deProtector 1.1x -> SLV / ICU]\nsignature = E8 00 00 00 00 58 C6 00 EB C6 40 01 08 FF E0 E9 4C ?? ?? 00\nep_only = true\n\n[SLVc0deProtector v0.6 -> SLV]\nsignature = ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E8 49 00 00 00 69 E8 49 00 00 00 95 E8 4F 00 00 00 68 E8 1F 00 00 00 49 E8 E9 FF FF FF 67 E8 1F 00 00 00 93 E8 31 00 00 00 78 E8 DD FF FF FF 38 E8 E3 FF FF FF 66 E8 0D 00 00 00 04 E8 E3 FF FF FF 70 E8 CB FF FF FF 69 E8 DD FF FF FF 58 E8 DD FF FF FF 69 E8 E3 FF FF FF 79 E8 BF FF FF FF 69 83 C4 40 E8 00 00 00 00 5D 81 ED 97 11 40 00 8D B5 EF 11 40 00 B9 FE 2D 00 00 8B FE AC F8 ?? ?? ?? ?? ?? ?? 90\nep_only = true\n\n[SLVc0deProtector v0.61 -> SLV]\nsignature = ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? EB 02 FA 04 E8 49 00 00 00 69 E8 49 00 00 00 95 E8 4F 00 00 00 68 E8 1F 00 00 00 49 E8 E9 FF FF FF 67 E8 1F 00\nep_only = true\n\n[SLVc0deProtector v0.61 -> SLV]\nsignature = ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? EB 02 FA 04 E8 49 00 00 00 69 E8 49 00 00 00 95 E8 4F 00 00 00 68 E8 1F 00 00 00 49 E8 E9 FF FF FF 67 E8 1F 00 00 00 93 E8 31 00 00 00 78 E8 DD FF FF FF 38 E8 E3 FF FF FF 66 E8 0D 00 00 00 04 E8 E3 FF FF FF 70 E8 CB FF FF FF 69 E8 DD FF FF FF 58 E8 DD FF FF FF 69 E8 E3 FF FF FF 79 E8 BF FF FF FF 69 83 C4 40 E8 00 00 00 00 5D 81 ED 9D 11 40 00 8D 95 B4 11 40 00 E8 CB 2E 00 00 33 C0 F7 F0 69 8D B5 05 12 40 00 B9 5D 2E 00 00 8B FE AC\nep_only = true\n\n[SLVc0deProtector v1.1 -> SLV]\nsignature = E8 00 00 00 00 58 C6 00 EB C6 40 01 08 FF E0 E9 4C\nep_only = true\n\n[SLVc0deProtector v1.1 -> SLV]\nsignature = E8 01 00 00 00 A0 5D EB 01 69 81 ED 5F 1A 40 00 8D 85 92 1A 40 00 F3 8D 95 83 1A 40 00 8B C0 8B D2 2B C2 83 E8 05 89 42 01 E8 FB FF FF FF 69 83 C4 08 E8 06 00 00 00 69 E8 F2 FF FF FF F3 B9 05 00 00 00 51 8D B5 BF 1A 40 00 8B FE B9 58 15 00 00 AC 32 C1 F6\nep_only = false\n\n[SmartE -> Microsoft]\nsignature = EB 15 03 00 00 00 ?? 00 00 00 00 00 00 00 00 00 00 00 68 00 00 00 00 55 E8 00 00 00 00 5D 81 ED 1D 00 00 00 8B C5 55 60 9C 2B 85 8F 07 00 00 89 85 83 07 00 00 FF 74 24 2C E8 BB 01 00 00 0F 82 2F 06 00 00 E8 8E 04 00 00 49 0F 88 23 06\nep_only = true\n\n[SmokesCrypt v1.2]\nsignature = 60 B8 ?? ?? ?? ?? B8 ?? ?? ?? ?? 8A 14 08 80 F2 ?? 88 14 08 41 83 F9 ?? 75 F1\nep_only = true\n\n[Soft Defender v1.0 - v1.1]\nsignature = 74 07 75 05 19 32 67 E8 E8 74 1F 75 1D E8 68 39 44 CD ?? 59 9C 50 74 0A 75 08 E8 59 C2 04 ?? 55 8B EC E8 F4 FF FF FF 56 57 53 78 0F 79 0D E8 34 99 47 49 34 33 EF 31 34 52 47 23 68 A2 AF 47 01 59 E8 ?? ?? ?? ?? 58 05 BA 01 ?? ?? 03 C8 74 BE 75 BC E8\nep_only = true\n\n[Soft Defender v1.1x -> Randy Li]\nsignature = 74 07 75 05 ?? ?? ?? ?? ?? 74 1F 75 1D ?? 68 ?? ?? ?? 00 59 9C 50 74 0A 75 08 ?? 59 C2 04 00 ?? ?? ?? E8 F4 FF FF FF ?? ?? ?? 78 0F 79 0D\nep_only = true\n\n[SoftComp 1.x -> BG Soft PT]\nsignature = E8 00 00 00 00 81 2C 24 3A 10 41 00 5D E8 00 00 00 00 81 2C 24 31 01 00 00 8B 85 2A 0F 41 00 29 04 24 8B 04 24 89 85 2A 0F 41 00 58 8B 85 2A 0F 41 00\nep_only = false\n\n[SoftDefender 1.x -> Randy Li]\nsignature = 74 07 75 05 19 32 67 E8 E8 74 1F 75 1D E8 68 39 44 CD 00 59 9C 50 74 0A 75 08 E8 59 C2 04 00 55 8B EC E8 F4 FF FF FF 56 57 53 78 0F 79 0D E8 34 99 47 49 34 33 EF 31 34 52 47 23 68 A2 AF 47 01 59 E8 01 00 00 00 FF 58 05 E6 01 00 00 03 C8 74 BD 75 BB E8 00\nep_only = true\n\n[SoftDefender V1.1x -> Randy Li]\nsignature = 74 07 75 05 19 32 67 E8 E8 74 1F 75 1D E8 68 39 44\nep_only = true\n\n[SoftProtect -> SoftProtect.by.ru]\nsignature = EB 01 E3 60 E8 03 ?? ?? ?? D2 EB 0B 58 EB 01 48 40 EB 01 35 FF E0 E7 61 60 E8 03 ?? ?? ?? 83 EB 0E EB 01 0C 58 EB 01 35 40 EB 01 36 FF E0 0B 61 EB 01 83 9C EB 01 D5 EB 08 35 9D EB 01 89 EB 03 0B EB F7 E8 ?? ?? ?? ?? 58 E8 ?? ?? ?? ?? 59 83 01 01 80 39 5C\nep_only = true\n\n[SoftProtect -> www.softprotect.by.ru]\nsignature = E8 ?? ?? ?? ?? 8D ?? ?? ?? ?? ?? C7 00 00 00 00 00 E8 ?? ?? ?? ?? E8 ?? ?? ?? ?? 8D ?? ?? ?? ?? ?? 50 E8 ?? ?? ?? ?? 83 ?? ?? ?? ?? ?? 01\nep_only = true\n\n[SoftSentry v2.11]\nsignature = 55 8B EC 83 EC ?? 53 56 57 E9 50\nep_only = true\n\n[SoftSentry v3.0]\nsignature = 55 8B EC 83 EC ?? 53 56 57 E9 B0 06\nep_only = true\n\n[Software Compress -> BG Software]\nsignature = E9 BE 00 00 00 60 8B 74 24 24 8B 7C 24 28 FC B2 80 33 DB A4 B3 02 E8 6D 00 00 00 73 F6 33 C9 E8 64 00 00 00 73 1C 33 C0 E8 5B 00 00 00 73 23 B3 02 41 B0 10 E8 4F 00 00 00 12 C0 73 F7 75 3F AA EB D4 E8 4D 00 00 00 2B CB 75 10 E8 42 00 00 00 EB 28 AC D1 E8\nep_only = true\n\n[Software Compress V1.2 ->  BG Software Protect Technologies]\nsignature = E9 BE 00 00 00 60 8B 74 24 24 8B 7C 24 28 FC B2 80 33 DB A4 B3 02 E8 6D 00 00\nep_only = true\n\n[Software Compress v1.2 -> BG Software Protect Technologies]\nsignature = E9 BE 00 00 00 60 8B 74 24 24 8B 7C 24 28 FC B2 80 33 DB A4 B3 02 E8 6D 00 00 00 73 F6 33 C9 E8 64 00 00 00 73 1C 33 C0 E8 5B 00 00 00 73 23 B3 02 41 B0 10 E8 4F 00 00 00 12 C0 73 F7 75 3F AA EB D4 E8 4D 00 00 00 2B CB 75 10 E8 42 00 00 00 EB 28 AC D1 E8 74 4D 13 C9 EB 1C 91 48 C1 E0 08 AC E8 2C 00 00 00 3D 00 7D 00 00 73 0A 80 FC 05 73 06 83 F8 7F 77 02 41 41 95 8B C5 B3 01 56 8B F7 2B F0 F3 A4 5E EB 8E 02 D2 75 05 8A 16 46 12 D2 C3 33 C9 41 E8 EE FF FF FF 13 C9 E8 E7 FF FF FF 72 F2 C3 2B 7C 24 28 89 7C 24 1C 61 C3 60 FF 74 24 24 6A 40 FF 95 1A 0F 41 00 89 44 24 1C 61 C2 04 00 E8 00 00 00 00 81 2C 24 3A 10 41 00 5D E8 00 00 00 00 81 2C 24 31 01 00 00 8B 85 2A 0F 41 00 29 04 24\nep_only = true\n\n[Software Compress v1.4 LITE -> BG Software Protect Technologies]\nsignature = E8 00 00 00 00 81 2C 24 AA 1A 41 00 5D E8 00 00 00 00 83 2C 24 6E 8B 85 5D 1A 41 00 29 04 24 8B 04 24 89 85 5D 1A 41 00 58 8B 85 5D 1A 41 00 8B 50 3C 03 D0 8B 92 80 00 00 00 03 D0 8B 4A 58 89 8D 49 1A 41 00 8B 4A 5C 89 8D 4D 1A 41 00 8B 4A 60 89 8D 55 1A\nep_only = true\n\n[Software Compress v1.4 LITE -> BG Software Protect Technologies]\nsignature = E8 00 00 00 00 81 2C 24 AA 1A 41 00 5D E8 00 00 00 00 83 2C 24 6E 8B 85 5D 1A 41 00 29 04 24 8B 04 24 89 85 5D 1A 41 00 58 8B 85 5D 1A 41 00 8B 50 3C 03 D0 8B 92 80 00 00 00 03 D0 8B 4A 58 89 8D 49 1A 41 00 8B 4A 5C 89 8D 4D 1A 41 00 8B 4A 60 89 8D 55 1A 41 00 8B 4A 64 89 8D 51 1A 41 00 8B 4A 74 89 8D 59 1A 41 00 68 00 20 00 00 E8 D2 00 00 00 50 8D 8D 00 1C 41 00 50 51 E8 1B 00 00 00 83 C4 08 58 8D 78 74 8D B5 49 1A 41 00 B9 18 00 00 00 F3 A4 05 A4 00 00 00 50 C3 60 8B 74 24 24 8B 7C 24 28 FC B2 80 33 DB A4 B3 02 E8 6D 00 00 00 73 F6 33 C9 E8 64 00 00 00 73 1C 33 C0 E8 5B 00 00 00 73 23 B3 02 41 B0 10 E8 4F 00 00 00 12 C0 73 F7 75 3F AA EB D4 E8 4D 00 00 00 2B CB 75 10 E8 42 00 00 00 EB 28 AC D1 E8 74 4D 13 C9 EB 1C 91 48 C1 E0 08 AC E8 2C 00 00 00 3D 00 7D 00 00 73 0A 80 FC 05 73 06 83 F8 7F 77 02 41 41 95 8B C5 B3 01 56 8B F7 2B F0 F3 A4 5E EB 8E 02 D2 75 05 8A 16 46 12 D2 C3 33 C9 41 E8 EE FF FF FF 13 C9 E8 E7 FF FF FF 72 F2 C3 2B 7C 24 28 89 7C 24 1C 61 C3 60 FF 74 24 24 6A 40 FF 95 4D 1A 41 00 89 44 24 1C 61 C2 04\nep_only = true\n\n[SoftWrap]\nsignature = 52 53 51 56 57 55 E8 ?? ?? ?? ?? 5D 81 ED 36 ?? ?? ?? E8 ?? 01 ?? ?? 60 BA ?? ?? ?? ?? E8 ?? ?? ?? ?? 5F\nep_only = true\n\n[SOFTWrapper for Win9x/NT (Evaluation Version)]\nsignature = E8 00 00 00 00 5D 8B C5 2D ?? ?? ?? 00 50 81 ED 05 00 00 00 8B C5 2B 85 03 0F 00 00 89 85 03 0F 00 00 8B F0 03 B5 0B 0F 00 00 8B F8 03 BD 07 0F 00 00 83 7F 0C 00 74 2B 56 57 8B 7F 10 03 F8 8B 76 10 03 F0 83 3F 00 74 0C 8B 1E 89 1F 83 C6 04 83 C7 04 EB EF\nep_only = true\n\n[SPEC b2]\nsignature = 55 57 51 53 E8 ?? ?? ?? ?? 5D 8B C5 81 ED ?? ?? ?? ?? 2B 85 ?? ?? ?? ?? 83 E8 09 89 85 ?? ?? ?? ?? 0F B6\nep_only = true\n\n[SPEC b3]\nsignature = 5B 53 50 45 43 5D E8 ?? ?? ?? ?? 5D 8B C5 81 ED 41 24 40 ?? 2B 85 89 26 40 ?? 83 E8 0B 89 85 8D 26 40 ?? 0F B6 B5 91 26 40 ?? 8B FD\nep_only = true\n\n[Special EXE Password Protector v1.0]\nsignature = 60 E8 00 00 00 00 5D 81 ED 06 00 00 00 89 AD 8C 01 00 00 8B C5 2B 85 FE 75 00 00 89 85 3E 77\nep_only = true\n\n[Special EXE Pasword Protector V1.01 (Eng) -> Pavol Cerven]\nsignature = 60 E8 00 00 00 00 5D 81 ED 06 00 00 00 89 AD 8C 01 00 00 8B C5 2B 85 FE 75 00 00 89 85 3E\nep_only = true\n\n[Special EXE Pasword Protector v1.01 (Eng) -> Pavol Cerven]\nsignature = 60 E8 00 00 00 00 5D 81 ED 06 00 00 00 89 AD 8C 01 00 00 8B C5 2B 85 FE 75 00 00 89 85 3E 77 00 00 8D 95 C6 77 00 00 8D 8D FF 77 00 00 55 68 00 20 00 00 51 52 6A 00 FF 95 04 7A 00 00 5D 6A 00 FF 95 FC 79 00 00 8D 8D 60 78 00 00 8D 95 85 01 00 00 55 68 00\nep_only = true\n\n[Splash Bitmap v1.00 (With Unpack Code) --> BoB / Bobsoft]\nsignature = E8 00 00 00 00 60 8B 6C 24 20 55 81 ED ?? ?? ?? ?? 8D BD ?? ?? ?? ?? 8D 8D ?? ?? ?? ?? 29 F9 31 C0 FC F3 AA 8B 04 24 48 66 25 00 F0 66 81 38 4D 5A 75 F4 8B 48 3C 81 3C 01 50 45 00 00 75 E8 89 85 ?? ?? ?? ?? 6A 40\nep_only = true\n\n[Splash Bitmap v1.00 --> BoB / Bobsoft]\nsignature = E8 00 00 00 00 60 8B 6C 24 20 55 81 ED ?? ?? ?? ?? 8D BD ?? ?? ?? ?? 8D 8D ?? ?? ?? ?? 29 F9 31 C0 FC F3 AA 8B 04 24 48 66 25 00 F0 66 81 38 4D 5A 75 F4 8B 48 3C 81 3C 01 50 45 00 00 75 E8 89 85 ?? ?? ?? ?? 8D BD ?? ?? ?? ?? 6A 00\nep_only = true\n\n[Splasher v1.0 - v3.0]\nsignature = 9C 60 8B 44 24 24 E8 ?? ?? ?? ?? 5D 81 ED ?? ?? ?? ?? 50 E8 ED 02 ?? ?? 8C C0 0F 84\nep_only = true\n\n[SPLayer v0.08]\nsignature = 8D 40 00 B9 ?? ?? ?? ?? 6A ?? 58 C0 0C ?? ?? 48 ?? ?? 66 13 F0 91 3B D9 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00\nep_only = false\n\n[Splice 1.1 - by Tw1sted L0gic]\nsignature = 68 00 1A 40 00 E8 EE FF FF FF 00 00 00 00 00 00 30 00 00 00 40 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 01 00 00 00 ?? ?? ?? ?? ?? ?? 50 72 6F 6A 65 63 74 31 00 ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 06 00 00 00 AC 29 40 00 07 00 00 00 BC 28 40 00 07 00 00 00 74 28 40 00 07 00 00 00 2C 28 40 00 07 00 00 00 08 23 40 00 01 00 00 00 38 21 40 00 00 00 00 00 FF FF FF FF FF FF FF FF 00 00 00 00 8C 21 40 00 08 ?? 40 00 01 00 00 00 AC 19 40 00 00 00 00 00 00 00 00 00 00 00 00 00 AC 19 40 00 4F 00 43 00 50 00 00 00 E7 AF 58 2F 9A 4C 17 4D B7 A9 CA 3E 57 6F F7 76\nep_only = true\n\n[ST Protector V1.5 -> Silent Software]\nsignature = 00 00 00 00 4B 65 52 6E 45 6C 33 32 2E 64 4C 6C 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00\nep_only = false\n\n[StarForce 3.0 -> StarForce Technology]\nsignature = 68 ?? ?? ?? ?? FF 25 ?? ?? 63\nep_only = true\n\n[StarForce ProActive 1.1 -> StarForce Technology]\nsignature = 68 ?? ?? ?? ?? FF 25 ?? ?? 57\nep_only = true\n\n[StarForce Protection Driver -> Protection Technology]\nsignature = 57 68 ?? 0D 01 00 68 00 ?? ?? 00 E8 50 ?? FF FF 68 ?? ?? ?? 00 68 ?? ?? ?? 00 68 ?? ?? ?? 00 68 ?? ?? ?? 00 68 ?? ?? ?? 00\nep_only = true\n\n[StarForce V1.X-V3.X -> StarForce Copy Protection System]\nsignature = 68 ?? ?? ?? ?? FF 25 ?? ?? ?? ?? 00 00 00 00 00\nep_only = true\n\n[StarForce V3.X DLL -> StarForce Copy Protection System]\nsignature = E8 ?? ?? ?? ?? 00 00 00 00 00 00\nep_only = true\n\n[Ste@lth PE 1.01 -> BGCorp]\nsignature = ?? ?? ?? ?? ?? BA ?? ?? ?? 00\nep_only = true\n\n[Stealth PE v1.1]\nsignature = BA ?? ?? ?? 00 FF E2 BA ?? ?? ?? 00 B8 ?? ?? ?? ?? 89 02 83 C2 03 B8 ?? ?? ?? ?? 89 02 83 C2 FD FF E2\nep_only = true\n\n[STNPEE 1.13]\nsignature = 55 57 56 52 51 53 E8 00 00 00 00 5D 8B D5 81 ED 97 3B 40 00\nep_only = true\n\n[Stone's PE Encryptor v1.0]\nsignature = 55 57 56 52 51 53 E8 ?? ?? ?? ?? 5D 8B D5 81 ED 63 3A 40 ?? 2B 95 C2 3A 40 ?? 83 EA 0B 89 95 CB 3A 40 ?? 8D B5 CA 3A 40 ?? 0F B6 36\nep_only = true\n\n[Stone's PE Encryptor v1.13]\nsignature = 55 57 56 52 51 53 E8 ?? ?? ?? ?? 5D 8B D5 81 ED 97 3B 40 ?? 2B 95 2D 3C 40 ?? 83 EA 0B 89 95 36 3C 40 ?? 01 95 24 3C 40 ?? 01 95 28\nep_only = true\n\n[Stone's PE Encryptor v2.0]\nsignature = 53 51 52 56 57 55 E8 ?? ?? ?? ?? 5D 81 ED 42 30 40 ?? FF 95 32 35 40 ?? B8 37 30 40 ?? 03 C5 2B 85 1B 34 40 ?? 89 85 27 34 40 ?? 83\nep_only = true\n\n[Stone`s PE Encruptor v1.13]\nsignature = 55 57 56 52 51 53 E8 ?? ?? ?? ?? 5D 8B D5 81\nep_only = true\n\n[STUD RC4 1.0 Jamie Edition (ScanTime UnDetectable) - by MarjinZ]\nsignature = 68 2C 11 40 00 E8 F0 FF FF FF 00 00 00 00 00 00 30 00 00 00 38 00 00 00 00 00 00 00 37 BB 71 EC A4 E1 98 4C 9B FE 8F 0F FA 6A 07 F6 00 00 00 00 00 00 01 00 00 00 20 20 46 6F 72 20 73 74 75 64 00 20 54 6F 00 00 00 00 06 00 00 00 CC 1A 40 00 07 00 00 00 D4 18 40 00 07 00 00 00 7C 18 40 00 07 00 00 00 2C 18 40 00 07 00 00 00 E0 17 40 00 56 42 35 21 F0 1F 2A 00 00 00 00 00 00 00 00 00 00 00 00 00 7E 00 00 00 00 00 00 00 00 00 00 00 00 00 0A 00 09 04 00 00 00 00 00 00 E8 13 40 00 F4 13 40 00 00 F0 30 00 00 FF FF FF 08 00 00 00 01 00 00 00 00 00 00 00 E9 00 00 00 04 11 40 00 04 11 40 00 C8 10 40 00 78 00 00 00 7C 00 00 00 81 00 00 00 82 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 61 61 61 00 53 74 75 64 00 00 73 74 75 64 00 00 01 00 01 00 30 16 40 00 00 00 00 00 FF FF FF FF FF FF FF FF 00 00 00 00 B4 16 40 00 10 30 40 00 07 00 00 00 24 12 40 00 0E 00 20 00 00 00 00 00 1C 9E 21 00 EC 11 40 00 5C 10 40 00 E4 1A 40 00 2C 34 40 00 68 17 40 00 58 17 40 00 78 17 40 00 8C 17 40 00 8C 10 40 00 62 10 40 00 92 10 40 00 F8 1A 40 00 24 19 40 00 98 10 40 00 9E 10 40 00 77 04 18 FF 04 1C FF 05 00 00 24 01 00 0D 14 00 78 1C 40 00 48 21 40 00\nep_only = true\n\n[SuckStop v1.11]\nsignature = EB ?? ?? ?? BE ?? ?? B4 30 CD 21 EB ?? 9B\nep_only = true\n\n[SuperDAT]\nsignature = 55 8B EC 6A FF 68 40 F3 42 00 68 A4 BF 42 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8 FF 15 08 F2 42 00 33 D2 8A D4 89 15 60 42 43 00 8B C8 81 E1 FF 00 00 00 89 0D\nep_only = true\n\n[SVK Protector v1.32 (Eng) -> Pavol Cerven]\nsignature = 60 E8 00 00 00 00 5D 81 ED 06 00 00 00 EB 05 B8 06 36 42 00 64 A0 23 00 00 00 EB 03 C7 84 E8 84 C0 EB 03 C7 84 E9 75 67 B9 49 00 00 00 8D B5 C5 02 00 00 56 80 06 44 46 E2 FA 8B 8D C1 02 00 00 5E 55 51 6A 00 56 FF 95 0C 61 00 00 59 5D 40 85 C0 75 3C 80 3E\nep_only = true\n\n[SVK Protector v1.3x (Eng) -> Pavol Cerven]\nsignature = 60 E8 00 00 00 00 5D 81 ED 06 00 00 00 EB 05 B8 ?? ?? 42 00 64 A0 23 00 00 00 EB 03 C7 84 E8 84 C0 EB 03 C7 84 E9 75 67 B9 49 00 00 00 8D B5 C5 02 00 00 56 80 06 44 46 E2 FA 8B 8D C1 02 00 00 5E 55 51 6A 00 56 FF 95 0C 61 00 00 59 5D 40 85 C0 75 3C 80 3E\nep_only = true\n\n[SVK Protector V1.3X -> Pavol Cerven]\nsignature = 60 E8 00 00 00 00 5D 81 ED 06 00 00 00 EB 05 B8 ?? ?? 42 00 64 A0 23 00 00 00 EB 03 C7 84 E8 84 C0 EB 03 C7 84 E9 75 67 B9 49 00 00 00 8D B5 C5 02 00 00 56 80 06 44 46 E2 FA 8B 8D C1 02 00 00 5E 55 51 6A 00 56 FF 95 0C 61 00 00 59 5D 40 85 C0 75 3C 80 3E 00 74 03 46 EB F8 46 E2 E3 8B C5 8B 4C 24 20 2B 85 BD 02 00 00 89 85 B9 02 00 00 80 BD B4 02 00 00 01 75 06 8B 8D 0C 61 00 00 89 8D B5 02 00 00 8D 85 0E 03 00 00 8B DD FF E0 55 68 10 10 00 00 8D 85 B4 00 00 00 50 8D 85 B4 01 00 00 50 6A 00 FF 95 18 61 00 00 5D 6A FF FF 95 10 61 00 00 44 65 62 75 67 67 65 72 20 6F 72 20 74 6F 6F 6C 20 66 6F 72 20 6D 6F 6E 69 74 6F 72 69 6E 67 20 64 65 74 65 63 74 65 64 21 21 21 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = true\n\n[SVK-Protector v1.051]\nsignature = 60 EB 03 C7 84 E8 EB 03 C7 84 9A E8 00 00 00 00 5D 81 ED 10 00 00 00 EB 03 C7 84 E9 64 A0 23 00 00 00 EB\nep_only = true\n\n[SVK-Protector v1.11]\nsignature = 60 E8 ?? ?? ?? ?? 5D 81 ED 06 ?? ?? ?? 64 A0 23\nep_only = true\n\n[SVK-Protector v1.32]\nsignature = 60 E8 00 00 00 00 5D 81 ED 06 00 00 00 EB 05 B8 06 36 42 00 64 A0 23\nep_only = true\n\n[T-PACK v0.5c -m1]\nsignature = 68 ?? ?? FD 60 BE ?? ?? BF ?? ?? B9 ?? ?? F3 A4 8B F7 BF ?? ?? FC 46 E9 8E FE\nep_only = true\n\n[T-PACK v0.5c -m2]\nsignature = 68 ?? ?? FD 60 BE ?? ?? BF ?? ?? B9 ?? ?? F3 A4 8B F7 BF ?? ?? FC 46 E9 CE FD\nep_only = true\n\n[tElock 0.51 -> tE!]\nsignature = C1 EE 00 66 8B C9 EB 01 EB 60 EB 01 EB 9C E8 00 00 00 00 5E 83 C6 5E 8B FE 68 79 01 00 00 59 EB 01 EB AC 54 E8 03 00 00 00 5C EB 08 8D 64 24 04 FF 64 24 FC 6A 05 D0 2C 24 72 01 E8 01 24 24 5C F7 DC EB 02 CD 20 8D 64 24 FE F7 DC EB 02 CD 20 FE C8 E8 00 00 00 00 32 C1 EB 02 82 0D AA EB 03 82 0D 58 EB 02 1D 7A 49 EB 05 E8 01 00 00 00 7F AE 14 7E A0 77 76 75 74\nep_only = true\n\n[tElock 0.96 -> tE!]\nsignature = E9 59 E4 FF FF 00 00 00 00 00 00 00 ?? ?? ?? ?? EE ?? ?? 00 00 00 00 00 00 00 00 00 0E ?? ?? 00 FE ?? ?? 00 F6 ?? ?? 00 00 00 00 00 00 00 00 00 1B ?? ?? 00 06 ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 26 ?? ?? 00 00 00 00 00 39 ?? ?? 00 00 00 00 00 26 ?? ?? 00 00 00 00 00 39 ?? ?? 00 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C\nep_only = true\n\n[tElock 0.98 -> tE!]\nsignature = E9 25 E4 FF FF 00 00 00 ?? ?? ?? ?? 1E ?? ?? 00 00 00 00 00 00 00 00 00 3E ?? ?? 00 2E ?? ?? 00 26 ?? ?? 00 00 00 00 00 00 00 00 00 4B ?? ?? 00 36 ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 56 ?? ?? 00 00 00 00 00 69 ?? ?? 00 00 00 00 00 56 ?? ?? 00 00 00 00 00 69 ?? ?? 00 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 75 73 65\nep_only = true\n\n[tElock 0.98 Special Build -> forgot & heXer]\nsignature = E9 99 D7 FF FF 00 00 00 ?? ?? ?? ?? AA ?? ?? 00 00 00 00 00 00 00 00 00 CA\nep_only = true\n\n[tElock 0.99 - 1.0 private -> tE!]\nsignature = E9 ?? ?? FF FF 00 00 00 ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00\nep_only = true\n\n[tElock 0.99 -> tE!]\nsignature = E9 5E DF FF FF 00 00 00 ?? ?? ?? ?? E5 ?? ?? 00 00 00 00 00 00 00 00 00 05\nep_only = true\n\n[tElock 0.99c (Private ECLIPSE) -> tE!]\nsignature = E9 3F DF FF FF 00 00 00 ?? ?? ?? ?? 04 ?? ?? 00 00 00 00 00 00 00 00 00 24 ?? ?? 00 14 ?? ?? 00 0C ?? ?? 00 00 00 00 00 00 00 00 00 31 ?? ?? 00 1C ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3C ?? ?? 00 00 00 00 00 4F ?? ?? 00 00 00 00 00 3C ?? ?? 00 00 00 00 00 4F ?? ?? 00 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 75 73 65\nep_only = true\n\n[tElock v0.41x]\nsignature = 66 8B C0 8D 24 24 EB 01 EB 60 EB 01 EB 9C E8 00 00 00 00 5E 83 C6 50 8B FE 68 78 01 ?? ?? 59 EB 01 EB AC 54 E8 03 ?? ?? ?? 5C EB 08\nep_only = true\n\n[tElock v0.42]\nsignature = C1 EE 00 66 8B C9 EB 01 EB 60 EB 01 EB 9C E8 00 00 00 00 5E 83 C6 52 8B FE 68 79 01 59 EB 01 EB AC 54 E8 03 5C EB 08\nep_only = true\n\n[tElock v0.4x - v0.5x]\nsignature = C1 EE 00 66 8B C9 EB 01 EB 60 EB 01 EB 9C E8 00 00 00 00 5E 83 C6 ?? 8B FE 68 79 01 ?? ?? 59 EB 01\nep_only = true\n\n[tElock v0.51]\nsignature = C1 EE 00 66 8B C9 EB 01 EB 60 EB 01 EB 9C E8 00 00 00 00 5E 83 C6 5E 8B FE 68 79 01 59 EB 01 EB AC 54 E8 03 5C EB 08\nep_only = true\n\n[tElock v0.60]\nsignature = E9 00 00 00 00 60 E8 00 00 00 00 58 83 C0 08\nep_only = true\n\n[tElock v0.70]\nsignature = 60 E8 BD 10 00 00 C3 83 E2 00 F9 75 FA 70\nep_only = true\n\n[tElock v0.71]\nsignature = 60 E8 ED 10 00 00 C3 83\nep_only = true\n\n[tElock v0.71b2]\nsignature = 60 E8 44 11 00 00 C3 83\nep_only = true\n\n[tElock v0.71b7]\nsignature = 60 E8 48 11 00 00 C3 83\nep_only = true\n\n[tElock v0.80]\nsignature = 60 E8 F9 11 00 00 C3 83\nep_only = true\n\n[tElock v0.85f]\nsignature = 60 E8 02 00 00 00 CD 20 E8 00 00 00 00 5E 2B C9 58 74 02\nep_only = true\n\n[tElock v0.90]\nsignature = ?? ?? E8 02 00 00 00 E8 00 E8 00 00 00 00 5E 2B\nep_only = true\n\n[tElock v0.98]\nsignature = E9 25 E4 FF FF 00 00 00 ?? ?? ?? ?? 1E\nep_only = true\n\n[tElock v0.98 -> tE!]\nsignature = E9 25 E4 FF FF 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? 00 00 00 00 ?? ?? ?? ?? 00\nep_only = true\n\n[tElock v0.99]\nsignature = E9 ?? ?? FF FF 00 00 00 ?? ?? ?? ?? ?? ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? 02 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? 00 00 00 00 00 ?? ?? 02 00 00\nep_only = true\n\n[tElock v0.99 Special Build -> heXer & forgot]\nsignature = E9 5E DF FF FF 00 00 00 ?? ?? ?? ?? E5 ?? ?? 00 00 00 00 00 00 00 00 00 05 ?? ?? 00 F5 ?? ?? 00 ED ?? ?? 00 00 00 00 00 00 00 00 00 12 ?? ?? 00 FD ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1D ?? ?? 00 00 00 00 00 30 ?? ?? 00 00\nep_only = true\n\n[tElock v0.99 Special Build -> heXer & forgot]\nsignature = E9 5E DF FF FF 00 00 00 ?? ?? ?? ?? E5 ?? ?? 00 00 00 00 00 00 00 00 00 05 ?? ?? 00 F5 ?? ?? 00 ED ?? ?? 00 00 00 00 00 00 00 00 00 12 ?? ?? 00 FD ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1D ?? ?? 00 00 00 00 00 30 ?? ?? 00 00 00 00 00 1D ?? ?? 00 00 00 00 00 30 ?? ?? 00 00 00 00 00\nep_only = true\n\n[The Guard Library]\nsignature = 50 E8 ?? ?? ?? ?? 58 25 ?? F0 FF FF 8B C8 83 C1 60 51 83 C0 40 83 EA 06 52 FF 20 9D C3\nep_only = true\n\n[TheHyper's protector -> TheHyper]\nsignature = 55 8B EC 83 EC 14 8B FC E8 14 00 00 00 ?? ?? 01 01 ?? ?? 01 01 ?? ?? ?? 00 ?? ?? 01 01 ?? ?? 02 01 5E E8 0D 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 8B 46 04 FF 10 8B D8 E8 0D 00 00 00 56 69 72 74 75 61 6C 41 6C 6C 6F 63 00 53 8B 06 FF 10 89 07 E8\nep_only = true\n\n[Themida -> Oreans Technologies 2004]\nsignature = B8 00 00 00 00 60 0B C0 74 58 E8 00 00 00 00 58 05 43 00 00 00 80 38 E9 75 03 61 EB 35 E8\nep_only = true\n\n[themida 1.0.0.5 -> http://www.oreans.com]\nsignature = B8 00 00 00 00 60 0B C0 74 58 E8 00 00 00 00 58 05 43 00 00 00 80 38 E9 75 03 61 EB 35 E8 00 00 00 00 58 25 00 F0 FF FF 33 FF 66 BB 19 5A 66 83 C3 34 66 39 18 75 12 0F B7 50 3C 03 D0 BB E9 44\nep_only = true\n\n[Themida 1.0.x.x - 1.8.0.0 (compressed engine) -> Oreans Technologies]\nsignature = B8 ?? ?? ?? ?? 60 0B C0 74 58 E8 00 00 00 00 58 05 43 00 00 00 80 38 E9 75 03 61 EB 35 E8 00 00 00 00 58 25 00 F0 FF FF 33 FF 66 BB 19 5A 66 83 C3 34 66 39 18 75 12 0F B7 50 3C 03 D0 BB E9 44 00 00 83 C3 67 39 1A 74 07 2D 00 10 00 00 EB DA 8B F8 B8\nep_only = true\n\n[Themida 1.0.x.x - 1.8.0.0 (compressed engine) -> Oreans Technologies]\nsignature = B8 ?? ?? ?? ?? 60 0B C0 74 58 E8 00 00 00 00 58 05 43 00 00 00 80 38 E9 75 03 61 EB 35 E8 00 00 00 00 58 25 00 F0 FF FF 33 FF 66 BB 19 5A 66 83 C3 34 66 39 18 75 12 0F B7 50 3C 03 D0 BB E9 44 00 00 83 C3 67 39 1A 74 07 2D 00 10 00 00 EB DA 8B F8 B8 ?? ?? ?? ?? 03 C7 B9 5A ?? ?? ?? 03 CF EB 0A B8 ?? ?? ?? ?? B9 5A ?? ?? ?? 50 51 E8 84 00 00 00 E8 00 00 00 00 58 2D 26 00 00 00 B9 EF 01 00 00 C6 00 E9 83 E9 05 89 48 01 61 E9 AF 01\nep_only = true\n\n[Themida 1.0.x.x - 1.8.x.x (no compression) -> Oreans Technologies]\nsignature = 55 8B EC 83 C4 D8 60 E8 00 00 00 00 5A 81 EA ?? ?? ?? ?? 8B DA C7 45 D8 00 00 00 00 8B 45 D8 40 89 45 D8 81 7D D8 80 00 00 00 74 0F 8B 45 08 89 83 ?? ?? ?? ?? FF 45 08 43 EB E1 89 45 DC 61 8B 45 DC C9 C2 04 00 55 8B EC 81 C4 7C FF FF FF 60 E8 00 00 00 00\nep_only = false\n\n[Themida 1.0.x.x - 1.8.x.x (no compression) -> Oreans Technologies]\nsignature = 55 8B EC 83 C4 D8 60 E8 00 00 00 00 5A 81 EA ?? ?? ?? ?? 8B DA C7 45 D8 00 00 00 00 8B 45 D8 40 89 45 D8 81 7D D8 80 00 00 00 74 0F 8B 45 08 89 83 ?? ?? ?? ?? FF 45 08 43 EB E1 89 45 DC 61 8B 45 DC C9 C2 04 00 55 8B EC 81 C4 7C FF FF FF 60 E8 00 00 00 00 5A 81 EA ?? ?? ?? ?? 8D 45 80 8B 5D 08 C7 85 7C FF FF FF 00 00 00 00 8B 8D 7C FF FF FF D1 C3 88 18 41 89 8D 7C FF FF FF 81 BD 7C FF FF FF 80 00 00 00 75 E3 C7 85 7C FF FF FF 00 00 00 00 8D BA ?? ?? ?? ?? 8D 75 80 8A 0E BB F4 01 00 00 B8 AB 37 54 78 D3 D0 8A 0F D3 D0 4B 75 F7 0F AF C3 47 46 8B 8D 7C FF FF FF 41 89 8D 7C FF FF FF 81 F9 80 00 00 00 75 D1 61 C9 C2 04 00 55 8B EC 83 C4 F0 8B 75 08 C7 45 FC 00 00 00 00 EB 04 FF 45 FC 46 80 3E 00 75 F7 BA 00 00 00 00 8B 75 08 8B 7D 0C EB 7F C7 45 F8 00 00 00 00 EB\nep_only = false\n\n[Themida 1.2.0.1 (compressed) -> Oreans Technologies]\nsignature = B8 00 00 ?? ?? 60 0B C0 74 58 E8 00 00 00 00 58 05 43 00 00 00 80 38 E9 75 03 61 EB 35 E8 00 00 00 00 58 25 00 F0 FF FF 33 FF 66 BB 19 5A 66 83 C3 34 66 39 18 75 12 0F B7 50 3C 03 D0 BB E9 44 00 00 83 C3 67 39 1A 74 07 2D 00 10 00 00 EB DA 8B F8 B8\nep_only = true\n\n[Themida 1.2.0.1 -> Oreans Technologies]\nsignature = 8B C5 8B D4 60 E8 00 00 00 00 5D 81 ED ?? ?? 35 09 89 95 ?? ?? 35 09 89 B5 ?? ?? 35 09 89 85 ?? ?? 35 09 83 BD ?? ?? 35 09 00 74 0C 8B E8 8B E2 B8 01 00 00 00 C2 0C 00 8B 44 24 24 89 85 ?? ?? 35 09 6A 45 E8 A3 00 00 00 68 9A 74 83 07 E8 DF 00 00 00 68 25\nep_only = false\n\n[Themida 1.8.x.x -> Oreans Technologies]\nsignature = B8 ?? ?? ?? ?? 60 0B C0 74 68 E8 00 00 00 00 58 05 53 00 00 00 80 38 E9 75 13 61 EB 45 DB 2D 37 ?? ?? ?? FF FF FF FF FF FF FF FF 3D 40 E8 00 00 00 00 58 25 00 F0 FF FF 33 FF 66 BB 19 5A 66 83 C3 34 66 39 18 75 12 0F B7 50 3C 03 D0 BB E9 44 00 00 83 C3 67\nep_only = true\n\n[Themida 1.8.x.x -> Oreans Technologies]\nsignature = B8 ?? ?? ?? ?? 60 0B C0 74 68 E8 00 00 00 00 58 05 53 00 00 00 80 38 E9 75 13 61 EB 45 DB 2D 37 ?? ?? ?? FF FF FF FF FF FF FF FF 3D 40 E8 00 00 00 00 58 25 00 F0 FF FF 33 FF 66 BB 19 5A 66 83 C3 34 66 39 18 75 12 0F B7 50 3C 03 D0 BB E9 44 00 00 83 C3 67 39 1A 74 07 2D 00 10 00 00 EB DA 8B F8 B8 ?? ?? ?? ?? 03 C7 B9 ?? ?? ?? ?? 03 CF EB 0A B8 ?? ?? ?? ?? B9 ?? ?? ?? ?? 50 51 E8 84 00 00 00 E8 00 00 00 00 58 2D 26 00 00 00 B9 EF 01 00 00 C6 00 E9 83 E9 05 89 48 01 61 E9\nep_only = true\n\n[Themida/WinLicense V1.0.0.0-V1.8.0.0-> Oreans Technologies]\nsignature = B8 00 00 00 00 60 0B C0 74 58 E8 00 00 00 00 58 05 ?? 00 00 00 80 38 E9 75 ?? 61 EB ?? E8 00 00 00 00\nep_only = true\n\n[Themida/WinLicense V1.0.X-V1.7.X DLL -> Oreans Technologies]\nsignature = B8 ?? ?? ?? ?? 60 0B C0 74 58 E8 00 00 00 00 58 05 ?? ?? ?? ?? 80 38 E9 75 03 61 EB 35 E8 00 00 00 00 58 25 00 F0 FF FF 33 FF 66 BB ?? ?? 66 83 ?? ?? 66 39 18 75 12 0F B7 50 3C 03 D0 BB ?? ?? ?? ?? 83 C3 ?? 39 1A 74 07 2D 00 10 00 00 EB DA 8B F8 B8 ?? ?? ?? ?? 03 C7 B9 ?? ?? ?? ?? 03 CF EB 0A B8 ?? ?? ?? ?? B9 ?? ?? ?? ?? 50 51 E8 84 00 00 00 E8 00 00 00 00 58 2D ?? ?? ?? ?? B9 ?? ?? ?? ?? C6 00 E9 83 E9 ?? 89 48 01 61 E9\nep_only = true\n\n[Themida/WinLicense V1.8.0.2 + -> Oreans Technologies]\nsignature = B8 00 00 00 00 60 0B C0 74 68 E8 00 00 00 00 58 05 ?? 00 00 00 80 38 E9 75 ?? 61 EB ?? DB 2D ?? ?? ?? ?? FF FF FF FF FF FF FF FF 3D 40 E8 00 00 00 00\nep_only = true\n\n[Themida/WinLicense V1.8.X-V1.9.X  -> Oreans Technologies]\nsignature = B8 ?? ?? ?? ?? 60 0B C0 74 68 E8 00 00 00 00 58 05 53 00 00 00 80 38 E9 75 13 61 EB 45 DB 2D ?? ?? ?? ?? FF FF FF FF FF FF FF FF 3D ?? ?? ?? ?? 00 00 58 25 00 F0 FF FF 33 FF 66 BB ?? ?? 66 83 ?? ?? 66 39 18 75 12 0F B7 50 3C 03 D0 BB ?? ?? ?? ?? 83 C3 ?? 39 1A 74 07 2D ?? ?? ?? ?? EB DA 8B F8 B8 ?? ?? ?? ?? 03 C7 B9 ?? ?? ?? ?? 03 CF EB 0A B8 ?? ?? ?? ?? B9 ?? ?? ?? ?? 50 51 E8 ?? ?? ?? ?? E8 ?? ?? ?? ?? 58 2D ?? ?? ?? ?? B9 ?? ?? ?? ?? C6 00 E9 83 E9 05 89 48 01 61 E9\nep_only = true\n\n[Themida/WinLicense V1.X NoCompression SecureEngine -> Oreans Technologies]\nsignature = 8B C5 8B D4 60 E8 00 00 00 00 5D 81 ED ?? ?? ?? ?? 89 95 ?? ?? ?? ?? 89 B5 ?? ?? ?? ?? 89 85 ?? ?? ?? ?? 83 BD ?? ?? ?? ?? ?? 74 0C 8B E8 8B E2 B8 01 00 00 00 C2 0C 00 8B 44 24 24 89 85 ?? ?? ?? ?? 6A 45 E8 A3 00 00 00 68 9A 74 83 07 E8 DF 00 00 00 68 25 4B 89 0A E8 D5 00 00 00 E9 ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[theWRAP - by TronDoc]\nsignature = 55 8B EC 83 C4 F0 53 56 57 33 C0 89 45 F0 B8 48 D2 4B 00 E8 BC 87 F4 FF BB 04 0B 4D 00 33 C0 55 68 E8 D5 4B 00 64 FF 30 64 89 20 E8 9C F4 FF FF E8 F7 FB FF FF 6A 40 8D 55 F0 A1 F0 ED 4B 00 8B 00 E8 42 2E F7 FF 8B 4D F0 B2 01 A1 F4 C2 40 00 E8 F7 20 F5 FF 8B F0 B2 01 A1 B4 C3 40 00 E8 F1 5B F4 FF 89 03 33 D2 8B 03 E8 42 1E F5 FF 66 B9 02 00 BA FC FF FF FF 8B C6 8B 38 FF 57 0C BA B8 A7 4D 00 B9 04 00 00 00 8B C6 8B 38 FF 57 04 83 3D B8 A7 4D 00 00 0F 84 5E 01 00 00 8B 15 B8 A7 4D 00 83 C2 04 F7 DA 66 B9 02 00 8B C6 8B 38 FF 57 0C 8B 0D B8 A7 4D 00 8B D6 8B 03 E8 2B 1F F5 FF 8B C6 E8 B4 5B F4 FF 33 D2 8B 03 E8 DF 1D F5 FF BA F0 44 4E 00 B9 01 00 00 00 8B 03 8B 30 FF 56 04 80 3D F0 44 4E 00 0A 75 3F BA B8 A7 4D 00 B9 04 00 00 00 8B 03 8B 30 FF 56 04 8B 15 B8 A7\nep_only = true\n\n[Thinstall 2.4x - 2.5x -> Jitit Software]\nsignature = 55 8B EC B8 ?? ?? ?? ?? BB ?? ?? ?? ?? 50 E8 00 00 00 00 58 2D ?? ?? ?? ?? B9 ?? ?? ?? ?? BA ?? ?? ?? ?? BE ?? ?? ?? ?? BF ?? ?? ?? ?? BD ?? ?? ?? ?? 03 E8\nep_only = true\n\n[Thinstall 2.5 -> ???]\nsignature = 55 8B EC B8 ?? ?? ?? ?? BB ?? ?? ?? ?? 50 E8 00 00 00 00 58 2D A7 1A 00 00 B9 6C 1A 00 00 BA 20 1B 00 00 BE 00 10 00 00 BF B0 53 00 00 BD EC 1A 00 00 03 E8 81 75 00 ?? ?? ?? ?? 81 75 04 ?? ?? ?? ?? 81 75 08 ?? ?? ?? ?? 81 75 0C ?? ?? ?? ?? 81 75 10\nep_only = true\n\n[Thinstall 2.5xx -> Jtit]\nsignature = 55 8B EC B8 ?? ?? ?? ?? BB ?? ?? ?? ?? 50 E8 00 00 00 00 58 2D ?? 1A 00 00 B9 ?? 1A 00 00 BA ?? 1B 00 00 BE 00 10 00 00 BF ?? 53 00 00 BD ?? 1A 00 00 03 E8 81 75 00 ?? ?? ?? ?? ?? 75 04 ?? ?? ?? ?? 81 75 08 ?? ?? ?? ?? 81 75 0C ?? ?? ?? ?? 81 75 10\nep_only = true\n\n[Thinstall 2.5xx -> Jtit]\nsignature = 55 8B EC B8 ?? ?? ?? ?? BB ?? ?? ?? ?? 50 E8 00 00 00 00 58 2D ?? 1A 00 00 B9 ?? 1A 00 00 BA ?? 1B 00 00 BE 00 10 00 00 BF ?? 53 00 00 BD ?? 1A 00 00 03 E8 81 75 00 ?? ?? ?? ?? ?? 75 04 ?? ?? ?? ?? 81 75 08 ?? ?? ?? ?? 81 75 0C ?? ?? ?? ?? 81 75 10 ?? ?? ?? ?? 03 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 3B F1 7C 04 3B F2 7C 02 89 2E 83 C6 04 3B F7 7C E3 58 50 68 00 00 40 00 68 80 5A\nep_only = true\n\n[Thinstall 2.628 -> Jtit]\nsignature = E8 00 00 00 00 58 BB 34 1D 00 00 2B C3 50 68 00 00 40 00 68 00 40 00 00 68 BC 00 00 00 E8 C3 FE FF FF E9 99 FF FF FF CC CC CC CC CC CC CC CC CC CC 55 8B EC 83 C4 F4 FC 53 57 56 8B 75 08 8B 7D 0C C7 45 FC 08 00 00 00 33 DB BA 00 00 00 80 43 33 C0 E8 19 01\nep_only = true\n\n[Thinstall 2.628 -> Jtit]\nsignature = E8 00 00 00 00 58 BB 34 1D 00 00 2B C3 50 68 00 00 40 00 68 00 40 00 00 68 BC 00 00 00 E8 C3 FE FF FF E9 99 FF FF FF CC CC CC CC CC CC CC CC CC CC 55 8B EC 83 C4 F4 FC 53 57 56 8B 75 08 8B 7D 0C C7 45 FC 08 00 00 00 33 DB BA 00 00 00 80 43 33 C0 E8 19 01 00 00 73 0E 8B 4D F8 E8 27 01 00 00 02 45 F7 AA EB E9 E8 04 01 00 00 0F 82 96 00 00 00 E8 F9 00 00 00 73 5B B9 04 00 00 00 E8 05 01 00 00 48 74 DE 0F 89 C6 00 00 00 E8 DF 00 00 00 73 1B 55 BD 00 01 00 00 E8 DF 00 00 00 88 07 47 4D 75 F5 E8 C7 00 00 00 72 E9 5D EB A2 B9 01 00 00 00 E8 D0 00 00 00 83 C0 07 89 45 F8 C6 45 F7 00 83 F8 08 74 89 E8 B1 00 00 00 88 45 F7 E9 7C FF FF FF B9 07 00 00 00 E8 AA 00 00 00 50 33 C9 B1 02 E8 A0 00 00 00 8B C8 41 41 58 0B C0 74 04 8B D8 EB 5E 83 F9 02 74 6A 41 E8 88 00 00 00 89 45 FC E9 48 FF FF FF E8 87 00 00 00 49 E2 09 8B C3 E8 7D 00 00 00 EB 3A 49 8B C1 55 8B 4D FC 8B E8 33 C0 D3 E5 E8 5D 00 00 00 0B C5 5D 8B D8 E8 5F 00 00 00 3D 00 00 01 00 73 14 3D FF 37 00 00 73 0E 3D 7F 02 00 00 73 08 83 F8 7F 77 04 41 41 41 41 56 8B F7 2B F0 F3\nep_only = true\n\n[Thinstall 2.736 -> Jitit]\nsignature = 9C 60 E8 00 00 00 00 58 BB F3 1C 00 00 2B C3 50 68 00 00 40 00 68 00 26 00 00 68 CC 00 00 00 E8 C1 FE FF FF E9 97 FF FF FF CC CC CC CC CC CC CC CC CC CC CC 55 8B EC 83 C4 F4 FC 53 57 56 8B 75 08 8B 7D 0C C7 45 FC 08 00 00 00 33 DB BA 00 00 00 80 43 33 C0 E8 19 01 00 00 73 0E 8B 4D F8 E8 27 01 00 00 02 45 F7 AA EB E9 E8 04 01 00 00 0F 82 96 00 00 00 E8 F9 00 00 00 73 5B B9 04 00 00 00 E8 05 01 00 00 48 74 DE 0F 89 C6 00 00 00 E8 DF 00 00 00 73 1B 55 BD 00 01 00 00 E8 DF 00 00 00 88 07 47 4D 75 F5 E8 C7 00 00 00 72 E9 5D EB A2 B9 01 00 00 00 E8 D0 00 00 00 83 C0 07 89 45 F8 C6 45 F7 00 83 F8 08 74 89 E8 B1 00 00 00 88 45 F7 E9 7C FF FF FF B9 07 00 00 00 E8 AA 00 00 00 50 33 C9 B1 02 E8 A0 00 00 00 8B C8 41 41 58 0B C0 74 04 8B D8 EB 5E 83 F9 02 74 6A 41 E8 88 00 00 00 89 45 FC E9 48 FF FF FF E8 87 00 00 00 49 E2 09 8B C3 E8 7D 00 00 00 EB 3A 49 8B C1 55 8B 4D FC 8B E8 33 C0 D3 E5 E8 5D 00 00 00 0B C5 5D 8B D8 E8 5F 00 00 00 3D 00 00 01 00 73 14 3D FF 37 00 00 73 0E 3D 7F 02 00 00 73 08 83 F8 7F 77 04 41 41 41 41 56 8B F7 2B F0 F3 A4 5E E9 F0 FE FF FF 33 C0 EB 05 8B C7 2B 45 0C 5E 5F 5B C9 C2 08 00\nep_only = true\n\n[Thinstall 3.035 -> Jtit]\nsignature = 9C 60 68 53 74 41 6C 68 54 68 49 6E E8 00 00 00 00 58 BB 37 1F 00 00 2B C3 50 68 ?? ?? ?? ?? 68 00 28 00 00 68 04 01 00 00 E8 BA FE FF FF E9 90 FF FF FF CC CC CC CC CC CC CC 55 8B EC 83 C4 F4 FC 53 57 56 8B 75 08 8B 7D 0C C7 45 FC 08 00 00 00 33 DB BA 00\nep_only = true\n\n[Thinstall 3.035 -> Jtit]\nsignature = 9C 60 68 53 74 41 6C 68 54 68 49 6E E8 00 00 00 00 58 BB 37 1F 00 00 2B C3 50 68 ?? ?? ?? ?? 68 00 28 00 00 68 04 01 00 00 E8 BA FE FF FF E9 90 FF FF FF CC CC CC CC CC CC CC 55 8B EC 83 C4 F4 FC 53 57 56 8B 75 08 8B 7D 0C C7 45 FC 08 00 00 00 33 DB BA 00 00 00 80 43 33 C0 E8 19 01 00 00 73 0E 8B 4D F8 E8 27 01 00 00 02 45 F7 AA EB E9 E8 04 01 00 00 0F 82 96 00 00 00 E8 F9 00 00 00 73 5B B9 04 00 00 00 E8 05 01 00 00 48 74 DE 0F 89 C6 00 00 00 E8 DF 00 00 00 73 1B 55 BD 00 01 00 00 E8 DF 00 00 00 88 07 47 4D 75 F5 E8 C7 00 00 00 72 E9 5D EB A2 B9 01 00 00 00 E8 D0 00 00 00 83 C0 07 89 45 F8 C6 45 F7 00 83 F8 08 74 89 E8 B1 00 00 00 88 45 F7 E9 7C FF FF FF B9 07 00 00 00 E8 AA 00 00 00 50 33 C9 B1 02 E8 A0 00 00 00 8B C8 41 41 58 0B C0 74 04 8B D8 EB 5E 83 F9 02 74 6A 41 E8 88 00 00 00 89 45 FC E9 48 FF FF FF E8 87 00 00 00 49 E2 09 8B C3 E8 7D 00 00 00 EB 3A 49 8B C1 55 8B 4D FC 8B E8 33 C0 D3 E5 E8 5D 00 00 00 0B C5 5D 8B D8 E8 5F 00 00 00 3D 00 00 01 00 73 14 3D FF 37 00 00 73 0E 3D 7F 02 00 00 73 08 83 F8 7F 77 04 41 41 41 41 56 8B F7 2B F0 F3 A4 5E E9 F0 FE FF FF 33 C0 EB 05 8B C7 2B 45 0C 5E 5F 5B C9 C2 08 00 03 D2 75 08 8B 16 83 C6 04 F9 13 D2 C3 B9 08 00 00 00 E8 01 00 00 00 C3 33 C0 E8 E1 FF FF FF 13 C0 E2 F7 C3 33 C9 41 E8 D4 FF FF FF 13 C9 E8 CD FF FF FF 72 F2 C3\nep_only = true\n\n[Thinstall Embedded 1.9X -> Jitit]\nsignature = 55 8B EC 51 53 56 57 6A 00 6A 00 FF 15 ?? ?? ?? ?? 50 E8 87 FC FF FF 59 59 A1 ?? ?? ?? ?? 8B 40 10 03 05 ?? ?? ?? ?? 89 45 FC 8B 45 FC FF E0 5F 5E 5B C9 C3 00 00 00\nep_only = true\n\n[Thinstall Embedded 2.0X -> Jitit]\nsignature = B8 EF BE AD DE 50 6A 00 FF 15 ?? ?? ?? ?? E9 AD FF FF FF 8B C1 8B 4C 24 04 89 88 29 04 00 00 C7 40 0C 01 00 00 00 0F B6 49 01 D1 E9 89 48 10 C7 40 14 80 00 00 00 C2 04 00 8B 44 24 04 C7 41 0C 01 00 00 00 89 81 29 04 00 00 0F B6 40 01 D1 E8 89 41 10 C7 41 14 80 00 00 00 C2 04 00 55 8B EC 53 56 57 33 C0 33 FF 39 45 0C 8B F1 76 0C 8B 4D 08 03 3C 81 40 3B 45 0C 72 F4 8B CE E8 43 00 00 00 8B 46 14 33 D2 F7 F7 8B 5E 10 33 D2 8B F8 8B C3 F7 F7 89 7E 18 89 45 0C 33 C0 33 C9 8B 55 08 03 0C 82 40 39 4D 0C 73 F4 48 8B 14 82 2B CA 0F AF CF 2B D9 0F AF FA 89 7E 14 89 5E 10 5F 5E 5B 5D C2 08 00\nep_only = true\n\n[Thinstall Embedded 2.2X-2.308 -> Jitit]\nsignature = B8 EF BE AD DE 50 6A 00 FF 15 ?? ?? ?? ?? E9 B9 FF FF FF 8B C1 8B 4C 24 04 89 88 29 04 00 00 C7 40 0C 01 00 00 00 0F B6 49 01 D1 E9 89 48 10 C7 40 14 80 00 00 00 C2 04 00 8B 44 24 04 C7 41 0C 01 00 00 00 89 81 29 04 00 00 0F B6 40 01 D1 E8 89 41 10 C7 41 14 80 00 00 00 C2 04 00 55 8B EC 53 56 57 33 C0 33 FF 39 45 0C 8B F1 76 0C 8B 4D 08 03 3C 81 40 3B 45 0C 72 F4 8B CE E8 43 00 00 00 8B 46 14 33 D2 F7 F7 8B 5E 10 33 D2 8B F8 8B C3 F7 F7 89 7E 18 89 45 0C 33 C0 33 C9 8B 55 08 03 0C 82 40 39 4D 0C 73 F4 48 8B 14 82 2B CA 0F AF CF 2B D9 0F AF FA 89 7E 14 89 5E 10 5F 5E 5B 5D C2 08 00\nep_only = true\n\n[Thinstall Embedded 2.312 -> Jitit]\nsignature = 6A 00 FF 15 ?? ?? ?? ?? E8 D4 F8 FF FF E9 E9 AD FF FF FF 8B C1 8B 4C 24 04 89 88 29 04 00 00 C7 40 0C 01 00 00 00 0F B6 49 01 D1 E9 89 48 10 C7 40 14 80 00 00 00 C2 04 00 8B 44 24 04 C7 41 0C 01 00 00 00 89 81 29 04 00 00 0F B6 40 01 D1 E8 89 41 10 C7 41 14 80 00 00 00 C2 04 00 55 8B EC 53 56 57 33 C0 33 FF 39 45 0C 8B F1 76 0C 8B 4D 08 03 3C 81 40 3B 45 0C 72 F4 8B CE E8 43 00 00 00 8B 46 14 33 D2 F7 F7 8B 5E 10 33 D2 8B F8 8B C3 F7 F7 89 7E 18 89 45 0C 33 C0 33 C9 8B 55 08 03 0C 82 40 39 4D 0C 73 F4 48 8B 14 82 2B CA 0F AF CF 2B D9 0F AF FA 89 7E 14 89 5E 10 5F 5E 5B 5D C2 08 00\nep_only = true\n\n[Thinstall Embedded 2.422-2.428 -> Jitit]\nsignature = 55 8B EC B8 ?? ?? ?? ?? BB ?? ?? ?? ?? 50 E8 00 00 00 00 58 2D 9B 1A 00 00 B9 84 1A 00 00 BA 14 1B 00 00 BE 00 10 00 00 BF B0 53 00 00 BD E0 1A 00 00 03 E8 81 75 00 ?? ?? ?? ?? 81 75 04 ?? ?? ?? ?? 81 75 08 ?? ?? ?? ?? 81 75 0C ?? ?? ?? ?? 81 75 10\nep_only = true\n\n[Thinstall Embedded 2.501 -> Jitit]\nsignature = 55 8B EC B8 ?? ?? ?? ?? BB ?? ?? ?? ?? 50 E8 00 00 00 00 58 2D A8 1A 00 00 B9 6D 1A 00 00 BA 21 1B 00 00 BE 00 10 00 00 BF C0 53 00 00 BD F0 1A 00 00 03 E8 81 75 00 ?? ?? ?? ?? 81 75 04 ?? ?? ?? ?? 81 75 08 ?? ?? ?? ?? 81 75 0C ?? ?? ?? ?? 81 75 10\nep_only = true\n\n[Thinstall Embedded 2.545 -> Jitit]\nsignature = E8 F2 FF FF FF 50 68 ?? ?? ?? ?? 68 40 1B 00 00 E8 42 FF FF FF E9 9D FF FF FF 00 00 00 00 00 00\nep_only = true\n\n[Thinstall Embedded 2.547-V2.600 -> Jitit]\nsignature = E8 00 00 00 00 58 BB BC 18 00 00 2B C3 50 68 ?? ?? ?? ?? 68 60 1B 00 00 68 60 00 00 00 E8 35 FF FF FF E9 99 FF FF FF 00 00\nep_only = true\n\n[Thinstall Embedded 2.609 -> Jitit]\nsignature = E8 00 00 00 00 58 BB AD 19 00 00 2B C3 50 68 ?? ?? ?? ?? 68 B0 1C 00 00 68 80 00 00 00 E8 35 FF FF FF E9 99 FF FF FF 00\nep_only = true\n\n[Thinstall Embedded 2.620-2.623 -> Jitit]\nsignature = E8 00 00 00 00 58 BB AC 1E 00 00 2B C3 50 68 ?? ?? ?? ?? 68 B0 21 00 00 68 C4 00 00 00 E8 C3 FE FF FF E9 99 FF FF FF 00 00\nep_only = true\n\n[Thinstall Embedded 2.717-2.719 -> Jitit]\nsignature = 9C 60 E8 00 00 00 00 58 BB ?? ?? ?? ?? 2B C3 50 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? E8 C1 FE FF FF E9 97 FF FF FF CC CC 55 8B EC 83 C4 F4 FC 53 57 56 8B 75 08 8B 7D 0C C7 45 FC 08 00 00 00 33 DB BA 00 00 00 80 43 33 C0 E8 19 01 00 00 73 0E 8B 4D F8 E8 27 01 00 00 02 45 F7 AA EB E9 E8 04 01 00 00 0F 82 96 00 00 00 E8 F9 00 00 00 73 5B B9 04 00 00 00 E8 05 01 00 00 48 74 DE 0F 89 C6 00 00 00 E8 DF 00 00 00 73 1B 55 BD 00 01 00 00 E8 DF 00 00 00 88 07 47 4D 75 F5 E8 C7 00 00 00 72 E9 5D EB A2 B9 01 00 00 00 E8 D0 00 00 00 83 C0 07 89 45 F8 C6 45 F7 00 83 F8 08 74 89 E8 B1 00 00 00 88 45 F7 E9 7C FF FF FF B9 07 00 00 00 E8 AA 00 00 00 50 33 C9 B1 02 E8 A0 00 00 00 8B C8 41 41 58 0B C0 74 04 8B D8 EB 5E 83 F9 02 74 6A 41 E8 88 00 00 00 89 45 FC E9 48 FF FF FF E8 87 00 00 00 49 E2 09 8B C3 E8 7D 00 00 00 EB 3A 49 8B C1 55 8B 4D FC 8B E8 33 C0 D3 E5 E8 5D 00 00 00 0B C5 5D 8B D8 E8 5F 00 00 00 3D 00 00 01 00 73 14 3D FF 37 00 00 73 0E 3D 7F 02 00 00 73 08 83 F8 7F 77 04 41 41 41 41 56 8B F7 2B F0 F3 A4 5E E9 F0 FE FF FF 33 C0 EB 05 8B C7 2B 45 0C 5E 5F 5B C9 C2 08 00\nep_only = true\n\n[Thinstall V2.403 -> Jitit]\nsignature = 6A 00 FF 15 20 50 40 00 E8 D4 F8 FF FF E9 E9 AD FF FF FF 8B C1 8B 4C 24 04 89 88 29 04 00 00 C7 40 0C 01 00 00 00 0F B6 49 01 D1 E9 89 48 10 C7 40 14 80 00 00 00 C2 04 00 8B 44 24 04 C7 41 0C 01 00 00 00 89 81 29 04 00 00 0F B6 40 01 D1 E8 89 41 10 C7 41\nep_only = true\n\n[Thinstall V2.403 -> Jitit]\nsignature = 6A 00 FF 15 20 50 40 00 E8 D4 F8 FF FF E9 E9 AD FF FF FF 8B C1 8B 4C 24 04 89 88 29 04 00 00 C7 40 0C 01 00 00 00 0F B6 49 01 D1 E9 89 48 10 C7 40 14 80 00 00 00 C2 04 00 8B 44 24 04 C7 41 0C 01 00 00 00 89 81 29 04 00 00 0F B6 40 01 D1 E8 89 41 10 C7 41 14 80 00 00 00 C2 04 00 55 8B EC 53 56 57 33 C0 33 FF 39 45 0C 8B F1 76 0C 8B 4D 08 03 3C 81 40 3B 45 0C 72 F4 8B CE E8 43 00 00 00 8B 46 14 33 D2 F7 F7 8B 5E 10 33 D2 8B F8 8B C3 F7 F7 89 7E 18 89 45 0C 33 C0 33 C9 8B 55 08 03 0C 82 40 39 4D 0C 73 F4 48 8B 14 82 2B CA 0F AF CF 2B D9 0F AF FA 89 7E 14 89 5E 10 5F 5E 5B 5D C2 08 00 57 BF 00 00 80 00 39 79 14 77 36 53 56 8B B1 29 04 00 00 8B 41 0C 8B 59 10 03 DB 8A 14 30 83 E2 01 0B D3 C1 E2 07 40 89 51 10 89 41 0C 0F B6 04 30 C1 61 14 08 D1 E8 09 41 10 39\nep_only = true\n\n[Thinstall v2.460 -> Jitit]\nsignature = 55 8B EC 51 53 56 57 6A 00 6A 00 FF 15 F4 18 40 00 50 E8 87 FC FF FF 59 59 A1 94 1A 40 00 8B 40 10 03 05 90 1A 40 00 89 45 FC 8B 45 FC FF E0 5F 5E 5B C9 C3 00 00 00 76 0C 00 00 D4 0C 00 00 1E\nep_only = true\n\n[Thinstall V2.7X -> Jitit]\nsignature = 9C 60 E8 00 00 00 00 58 BB ?? ?? ?? ?? 2B C3 50 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? E8 ?? ?? ?? ?? E9\nep_only = true\n\n[Thinstall Virtualization Suite 3.035-3.043 -> Thinstall Company]\nsignature = 9C 60 68 53 74 41 6C 68 54 68 49 6E E8 00 00 00 00 58 BB 37 1F 00 00 2B C3 50 68 ?? ?? ?? ?? 68 00 28 00 00 68 04 01 00 00 E8 BA FE FF FF E9 90 FF FF FF CC CC CC CC CC CC CC 55 8B EC 83 C4 F4 FC 53 57 56 8B 75 08 8B 7D 0C C7 45 FC 08 00 00 00 33 DB BA 00 00 00 80 43 33 C0 E8 19 01 00 00 73 0E 8B 4D F8 E8 27 01 00 00 02 45 F7 AA EB E9 E8 04 01 00 00 0F 82 96 00 00 00 E8 F9 00 00 00 73 5B B9 04 00 00 00 E8 05 01 00 00 48 74 DE 0F 89 C6 00 00 00 E8 DF 00 00 00 73 1B 55 BD 00 01 00 00 E8 DF 00 00 00 88 07 47 4D 75 F5 E8 C7 00 00 00 72 E9 5D EB\nep_only = true\n\n[Thinstall Virtualization Suite 3.049-3.080 -> Thinstall Company]\nsignature = 9C 60 68 53 74 41 6C 68 54 68 49 6E E8 00 00 00 00 58 BB 37 1F 00 00 2B C3 50 68 ?? ?? ?? ?? 68 00 2C 00 00 68 04 01 00 00 E8 BA FE FF FF E9 90 FF FF FF CC CC CC CC CC CC CC 55 8B EC 83 C4 F4 FC 53 57 56 8B 75 08 8B 7D 0C C7 45 FC 08 00 00 00 33 DB BA 00\nep_only = true\n\n[Thinstall Virtualization Suite 3.049-3.080 -> Thinstall Company]\nsignature = 9C 60 68 53 74 41 6C 68 54 68 49 6E E8 00 00 00 00 58 BB 37 1F 00 00 2B C3 50 68 ?? ?? ?? ?? 68 00 2C 00 00 68 04 01 00 00 E8 BA FE FF FF E9 90 FF FF FF CC CC CC CC CC CC CC 55 8B EC 83 C4 F4 FC 53 57 56 8B 75 08 8B 7D 0C C7 45 FC 08 00 00 00 33 DB BA 00 00 00 80 43 33 C0 E8 19 01 00 00 73 0E 8B 4D F8 E8 27 01 00 00 02 45 F7 AA EB E9 E8 04 01 00 00 0F 82 96 00 00 00 E8 F9 00 00 00 73 5B B9 04 00 00 00 E8 05 01 00 00 48 74 DE 0F 89 C6 00 00 00 E8 DF 00 00 00 73 1B 55 BD 00 01 00 00 E8 DF 00 00 00 88 07 47 4D 75 F5 E8 C7 00 00 00 72 E9 5D EB\nep_only = true\n\n[Thinstall Virtualization Suite 3.0X -> Thinstall Company]\nsignature = 9C 60 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? E8 00 00 00 00 58 BB ?? ?? ?? ?? 2B C3 50 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? E8 BA FE FF FF E9 ?? ?? ?? ?? CC CC CC CC CC CC CC 55 8B EC 83 C4 F4 FC 53 57 56 8B 75 08 8B 7D 0C C7 45 FC 08 00 00 00 33 DB BA\nep_only = true\n\n[Thinstall Virtualization Suite 3.0X -> Thinstall Company]\nsignature = 9C 60 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? E8 00 00 00 00 58 BB ?? ?? ?? ?? 2B C3 50 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? E8 BA FE FF FF E9 ?? ?? ?? ?? CC CC CC CC CC CC CC 55 8B EC 83 C4 F4 FC 53 57 56 8B 75 08 8B 7D 0C C7 45 FC 08 00 00 00 33 DB BA ?? ?? ?? ?? 43 33 C0 E8 19 01 00 00 73 0E 8B 4D F8 E8 27 01 00 00 02 45 F7 AA EB E9 E8 04 01 00 00 0F 82 96 00 00 00 E8 F9 00 00 00 73 5B B9 04 00 00 00 E8 05 01 00 00 48 74 DE 0F 89 ?? ?? ?? ?? E8 DF 00 00 00 73 1B 55 BD ?? ?? ?? ?? E8 DF 00 00 00 88 07 47 4D 75 F5 E8 C7 00 00 00 72 E9 5D EB\nep_only = true\n\n[Thinstall vx.x]\nsignature = B8 EF BE AD DE 50 6A ?? FF 15 10 19 40 ?? E9 AD FF FF FF\nep_only = true\n\n[TMT-Pascal v0.40]\nsignature = 0E 1F 06 8C 06 ?? ?? 26 A1 ?? ?? A3 ?? ?? 8E C0 66 33 FF 66 33 C9\nep_only = true\n\n[TopSpeed v3.01 1989]\nsignature = 1E BA ?? ?? 8E DA 8B ?? ?? ?? 8B ?? ?? ?? FF ?? ?? ?? 50 53\nep_only = true\n\n[TPPpack -> clane]\nsignature = E8 00 00 00 00 5D 81 ED F5 8F 40 00 60 33 ?? E8\nep_only = true\n\n[Trainer Creation Kit v5 Trainer]\nsignature = 6A 00 68 80 00 00 00 6A 02 6A 00 6A 00 68 00 00 00 40 68 25 45 40 00 E8 3C 02 00 00 50 6A 00 68 40 45 40 00 68 00 10 00 00 68 00 30 40 00 50 E8 54 02 00 00 58 50 E8 17 02 00 00 6A 00 E8 2E 02 00 00 A3 70 45 40 00 68 25 45 40 00 E8 2B 02 00 00 A3 30 45 40\nep_only = false\n\n[Trivial173 by SMT/SMF]\nsignature = EB ?? ?? 28 54 72 69 76 69 61 6C 31 37 33 20 62 79 20 53 4D 54 2F 53 4D 46 29\nep_only = true\n\n[UG2002 Cruncher v0.3b3]\nsignature = 60 E8 ?? ?? ?? ?? 5D 81 ED ?? ?? ?? ?? E8 0D ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 58\nep_only = true\n\n[UltraPro V1.0 -> SafeNet]\nsignature = A1 ?? ?? ?? ?? 85 C0 0F 85 3B 06 00 00 55 56 C7 05 ?? ?? ?? ?? 01 00 00 00 FF 15\nep_only = true\n\n[UnderGround Crypter - by Booster2000]\nsignature = 55 8B EC 83 C4 F0 B8 74 3C 00 11 E8 94 F9 FF FF E8 BF FE FF FF E8 0A F3 FF FF 8B C0\nep_only = false\n\n[Unknown by SMT]\nsignature = 60 BE ?? ?? ?? ?? 8D BE ?? ?? ?? ?? 83 ?? ?? 57 EB\nep_only = true\n\n[Unknown Joiner (sign from pinch 26.03.2007 02:12)]\nsignature = 44 90 4C 90 B9 DE 00 00 00 BA 00 10 40 00 83 C2 03 44 90 4C B9 07 00 00 00 44 90 4C 33 C9 C7 05 08 30 40 00 00 00 00 00 90 68 00 01 00 00 68 21 30 40 00 6A 00 E8 C5 02 00 00 90 6A 00 68 80\nep_only = true\n\n[Unnamed Scrambler 1.0 -> p0ke]\nsignature = 55 8B EC 83 C4 EC 53 56 33 C0 89 45 ?? ?? ?? ?? 40 00 E8 11 F4 FF FF BE 30 6B 40 00 33 C0 55 68 C9 42 40 00 64 FF 30 64 89 20 E8 C9 FA FF FF BA D8 42 40 00 8B ?? ?? ?? ?? FF FF 8B D8 B8 28 6B 40 00 8B 16 E8 37 F0 FF FF B8 2C 6B 40 00 8B 16 E8 2B F0 FF FF B8 28 6B 40 00 E8 19 F0 FF FF 8B D0 8B C3 8B 0E E8 42 E3 FF FF BA DC 42 40 00 8B C6 E8 2A FA FF FF 8B D8 B8 20 6B 40 00 8B 16 E8 FC EF FF FF B8 24 6B 40 00 8B 16 E8 F0 EF FF FF B8 20 6B 40 00 E8 DE EF FF FF 8B D0 8B C3 8B 0E E8 07 E3 FF FF 6A 00 6A 19 6A 00 6A 32 A1 28 6B 40 00 E8 59 EF FF FF 83 E8 05 03 C0 8D 55 EC E8 94 FE FF FF 8B 55 EC B9 24 6B 40 00 A1 20 6B 40 00 E8 E2 F6 FF FF 6A 00 6A 19 6A 00 6A 32\nep_only = false\n\n[Unnamed Scrambler 1.1C -> p0ke]\nsignature = 55 8B EC 83 C4 E4 53 56 33 C0 89 45 E4 89 45 E8 89 45 EC B8 C0 47 00 10 E8 4F F3 FF FF BE 5C 67 00 10 33 C0 55 68 D2 4A 00 10 64 FF 30 64 89 20 E8 EB DE FF FF E8 C6 F8 FF FF BA E0 4A 00 10 B8 CC 67 00 10 E8 5F F8 FF FF 8B D8 8B D6 8B C3 8B 0D CC 67 00 10 E8 3A DD FF FF 8B 46 50 8B D0 B8 D4 67 00 10 E8 5B EF FF FF B8 D4 67 00 10 E8 09 EF FF FF 8B D0 8D 46 14 8B 4E 50 E8 14 DD FF FF 8B 46 48 8B D0 B8 D8 67 00 ?? ?? ?? ?? ?? FF B8 D8 67 00 10 E8 E3 EE FF FF 8B D0 8B C6 8B 4E 48 E8 EF DC FF FF FF 76 5C FF 76 58 FF 76 64 FF 76 60 B9 D4 67 00 10 8B 15 D8 67 00 10 A1 D4 67 00 10 E8 76 F6 FF FF A1 D4 67 00 10 E8 5C EE FF FF 8B D0 B8 CC 67 00 10 E8 CC F7 FF FF 8B D8 B8 DC 67 00 10\nep_only = false\n\n[Unnamed Scrambler 1.2B -> p0ke]\nsignature = 55 8B EC 83 C4 D8 53 56 57 33 C0 89 45 D8 89 45 DC 89 45 E0 89 45 E4 89 45 E8 B8 70 3A 40 00 E8 C4 EC FF FF 33 C0 55 68 5C 3F 40 00 64 FF 30 64 89 20 E8 C5 D7 FF FF E8 5C F5 FF FF B8 20 65 40 00 33 C9 BA 04 01 00 00 E8 D3 DB FF FF 68 04 01 00 00 68 20 65 40 00 6A 00 FF 15 10 55 40 00 BA 6C 3F 40 00 B8 14 55 40 00 E8 5A F4 FF FF 85 C0 0F 84 1B 04 00 00 BA 18 55 40 00 8B 0D 14 55 40 00 E8 16 D7 FF FF 8B 05 88 61 40 00 8B D0 B8 54 62 40 00 E8 D4 E3 FF FF B8 54 62 40 00 E8 F2 E2 FF FF 8B D0 B8 18 55 40 00 8B 0D 88 61 40 00 E8 E8 D6 FF FF FF 35 34 62 40 00 FF 35 30 62 40 00 FF 35 3C 62 40 00 FF 35 38 62 40 00 8D 55 E8 A1 88 61 40 00 E8 E3 F0 FF FF 8B 55 E8\nep_only = false\n\n[Unnamed Scrambler 1.2C / 1.2D -> p0ke]\nsignature = 55 8B EC B9 05 00 00 00 6A 00 6A 00 49 75 F9 51 53 56 57 B8 ?? 3A ?? ?? E8 ?? EC FF FF 33 C0 55 68 ?? ?? ?? ?? 64 FF 30 64 89 20 E8 ?? D7 FF FF E8 ?? ?? FF FF B8 20 ?? ?? ?? 33 C9 BA 04 01 00 00 E8 ?? DB FF FF 68 04 01 00 00 68 20 ?? ?? ?? 6A 00 FF 15 10 ?? ?? ?? BA ?? ?? ?? ?? B8 14 ?? ?? ?? E8 ?? ?? FF FF 85 C0 0F 84 ?? 04 00 00 BA 18 ?? ?? ?? 8B 0D 14 ?? ?? ?? E8 ?? ?? FF FF 8B 05 88 ?? ?? ?? 8B D0 B8 54 ?? ?? ?? E8 ?? E3 FF FF B8 54 ?? ?? ?? E8 ?? E2 FF FF 8B D0 B8 18 ?? ?? ?? 8B 0D 88 ?? ?? ?? E8 ?? D6 FF FF FF 35 34 ?? ?? ?? FF 35 30 ?? ?? ?? FF 35 3C ?? ?? ?? FF 35 38 ?? ?? ?? 8D 55 E8 A1 88 ?? ?? ?? E8 ?? F0 FF FF 8B 55 E8 B9 54\nep_only = false\n\n[Unnamed Scrambler 1.3B -> p0ke]\nsignature = 55 8B EC B9 08 00 00 00 6A 00 6A 00 49 75 F9 53 56 57 B8 98 56 00 10 E8 48 EB FF FF 33 C0 55 68 AC 5D 00 10 64 FF 30 64 89 20 6A 00 68 BC 5D 00 10 68 C4 5D 00 10 6A 00 E8 23 EC FF FF E8 C6 CE FF FF 6A 00 68 BC 5D 00 10 68 ?? ?? ?? ?? 6A 00 E8 0B EC FF FF E8 F2 F4 FF FF B8 08 BC 00 10 33 C9 BA 04 01 00 00 E8 C1 D2 FF FF 6A 00 68 BC 5D 00 10 68 E4 5D 00 10 6A 00 E8 E2 EB FF FF 68 04 01 00 00 68 08 BC 00 10 6A 00 FF 15 68 77 00 10 6A 00 68 BC 5D 00 10 68 FC 5D 00 10 6A 00 E8 BD EB FF FF BA 10 5E 00 10 B8 70 77 00 10 E8 CA F3 FF FF 85 C0 0F 84 F7 05 00 00 BA 74 77 00 10 8B 0D 70 77 00 10 E8 FE CD FF FF 6A 00\nep_only = true\n\n[Unnamed Scrambler 2.0 -> p0ke]\nsignature = 55 8B EC B9 0A 00 00 00 6A 00 6A 00 49 75 F9 53 56 57 B8 1C 2F 40 00 E8 C8 F1 FF FF 33 C0 55 68 FB 33 40 00 64 FF 30 64 89 20 BA 0C 34 40 00 B8 E4 54 40 00 E8 EF FE FF FF 8B D8 85 DB 75 07 6A 00 E8 5A F2 FF FF BA E8 54 40 00 8B C3 8B 0D E4 54 40 00 E8 74 E2 FF FF C7 05 20 6B 40 00 09 00 00 00 BB 98 69 40 00 C7 45 EC E8 54 40 00 C7 45 E8 31 57 40 00 C7 45 E4 43 60 40 00 BE D3 6A 40 00 BF E0 6A 40 00 83 7B 04 00 75 0B 83 3B 00 0F 86 AA 03 00 00 EB 06 0F 8E A2 03 00 00 8B 03 8B D0 B8 0C 6B 40 00 E8 C1 EE FF FF B8 0C 6B 40 00 E8 6F EE FF FF 8B D0 8B 45 EC 8B 0B E8 0B E2 FF FF 6A 00 6A 1E 6A 00 6A 2C A1 0C 6B 40 00 E8 25 ED FF FF 8D 55 E0 E8 15 FE FF FF 8B 55 E0 B9 10 6B 40 00 A1 0C 6B 40 00\nep_only = false\n\n[Unnamed Scrambler 2.1(Beta) / 2.1.1 -> p0ke]\nsignature = 55 8B EC B9 15 00 00 00 6A 00 6A 00 49 75 F9 53 56 57 B8 ?? 3A ?? ?? E8 ?? EE FF FF 33 C0 55 68 ?? 43 ?? ?? 64 FF 30 64 89 20 BA ?? 43 ?? ?? B8 E4 64 ?? ?? E8 0F FD FF FF 8B D8 85 DB 75 07 6A 00 E8 ?? EE FF FF BA E8 64 ?? ?? 8B C3 8B 0D E4 64 ?? ?? E8 ?? D7 FF FF B8 F8 ?? ?? ?? BA 04 00 00 00 E8 ?? EF FF FF 33 C0 A3 F8 ?? ?? ?? BB ?? ?? ?? ?? C7 45 EC E8 64 ?? ?? C7 45 E8 ?? ?? ?? ?? C7 45 E4 ?? ?? ?? ?? BE ?? ?? ?? ?? BF ?? ?? ?? ?? B8 E0 ?? ?? ?? BA 04 00 00 00 E8 ?? EF FF FF 68 F4 01 00 00 E8 ?? EE FF FF 83 7B 04 00 75 0B 83 3B 00 0F 86 ?? 07 00 00 EB 06 0F 8E ?? 07 00 00 8B 03 8B D0 B8 E4 ?? ?? ?? E8 ?? E5 FF FF B8 E4 ?? ?? ?? E8 ?? E3 FF FF 8B D0 8B 45 EC 8B 0B E8\nep_only = false\n\n[Unnamed Scrambler 2.5.1(Beta 2) / 2.5.2 -> p0ke]\nsignature = 55 8B EC B9 ?? 00 00 00 6A 00 6A 00 49 75 F9 53 56 57 B8 ?? ?? 40 00 E8 ?? EA FF FF 33 C0 55 68 ?? ?? 40 00 64 FF 30 64 89 20 BA ?? ?? 40 00 B8 ?? ?? 40 00 E8 63 F3 FF FF 8B D8 85 DB 75 07 6A 00 E8 ?? ?? FF FF BA ?? ?? 40 00 8B C3 8B 0D ?? ?? 40 00 E8 ?? ?? FF FF C7 05 ?? ?? 40 00 0A 00 00 00 BB ?? ?? 40 00 BE ?? ?? 40 00 BF ?? ?? 40 00 B8 ?? ?? 40 00 BA 04 00 00 00 E8 ?? EB FF FF 83 3B 00 74 04 33 C0 89 03 8B D7 8B C6 E8 0A F3 FF FF 89 03 83 3B 00 0F 84 F7 04 00 00 B8 ?? ?? 40 00 8B 16 E8 ?? E1 FF FF B8 ?? ?? 40 00 E8 ?? E0 FF FF 8B D0 8B 03 8B 0E E8 ?? ?? FF FF 8B C7 A3 ?? ?? 40 00 8D 55 EC 33 C0 E8 ?? D3 FF FF 8B 45 EC B9 ?? ?? 40 00 BA ?? ?? 40 00 E8 8B ED FF FF 3C 01 75 2B A1\nep_only = false\n\n[Unnamed Scrambler 2.5A -> p0ke]\nsignature = 55 8B EC B9 0B 00 00 00 6A 00 6A 00 49 75 F9 51 53 56 57 B8 6C 3E 40 00 E8 F7 EA FF FF 33 C0 55 68 60 44 40 00 64 FF 30 64 89 20 BA 70 44 40 00 B8 B8 6C 40 00 E8 62 F3 FF FF 8B D8 85 DB 75 07 6A 00 E8 A1 EB FF FF BA E8 64 40 00 8B C3 8B 0D B8 6C 40 00 E8 37 D3 FF FF C7 05 BC 6C 40 00 0A 00 00 00 BB 68 6C 40 00 BE 90 6C 40 00 BF E8 64 40 00 B8 C0 6C 40 00 BA 04 00 00 00 E8 07 EC FF FF 83 3B 00 74 04 33 C0 89 03 8B D7 8B C6 E8 09 F3 FF FF 89 03 83 3B 00 0F 84 BB 04 00 00 B8 C0 6C 40 00 8B 16 E8 06 E2 FF FF B8 C0 6C 40 00 E8 24 E1 FF FF 8B D0 8B 03 8B 0E E8 D1 D2 FF FF 8B C7 A3 20 6E 40 00 8D 55 EC 33 C0 E8 0C D4 FF FF 8B 45 EC B9 1C 6E 40 00 BA 18 6E 40 00\nep_only = false\n\n[UnoPiX 0.75 -> BaGiE]\nsignature = 60 E8 07 00 00 00 61 68 ?? ?? 40 00 C3 83 04 24 18 C3 20 83 B8 ED 20 37 EF C6 B9 79 37 9E 61\nep_only = true\n\n[UnoPiX 1.03-1.10 -> BaGiE]\nsignature = 83 EC 04 C7 04 24 00 ?? ?? ?? C3 00 ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? 00 10 00 00 00 02 00 00 01 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 ?? ?? 00 00 10 00 00 00 00 00 00 02 00 00 ?? 00 00 ?? 00 00 ?? ?? 00 00 00 10 00 00 10 00 00 00 00 00 00 10\nep_only = true\n\n[Unpacked BS-SFX Archive v1.9]\nsignature = 1E 33 C0 50 B8 ?? ?? 8E D8 FA 8E D0 BC ?? ?? FB B8 ?? ?? CD 21 3C 03 73\nep_only = true\n\n[Upack 0.10 - 0.12 beta -> Dwing]\nsignature = BE 48 01 40 00 AD 8B F8 95 A5 33 C0 33 C9 AB 48 AB F7 D8 B1 04 F3 AB C1 E0 0A B5 ?? F3 AB AD 50 97 51 AD 87 F5 58 8D 54 86 5C FF D5 72 5A 2C 03 73 02 B0 00 3C 07 72 02 2C 03 50 0F B6 5F FF C1\nep_only = true\n\n[Upack 0.12 beta-->Dwing]\nsignature = BE 48 01 40 00 AD ?? ?? ?? A5 ?? C0 33 C9 ?? ?? ?? ?? ?? ?? ?? F3 AB ?? ?? 0A ?? ?? ?? ?? AD 50 97 51 ?? 87 F5 58 8D 54 86 5C ?? D5 72 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? B6 5F FF C1\nep_only = true\n\n[Upack 0.20 beta -> Dwing]\nsignature = BE 88 01 40 00 AD 8B F8 95 A5 33 C0 33 C9 AB 48 AB F7 D8 B1 04 F3 AB C1 E0 0A B5 ?? F3 AB AD 50 97 51 58 8D 54 85 5C FF 16 72 5A 2C 03 73 02 B0 00 3C 07 72 02 2C 03 50 0F B6 5F FF C1 E3 ?? B3\nep_only = true\n\n[Upack 0.21 beta -> Dwing]\nsignature = BE 88 01 40 00 AD 8B F8 6A 04 95 A5 33 C0 AB 48 AB F7 D8 59 F3 AB C1 E0 0A B5 ?? F3 AB AD 50 97 51 58 8D 54 85 5C FF 16 72 5A 2C 03 73 02 B0 00 3C 07 72 02 2C 03 50 0F B6 5F FF C1 E3 ?? B3 00\nep_only = true\n\n[Upack 0.22 - 0.23 beta -> Dwing]\nsignature = 6A 07 BE 88 01 40 00 AD 8B F8 59 95 F3 A5 AD B5 ?? F3 AB AD 50 97 51 58 8D 54\nep_only = false\n\n[Upack 0.22 - 0.23 beta -> Dwing]\nsignature = 6A 07 BE 88 01 40 00 AD 8B F8 59 95 F3 A5 AD B5 ?? F3 AB AD 50 97 51 58 8D 54 85 5C FF 16 72 59 2C 03 73 02 B0 00 3C 07 72 02 2C 03 50 0F B6 5F FF C1 E3 ?? B3 00 8D 1C 5B 8D 9C 9D 0C 10 00 00\nep_only = true\n\n[Upack 0.22 - 0.23 beta -> Dwing]\nsignature = ?? ?? ?? ?? ?? ?? ?? AD 8B F8 59 95 F3 A5 AD B5 ?? F3 AB AD 50 97 51 58 8D 54 85 5C FF 16 72 ?? 2C 03 73 02 B0 00 3C 07 72 02 2C 03 50 0F B6 5F FF C1 E3 ?? B3 00 8D 1C 5B 8D 9C 9D 0C 10 00 00\nep_only = true\n\n[Upack 0.24 - 0.27 beta / 0.28 alpha -> Dwing]\nsignature = BE 88 01 40 00 AD 8B F8 95 AD 91 F3 A5 AD B5 ?? F3 AB AD 50 97 51 58 8D 54 85 5C FF 16 72 57 2C 03 73 02 B0 00 3C 07 72 02 2C 03 50 0F B6 5F FF C1 E3 ?? B3 00 8D 1C 5B 8D 9C 9D 0C 10 00 00 B0\nep_only = true\n\n[UPack Alt Stub -> Dwing]\nsignature = 60 E8 09 00 00 00 C3 F6 00 00 E9 06 02 00 00 33 C9 5E 87 0E E3 F4 2B F1 8B DE AD 2B D8 AD\nep_only = true\n\n[Upack v0.10 - v0.12 Beta -> Dwing]\nsignature = BE 48 01 ?? ?? ?? ?? ?? 95 A5 33 C0\nep_only = true\n\n[Upack V0.10-V0.11 -> Dwing]\nsignature = BE ?? ?? ?? ?? AD 8B F8 95 A5 33 C0 33 C9 AB 48 AB F7 D8 B1 ?? F3 AB C1 E0 ?? B5 ?? F3 AB AD 50 97 51 AD 87 F5 58 8D 54 86 5C FF D5 72 5A 2C ?? 73 ?? B0 ?? 3C ?? 72 02 2C ?? 50 0F B6 5F FF C1 E3 ?? B3 ?? 8D 1C 5B 8D ?? ?? ?? ?? ?? ?? B0 ?? 67 E3 29 8B D7 2B 56 0C 8A 2A 33 D2 84 E9 0F 95 C6 52 FE C6 8A D0 8D 14 93 FF D5\nep_only = true\n\n[UPack v0.11 -> Dwing]\nsignature = BE 48 01 40 00 AD 8B F8 95 A5 33 C0 33 C9 AB 48 AB F7 D8 B1 04 F3 AB C1 E0 0A B5 1C F3 AB AD 50 97 51 AD 87 F5 58 8D 54 86 5C FF D5 72 5A 2C 03 73 02 B0 00 3C 07 72 02 2C 03 50 0F B6 5F FF C1 E3 03 B3 00 8D 1C 5B 8D 9C 9E 0C 10 00 00 B0 01 67 E3 29 8B D7\nep_only = false\n\n[Upack v0.1x - v0.2x -> Dwing]\nsignature = BE 88 01 ?? ?? AD 8B F8 95\nep_only = true\n\n[Upack v0.2 Beta -> Dwing]\nsignature = BE 88 01 ?? ?? AD 8B F8 95 A5 33 C0 33\nep_only = true\n\n[Upack v0.21 Beta -> Dwing]\nsignature = BE 88 01 ?? ?? AD 8B F8 ?? ?? ?? ?? 33\nep_only = true\n\n[Upack v0.22 ~ v0.23 Beta -> Dwing]\nsignature = 6A 07 BE 88 01 40 00 AD 8B F8 59 95 F3 A5\nep_only = true\n\n[Upack v0.24 ~ v0.28 Alpha -> Dwing]\nsignature = BE 88 01 40 00 AD ?? ?? 95 AD 91 F3 A5 AD\nep_only = true\n\n[Upack v0.29 beta -> Dwing]\nsignature = E9 ?? ?? ?? ?? 42 79 44 77 69 6E 67 40 00 00 00 50 45 00 00 4C 01 02 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 29\nep_only = true\n\n[Upack v0.29 Beta ~ v0.31 Beta -> Dwing]\nsignature = BE 88 01 ?? ?? AD 8B F8 95 AD 91 F3 A5 AD B5 ?? F3\nep_only = false\n\n[Upack v0.30 beta -> Dwing]\nsignature = E9 ?? ?? ?? ?? 42 79 44 77 69 6E 67 40 00 00 00 50 45 00 00 4C 01 02 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 30\nep_only = true\n\n[Upack v0.31 beta -> Dwing]\nsignature = E9 ?? ?? ?? ?? 42 79 44 77 69 6E 67 40 00 00 00 50 45 00 00 4C 01 02 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 31\nep_only = true\n\n[Upack v0.32 Beta (Patch) -> Dwing]\nsignature = BE 88 01 ?? ?? AD 50 ?? AD 91 F3 A5\nep_only = false\n\n[Upack v0.32 Beta -> Dwing]\nsignature = BE 88 01 ?? ?? AD 50 ?? ?? AD 91 F3 A5\nep_only = false\n\n[Upack v0.32 Beta -> Dwing]\nsignature = BE 88 01 ?? ?? AD 50 ?? AD 91 ?? F3 A5\nep_only = false\n\n[Upack v0.32 beta -> Dwing]\nsignature = E9 ?? ?? ?? ?? 42 79 44 77 69 6E 67 40 00 00 00 50 45 00 00 4C 01 02 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 32\nep_only = true\n\n[Upack v0.33 ~ v0.34 Beta -> Dwing]\nsignature = ?? ?? ?? ?? 59 F3 A5 83 C8 FF 8B DF AB 40 AB 40\nep_only = true\n\n[Upack v0.35 alpha -> Dwing]\nsignature = 8B F2 8B CA 03 4C 19 1C 03 54 1A 20\nep_only = false\n\n[Upack V0.36 -> Dwing]\nsignature = 0B 01 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 18 10 00 00 10 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 10 00 00 00 02 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? 14 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 FF 76 08 FF 76 0C BE 1C 01\nep_only = true\n\n[Upack V0.36 -> Dwing]\nsignature = BE ?? ?? ?? ?? FF 36 E9 C3 00 00 00\nep_only = true\n\n[Upack v0.36 alpha -> Dwing]\nsignature = AB E2 E5 5D 59 8B 76 68 51 59 46 AD 85 C0\nep_only = false\n\n[Upack v0.36 beta -> Dwing]\nsignature = BE E0 11 ?? ?? FF 36 E9 C3 00 00 00 48 01 ?? ?? 0B 01 4B 45 52 4E 45 4C 33 32 2E 44 4C 4C\nep_only = true\n\n[Upack v0.36 beta -> Dwing]\nsignature = BE E0 11 ?? ?? FF 36 E9 C3 00 00 00 48 01 ?? ?? 0B 01 4B 45 52 4E 45 4C 33 32 2E 44 4C 4C ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 82 8E FE FF FF 58 8B 4E 40 5F E3\nep_only = true\n\n[Upack V0.37 -> Dwing]\nsignature = 0B 01 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 18 10 00 00 10 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 10 00 00 00 02 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? 14 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00\nep_only = true\n\n[Upack V0.37 -> Dwing]\nsignature = 60 E8 09 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? 33 C9 5E 87 0E\nep_only = true\n\n[Upack V0.37 -> Dwing]\nsignature = BE ?? ?? ?? ?? AD 50 FF ?? ?? EB\nep_only = true\n\n[Upack v0.37 beta -> Dwing]\nsignature = BE B0 11 ?? ?? AD 50 FF 76 34 EB 7C 48 01 ?? ?? 0B 01 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 18 10 00 00 10 00 00 00 00 ?? ?? ?? 00 00 ?? ?? 00 10 00 00 00 02 00 00 04 00 00 00 00 00 37 00 04 00 00 00 00 00 00 00 00 ?? ?? ?? 00 02 00 00 00 00 00 00\nep_only = true\n\n[Upack v0.37 beta -> Dwing]\nsignature = BE B0 11 ?? ?? AD 50 FF 76 34 EB 7C 48 01 ?? ?? 0B 01 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 18 10 00 00 10 00 00 00 00 ?? ?? ?? 00 00 ?? ?? 00 10 00 00 00 02 00 00 04 00 00 00 00 00 37 00 04 00 00 00 00 00 00 00 00 ?? ?? ?? 00 02 00 00 00 00 00 00 ?? 00 00 ?? 00 00 ?? 00 00 ?? ?? 00 00 00 10 00 00 10 00 00 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 EE ?? ?? ?? 14 00 00 00 00 ?? ?? ?? ?? ?? ?? 00 FF 76 38 AD 50 8B 3E BE F0 ?? ?? ?? 6A 27 59 F3 A5 FF 76 04 83 C8 FF 8B DF AB EB 1C 00 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 ?? ?? ?? ?? ?? 00 00 00 40 AB 40 B1 04 F3 AB C1 E0 0A B5 ?? F3 AB 8B 7E 0C 57 51 E9 ?? ?? ?? ?? E3 B1 04 D3 E0 03 E8 8D 53 18 33 C0 55 40 51 D3 E0 8B EA 91 FF 56 4C 33 D2 59 D1 E8 13 D2 E2 FA 5D 03 EA 45 59 89 6B 08 56 8B F7 2B F5 F3 A4 AC 5E B1 80 AA 3B 7E 34 0F 82 8E FE FF FF 58 5F 59 E3 1B 8A 07 47 04 18 3C 02 73 F7 8B 07 3C ?? 75 F1 B0 00 0F C8 03 46 38 2B C7 AB E2 E5 5E 5D 59 51 59 46 AD 85 C0 74 1F\nep_only = true\n\n[Upack v0.37 ~ v0.38 Beta (Strip base relocation table Option)-> Dwing]\nsignature = 53 18 33 C0 55 40 51 D3 E0 8B EA 91 FF 56 4C 33\nep_only = false\n\n[Upack v0.38 beta -> Dwing]\nsignature = BE B0 11 ?? ?? AD 50 FF 76 34 EB 7C 48 01 ?? ?? 0B 01 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 18 10 00 00 10 00 00 00 00 ?? ?? ?? 00 00 ?? ?? 00 10 00 00 00 02 00 00 04 00 00 00 00 00 38 00 04 00 00 00 00 00 00 00 00 ?? ?? ?? 00 02 00 00 00 00 00 00\nep_only = true\n\n[Upack v0.38 beta -> Dwing]\nsignature = BE B0 11 ?? ?? AD 50 FF 76 34 EB 7C 48 01 ?? ?? 0B 01 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 18 10 00 00 10 00 00 00 00 ?? ?? ?? 00 00 ?? ?? 00 10 00 00 00 02 00 00 04 00 00 00 00 00 38 00 04 00 00 00 00 00 00 00 00 ?? ?? ?? 00 02 00 00 00 00 00 00 ?? 00 00 ?? 00 00 ?? 00 00 ?? ?? 00 00 00 10 00 00 10 00 00 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 EE ?? ?? ?? 14 00 00 00 00 ?? ?? ?? ?? ?? ?? 00 FF 76 38 AD 50 8B 3E BE F0 ?? ?? ?? 6A 27 59 F3 A5 FF 76 04 83 C8 FF 8B DF AB EB 1C 00 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 ?? ?? ?? ?? ?? 00 00 00 40 AB 40 B1 04 F3 AB C1 E0 0A B5 ?? F3 AB 8B 7E 0C 57 51 E9 ?? ?? ?? ?? E3 B1 04 D3 E0 03 E8 8D 53 18 33 C0 55 40 51 D3 E0 8B EA 91 FF 56 4C 33 D2 59 D1 E8 13 D2 E2 FA 5D 03 EA 45 59 89 6B 08 56 8B F7 2B F5 F3 A4 AC 5E B1 80 AA 3B 7E 34 0F 82 97 FE FF FF 58 5F 59 E3 1B 8A 07 47 04 18 3C 02 73 F7 8B 07 3C ?? 75 F1 B0 00 0F C8 03 46 38 2B C7 AB E2 E5 5E 5D 59 51 59 46 AD 85 C0 74 1F\nep_only = true\n\n[Upack v0.39 final -> Dwing]\nsignature = 56 10 E2 E3 B1 04 D3 E0 03 E8 8D 53 18 33 C0 55 40 51 D3 E0 8B EA 91\nep_only = false\n\n[Upack v0.39 final -> Dwing]\nsignature = FF 76 38 AD 50 8B 3E BE F0 ?? ?? ?? 6A 27 59 F3 A5 FF 76 04 83 C8 FF\nep_only = false\n\n[Upack v0.399 -> Dwing]\nsignature = 0B 01 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 18 10 00 00 10 00 00 00 00 ?? ?? 00 00 00 40 00 00 10 00 00 00 02 00 00 04 00 00 00 00 00 3A 00 04 00 00 00 00 00 00 00 00 ?? ?? 00 00 02 00 00 00 00 00 00 ?? 00 00 00 00 00 10 00 00 ?? 00 00 00 00 10 00 00 10 00 00 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 EE ?? ?? 00 14 00 00 00 00 ?? ?? 00 ?? ?? 00 00 FF 76 38 AD 50 8B 3E BE F0 ?? ?? 00 6A 27 59 F3 A5 FF 76 04 83 C8 FF 8B DF AB EB 1C 00 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 ?? ?? ?? 00 ?? 00 00 00 40 AB 40 B1 04 F3 AB C1 E0 0A B5\nep_only = true\n\n[Upack v0.399 -> Dwing]\nsignature = BE B0 11 ?? ?? AD 50 FF 76 34 EB 7C 48 01 ?? ?? 0B 01 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 18 10 00 00 10 00 00 00 00 ?? ?? ?? 00 00 ?? ?? 00 10 00 00 00 02 00 00 04 00 00 00 00 00 3A 00 04 00 00 00 00 00 00 00 00 ?? ?? ?? 00 02 00 00 00 00 00 00\nep_only = true\n\n[Upack v0.399 -> Dwing]\nsignature = BE B0 11 ?? ?? AD 50 FF 76 34 EB 7C 48 01 ?? ?? 0B 01 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 18 10 00 00 10 00 00 00 00 ?? ?? ?? 00 00 ?? ?? 00 10 00 00 00 02 00 00 04 00 00 00 00 00 3A 00 04 00 00 00 00 00 00 00 00 ?? ?? ?? 00 02 00 00 00 00 00 00 ?? 00 00 ?? 00 00 10 00 00 ?? ?? 00 00 00 10 00 00 10 00 00 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 EE ?? ?? ?? 14 00 00 00 00 ?? ?? ?? ?? ?? 00 00 FF 76 38 AD 50 8B 3E BE F0 ?? ?? ?? 6A 27 59 F3 A5 FF 76 04 83 C8 FF 8B DF AB EB 1C 00 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 ?? ?? ?? ?? ?? 00 00 00 40 AB 40 B1 04 F3 AB C1 E0 0A B5 ?? F3 AB 8B 7E 0C 57 51 E9 ?? ?? ?? ?? 56 10 E2 E3 B1 04 D3 E0 03 E8 8D 53 18 33 C0 55 40 51 D3 E0 8B EA 91 FF 56 4C 99 59 D1 E8 13 D2 E2 FA 5D 03 EA 45 59 89 6B 08 56 8B F7 2B F5 F3 A4 AC 5E B1 80 AA 3B\nep_only = true\n\n[Upack_Patch -> Dwing]\nsignature = 81 3A 00 00 00 02 00 00 00 00\nep_only = true\n\n[Upack_Patch or any Version -> Dwing]\nsignature = 60 E8 09 00 00 00 ?? ?? ?? 00 E9 06 02\nep_only = true\n\n[Upack_Unknown (DLL ???) -> Dwing]\nsignature = 60 E8 09 00 00 00 17 CD 00 00 E9 06 02\nep_only = true\n\n[UPolyX v0.5]\nsignature = 55 8B EC ?? 00 BD 46 00 8B ?? B9 ?? 00 00 00 80 ?? ?? 51 ?? ?? ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[UPolyX v0.5]\nsignature = 83 EC 04 89 14 24 59 BA ?? 00 00 00 52 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00\nep_only = false\n\n[UPolyX v0.5]\nsignature = BB 00 BD 46 00 83 EC 04 89 1C 24 ?? B9 ?? 00 00 00 80 33 ?? ?? ?? ?? ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[UPolyX v0.5]\nsignature = E8 00 00 00 00 59 83 C1 07 51 C3 C3 ?? 00 BD 46 00 83 EC 04 89 ?? 24 B9 ?? 00 00 00 81 ?? ?? ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[UPolyX v0.5]\nsignature = E8 00 00 00 00 59 83 C1 07 51 C3 C3 ?? 00 BD 46 00 ?? B9 ?? 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[UPolyX v0.5]\nsignature = EB 01 C3 ?? 00 BD 46 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = false\n\n[UPX + ECLiPSE layer]\nsignature = B8 ?? ?? ?? ?? B9 ?? ?? ?? ?? 33 D2 EB 01 0F 56 EB 01 0F E8 03 00 00 00 EB 01 0F EB 01 0F 5E EB 01\nep_only = true\n\n[UPX 0.50 - 0.70]\nsignature = 60 E8 00 00 00 00 58 83 E8 3D\nep_only = true\n\n[UPX 0.72]\nsignature = 60 E8 00 00 00 00 83 CD FF 31 DB 5E\nep_only = true\n\n[UPX 2.00-3.0X -> Markus Oberhumer & Laszlo Molnar & John Reiser]\nsignature = 5E 89 F7 B9 ?? ?? ?? ?? 8A 07 47 2C E8 3C 01 77 F7 80 3F ?? 75 F2 8B 07 8A 5F 04 66 C1 E8 08 C1 C0 10 86 C4 29 F8 80 EB E8 01 F0 89 07 83 C7 05 88 D8 E2 D9 8D ?? ?? ?? ?? ?? 8B 07 09 C0 74 3C 8B 5F 04 8D ?? ?? ?? ?? ?? ?? 01 F3 50 83 C7 08 FF ?? ?? ?? ?? ?? 95 8A 07 47 08 C0 74 DC 89 F9 57 48 F2 AE 55 FF ?? ?? ?? ?? ?? 09 C0 74 07 89 03 83 C3 04 EB E1 FF ?? ?? ?? ?? ?? 8B AE ?? ?? ?? ?? 8D BE 00 F0 FF FF BB 00 10 00 00 50 54 6A 04 53 57 FF D5 8D 87 ?? ?? ?? ?? 80 20 7F 80 60 28 7F 58 50 54 50 53 57 FF D5 58 61 8D 44 24 80 6A 00 39 C4 75 FA 83 EC 80 E9\nep_only = false\n\n[UPX 2.90 [LZMA] (Delphi stub) -> Markus Oberhumer, Laszlo Molnar & John Reiser]\nsignature = 60 BE ?? ?? ?? ?? 8D BE ?? ?? ?? ?? C7 87 ?? ?? ?? ?? ?? ?? ?? ?? 57 83 CD FF 89 E5 8D 9C 24 ?? ?? ?? ?? 31 C0 50 39 DC 75 FB 46 46 53 68 ?? ?? ?? ?? 57 83 C3 04 53 68 ?? ?? ?? ?? 56 83 C3 04\nep_only = true\n\n[UPX 2.90 [LZMA] -> Markus Oberhumer, Laszlo Molnar & John Reiser]\nsignature = 60 BE ?? ?? ?? ?? 8D BE ?? ?? ?? ?? 57 83 CD FF 89 E5 8D 9C 24 ?? ?? ?? ?? 31 C0 50 39 DC 75 FB 46 46 53 68 ?? ?? ?? ?? 57 83 C3 04 53 68 ?? ?? ?? ?? 56 83 C3 04 53 50 C7 03 ?? ?? ?? ?? 90 90\nep_only = true\n\n[UPX 2.90 [LZMA] -> Markus Oberhumer, Laszlo Molnar & John Reiser]\nsignature = 60 BE ?? ?? ?? ?? 8D BE ?? ?? ?? ?? 57 83 CD FF EB 10 90 90 90 90 90 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB 72 ED B8 01 00 00 00 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C0 01 DB\nep_only = true\n\n[UPX 2.93 - 3.00 [LZMA] -> Markus Oberhumer, Laszlo Molnar & John Reiser]\nsignature = 60 BE ?? ?? ?? ?? 8D BE ?? ?? ?? ?? 57 89 E5 8D 9C 24 ?? ?? ?? ?? 31 C0 50 39 DC 75 FB 46 46 53 68 ?? ?? ?? ?? 57 83 C3 04 53 68 ?? ?? ?? ?? 56 83 C3 04 53 50 C7 03 03 00 02 00 90 90 90 90 90\nep_only = true\n\n[UPX Alternative stub]\nsignature = 01 DB 07 8B 1E 83 EE FC 11 DB ED B8 01 00 00 00 01 DB 07 8B 1E 83 EE FC 11 DB 11 C0 01 DB 73 0B\nep_only = true\n\n[UPX Inliner v1.0 by GPcH]\nsignature = 9C 60 E8 00 00 00 00 5D B8 B3 85 40 00 2D AC 85 40 00 2B E8 8D B5 D5 FE FF FF 8B 06 83 F8 00 74 11 8D B5 E1 FE FF FF 8B 06 83 F8 01 0F 84 F1 01 00 00 C7 06 01 00 00 00 8B D5 8B 85 B1 FE FF FF 2B D0 89 95 B1 FE FF FF 01 95 C9 FE FF FF 8D B5 E5 FE FF FF 01\nep_only = false\n\n[UPX Modified stub]\nsignature = 79 07 0F B7 07 47 50 47 B9 57 48 F2 AE 55 FF 96 84 ?? 00 00 09 C0 74 07 89 03 83 C3 04 EB D8 FF 96 88 ?? 00 00 61 E9 ?? ?? ?? FF\nep_only = true\n\n[UPX Modified Stub b -> Farb-rausch Consumer Consulting]\nsignature = 60 BE ?? ?? ?? ?? 8D BE ?? ?? ?? ?? 57 83 CD FF FC B2 80 31 DB A4 B3 02 E8 6D 00 00 00 73 F6 31 C9 E8 64 00 00 00 73 1C 31 C0 E8 5B 00 00 00 73 23 B3 02 41 B0 10 E8 4F 00 00 00 10 C0 73 F7 75 3F AA EB D4 E8 4D 00 00 00 29 D9 75 10 E8 42 00 00 00 EB 28 AC\nep_only = true\n\n[UPX Modified Stub c -> Farb-rausch Consumer Consulting]\nsignature = 60 BE ?? ?? ?? ?? 8D BE ?? ?? ?? ?? 57 83 CD FF FC B2 80 E8 00 00 00 00 5B 83 C3 66 A4 FF D3 73 FB 31 C9 FF D3 73 14 31 C0 FF D3 73 1D 41 B0 10 FF D3 10 C0 73 FA 75 3C AA EB E2 E8 4A 00 00 00 49 E2 10 E8 40 00 00 00 EB 28 AC D1 E8 74 45 11 C9 EB 1C 91 48\nep_only = true\n\n[UPX Modifier v0.1x]\nsignature = 50 BE ?? ?? ?? ?? 8D BE ?? ?? ?? ?? 57 83 CD\nep_only = true\n\n[UPX Protector v1.0x]\nsignature = EB EC ?? ?? ?? ?? 8A 06 46 88 07 47 01 DB 75 07\nep_only = true\n\n[UPX Protector v1.0x (2)]\nsignature = EB ?? ?? ?? ?? ?? 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB\nep_only = false\n\n[UPX v1.03 - v1.04]\nsignature = ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB 8A 07 72 EB B8 01 00 00 00 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C0 01 DB 73 ?? 75 ?? 8B 1E 83 EE FC\nep_only = true\n\n[UPX v1.03 - v1.04 Modified]\nsignature = 01 DB ?? 07 8B 1E 83 EE FC 11 DB 8A 07 ?? EB B8 01 00 00 00 01 DB ?? 07 8B 1E 83 EE FC 11 DB 11 C0 01 DB 73 EF\nep_only = true\n\n[Upx v1.2 -> Marcus & Lazlo]\nsignature = 60 BE ?? ?? ?? ?? 8D BE ?? ?? ?? ?? 57 83 CD FF EB 05 A4 01 DB 75 07 8B 1E 83 EE FC 11 DB 72 F2 31 C0 40 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C0 01 DB 75 07 8B 1E 83 EE FC 11 DB 73 E6 31 C9 83\nep_only = true\n\n[UPX V1.94 -> Markus Oberhumer & Laszlo Molnar & John Reiser]\nsignature = FF D5 80 A7 ?? ?? ?? ?? ?? 58 50 54 50 53 57 FF D5 58 61 8D 44 24 ?? 6A 00 39 C4 75 FA 83 EC 80 E9\nep_only = false\n\n[UPX v2.0 -> Markus, Laszlo & Reiser]\nsignature = 55 FF 96 ?? ?? ?? ?? 09 C0 74 07 89 03 83 C3 04 EB ?? FF 96 ?? ?? ?? ?? 8B AE ?? ?? ?? ?? 8D BE 00 F0 FF FF BB 00 10 00 00 50 54 6A 04 53 57 FF D5 8D 87 ?? ?? 00 00 80 20 7F 80 60 28 7F 58 50 54 50 53 57 FF D5 58 61 8D 44 24 80 6A 00 39 C4 75 FA 83 EC 80\nep_only = false\n\n[UPX V2.00-V2.90 -> Markus Oberhumer & Laszlo Molnar & John Reiser]\nsignature = FF D5 8D 87 ?? ?? ?? ?? 80 20 ?? 80 60 ?? ?? 58 50 54 50 53 57 FF D5 58 61 8D 44 24 ?? 6A 00 39 C4 75 FA 83 EC 80 E9\nep_only = false\n\n[UPX$HiT 0.0.1 -> DJ Siba]\nsignature = E2 FA 94 FF E0 61 00 00 00 00 00 00 00\nep_only = false\n\n[UPX$HiT v0.0.1 -> DJ Siba]\nsignature = 94 BC ?? ?? ?? 00 B9 ?? 00 00 00 80 34 0C ?? E2 FA 94 FF E0 61\nep_only = false\n\n[Upx-Lock 1.0 - 1.2 --> CyberDoom / Team-X & BoB / BobSoft]\nsignature = 60 E8 00 00 00 00 5D 81 ED 48 12 40 00 60 E8 2B 03 00 00 61\nep_only = true\n\n[UPX-SCRAMBLER 3.06 -> OnToL]\nsignature = E8 00 00 00 00 59 83 C1 07 51 C3 C3 BE ?? ?? ?? ?? 83 EC 04 89 34 24 B9 80 00 00 00 81 36 ?? ?? ?? ?? 50 B8 04 00 00 00 50 03 34 24 58 58 83 E9 03 E2 E9 EB D6\nep_only = true\n\n[UPX-Scrambler RC v1.x]\nsignature = 90 61 BE ?? ?? ?? ?? 8D BE ?? ?? ?? ?? 57 83 CD FF\nep_only = true\n\n[UPX-Shit v0.1 -> 500mhz]\nsignature = E8 00 00 00 00 5E 83 C6 14 AD 89 C7 AD 89 C1 AD 30 07 47 E2 FB AD FF E0 C3 00 ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 01 ?? ?? ?? 00 55 50 58 2D 53 68 69 74 20 76 30 2E 31 20 2D 20 77 77 77 2E 62 6C 61 63 6B 6C 6F 67 69 63 2E 6E 65 74 20 2D 20 63 6F 64 65 20 62 79\nep_only = true\n\n[UPX-Shit v0.1 -> 500mhz]\nsignature = E8 00 00 00 00 5E 83 C6 14 AD 89 C7 AD 89 C1 AD 30 07 47 E2 FB AD FF E0 C3 00 ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? 00 55 50 58 2D 53 68 69 74 20 76 30 2E 31 20 2D 20 77 77 77 2E 62 6C 61 63 6B 6C 6F 67 69 63 2E 6E 65 74 20 2D 20 63 6F 64 65 20 62 79\nep_only = true\n\n[UPX-Shit v0.1 -> 500mhz]\nsignature = E8 ?? ?? ?? ?? 5E 83 C6 ?? AD 89 C7 AD 89 C1 AD 30 07 47 E2 ?? AD FF E0 C3\nep_only = true\n\n[UPXcrypter -> archphase/NWC]\nsignature = BF ?? ?? ?? 00 81 FF ?? ?? ?? 00 74 10 81 2F ?? 00 00 00 83 C7 04 BB 05 ?? ?? 00 FF E3 BE ?? ?? ?? 00 FF E6 00 00 00 00\nep_only = true\n\n[UPXFreak v0.1 (Borland Delphi) -> HMX0101]\nsignature = BE ?? ?? ?? ?? 83 C6 01 FF E6 00 00 00 ?? ?? ?? 00 03 00 00 00 ?? ?? ?? ?? 00 10 00 00 00 00 ?? ?? ?? ?? 00 00 ?? F6 ?? 00 B2 4F 45 00 ?? F9 ?? 00 EF 4F 45 00 ?? F6 ?? 00 8C D1 42 00 ?? 56 ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? 24 ?? 00 ?? ?? ?? 00\nep_only = true\n\n[UPXFreak v0.1 (Borland Delphi) -> HMX0101]\nsignature = BE ?? ?? ?? ?? 83 C6 01 FF E6 00 00 00 ?? ?? ?? 00 03 00 00 00 ?? ?? ?? ?? 00 10 00 00 00 00 ?? ?? ?? ?? 00 00 ?? F6 ?? 00 B2 4F 45 00 ?? F9 ?? 00 EF 4F 45 00 ?? F6 ?? 00 8C D1 42 00 ?? 56 ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 00 ?? 24 ?? 00 ?? ?? ?? 00 34 50 45 00 ?? ?? ?? 00 FF FF 00 00 ?? 24 ?? 00 ?? 24 ?? 00 ?? ?? ?? 00 40 00 00 C0 00 00 ?? ?? ?? ?? 00 00 ?? 00 00 00 ?? 1E ?? 00 ?? F7 ?? 00 A6 4E 43 00 ?? 56 ?? 00 AD D1 42 00 ?? F7 ?? 00 A1 D2 42 00 ?? 56 ?? 00 0B 4D 43 00 ?? F7 ?? 00 ?? F7 ?? 00 ?? 56 ?? 00 ?? ?? ?? ?? ?? 00 00 00 ?? ?? ?? ?? ?? ?? ?? 77 ?? ?? ?? 00 ?? ?? ?? 00 ?? ?? ?? 77 ?? ?? 00 00 ?? ?? ?? 00 ?? ?? ?? ?? ?? ?? 00 00 ?? ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 ?? ?? ?? ?? 00 00 00 00 ?? ?? ?? 00\nep_only = true\n\n[UPXFreak V0.1 -> HMX0101]\nsignature = BE ?? ?? ?? ?? 83 C6 01 FF E6 00 00\nep_only = true\n\n[UPXShit 0.06]\nsignature = B8 ?? ?? 43 00 B9 15 00 00 00 80 34 08 ?? E2 FA E9 D6 FF FF FF\nep_only = true\n\n[USERNAME v3.00]\nsignature = FB 2E ?? ?? ?? ?? 2E ?? ?? ?? ?? 2E ?? ?? ?? ?? 2E ?? ?? ?? ?? 8C C8 2B C1 8B C8 2E ?? ?? ?? ?? 2E ?? ?? ?? ?? 33 C0 8E D8 06 0E 07 FC 33 F6\nep_only = true\n\n[USSR 0.31 - by Spirit]\nsignature = E8 00 00 00 00 5D 83 C5 12 55 C3 20 83 B8 ED 20 37 EF C6 B9 79 37 9E 8C C9 30 C9 E3 01 C3 BE 32 ?? ?? ?? B0 ?? 30 06 8A 06 46 81 FE 00 ?? ?? ?? 7C F3\nep_only = false\n\n[VBOX v4.2 MTE]\nsignature = 8C E0 0B C5 8C E0 0B C4 03 C5 74 00 74 00 8B C5\nep_only = true\n\n[VBOX v4.3 - v4.6]\nsignature = 8B C5 8B C5 8B C5 8B C5 8B C5 8B C5 8B C5 8B C5 8B C5 8B C5 8B C5 8B C5 8B C5 8B C5 8B C5 8B C5\nep_only = false\n\n[VBOX v4.3 - v4.6]\nsignature = ?? ?? ?? ?? 90 03 C4 33 C4 33 C5 2B C5 33 C5 8B C5 ?? ?? 2B C5 48 ?? ?? 0B C0 86 E0 8C E0 ?? ?? 8C E0 86 E0 03 C4 40\nep_only = false\n\n[VcAsm Protector -> VcAsm]\nsignature = 55 8B EC 6A FF 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 E8 03 00 00 00 C7 84 00 58 EB 01 E9 83 C0 07 50 C3\nep_only = true\n\n[VcAsm Protector V1.0X-> VcAsm]\nsignature = 55 8B EC 6A FF 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 E8 03 00 00 00\nep_only = true\n\n[Vcasm Protector V1.X -> vcasm]\nsignature = EB ?? 5B 56 50 72 6F 74 65 63 74 5D\nep_only = true\n\n[Vcasm-Protector 1.0]\nsignature = 55 8B EC 6A FF 68 ?? ?? ?? 00 68 ?? ?? ?? 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 E8 03 00 00 00 C7 84 00 58 EB 01 E9 83 C0 07 50 C3 FF 35 E8 03 00 00 00 C7 84 00 58 EB 01 E9 83 C0 07 50 C3 FF 35 E8 07 00 00 00 C7 83 83 C0 13 EB 0B 58 EB 02 CD 20 83\nep_only = true\n\n[Vcasm-Protector 1.0e -> vcasm]\nsignature = EB 0A 5B 56 50 72 6F 74 65 63 74 5D\nep_only = true\n\n[Vcasm-Protector 1.1 - 1.2 -> vcasm]\nsignature = EB 0B 5B 56 50 72 6F 74 65 63 74 5D\nep_only = true\n\n[vfp&exeNc V5.00 -> Wang JianGuo]\nsignature = 60 E8 00 00 00 00 5D ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 50 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 CC\nep_only = true\n\n[vfp&exeNc v6.00 -> Wang JianGuo]\nsignature = 60 E8 01 00 00 00 63 58 E8 01 00 00 00 7A 58 2D 0D 10 40 00 8D 90 C1 10 40 00 52 50 8D 80 49 10 40 00 5D 50 8D 85 65 10 40 00 50 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 CC\nep_only = true\n\n[Video-Lan-Client]\nsignature = 55 89 E5 83 EC 08 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? FF FF\nep_only = true\n\n[Video-Lan-Client -> (UnknownCompiler)]\nsignature = 55 89 E5 83 EC 08 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? FF FF ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 ?? ?? ?? ?? ?? ?? ?? 00\nep_only = true\n\n[Virogen Crypt v0.75]\nsignature = 9C 55 E8 EC 00 00 00 87 D5 5D 60 87 D5 80 BD 15 27 40 00 01\nep_only = true\n\n[Virogen`s PE Shrinker v0.14]\nsignature = 9C 55 E8 ?? ?? ?? ?? 87 D5 5D 60 87 D5 8D ?? ?? ?? ?? ?? 8D ?? ?? ?? ?? ?? 57 56 AD 0B C0 74\nep_only = true\n\n[VIRUS - I-Worm.Bagle]\nsignature = 6A 00 E8 95 01 00 00 E8 9F E6 FF FF 83 3D 03 50 40 00 00 75 14 68 C8 AF 00 00 E8 01 E1 FF FF 05 88 13 00 00 A3 03 50 40 00 68 5C 57 40 00 68 F6 30 40 00 FF 35 03 50 40 00 E8 B0 EA FF FF E8 3A FC FF FF 83 3D 54 57 40 00 00 74 05 E8 F3 FA FF FF 68 E8 03 00\nep_only = false\n\n[VIRUS - I-Worm.Hybris]\nsignature = EB 16 A8 54 ?? ?? 47 41 42 4C 4B 43 47 43 ?? ?? ?? ?? ?? ?? 52 49 53 ?? FC 68 4C 70 40 ?? FF 15\nep_only = false\n\n[VIRUS - I-Worm.KLEZ]\nsignature = 55 8B EC 6A FF 68 40 D2 40 ?? 68 04 AC 40 ?? 64 A1 ?? ?? ?? ?? 50 64 89 25 ?? ?? ?? ?? 83 EC 58 53 56 57 89 65 E8 FF 15 BC D0\nep_only = false\n\n[VMProtect 0.7x - 0.8 -> PolyTech]\nsignature = 5B 20 56 4D 50 72 6F 74 65 63 74 20 76 20 30 2E 38 20 28 43 29 20 50 6F 6C 79 54 65 63 68 20 5D\nep_only = false\n\n[VMProtect 1.06..1.07 -> PolyTech]\nsignature = 9C 60 68 00 00 00 00 8B 74 24 28 BF ?? ?? ?? ?? FC 89 F3 03 34 24 AC 00 D8\nep_only = false\n\n[VOB ProtectCD]\nsignature = 5F 81 EF ?? ?? ?? ?? BE ?? ?? 40 ?? 8B 87 ?? ?? ?? ?? 03 C6 57 56 8C A7 ?? ?? ?? ?? FF 10 89 87 ?? ?? ?? ?? 5E 5F\nep_only = true\n\n[Vpacker -> ttui]\nsignature = 89 C6 C7 45 E0 01 00 00 00 F7 03 00 00 FF FF 75 18 0F B7 03 50 8B 45 D8 50 FF 55 F8 89 07 8B C3 E8 ?? FE FF FF 8B D8 EB 13 53 8B 45 D8 50 FF 55 F8 89 07 8B C3 E8 ?? FE FF FF 8B D8 83 C7 04 FF 45 E0 4E 75 C4 8B F3 83 3E 00 75 88 8B 45 E4 8B 40 10 03 45 DC 8B 55 14 83 C2 20 89 02 68 00 80 00 00 6A 00 8B 45 D4 50 FF 55 EC 8B 55 DC 8B 42 3C 03 45 DC 83 C0 04 8B D8 83 C3 14 8D 45 E0 50 6A 40 68 00 10 00 00 52 FF 55 E8 8D 43 60\nep_only = false\n\n[VProtector -> vcasm]\nsignature = 00 00 00 00 4B 45 52 4E 45 4C 33 32 2E 64 6C 6C 00 00 55 53 45 52 33 32 2E 64 6C 6C 00 00 47 44 49 33 32 2E 64 6C 6C 00 00 00 00 00 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 53 6C 65 65 70 00 00 00 47 65 74 56 65 72 73 69 6F 6E 00 00 00 47 65 74 43 6F 6D 6D 61 6E 64 4C 69 6E 65 41 00 00 00 47 65 74 53 74 61 72 74 75 70 49 6E 66 6F 41 00 00 00 47 65 74 41 43 50 00 00 00 43 72 65 61 74 65 54 68 72 65 61 64 00 00 00 44 65 66 57 69 6E 64 6F 77 50 72 6F 63 41 00 00 00 52 65 67 69 73 74 65 72 43 6C 61 73 73 45 78 41 00 00 00 43 72 65 61 74 65 57 69 6E 64 6F 77 45 78 41 00 00 00 47 65 74 53 79 73 74 65 6D 4D 65 74 72 69 63 73 00 00 00 53 68 6F 77 57 69 6E 64 6F 77 00 00 00 47 65 74 44 43 00 00 00 52 65 6C 65 61 73 65 44 43 00 00 00 46 69 6E 64 57 69 6E 64 6F 77 41 00 00 00 47 65 74 4D 65 73 73 61 67 65 41 00 00 00 44 65 73 74 72 6F 79 57 69 6E 64 6F 77 00 00 00 53 65 74 50 69 78 65 6C\nep_only = false\n\n[VProtector -> vcasm]\nsignature = 00 00 00 00 4B 45 52 4E 45 4C 33 32 2E 64 6C 6C 00 00 55 53 45 52 33 32 2E 64 6C 6C 00 00 47 44 49 33 32 2E 64 6C 6C 00 00 00 00 00 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 00 53 6C 65 65 70 00 00 00 47 65 74 56 65 72 73 69 6F 6E 00 00 00 47 65 74 43 6F 6D 6D 61 6E 64 4C 69 6E 65 41 00 00 00 47 65 74 53 74 61 72 74 75 70 49 6E 66 6F 41 00 00 00 47 65 74 41 43 50 00 00 00 43 72 65 61 74 65 54 68 72 65 61 64 00 00 00 44 65 66 57 69 6E 64 6F 77 50 72 6F 63 41 00 00 00 52 65 67 69 73 74 65 72 43 6C 61 73 73 45 78 41 00 00 00 43 72 65 61 74 65 57 69 6E 64 6F 77 45 78 41 00 00 00 47 65 74 53 79 73 74 65 6D 4D 65 74 72 69 63 73 00 00 00 53 68 6F 77 57 69 6E 64 6F 77 00 00 00 47 65 74 44 43 00 00 00 52 65 6C 65 61 73 65 44 43 00 00 00 46 69 6E 64 57 69 6E 64 6F 77 41 00 00 00 47 65 74 4D 65 73 73 61 67 65 41 00 00 00 44 65 73 74 72 6F 79 57 69 6E 64 6F 77 00 00 00 53 65 74 50 69 78 65 6C 00 00 00 00\nep_only = false\n\n[VProtector -> vcasm]\nsignature = 00 00 00 00 55 73 65 72 33 32 2E 64 6C 6C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 47 64 69 33 32 2E 64 6C 6C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 44 65 66 57 69 6E 64 6F 77 50 72 6F 63 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 52 65 67 69 73 74 65 72 43 6C 61 73 73 45 78 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 43 72 65 61 74 65 57 69 6E 64 6F 77 45 78 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 47 65 74 53 79 73 74 65 6D 4D 65 74 72 69 63 73 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 53 68 6F 77 57 69 6E 64 6F 77 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 47 65 74 44 43 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 52 65 6C 65 61 73 65 44 43 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 00 46 69 6E 64 57 69 6E 64 6F 77 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 47 65 74 4D 65 73 73 61 67 65 41 00\nep_only = false\n\n[VProtector 0.X-1.2X -> vcasm]\nsignature = 00 00 56 69 72 74 75 61 6C 41 6C 6C 6F 63 00 00 00 00 00 76 63 61 73 6D 5F 70 72 6F 74 65 63 74 5F ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 33 F6 E8 10 00 00 00 8B 64 24 08 64 8F 05 00 00 00 00 58 EB 13 C7 83 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 AD CD 20 EB 01 0F 31 F0 EB 0C 33 C8 EB 03 EB 09 0F 59 74 05 75 F8 51 EB F1 B9 04 00 00 00 E8 1F 00 00 00 EB FA E8 16 00 00 00 E9 EB F8 00 00 58 EB 09 0F 25 E8 F2 FF FF FF 0F B9 49 75 F1 EB 05 EB F9 EB F0 D6 E8 07 00 00 00 C7 83 83 C0 13 EB 0B 58 EB 02 CD 20 83 C0 02 EB 01 E9 50 C3\nep_only = false\n\n[VProtector 1.0X -> vcasm]\nsignature = 55 8B EC 6A FF 68 ?? ?? ?? ?? 68 ?? ?? ?? ?? 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 E8 03 00 00 00 C7 84 00 58 EB 01 E9 83 C0 07 50 C3 FF 35 E8 03 00 00 00 C7 84 00 58 EB 01 E9 83 C0 07 50 C3 FF 35 E8 07 00 00 00 C7 83 83 C0 13 EB 0B 58 EB 02 CD 20 83 C0 02 EB 01 E9 50 C3 E8 B9 04 00 00 00 E8 1F 00 00 00 EB FA E8 16 00 00 00 E9 EB F8 00 00 58 EB 09 0F 25 E8 F2 FF FF FF 0F B9 49 75 F1 EB 05 EB F9 EB F0 D6 EB 01 0F 31 F0 EB 0C 33 C8 EB 03 EB 09 0F 59 74 05 75 F8 51 EB F1 E8 16 00 00 00 8B 5C 24 0C 8B A3 C4 00 00 00 64 8F 05 00 00 00 00 83 C4 04 EB 14 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 33 C9 99 F7 F1 E9 E8 05 00 00\nep_only = true\n\n[VProtector 1.1A-1.2 -> vcasm]\nsignature = 00 00 56 69 72 74 75 61 6C 41 6C 6C 6F 63 00 00 00 00 00 76 63 61 73 6D 5F 70 72 6F 74 65 63 74 5F 32 30 30 35 5F 33 5F 31 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 33 F6 E8 10 00 00 00 8B 64 24 08 64 8F 05 00 00 00 00 58 EB 13 C7 83 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 AD CD 20 EB 01 0F 31 F0 EB 0C 33 C8 EB 03 EB 09 0F 59 74 05 75 F8 51 EB F1 B9 04 00 00 00 E8 1F 00 00 00 EB FA E8 16 00 00 00 E9 EB F8 00 00 58 EB 09 0F 25 E8 F2 FF FF FF 0F B9 49 75 F1 EB 05 EB F9 EB F0 D6 E8 07 00 00 00 C7 83 83 C0 13 EB 0B 58 EB 02 CD 20 83 C0 02 EB 01 E9 50 C3\nep_only = false\n\n[VProtector 1.1X -> vcasm]\nsignature = EB 0B 5B 56 50 72 6F 74 65 63 74 5D 00 E8 24 00 00 00 8B 44 24 04 8B 00 3D 04 00 00 80 75 08 8B 64 24 08 EB 04 58 EB 0C E9 64 8F 05 00 00 00 00 74 F3 75 F1 EB 24 64 FF 35 00 00 00 00 EB 12 FF 9C 74 03 75 01 E9 81 0C 24 00 01 00 00 9D 90 EB F4 64 89 25 00 00 00 00 EB E6 E8 16 00 00 00 8B 5C 24 0C 8B A3 C4 00 00 00 64 8F 05 00 00 00 00 83 C4 04 EB 14 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 33 C9 99 F7 F1 E9 E8 03 00 00 00 C7 84 00 58 EB 01 E9 83 C0 07 50 C3 FF 35 E8 16 00 00 00 8B 5C 24 0C 8B A3 C4 00 00 00 64 8F 05 00 00 00 00 83 C4 04 EB 14 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 33 C9 99 F7 F1 E9 E8 03 00 00 00 C7 84 00 58 EB 01 E9 83 C0 07 50 C3\nep_only = true\n\n[vprotector 1.2 -> vcasm]\nsignature = EB 0B 5B 56 50 72 6F 74 65 63 74 5D 00 E8 24 00 00 00 8B 44 24 04 8B 00 3D 04 00 00 80 75 08 8B 64 24 08 EB 04 58 EB 0C E9 64 8F 05 00 00 00 00 74 F3 75 F1 EB 24 64 FF 35 00 00 00 00 EB 12 FF 9C 74 03 75 01 E9 81 0C 24 00 01 00 00 9D 90 EB F4 64 89 25 00\nep_only = true\n\n[vprotector 1.2 -> vcasm]\nsignature = EB 0B 5B 56 50 72 6F 74 65 63 74 5D 00 E8 24 00 00 00 8B 44 24 04 8B 00 3D 04 00 00 80 75 08 8B 64 24 08 EB 04 58 EB 0C E9 64 8F 05 00 00 00 00 74 F3 75 F1 EB 24 64 FF 35 00 00 00 00 EB 12 FF 9C 74 03 75 01 E9 81 0C 24 00 01 00 00 9D 90 EB F4 64 89 25 00 00 00 00 EB E6 E8 16 00 00 00 8B 5C 24 0C 8B A3 C4 00 00 00 64 8F 05 00 00 00 00 83 C4 04 EB 14 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 33 C9 99 F7 F1 E9 E8 03 00 00 00 C7 84 00 58 EB 01 E9 83 C0 07 50 C3 FF 35 E8 16 00 00 00 8B 5C 24 0C 8B A3 C4 00 00 00 64 8F 05 00 00 00 00 83 C4 04 EB 14 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 33 C9 99 F7 F1 E9 E8 03 00 00 00 C7 84 00 58 EB 01 E9 83 C0 07 50 C3 FF 35 33 F6 E8 10 00 00 00 8B 64 24 08 64 8F 05 00 00 00 00 58 EB 13 C7 83 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 AD CD 20 E8 05 00 00 00 0F 01 EB 05 E8 EB FB 00 00 83 C4 04 E8 08 00 00 00 0F 01 83 C0\nep_only = true\n\n[VProtector 1.3X -> vcasm]\nsignature = 00 00 00 00 00 ?? ?? ?? ?? 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 00 00 00 47 65 74 50 72 6F 63 41 64 64 72 65 73 73 00 00 00 47 65 74 4D 6F 64 75 6C 65 48 61 6E 64 6C 65 41 00 00 00 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 60 8B B4 24 24 00 00 00 8B BC 24 28 00 00 00 FC C6 C2 80 33 DB A4 C6 C3 02 E8 A9 00 00 00 0F 83 F1 FF FF FF 33 C9 E8 9C 00 00 00 0F 83 2D 00 00 00 33 C0 E8 8F 00 00 00 0F 83 37 00 00 00 C6 C3 02 41 C6 C0 10 E8 7D 00 00 00 10 C0 0F 83 F3 FF FF FF\nep_only = false\n\n[VProtector 1.3X -> vcasm]\nsignature = E9 B9 16 00 00 55 8B EC 81 EC 74 04 00 00 57 68 00 00 00 00 68 00 00 C2 14 68 FF FF 00 00 68 ?? ?? ?? ?? 9C 81 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 9D 54 FF 14 24 68 00 00 00 00 68 00 00 C2 10 68 ?? ?? ?? ?? 9C 81 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 9D 54 FF 14 24 68 00 00 00 00 68 ?? ?? ?? ?? 9C 81 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 9D 54 FF 14 24 68 00 00 00 00 68 FF FF C2 10 68 ?? ?? ?? ?? 9C 81 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 9D 54 FF 14 24 68 00 00 00 00 68 ?? ?? ?? ?? 9C 81 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 9D 54 FF 14 24 68 00 00 00 00 68 00 00 C2 14 68 FF FF 00 00 68 ?? ?? ?? ?? 9C 81 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 9D 54 FF 14 24 68 00 00 00 00 68 ?? ?? ?? ?? 9C 81 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 9D 54 FF 14 24 68 00 00 00 00\nep_only = true\n\n[VProtector V1.0 [Build 2004.12.13] test! -> vcasm]\nsignature = 55 8B EC 6A FF 68 1A 89 40 00 68 56 89 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 E8 03 00 00 00 C7 84 00 58 EB 01 E9 83 C0 07 50\nep_only = true\n\n[VProtector V1.0A -> vcasm]\nsignature = 55 8B EC 6A FF 68 8A 8E 40 00 68 C6 8E 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 E8 03 00 00 00 C7 84 00 58 EB 01 E9 83 C0 07 50\nep_only = true\n\n[VProtector V1.0B -> vcasm]\nsignature = 55 8B EC 6A FF 68 CA 37 41 00 68 06 38 41 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 E8 03 00 00 00 C7 84 00 58 EB 01 E9 83 C0 07 50\nep_only = true\n\n[VProtector V1.0D -> vcasm]\nsignature = 55 8B EC 6A FF 68 CA 31 41 00 68 06 32 41 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 E8 03 00 00 00 C7 84 00 58 EB 01 E9 83 C0 07 50\nep_only = true\n\n[VProtector V1.0E -> vcasm]\nsignature = EB 0A 5B 56 50 72 6F 74 65 63 74 5D E8 24 00 00 00 8B 44 24 04 8B 00 3D 04 00 00 80 75 08 8B 64 24 08 EB 04 58 EB 0C E9 64 8F 05 00 00 00 00 74 F3 75 F1 EB 24 64 FF 35 00 00 00 00\nep_only = true\n\n[VProtector V1.1 -> vcasm]\nsignature = B8 1A ED 41 00 B9 EC EB 41 00 50 51 E8 74 00 00 00 E8 51 6A 00 00 58 83 E8 10 B9 B3 00 00 00\nep_only = true\n\n[VProtector V1.1A -> vcasm]\nsignature = EB 0B 5B 56 50 72 6F 74 65 63 74 5D 00 E8 24 00 00 00 8B 44 24 04 8B 00 3D 04 00 00 80 75 08 8B 64 24 08 EB 04 58 EB 0C E9 64 8F 05 00 00 00 00\nep_only = true\n\n[Vterminal V1.0X -> Lei Peng]\nsignature = E8 00 00 00 00 58 05 ?? ?? ?? ?? 9C 50 C2 04 00\nep_only = true\n\n[Vx: ACME (Clonewar Mutant)]\nsignature = FC AD 3D FF FF 74 20 E6 42 8A C4 E6 42 E4 61 0C 03 E6 61 AD B9 40 1F E2 FE\nep_only = true\n\n[Vx: ARCV.4]\nsignature = E8 00 00 5D 81 ED 06 01 81 FC 4F 50 74 0B 8D B6 86 01 BF 00 01 57 A4 EB 11 1E 06\nep_only = true\n\n[Vx: August 16th (Iron Maiden)]\nsignature = BA 79 02 03 D7 B4 1A CD 21 B8 24 35 CD 21 5F 57 89 9D 4E 02 8C 85 50 02\nep_only = true\n\n[Vx: Backfont.900]\nsignature = E8 ?? ?? B4 30 CD 21 3C 03 ?? ?? B8 ?? ?? BA ?? ?? CD 21 81 FA ?? ?? ?? ?? BA ?? ?? 8C C0 48 8E C0 8E D8 80 ?? ?? ?? 5A ?? ?? 03 ?? ?? ?? 40 8E D8 80 ?? ?? ?? 5A ?? ?? 83\nep_only = true\n\n[Vx: Caz.1204]\nsignature = E8 ?? ?? 5E 83 EE 03 1E 06 B8 FF FF CD 2F 3C 10\nep_only = true\n\n[Vx: CIH Version 1.2 TTIT (! WIN95CIH !)]\nsignature = 55 8D ?? ?? ?? 33 DB 64 87 03 E8 ?? ?? ?? ?? 5B 8D\nep_only = true\n\n[Vx: Compiler]\nsignature = 8C C3 83 C3 10 2E 01 1E ?? 02 2E 03 1E ?? 02 53 1E\nep_only = true\n\n[Vx: Danish tiny]\nsignature = 33 C9 B4 4E CD 21 73 02 FF ?? BA ?? 00 B8 ?? 3D CD 21\nep_only = true\n\n[Vx: Doom.666]\nsignature = E8 ?? ?? ?? 5E 83 EE ?? B8 CF 7B CD 21 3D CF 7B ?? ?? 0E 1F 81 C6 ?? ?? BF ?? ?? B9 ?? ?? FC F3 A4 06 1F 06 B8 ?? ?? 50 CB B4 48 BB 2C 00 CD 21\nep_only = true\n\n[Vx: Eddie.1028]\nsignature = E8 ?? ?? 5E FC 83 ?? ?? 81 ?? ?? ?? 4D 5A ?? ?? FA 8B E6 81 C4 ?? ?? FB 3B ?? ?? ?? ?? ?? 50 06 56 1E B8 FE 4B CD 21 81 FF BB 55 ?? ?? 07 ?? ?? ?? 07 B4 49 CD 21 BB FF FF B4 48 CD 21\nep_only = true\n\n[Vx: Eddie.1530]\nsignature = E8 ?? ?? 5E 81 EE ?? ?? FC 2E ?? ?? ?? ?? 4D 5A ?? ?? FA 8B E6 81 C4 ?? ?? FB 3B ?? ?? ?? ?? ?? 2E ?? ?? ?? ?? 50 06 56 1E 33 C0 50 1F C4 ?? ?? ?? 2E ?? ?? ?? ?? 2E\nep_only = true\n\n[Vx: Eddie.1800]\nsignature = E8 ?? ?? 5E 81 EE ?? ?? FC 2E ?? ?? ?? ?? 4D 5A ?? ?? FA 8B E6 81 C4 ?? ?? FB 3B ?? ?? ?? ?? ?? 50 06 56 1E 8B FE 33 C0 50 8E D8 C4 ?? ?? ?? 2E ?? ?? ?? ?? 2E\nep_only = true\n\n[Vx: Eddie.2000]\nsignature = E8 ?? ?? 5E 81 EE ?? ?? FC 2E ?? ?? ?? ?? 2E ?? ?? ?? ?? 4D 5A ?? ?? FA 8B E6 81 C4 ?? ?? FB 3B ?? ?? ?? ?? ?? 50 06 56 1E 8B FE 33 C0 50 8E D8 C5 ?? ?? ?? B4 30 CD 21\nep_only = true\n\n[Vx: Eddie.2100]\nsignature = E8 ?? ?? 4F 4F 0E E8 ?? ?? 47 47 1E FF ?? ?? CB E8 ?? ?? 84 C0 ?? ?? 50 53 56 57 1E 06 B4 51 CD 21 8E C3 ?? ?? ?? ?? ?? ?? ?? 8B F2 B4 2F CD 21 AC\nep_only = true\n\n[Vx: Eddie.based.1745]\nsignature = E8 ?? ?? 5E 81 EE ?? ?? FC ?? 2E ?? ?? ?? ?? 4D 5A ?? ?? FA ?? 8B E6 81 ?? ?? ?? FB ?? 3B ?? ?? ?? ?? ?? 50 06 ?? 56 1E 8B FE 33 C0 ?? 50 8E D8\nep_only = true\n\n[Vx: Einstein]\nsignature = 00 42 CD 21 72 31 B9 6E 03 33 D2 B4 40 CD 21 72 19 3B C1 75 15 B8 00 42\nep_only = true\n\n[Vx: Explosion.1000]\nsignature = E8 ?? ?? 5E 1E 06 50 81 ?? ?? ?? 56 FC B8 21 35 CD 21 2E ?? ?? ?? ?? 2E ?? ?? ?? ?? 26 ?? ?? ?? ?? ?? ?? 74 ?? 8C D8 48 8E D8\nep_only = true\n\n[Vx: FaxFree.Topo]\nsignature = FA 06 33 C0 8E C0 B8 ?? ?? 26 ?? ?? ?? ?? 50 8C C8 26 ?? ?? ?? ?? 50 CC 58 9D 58 26 ?? ?? ?? ?? 58 26 ?? ?? ?? ?? 07 FB\nep_only = true\n\n[Vx: Gotcha.879]\nsignature = E8 ?? ?? 5B 81 EB ?? ?? 9C FC 2E ?? ?? ?? ?? ?? ?? ?? 8C D8 05 ?? ?? 2E ?? ?? ?? ?? 50 2E ?? ?? ?? ?? ?? ?? 8B C3 05 ?? ?? 8B F0 BF 00 01 B9 20 00 F3 A4 0E B8 00 01 50 B8 DA DA CD 21\nep_only = true\n\n[Vx: Grazie.883]\nsignature = 1E 0E 1F 50 06 BF 70 03 B4 1A BA 70 03 CD 21 B4 47 B2 00 BE 32 04 CD 21\nep_only = true\n\n[Vx: GRUNT.2.Family]\nsignature = 48 E2 F7 C3 51 53 52 E8 DD FF 5A 5B 59 C3 B9 00 00 E2 FE C3\nep_only = true\n\n[Vx: GRUNT.4.Family]\nsignature = E8 1C 00 8D 9E 41 01 40 3E 8B 96 14 03 B9 EA 00 87 DB F7 D0 31 17 83 C3 02 E2 F7 C3\nep_only = true\n\n[Vx: Hafen.1641]\nsignature = E8 ?? ?? 01 ?? ?? ?? CE CC 25 ?? ?? 25 ?? ?? 25 ?? ?? 40 51 D4 ?? ?? ?? CC 47 CA ?? ?? 46 8A CC 44 88 CC\nep_only = true\n\n[Vx: Hafen.809]\nsignature = E8 ?? ?? 1C ?? 81 EE ?? ?? 50 1E 06 8C C8 8E D8 06 33 C0 8E C0 26 ?? ?? ?? 07 3D\nep_only = true\n\n[Vx: Haryanto]\nsignature = 81 EB 2A 01 8B 0F 1E 5B 03 CB 0E 51 B9 10 01 51 CB\nep_only = true\n\n[Vx: Heloween.1172]\nsignature = E8 ?? ?? 5E 81 EE ?? ?? 56 50 06 0E 1F 8C C0 01 ?? ?? 01 ?? ?? 80 ?? ?? ?? ?? 8B ?? ?? A3 ?? ?? 8A ?? ?? A2 ?? ?? B8 ?? ?? CD 21 3D\nep_only = true\n\n[Vx: Horse.1776]\nsignature = E8 ?? ?? 5D 83 ?? ?? 06 1E 26 ?? ?? ?? ?? BF ?? ?? 1E 0E 1F 8B F7 01 EE B9 ?? ?? FC F3 A6 1F 1E 07\nep_only = true\n\n[Vx: Hymn.1865]\nsignature = E8 ?? ?? 5E 83 EE 4C FC 2E ?? ?? ?? ?? 4D 5A ?? ?? FA 8B E6 81 ?? ?? ?? FB 3B ?? ?? ?? ?? ?? 2E ?? ?? ?? ?? ?? 50 06 56 1E 0E 1F B8 00 C5 CD 21\nep_only = true\n\n[Vx: Igor]\nsignature = 1E B8 CD 7B CD 21 81 FB CD 7B 75 03 E9 87 00 33 DB 0E 1F 8C\nep_only = true\n\n[Vx: Involuntary.1349]\nsignature = ?? BA ?? ?? B9 ?? ?? 8C DD ?? 8C C8 ?? 8E D8 8E C0 33 F6 8B FE FC ?? ?? AD ?? 33 C2 AB\nep_only = true\n\n[Vx: KBDflags.1024]\nsignature = 8B EC 2E 89 2E 24 03 BC 00 04 8C D5 2E 89 2E 22\nep_only = true\n\n[Vx: Keypress.1212]\nsignature = E8 ?? ?? E8 ?? ?? E8 ?? ?? E8 ?? ?? ?? ?? E8 ?? ?? ?? ?? E8 ?? ?? ?? ?? EA ?? ?? ?? ?? 1E 33 DB 8E DB BB\nep_only = true\n\n[Vx: Kuku.448]\nsignature = AE 75 ED E2 F8 89 3E ?? ?? BA ?? ?? 0E 07 BF ?? ?? EB\nep_only = true\n\n[Vx: Kuku.886]\nsignature = 06 1E 50 8C C8 8E D8 BA 70 03 B8 24 25 CD 21 ?? ?? ?? ?? ?? 90 B4 2F CD 21 53\nep_only = true\n\n[Vx: Modification of Hi.924]\nsignature = 50 53 51 52 1E 06 9C B8 21 35 CD 21 53 BB ?? ?? 26 ?? ?? 49 48 5B\nep_only = true\n\n[Vx: MTE (non-encrypted)]\nsignature = F7 D9 80 E1 FE 75 02 49 49 97 A3 ?? ?? 03 C1 24 FE 75 02 48\nep_only = true\n\n[Vx: Ncu-Li.1688]\nsignature = 0E 1E B8 55 AA CD 21 3D 49 4C 74 ?? 0E 0E 1F 07 E8\nep_only = true\n\n[Vx: Necropolis]\nsignature = 50 FC AD 33 C2 AB 8B D0 E2 F8\nep_only = true\n\n[Vx: Necropolis.1963]\nsignature = B4 30 CD 21 3C 03 ?? ?? B8 00 12 CD 2F 3C FF B8 ?? ?? ?? ?? B4 4A BB 40 01 CD 21 ?? ?? FA 0E 17 BC ?? ?? E8 ?? ?? FB A1 ?? ?? 0B C0\nep_only = true\n\n[Vx: Noon.1163]\nsignature = E8 ?? ?? 5B 50 56 B4 CB CD 21 3C 07 ?? ?? 81 ?? ?? ?? 2E ?? ?? 4D 5A ?? ?? BF 00 01 89 DE FC\nep_only = true\n\n[Vx: November 17.768]\nsignature = E8 ?? ?? 5E 81 EE ?? ?? 50 33 C0 8E D8 80 3E ?? ?? ?? 0E 1F ?? ?? FC\nep_only = true\n\n[Vx: Number One]\nsignature = F9 07 3C 53 6D 69 6C 65 3E E8\nep_only = true\n\n[Vx: Phoenix.927]\nsignature = E8 00 00 5E 81 C6 ?? ?? BF 00 01 B9 04 00 F3 A4 E8\nep_only = true\n\n[Vx: Predator.2448]\nsignature = 0E 1F BF ?? ?? B8 ?? ?? B9 ?? ?? 49 ?? ?? ?? ?? 2A C1 4F 4F ?? ?? F9 CC\nep_only = true\n\n[Vx: Quake.518]\nsignature = 1E 06 8C C8 8E D8 ?? ?? ?? ?? ?? ?? ?? B8 21 35 CD 21 81\nep_only = true\n\n[Vx: SK]\nsignature = CD 20 B8 03 00 CD 10 51 E8 00 00 5E 83 EE 09\nep_only = true\n\n[Vx: Slowload]\nsignature = 03 D6 B4 40 CD 21 B8 02 42 33 D2 33 C9 CD 21 8B D6 B9 78 01\nep_only = true\n\n[Vx: Sonik Youth]\nsignature = 8A 16 02 00 8A 07 32 C2 88 07 43 FE C2 81 FB\nep_only = true\n\n[Vx: Spanz]\nsignature = E8 00 00 5E 81 EE ?? ?? 8D 94 ?? ?? B4 1A CD 21 C7 84\nep_only = true\n\n[Vx: SYP]\nsignature = 47 8B C2 05 1E 00 52 8B D0 B8 02 3D CD 21 8B D8 5A\nep_only = true\n\n[VX: Tibs/Zhelatin \"StormWorm\" variant]\nsignature = FF 74 24 1C 58 8D 80 ?? ?? 77 04 50 68 62 34 35 04 E8\nep_only = true\n\n[Vx: TravJack.883]\nsignature = EB ?? 9C 9E 26 ?? ?? 51 04 ?? 7D ?? 00 ?? 2E ?? ?? ?? ?? 8C C8 8E C0 8E D8 80 ?? ?? ?? ?? 74 ?? 8A ?? ?? ?? BB ?? ?? 8A ?? 32 C2 88 ?? FE C2 43 81\nep_only = true\n\n[Vx: Trivial.25]\nsignature = B4 4E FE C6 CD 21 B8 ?? 3D BA ?? 00 CD 21 93 B4 40 CD\nep_only = true\n\n[Vx: Trivial.46]\nsignature = B4 4E B1 20 BA ?? ?? CD 21 BA ?? ?? B8 ?? 3D CD 21\nep_only = true\n\n[Vx: Trojan.Telefoon]\nsignature = 60 1E E8 3B 01 BF CC 01 2E 03 3E CA 01 2E C7 05\nep_only = true\n\n[Vx: Uddy.2617]\nsignature = 2E ?? ?? ?? ?? ?? 2E ?? ?? ?? ?? ?? 2E ?? ?? ?? 8C C8 8E D8 8C ?? ?? ?? 2B ?? ?? ?? 03 ?? ?? ?? A3 ?? ?? A1 ?? ?? A3 ?? ?? A1 ?? ?? A3 ?? ?? 8C C8 2B ?? ?? ?? 03 ?? ?? ?? A3 ?? ?? B8 AB 9C CD 2F 3D 76 98\nep_only = true\n\n[Vx: VCL]\nsignature = AC B9 00 80 F2 AE B9 04 00 AC AE 75 ?? E2 FA 89\nep_only = true\n\n[Vx: VCL (encrypted)]\nsignature = 01 B9 ?? ?? 81 34 ?? ?? 46 46 E2 F8 C3\nep_only = true\n\n[Vx: VCL (encrypted)]\nsignature = 01 B9 ?? ?? 81 35 ?? ?? 47 47 E2 F8 C3\nep_only = true\n\n[Vx: VirusConstructor(IVP).based]\nsignature = E9 ?? ?? E8 ?? ?? 5D ?? ?? ?? ?? ?? 81 ED ?? ?? ?? ?? ?? ?? E8 ?? ?? 81 FC ?? ?? ?? ?? 8D ?? ?? ?? BF ?? ?? 57 A4 A5\nep_only = true\n\n[Vx: VirusConstructor.based]\nsignature = BB ?? ?? B9 ?? ?? 2E ?? ?? ?? ?? 43 43 ?? ?? 8B EC CC 8B ?? ?? 81 ?? ?? ?? 06 1E B8 ?? ?? CD 21 3D ?? ?? ?? ?? 8C D8 48 8E D8\nep_only = true\n\n[Vx: VirusConstructor.based]\nsignature = E8 ?? ?? 5D 81 ?? ?? ?? 06 1E E8 ?? ?? E8 ?? ?? ?? ?? 2E ?? ?? ?? ?? ?? ?? B4 4A BB FF FF CD 21 83 ?? ?? B4 4A CD 21\nep_only = true\n\n[Vx: XPEH.4768]\nsignature = E8 ?? ?? 5B 81 ?? ?? ?? 50 56 57 2E ?? ?? ?? ?? ?? 2E ?? ?? ?? ?? ?? ?? B8 01 00 50 B8 ?? ?? 50 E8\nep_only = true\n\n[Vx: XRCV.1015]\nsignature = E8 ?? ?? 5E 83 ?? ?? 53 51 1E 06 B4 99 CD 21 80 FC 21 ?? ?? ?? ?? ?? 33 C0 50 8C D8 48 8E C0 1F A1 ?? ?? 8B\nep_only = true\n\n[W32.Jeefo (PE File Infector)]\nsignature = 55 89 E5 83 EC 08 83 C4 F4 6A 02 A1 C8 ?? ?? ?? FF D0 E8 ?? ?? ?? ?? C9 C3\nep_only = true\n\n[WARNING -> TROJAN -> ADinjector]\nsignature = 90 61 BE 00 20 44 00 8D BE 00 F0 FB FF C7 87 9C E0 04 00 6A F0 8A 5E 57 83 CD FF EB 0E\nep_only = true\n\n[WARNING -> TROJAN -> HuiGeZi]\nsignature = 55 8B EC 81 C4 ?? FE FF FF 53 56 57 33 C0 89 85 ?? FE FF FF\nep_only = true\n\n[WARNING -> TROJAN -> RobinPE]\nsignature = 60 6A 00 6A 20 6A 02 6A 00 6A 03 68 00 00 00\nep_only = true\n\n[WARNING -> TROJAN -> XiaoHui]\nsignature = 60 9C E8 00 00 00 00 5D B8 ?? 85 40 00 2D ?? 85 40 00\nep_only = true\n\n[Warning! may be SimbyOZ polycryptor by 3xpl01t ver 2.xx (25.03.2007 22:00)]\nsignature = 57 57 8D 7C 24 04 50 B8 00 D0 17 13 AB 58 5F C3 00 00\nep_only = true\n\n[WebCops [DLL] -> LINK Data Security]\nsignature = A8 BE 58 DC D6 CC C4 63 4A 0F E0 02 BB CE F3 5C 50 23 FB 62 E7 3D 2B\nep_only = true\n\n[WebCops [EXE] -> LINK Data Security]\nsignature = EB 03 05 EB 02 EB FC 55 EB 03 EB 04 05 EB FB EB 53 E8 04 00 00 00 72\nep_only = true\n\n[Werus Crypter 1.0 - by Kas]\nsignature = BB E8 12 40 00 80 33 05 E9 7D FF FF FF\nep_only = true\n\n[Werus Crypter 1.0 -> Kas]\nsignature = 68 98 11 40 00 6A 00 E8 50 00 00 00 C9 C3 ED B3 FE FF FF 6A 00 E8 0C 00 00 00 FF 25 80 10 40 00 FF 25 84 10 40 00 FF 25 88 10 40 00 FF 25 8C 10 40 00 FF 25 90 10 40 00 FF 25 94 10 40 00 FF 25 98 10 40 00 FF 25 9C 10 40 00 FF 25 A0 10 40 00 FF 25 A4 10 40 00 FF 25 A8 10 40 00 FF 25 B0 10 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 BB E8 12 40 00 80 33 05 E9 7D FF FF FF\nep_only = false\n\n[WIBU-Key V4.10A -> http://wibu.com/us/]\nsignature = F7 05 ?? ?? ?? ?? FF 00 00 00 75 12\nep_only = true\n\n[Wind of Crypt 1.0 - by DarkPressure]\nsignature = 55 8B EC 83 C4 EC 53 ?? ?? ?? ?? 89 45 EC B8 64 40 00 10 E8 28 EA FF FF 33 C0 55 68 CE 51 00 10 64 ?? ?? ?? ?? 20 6A 00 68 80 00 00 00 6A 03 6A 00 6A 01 68 00 00 00 80 8D 55 EC 33 C0 E8 F6 DB FF FF 8B 45 EC E8 12 E7 FF FF 50 E8 3C EA FF FF 8B D8 83 FB FF 0F 84 A6 00 00 00 6A 00 53 E8 41 EA FF FF 8B F0 81 EE 00 5E 00 00 6A 00 6A 00 68 00 5E 00 00 53 E8 52 EA FF FF B8 F4 97 00 10 8B D6 E8 2E E7 FF FF B8 F8 97 00 10 8B D6 E8 22 E7 FF FF 8B C6 E8 AB D8 FF FF 8B F8 6A 00 68 F0 97 00 10 56 A1 F4 97 00 10 50 53 E8 05 EA FF FF 53 E8 CF E9 FF FF B8 FC 97 00 10 BA E8 51 00 10 E8 74 EA FF FF A1 F4 97 00 10 85 C0 74 05 83 E8 04 8B 00 50 B9 F8 97 00 10 B8 FC 97 00 10 8B 15 F4 97 00 10 E8 D8 EA FF FF B8 FC 97 00 10 E8 5A EB FF FF 8B CE 8B 15 F8 97 00 10 8B C7 E8 EB E9 FF FF 8B C7 85 C0 74 05 E8 E4 EB FF FF 33 C0 5A 59 59 64 89 10 68 D5 51 00 10 8D 45 EC E8 BB E5 FF FF C3 E9 A9 DF FF FF EB F0 5F 5E 5B E8 B7 E4 FF FF 00 00 00 FF FF FF FF 0A 00 00 00 63 5A 6C 56 30 55 6C 6B 70 4D\nep_only = true\n\n[Winkript v1.0]\nsignature = 33 C0 8B B8 00 ?? ?? ?? 8B 90 04 ?? ?? ?? 85 FF 74 1B 33 C9 50 EB 0C 8A 04 39 C0 C8 04 34 1B 88 04 39 41 3B CA 72 F0 58\nep_only = true\n\n[WinKript v1.0 -> Mr. Crimson]\nsignature = 33 C0 8B B8 00 ?? ?? ?? 8B 90 04 ?? ?? ?? 85 FF 74 1B 33 C9 50 EB 0C 8A 04 39 C0 C8 04 34 1B 88 04 39 41 3B CA 72 F0 58 83 C0 08 EB D5 61 E9 ?? ?? ?? ?? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00\nep_only = true\n\n[WinRAR 32-bit SFX Module]\nsignature = E9 ?? ?? 00 00 00 00 00 00 90 90 90 ?? ?? ?? ?? ?? ?? 00 ?? 00 ?? ?? ?? ?? ?? FF\nep_only = true\n\n[WinUpack v0.30 beta -> By Dwing]\nsignature = E9 ?? ?? ?? ?? 42 79 44 77 69 6E 67 40 00 00 00 50 45 00 00\nep_only = false\n\n[WinUpack v0.30 beta -> By Dwing]\nsignature = E9 ?? ?? ?? ?? 42 79 44 77 69 6E 67 40 00 00 00 50 45 00 00 4C 01 02\nep_only = false\n\n[WinUpack v0.39 final (relocated image base) -> By Dwing (c)2005 (h2)]\nsignature = 60 E8 09 00 00 00 ?? ?? ?? 00 E9 06 02 00 00 33 C9 5E 87 0E E3 F4 2B F1 8B DE AD 2B D8 AD 03 C3 50 97 AD 91 F3 A5 5E AD 56 91 01 1E AD E2 FB AD 8D 6E 10 01 5D 00 8D 7D 1C B5 ?? F3 AB 5E AD 53 50 51 97 58 8D 54 85 5C FF 16 72 57 2C 03 73 02 B0 00 3C 07 72\nep_only = true\n\n[WinUpack v0.39 final -> By Dwing (c)2005 (h1)]\nsignature = BE B0 11 ?? ?? AD 50 FF 76 34 EB 7C 48 01 ?? ?? 0B 01 4C 6F 61 64 4C 69 62 72 61 72 79 41 00 00 18 10 00 00 10 00 00 00 00 ?? ?? ?? 00 00 ?? ?? 00 10 00 00 00 02 00 00 04 00 00 00 00 00 39 00 04 00 00 00 00 00 00 00 00 ?? ?? ?? 00 02 00 00 00 00 00 00\nep_only = true\n\n[WinZip (32-bit) 6.x]\nsignature = FF 15 FC 81 40 00 B1 22 38 08 74 02 B1 20 40 80 38 00 74 10\nep_only = true\n\n[WinZip 32-bit SFX v6.x module]\nsignature = FF 15 ?? ?? ?? 00 B1 22 38 08 74 02 B1 20 40 80 38 00 74 10 38 08 74 06 40 80 38 00 75 F6 80 38 00 74 01 40 33 C9 ?? ?? ?? ?? FF 15\nep_only = true\n\n[WinZip 32-bit SFX v8.x module]\nsignature = 53 FF 15 ?? ?? ?? 00 B3 22 38 18 74 03 80 C3 FE 8A 48 01 40 33 D2 3A CA 74 0A 3A CB 74 06 8A 48 01 40 EB F2 38 10 74 01 40 ?? ?? ?? ?? FF 15\nep_only = true\n\n[WinZip Self-Extractor 2.2 personal edition -> WinZip Computing]\nsignature = 53 FF 15 58 70 40 00 B3 22 38 18 74 03 80 C3 FE 40 33 D2 8A 08 3A CA 74 10 3A CB 74 07 40 8A 08 3A CA 75 F5 38 10 74 01 40 52 50 52 52 FF 15 5C 70 40 00 50 E8 15 FB FF FF 50 FF 15 8C 70 40 00 5B\nep_only = true\n\n[Wise Installer Stub]\nsignature = 55 8B EC 81 EC 78 05 00 00 53 56 BE 04 01 00 00 57 8D 85 94 FD FF FF 56 33 DB 50 53 FF 15 34 20 40 00 8D 85 94 FD FF FF 56 50 8D 85 94 FD FF FF 50 FF 15 30 20 40 00 8B 3D 2C 20 40 00 53 53 6A 03 53 6A 01 8D 85 94 FD FF FF 68 00 00 00 80 50 FF D7 83 F8 FF\nep_only = true\n\n[Wise Installer Stub]\nsignature = 55 8B EC 81 EC ?? 04 00 00 53 56 57 6A ?? ?? ?? ?? ?? ?? ?? FF 15 ?? ?? 40 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 80 ?? 20\nep_only = true\n\n[Wise Installer Stub]\nsignature = 55 8B EC 81 EC ?? ?? 00 00 53 56 57 6A 01 5E 6A 04 89 75 E8 FF 15 ?? 40 40 00 FF 15 ?? 40 40 00 8B F8 89 7D ?? 8A 07 3C 22 0F 85 ?? 00 00 00 8A 47 01 47 89 7D ?? 33 DB 3A C3 74 0D 3C 22 74 09 8A 47 01 47 89 7D ?? EB EF 80 3F 22 75 04 47 89 7D ?? 80 3F 20\nep_only = false\n\n[Wise Installer Stub v1.10.1029.1]\nsignature = 55 8B EC 81 EC 40 0F 00 00 53 56 57 6A 04 FF 15 F4 30 40 00 FF 15 74 30 40 00 8A 08 89 45 E8 80 F9 22 75 48 8A 48 01 40 89 45 E8 33 F6 84 C9 74 0E 80 F9 22 74 09 8A 48 01 40 89 45 E8 EB EE 80 38 22 75 04 40 89 45 E8 80 38 20 75 09 40 80 38 20 74 FA 89 45\nep_only = true\n\n[WWPACK v3.00, v3.01 (Extractable)]\nsignature = B8 ?? ?? 8C CA 03 D0 8C C9 81 C1 ?? ?? 51 6A ?? 06 06 8C D3 83 ?? ?? 53 6A ?? FC\nep_only = true\n\n[WWPACK v3.00, v3.01 (Relocations pack)]\nsignature = BE ?? ?? BA ?? ?? BF ?? ?? B9 ?? ?? 8C CD 8E DD 81 ED ?? ?? 06 06 8B DD 2B DA 8B D3 FC\nep_only = true\n\n[WWPACK v3.02, v3.02a (Extractable)]\nsignature = B8 ?? ?? 8C CA 03 D0 8C C9 81 C1 ?? ?? 51 33 C9 B1 ?? 51 06 06 BB ?? ?? 53 8C D3\nep_only = true\n\n[WWPACK v3.02, v3.02a, v3.04 (Relocations pack)]\nsignature = BE ?? ?? BF ?? ?? B9 ?? ?? 8C CD 81 ED ?? ?? 8B DD 81 EB ?? ?? 8B D3 FC FA 1E 8E DB 01 15 33 C0 2E AC\nep_only = true\n\n[WWPACK v3.03]\nsignature = B8 ?? ?? 8C CA 03 D0 8C C9 81 C1 ?? ?? 51 B9 ?? ?? 51 06 06 BB ?? ?? 53\nep_only = true\n\n[WWPACK v3.05c4 (Extr. Passw.check. Vir. shield)]\nsignature = 03 05 C0 1A B8 ?? ?? 8C CA 03 D0 8C C9 81 C1 ?? ?? 51 B9 ?? ?? 51 06 06 B1 ?? 51 8C D3\nep_only = true\n\n[WWPACK v3.05c4 (Extractable + Password checking)]\nsignature = 03 05 80 1A B8 ?? ?? 8C CA 03 D0 8C C9 81 C1 ?? ?? 51 B9 ?? ?? 51 06 06 B1 ?? 51 8C D3\nep_only = true\n\n[WWPACK v3.05c4 (Extractable + Virus Shield)]\nsignature = 03 05 40 1A B8 ?? ?? 8C CA 03 D0 8C C9 81 C1 ?? ?? 51 B9 ?? ?? 51 06 06 B1 ?? 51 8C D3\nep_only = true\n\n[WWPACK v3.05c4 (Extractable)]\nsignature = 03 05 00 1A B8 ?? ?? 8C CA 03 D0 8C C9 81 C1 ?? ?? 51 B9 ?? ?? 51 06 06 B1 ?? 51 8C D3\nep_only = true\n\n[WWPACK v3.05c4 (Modified)]\nsignature = B8 ?? ?? 8C CA 03 D0 8C C9 81 C1 ?? ?? 51 B9 ?? ?? 51 06 06 B1 ?? 51 8C D3\nep_only = true\n\n[WWPACK v3.05c4 (Unextr. Passw.check. Vir. shield)]\nsignature = 03 05 C0 1B B8 ?? ?? 8C CA 03 D0 8C C9 81 C1 ?? ?? 51 B9 ?? ?? 51 06 06 B1 ?? 51 8C D3\nep_only = true\n\n[WWPACK v3.05c4 (Unextractable + Password checking)]\nsignature = 03 05 80 1B B8 ?? ?? 8C CA 03 D0 8C C9 81 C1 ?? ?? 51 B9 ?? ?? 51 06 06 B1 ?? 51 8C D3\nep_only = true\n\n[WWPACK v3.05c4 (Unextractable + Virus Shield)]\nsignature = 03 05 40 1B B8 ?? ?? 8C CA 03 D0 8C C9 81 C1 ?? ?? 51 B9 ?? ?? 51 06 06 B1 ?? 51 8C D3\nep_only = true\n\n[WWPACK v3.05c4 (Unextractable)]\nsignature = 03 05 00 1B B8 ?? ?? 8C CA 03 D0 8C C9 81 C1 ?? ?? 51 B9 ?? ?? 51 06 06 B1 ?? 51 8C D3\nep_only = true\n\n[WWPack32 v1.00, v1.11, v1.12, v1.20]\nsignature = 53 55 8B E8 33 DB EB 60 0D 0A 0D 0A 57 57 50 61 63 6B 33 32\nep_only = true\n\n[WWPack32 v1.x]\nsignature = 53 55 8B E8 33 DB EB 60\nep_only = true\n\n[X-Hider 1.0 -> GlobaL]\nsignature = 55 8B EC 83 C4 EC 33 C0 89 45 EC B8 54 20 44 44 E8 DF F8 FF FF 33 C0 55 68 08 21 44 44 64 FF 30 64 89 20 8D 55 EC B8 1C 21 44 44 E8 E0 F9 FF FF 8B 55 EC B8 40 ?? ?? 44 E8 8B F5 FF FF 6A 00 6A 00 6A 02 6A 00 6A 01 68 00 00 00 40 A1 40 ?? ?? 44 E8 7E F6 FF FF 50 E8 4C F9 FF FF 6A 00 50 E8 4C F9 FF FF A3 28 ?? ?? 44 E8 CE FE FF FF 33 C0 5A 59 59 64 89 10 68 0F 21 44 44 8D 45 EC E8 F1 F4 FF FF C3 E9 BB F2 FF FF EB F0 E8 FC F3 FF FF FF FF FF FF 0E 00 00 00 63 3A 5C 30 30 30 30 30 30 31 2E 64 61 74 00\nep_only = true\n\n[X-Hider 1.0 -> GlobaL]\nsignature = 85 D2 74 23 8B 4A F8 41 7F 1A 50 52 8B 42 FC E8 30 00 00 00 89 C2 58 52 8B 48 FC E8 48 FB FF FF 5A 58 EB 03 FF 42 F8 87 10 85 D2 74 13 8B 4A F8 49 7C 0D FF 4A F8 75 08 8D 42 F8 E8 5C FA FF FF C3 8D 40 00 85 C0 7E 24 50 83 C0 0A 83 E0 FE 50 E8 2F FA FF FF 5A 66 C7 44 02 FE 00 00 83 C0 08 5A 89 50 FC C7 40 F8 01 00 00 00 C3 31 C0 C3 90\nep_only = false\n\n[X-Pack v1.4.2]\nsignature = 72 ?? C3 8B DE 83 ?? ?? C1 ?? ?? 8C D8 03 C3 8E D8 8B DF 83 ?? ?? C1 ?? ?? 8C C0 03 C3 8E C0 C3\nep_only = false\n\n[X-PEOR v0.99b]\nsignature = E8 00 00 00 00 5D 8B CD 81 ED 7A 29 40 00 89 AD 0F 6D 40 00\nep_only = true\n\n[X-PEOR v0.99b]\nsignature = E8 ?? ?? ?? ?? 5D 8B CD 81 ED 7A 29 40 ?? 89 AD 0F 6D 40\nep_only = true\n\n[XCR v0.12]\nsignature = 60 9C E8 ?? ?? ?? ?? 8B DD 5D 81 ED ?? ?? ?? ?? 89 9D\nep_only = true\n\n[XCR v0.13]\nsignature = 93 71 08 ?? ?? ?? ?? ?? ?? ?? ?? 8B D8 78 E2 ?? ?? ?? ?? 9C 33 C3 ?? ?? ?? ?? 60 79 CE ?? ?? ?? ?? E8 01 ?? ?? ?? ?? 83 C4 04 E8 AB FF FF FF ?? ?? ?? ?? 2B E8 ?? ?? ?? ?? 03 C5 FF 30 ?? ?? ?? ?? C6 ?? EB\nep_only = true\n\n[XJ / XPAL -> LiNSoN]\nsignature = 55 8B EC 6A FF 68 ?? ?? 40 00 68 ?? ?? 40 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 44 53 56 57 66 9C\nep_only = true\n\n[XPack 1.52 - 1.64]\nsignature = 8B EC FA 33 C0 8E D0 BC ?? ?? 2E ?? ?? ?? ?? 2E ?? ?? ?? ?? EB\nep_only = true\n\n[XPack 1.67]\nsignature = B8 8C D3 15 33 75 81 3E E8 0F 00 9A E8 F9 FF 9A 9C EB 01 9A 59 80 CD 01 51 9D EB\nep_only = true\n\n[xPEP 0.3x -> xIkUg]\nsignature = 55 53 56 51 52 57 E8 16 00 00 00\nep_only = true\n\n[Xtreme-Protector v1.05]\nsignature = E9 ?? ?? 00 00 00 00 00 00 00 00\nep_only = true\n\n[Xtreme-Protector v1.06]\nsignature = B8 ?? ?? ?? 00 B9 75 ?? ?? 00 50 51 E8 05 00 00 00 E9 4A 01 00 00 60 8B 74 24 24 8B 7C 24 28 FC B2 80 8A 06 46 88 07 47 BB 02 00 00 00 02 D2 75 05 8A 16 46 12 D2 73 EA 02 D2 75 05 8A 16 46 12 D2 73 4F 33 C0 02 D2 75 05 8A 16 46 12 D2 0F 83 DF 00 00 00 02\nep_only = true\n\n[XXPack 0.1 -> bagie]\nsignature = E8 04 00 00 00 83 60 EB 0C 5D EB 05 45 55 EB 04 B8 EB F9 00 C3 E8 00 00 00 00 5D EB 01 00 81 ED 5E 1F 40 00 EB 02 83 09 8D B5 EF 1F 40 00 EB 02 83 09 BA A3 11 00 00 EB 00 68 00 ?? ?? ?? C3\nep_only = true\n\n[y0da's Crypter v1.0]\nsignature = 60 E8 00 00 00 00 5D 81 ED E7 1A 40 00 E8 A1 00 00 00 E8 D1 00 00 00 E8 85 01 00 00 F7 85\nep_only = true\n\n[y0da's Crypter v1.1]\nsignature = 60 E8 00 00 00 00 5D 81 ED 8A 1C 40 00 B9 9E 00 00 00 8D BD 4C 23 40 00 8B F7 33\nep_only = true\n\n[y0da's Crypter v1.2]\nsignature = 60 E8 00 00 00 00 5D 81 ED F3 1D 40 00 B9 7B 09 00 00 8D BD 3B 1E 40 00 8B F7 AC ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? AA E2 CC\nep_only = true\n\n[y0da's Crypter v1.x / Modified]\nsignature = 60 E8 00 00 00 00 5D 81 ED ?? ?? ?? ?? B9 ?? ?? 00 00 8D BD ?? ?? ?? ?? 8B F7 AC\nep_only = true\n\n[yC v1.3 by Ashkbiz Danehkar]\nsignature = 55 8B EC 81 EC C0 00 00 00 53 56 57 8D BD 40 FF FF FF B9 30 00 00 00 B8 CC CC CC CC F3 AB 60 E8 00 00 00 00 5D 81 ED 84 52 41 00 B9 75 5E 41 00 81 E9 DE 52 41 00 8B D5 81 C2 DE 52 41 00 8D 3A 8B F7 33 C0 EB 04 90 EB 01 C2 AC\nep_only = false\n\n[yoda's Crypter 1.3 -> Ashkbiz Danehkar]\nsignature = 55 8B EC 53 56 57 60 E8 00 00 00 00 5D 81 ED 6C 28 40 00 B9 5D 34 40 00 81 E9 C6 28 40 00 8B D5 81 C2 C6 28 40 00 8D 3A 8B F7 33 C0 EB 04 90 EB 01 C2 AC\nep_only = true\n\n[yoda's Protector 1.02 - 1.03 -> Ashkbiz Danehkar]\nsignature = E8 03 00 00 00 EB 01 ?? BB 55 00 00 00 E8 03 00 00 00 EB 01 ?? E8 8F 00 00 00 E8 03 00 00 00 EB 01 ?? E8 82 00 00 00 E8 03 00 00 00 EB 01 ?? E8 B8 00 00 00 E8 03 00 00 00 EB 01 ?? E8 AB 00 00\nep_only = true\n\n[yoda's Protector 1.02 -> Ashkibiz Danehlar]\nsignature = E8 03 00 00 00 EB 01 ?? BB 55 00 00 00 E8 03 00 00 00 EB 01 ?? E8 8F 00 00 00 E8 03 00 00 00 EB 01 ?? E8 82 00 00 00 E8 03 00 00 00 EB 01 ?? E8 B8 00 00 00 E8 03 00 00 00 EB 01 ?? E8 AB 00 00 00 E8 03 00 00 00 EB 01 ?? 83 FB 55 E8 03 00 00 00 EB 01 ?? 75\nep_only = true\n\n[yoda's Protector 1.0x -> Ashkbiz Danehkar]\nsignature = 55 8B EC 53 56 57 E8 03 00 00 00 EB 01\nep_only = true\n\n[yoda's Protector v1.01 -> Ashkbiz Danehkar]\nsignature = 55 8B EC 53 56 57 E8 03 00 00 00 EB 01 ?? E8 86 00 00 00 E8 03 00 00 00 EB 01 ?? E8 79 00 00 00 E8 03 00 00 00 EB 01 ?? E8 A4 00 00 00 E8 03 00 00 00 EB 01 ?? E8 97 00 00 00 E8 03 00 00 00 EB 01 ?? E8 2D 00 00 00 E8 03 00 00 00 EB 01 ?? 60 E8 00 00 00 00\nep_only = true\n\n[yoda's Protector V1.01 -> Ashkbiz Danehkar]\nsignature = 55 8B EC 53 56 57 E8 03 00 00 00 EB 01 ?? E8 86 00 00 00 E8 03 00 00 00 EB 01 ?? E8 79 00 00 00 E8 03 00 00 00 EB 01 ?? E8 A4 00 00 00 E8 03 00 00 00 EB 01 ?? E8 97 00 00 00 E8 03 00 00 00 EB 01 ?? E8 2D 00 00 00 E8 03 00 00 00 EB 01 ?? 60 E8 00 00 00 00 5D 81 ED D5 E4 41 00 8B D5 81 C2 23 E5 41 00 52 E8 01 00 00 00 C3 C3 E8 03 00 00 00 EB 01 ?? E8 0E 00 00 00 E8 D1 FF FF FF C3 E8 03 00 00 00 EB 01 ?? 33 C0 64 FF 30 64 89 20 CC C3 E8 03 00 00 00 EB 01 ?? 33 C0 64 FF 30 64 89 20 CC C3\nep_only = true\n\n[yoda's Protector V1.02 -> Ashkbiz Danehkar]\nsignature = E8 03 00 00 00 EB 01 ?? BB 55 00 00 00 E8 03 00 00 00 EB 01 ?? E8 8F 00 00 00 E8 03 00 00 00 EB 01 ?? E8 82 00 00 00 E8 03 00 00 00 EB 01 ?? E8 B8 00 00 00 E8 03 00 00 00 EB 01 ?? E8 AB 00 00 00 E8 03 00 00 00 EB 01 ?? 83 FB 55 E8 03 00 00 00 EB 01 ?? 75 2E E8 03 00 00 00 EB 01 ?? C3 60 E8 00 00 00 00 5D 81 ED 23 3F 42 00 8B D5 81 C2 72 3F 42 00 52 E8 01 00 00 00 C3 C3 E8 03 00 00 00 EB 01 ?? E8 0E 00 00 00 E8 D1 FF FF FF C3 E8 03 00 00 00 EB 01 ?? 33 C0 64 FF 30 64 89 20 CC C3 E8 03 00 00 00 EB 01 ?? 33 C0 64 FF 30 64 89 20 4B CC C3 E8 03 00 00 00 EB 01 ?? 33 DB B9 3A 66 42 00 81 E9 1D 40 42 00 8B D5 81 C2 1D 40 42 00 8D 3A 8B F7 33 C0 E8 03 00 00 00 EB 01 ?? E8 17 00 00 00 90 90 90 E9 C3 1F 00 00 33 C0 64 FF 30 64 89 20 43 CC C3\nep_only = true\n\n[yoda's Protector V1.03.1 -> Ashkbiz Danehkar]\nsignature = E8 03 00 00 00 EB 01 ?? BB 55 00 00 00 E8 03 00 00 00 EB 01 ?? E8 8F 00 00 00 E8 03 00 00 00 EB 01 ?? E8 82 00 00 00 E8 03 00 00 00 EB 01 ?? E8 B8 00 00 00 E8 03 00 00 00 EB 01 ?? E8 AB 00 00 00 E8 03 00 00 00 EB 01 ?? 83 FB 55 E8 03 00 00 00 EB 01 ?? 75 2E E8 03 00 00 00 EB 01 ?? C3 60 E8 00 00 00 00 5D 81 ED 74 72 42 00 8B D5 81 C2 C3 72 42 00 52 E8 01 00 00 00 C3 C3 E8 03 00 00 00 EB 01 ?? E8 0E 00 00 00 E8 D1 FF FF FF C3 E8 03 00 00 00 EB 01 ?? 33 C0 64 FF 30 64 89 20 CC C3 E8 03 00 00 00 EB 01 ?? 33 C0 64 FF 30 64 89 20 4B CC C3 E8 03 00 00 00 EB 01 ?? 33 DB B9 3F A9 42 00 81 E9 6E 73 42 00 8B D5 81 C2 6E 73 42 00 8D 3A 8B F7 33 C0 E8 03 00 00 00 EB 01 ?? E8 17 00 00 00 90 90 90 E9 98 2E 00 00 33 C0 64 FF 30 64 89 20 43 CC C3\nep_only = true\n\n[yoda's Protector V1.03.2 -> Ashkbiz Danehkar]\nsignature = E8 03 00 00 00 EB 01 ?? BB 55 00 00 00 E8 03 00 00 00 EB 01 ?? E8 8F 00 00 00 E8 03 00 00 00 EB 01 ?? E8 82 00 00 00 E8 03 00 00 00 EB 01 ?? E8 B8 00 00 00 E8 03 00 00 00 EB 01 ?? E8 AB 00 00 00 E8 03 00 00 00 EB 01 ?? 83 FB 55 E8 03 00 00 00 EB 01 ?? 75 2E E8 03 00 00 00 EB 01 ?? C3 60 E8 00 00 00 00 5D 81 ED 94 73 42 00 8B D5 81 C2 E3 73 42 00 52 E8 01 00 00 00 C3 C3 E8 03 00 00 00 EB 01 ?? E8 0E 00 00 00 E8 D1 FF FF FF C3 E8 03 00 00 00 EB 01 ?? 33 C0 64 FF 30 64 89 20 CC C3 E8 03 00 00 00 EB 01 ?? 33 C0 64 FF 30 64 89 20 4B CC C3 E8 03 00 00 00 EB 01 ?? 33 DB B9 BF A4 42 00 81 E9 8E 74 42 00 8B D5 81 C2 8E 74 42 00 8D 3A 8B F7 33 C0 E8 03 00 00 00 EB 01 ?? E8 17 00 00 00 90 90 90 E9 63 29 00 00 33 C0 64 FF 30 64 89 20 43 CC C3\nep_only = true\n\n[Yoda's Protector v1.03.2 Beta2 -> Ashkbiz Danehkar]\nsignature = E8 03 00 00 00 EB 01 ?? BB 55 00 00 00 E8 03 00 00 00 EB 01 ?? E8 8F 00 00 00 E8 03 00 00 00 EB 01 ?? E8 82 00 00 00 E8 03 00 00 00 EB 01 ?? E8 B8 00 00 00\nep_only = true\n\n[yoda's Protector v1.03.3 (.exe,.scr,.com) -> Ashkbiz Danehkar]\nsignature = E8 03 00 00 00 EB 01 ?? BB 55 00 00 00 E8 03 00 00 00 EB 01 ?? E8 8E 00 00 00 E8 03 00 00 00 EB 01 ?? E8 81 00 00 00 E8 03 00 00 00 EB 01 ?? E8 B7 00 00 00 E8 03 00 00 00 EB 01 ?? E8 AA 00 00 00 E8 03 00 00 00 EB 01 ?? 83 FB 55 E8 03 00 00 00 EB 01 ?? 75\nep_only = true\n\n[yoda's Protector V1.03.3 -> Ashkbiz Danehkar]\nsignature = E8 03 00 00 00 EB 01 ?? BB 55 00 00 00 E8 03 00 00 00 EB 01 ?? E8 8E 00 00 00 E8 03 00 00 00 EB 01 ?? E8 81 00 00 00 E8 03 00 00 00 EB 01 ?? E8 B7 00 00 00 E8 03 00 00 00 EB 01 ?? E8 AA 00 00 00 E8 03 00 00 00 EB 01 ?? 83 FB 55 E8 03 00 00 00 EB 01 ?? 75 2D E8 03 00 00 00 EB 01 ?? 60 E8 00 00 00 00 5D 81 ED 07 E2 40 00 8B D5 81 C2 56 E2 40 00 52 E8 01 00 00 00 C3 C3 E8 03 00 00 00 EB 01 ?? E8 0E 00 00 00 E8 D1 FF FF FF C3 E8 03 00 00 00 EB 01 ?? 33 C0 64 FF 30 64 89 20 CC C3 E8 03 00 00 00 EB 01 ?? 33 C0 64 FF 30 64 89 20 4B CC C3\nep_only = true\n\n[yoda's Protector v1.0b -> Ashkbiz Danehkar]\nsignature = 55 8B EC 53 56 57 60 E8 00 00 00 00 5D 81 ED 4C 32 40 00 E8 03 00 00 00 EB 01 ?? B9 EA 47 40 00 81 E9 E9 32 40 00 8B D5 81 C2 E9 32 40 00 8D 3A 8B F7 33 C0 E8 04 00 00 00 90 EB 01 ?? E8 03 00 00 00 EB 01\nep_only = true\n\n[yP v1.0b by Ashkbiz Danehkar]\nsignature = 55 8B EC 53 56 57 60 E8 00 00 00 00 5D 81 ED 4C 32 40 00 E8 03 00 00 00 EB 01 ?? B9 EA 47 40 00 81 E9 E9 32 40 00 8B D5 81 C2 E9 32 40 00 8D 3A 8B F7 33 C0 E8 04 00 00 00 90 EB 01 C2 E8 03 00 00 00 EB 01 ?? AC ?? ?? ?? ?? ?? ?? ?? EB 01 E8\nep_only = false\n\n[yzpack 1.12 -> UsAr]\nsignature = 5A 52 45 60 83 EC 18 8B EC 8B FC 33 C0 64 8B 40 30 78 0C 8B 40 0C 8B 70 1C AD 8B 40 08 EB 09 8B 40 34 83 C0 7C 8B 40 3C AB E9 ?? ?? ?? ?? B4 09 BA 00 00 1F CD 21 B8 01 4C CD 21 40 00 00 00 50 45 00 00 4C 01 02 00 ?? ?? ?? ?? 00 00 00 00 00 00 00 00 E0 00 ?? ?? 0B 01 ?? ?? ?? ?? 00 00\nep_only = true\n\n[YZPack 1.2 --> UsAr]\nsignature = 4D 5A 52 45 60 83 EC 18 8B EC 8B FC 33 C0 64 8B 40 30 78 0C 8B 40 0C 8B 70 1C AD 8B 40 08 EB 09 8B 40 34 83 C0 7C 8B 40 3C AB E9\nep_only = true\n\n[yzpack 2.0 -> UsAr]\nsignature = 25 ?? ?? ?? ?? 61 87 CC 55 45 45 55 81 ED CA 00 00 00 55 A4 B3 02 FF 14 24 73 F8 33 C9 FF 14 24 73 18 33 C0 FF 14 24 73 1F B3 02 41 B0 10 FF 14 24 12 C0 73 F9 75 3C AA EB DC FF 54 24 04 2B CB 75 0F FF 54 24 08 EB 27 AC D1 E8 74 30 13 C9 EB 1B 91 48 C1 E0 08 AC FF 54 24 08 3D 00 7D 00 00 73 0A 80 FC 05 73 06 83 F8 7F 77 02 41 41 95 8B C5 B3 01 56 8B F7 2B F0 F3 A4 5E EB 99 BD ?? ?? ?? ?? FF 65 28\nep_only = true\n\n[yzpack V1.1 -> UsAr]\nsignature = 60 33 C0 8D 48 07 50 E2 FD 8B EC 64 8B 40 30 78 0C 8B 40 0C 8B 70 1C AD 8B 40 08 EB 09 8B 40 34 8D 40 7C 8B 40 3C 89 45 04 E8 F3 07 00 00 60 8B 5D 04 8B 73 3C 8B 74 33 78 03 F3 56 8B 76 20 03 F3 33 C9 49 92 41 AD 03 C3 52 33 FF 0F B6 10 38 F2\nep_only = true\n\n[ZCode Win32/PE Protector v1.01]\nsignature = E9 12 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? E9 FB FF FF FF C3 68 ?? ?? ?? ?? 64 FF 35\nep_only = true\n\n[ZealPack 1.0 -> Zeal]\nsignature = C7 45 F4 00 00 40 00 C7 45 F0 ?? ?? ?? ?? 8B 45 F4 05 ?? ?? ?? ?? 89 45 F4 C7 45 FC 00 00 00 00 EB 09 8B 4D FC 83 C1 01 89 4D FC 8B 55 FC 3B 55 F0 7D 22 8B 45 F4 03 45 FC 8A 08 88 4D F8 0F BE 55 F8 83 F2 0F 88 55 F8 8B 45 F4 03 45 FC 8A 4D F8 88 08 EB CD FF 65 F4\nep_only = true\n\n[ZipWorxSecureEXE v2.5 -> ZipWORX Technologies LLC]\nsignature = E9 B8 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 00 53 65 63 75 72 65 45 58 45 20 45 78 65 63 75 74 61 62 6C 65 20 46 69 6C 65 20 50 72 6F 74 65 63 74 6F 72 0D 0A 43 6F 70 79 72 69 67 68 74 28 63 29 20 32 30\nep_only = true\n\n[[MSLRH]]\nsignature = 60 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 2B 04 24 74 04 75 02 EB 02 EB 01 81 83 C4 04 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 3D FF 0F 00 00 EB 01 68 EB 02 CD 20 EB 01 E8 76 1B EB 01 68 EB 02 CD 20 EB 01 E8 CC 66 B8 FE 00 74 04 75 02 EB 02 EB 01 81 66 E7 64 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 2B 04 24 74 04 75 02 EB 02 EB 01 81\nep_only = true\n\n[[MSLRH] v0.1 -> emadicius]\nsignature = 60 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 2B 04 24 74 04 75 02 EB 02 EB 01 81 83 C4 04 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 3D FF 0F 00 00 EB 01 68 EB 02 CD 20 EB 01 E8 76 1B EB 01 68 EB 02 CD 20 EB 01 E8 CC 66 B8 FE 00 74 04 75 02 EB 02 EB 01 81 66 E7 64 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08\nep_only = true\n\n[[MSLRH] v0.31a]\nsignature = 60 D1 CB 0F CA C1 CA E0 D1 CA 0F C8 EB 01 F1 0F C0 C9 D2 D1 0F C1 C0 D3 DA C0 D6 A8 EB 01 DE D0 EC 0F C1 CB D0 CF 0F C1 D1 D2 DB 0F C8 EB 01 BC C0 E9 C6 C1 D0 91 0F CB EB 01 73 0F CA 87 D9 87 D2 D0 CF 87 D9 0F C8 EB 01 C1 EB 01 A2 86 CA D0 E1 0F C0 CB 0F CA C0 C7 91 0F CB C1 D9 0C 86 F9 86 D7 D1 D9 EB 01 A5 EB 01 11 EB 01 1D 0F C1 C2 0F CB 0F C1 C2 EB 01 A1 C0 E9 FD 0F C1 D1 EB 01 E3 0F CA 87 D9 EB 01 F3 0F CB 87 C2 0F C0 F9 D0 F7 EB 01 2F 0F C9 C0 DC C4 EB 01 35 0F CA D3 D1 86 C8 EB 01 01 0F C0 F5 87 C8 D0 DE EB 01 95 EB 01 E1 EB 01 FD EB 01 EC 87 D3 0F CB C1 DB 35 D3 E2 0F C8 86 E2 86 EC C1 FB 12 D2 EE 0F C9 D2 F6 0F CA 87 C3 C1 D3 B3 EB 01 BF D1 CB 87 C9 0F CA 0F C1 DB EB 01 44 C0 CA F2 0F C1 D1 0F CB EB 01 D3 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00\nep_only = true\n\n[[MSLRH] v0.32a (fake .BJFNT 1.3) -> emadicius]\nsignature = EB 03 3A 4D 3A 1E EB 02 CD 20 9C EB 02 CD 20 EB 02 CD 20 60 EB 02 C7 05 EB 02 CD 20 E8 03 00 00 00 E9 EB 04 58 40 50 C3 61 9D 1F EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 2B 04 24 74 04 75 02 EB 02 EB 01\nep_only = true\n\n[[MSLRH] v0.32a (fake ASPack 2.11d) -> emadicius]\nsignature = 60 E8 02 00 00 00 EB 09 5D 55 81 ED 39 39 44 00 C3 61 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake ASPack 2.12) -> emadicius]\nsignature = 60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01 00 00 00 EB 5D BB ED FF FF FF 03 DD 81 EB 00 A0 02 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake EXE32Pack 1.3x) -> emadicius]\nsignature = 3B C0 74 02 81 83 55 3B C0 74 02 81 83 53 3B C9 74 01 BC 56 3B D2 74 02 81 85 57 E8 00 00 00 00 3B DB 74 01 90 83 C4 14 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake Microsoft Visual C++) -> emadicius]\nsignature = 55 8B EC 6A FF 68 CA 37 41 00 68 06 38 41 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 64 8F 05 00 00 00 00 83 C4 0C 5D EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 2B 04 24 74 04 75 02 EB 02 EB 01\nep_only = true\n\n[[MSLRH] v0.32a (fake MSVC++ 6.0 DLL) -> emadicius]\nsignature = 55 8B EC 53 8B 5D 08 56 8B 75 0C 57 8B 7D 10 85 F6 5F 5E 5B 5D EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake MSVC++ 7.0 DLL Method 3) -> emadicius]\nsignature = 55 8B EC 53 8B 5D 08 56 8B 75 0C 5E 5B 5D EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake MSVC++ DLL Method 4) -> emadicius]\nsignature = 55 8B EC 56 57 BF 01 00 00 00 8B 75 0C 85 F6 5F 5E 5D EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake Neolite 2.0) -> emadicius]\nsignature = E9 A6 00 00 00 B0 7B 40 00 78 60 40 00 7C 60 40 00 00 00 00 00 B0 3F 00 00 12 62 40 00 4E 65 6F 4C 69 74 65 20 45 78 65 63 75 74 61 62 6C 65 20 46 69 6C 65 20 43 6F 6D 70 72 65 73 73 6F 72 0D 0A 43 6F 70 79 72 69 67 68 74 20 28 63 29 20 31 39 39 38 2C 31 39 39 39 20 4E 65 6F 57 6F 72 78 20 49 6E 63 0D 0A 50 6F 72 74 69 6F 6E 73 20 43 6F 70 79 72 69 67 68 74 20 28 63 29 20 31 39 39 37 2D 31 39 39 39 20 4C 65 65 20 48 61 73 69 75 6B 0D 0A 41 6C 6C 20 52 69 67 68 74 73 20 52 65 73 65 72 76 65 64 2E 00 00 00 00 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 2B 04 24 74 04 75 02 EB 02 EB 01\nep_only = true\n\n[[MSLRH] v0.32a (fake nSPack 1.3) -> emadicius]\nsignature = 9C 60 E8 00 00 00 00 5D B8 B3 85 40 00 2D AC 85 40 00 2B E8 8D B5 D3 FE FF FF 8B 06 83 F8 00 74 11 8D B5 DF FE FF FF 8B 06 83 F8 01 0F 84 F1 01 00 00 61 9D EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 2B 04 24 74 04 75 02 EB 02 EB 01\nep_only = true\n\n[[MSLRH] v0.32a (fake PC-Guard 4.xx) -> emadicius]\nsignature = FC 55 50 E8 00 00 00 00 5D EB 01 E3 60 E8 03 00 00 00 D2 EB 0B 58 EB 01 48 40 EB 01 35 FF E0 E7 61 58 5D EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake PE Crypt 1.02) -> emadicius]\nsignature = E8 00 00 00 00 5B 83 EB 05 EB 04 52 4E 44 21 85 C0 73 02 F7 05 50 E8 08 00 00 00 EA FF 58 EB 18 EB 01 0F EB 02 CD 20 EB 03 EA CD 20 58 58 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake PE Lock NT 2.04) -> emadicius]\nsignature = EB 03 CD 20 C7 1E EB 03 CD 20 EA 9C EB 02 EB 01 EB 01 EB 60 EB 03 CD 20 EB EB 01 EB E8 03 00 00 00 E9 EB 04 58 40 50 C3 EB 03 CD 20 EB EB 03 CD 20 03 61 9D 83 C4 04 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake PEBundle 0.2 - 3.x) -> emadicius]\nsignature = 9C 60 E8 02 00 00 00 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 07 30 40 00 87 DD 61 9D EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake PEBundle 2.0x - 2.4x) -> emadicius]\nsignature = 9C 60 E8 02 00 00 00 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 07 30 40 00 87 DD 83 BD 9C 38 40 00 01 61 9D EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake PECompact 1.4x) -> emadicius]\nsignature = EB 06 68 2E A8 00 00 C3 9C 60 E8 02 00 00 00 33 C0 8B C4 83 C0 04 93 8B E3 8B 5B FC 81 EB 3F 90 40 00 61 9D EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake PESHiELD 0.25) -> emadicius]\nsignature = 60 E8 2B 00 00 00 0D 0A 0D 0A 0D 0A 52 65 67 69 73 74 41 72 65 64 20 74 6F 3A 20 4E 4F 4E 2D 43 4F 4D 4D 45 52 43 49 41 4C 21 21 0D 0A 0D 0A 0D 00 58 61 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake PEtite 2.1) -> emadicius]\nsignature = B8 00 50 40 00 6A 00 68 BB 21 40 00 64 FF 35 00 00 00 00 64 89 25 00 00 00 00 66 9C 60 50 83 C4 04 61 66 9D 64 8F 05 00 00 00 00 83 C4 08 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake PEX 0.99) -> emadicius]\nsignature = 60 E8 01 00 00 00 E8 83 C4 04 E8 01 00 00 00 E9 5D 81 ED FF 22 40 00 61 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 2B 04 24 74 04 75 02 EB 02 EB 01\nep_only = true\n\n[[MSLRH] v0.32a (fake SVKP 1.11) -> emadicius]\nsignature = 60 E8 00 00 00 00 5D 81 ED 06 00 00 00 64 A0 23 00 00 00 83 C5 06 61 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 2B 04 24 74 04 75 02 EB 02 EB 01\nep_only = true\n\n[[MSLRH] v0.32a (fake UPX 0.89.6 - 1.02 / 1.05 - 1.24) -> emadicius]\nsignature = 60 BE 00 90 8B 00 8D BE 00 80 B4 FF 57 83 CD FF EB 3A 90 90 90 90 90 90 8A 06 46 88 07 47 01 DB 75 07 8B 1E 83 EE FC 11 DB 72 ED B8 01 00 00 00 01 DB 75 07 8B 1E 83 EE FC 11 DB 11 C0 01 DB 73 0B 75 19 8B 1E 83 EE FC 11 DB 72 10 58 61 90 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake WWPack32 1.x) -> emadicius]\nsignature = 53 55 8B E8 33 DB EB 60 0D 0A 0D 0A 57 57 50 61 63 6B 33 32 20 64 65 63 6F 6D 70 72 65 73 73 69 6F 6E 20 72 6F 75 74 69 6E 65 20 76 65 72 73 69 6F 6E 20 31 2E 31 32 0D 0A 28 63 29 20 31 39 39 38 20 50 69 6F 74 72 20 57 61 72 65 7A 61 6B 20 61 6E 64 20 52 61 66 61 6C 20 57 69 65 72 7A 62 69 63 6B 69 0D 0A 0D 0A 5D 5B 90 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a (fake yoda's cryptor 1.2) -> emadicius]\nsignature = 60 E8 00 00 00 00 5D 81 ED F3 1D 40 00 B9 7B 09 00 00 8D BD 3B 1E 40 00 8B F7 AC 90 2C 8A C0 C0 78 90 04 62 EB 01 00 61 EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF\nep_only = true\n\n[[MSLRH] v0.32a -> emadicius]\nsignature = E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 2B 04 24 74 04 75 02 EB 02 EB 01 81 83 C4 04 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 3D FF FF FF 00 EB 01 68 EB 02 CD 20 EB 01 E8 76 1B EB 01 68 EB 02 CD 20 EB 01 E8 CC 66 B8 FE 00 74 04 75 02 EB 02 EB 01 81 66 E7 64 74 04 75 02 EB 02 EB 01 81 E8 0A 00 00 00 E8 EB 0C\nep_only = true\n\n[[MSLRH] v32a -> emadicius]\nsignature = EB 05 E8 EB 04 40 00 EB FA E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 50 E8 02 00 00 00 29 5A 58 6B C0 03 E8 02 00 00 00 29 5A 83 C4 04 58 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 2B 04 24 74 04 75 02 EB 02 EB 01 81 83 C4 04 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 3D FF 0F 00 00 EB 01 68 EB 02 CD 20 EB 01 E8 76 1B EB 01 68 EB 02 CD 20 EB 01 E8 CC 66 B8 FE 00 74 04 75 02 EB 02 EB 01 81 66 E7 64 E8 0A 00 00 00 E8 EB 0C 00 00 E8 F6 FF FF FF E8 F2 FF FF FF 83 C4 08 74 04 75 02 EB 02 EB 01 81 0F 31 50 0F 31\nep_only = true\n\n"
  },
  {
    "path": "data/src/binpackage/Makefile",
    "content": "execsc.exe: execsc.c\n\ti586-mingw32msvc-cc -Wall -o $@ $<\n\n"
  },
  {
    "path": "data/src/binpackage/execsc.c",
    "content": "#include <unistd.h>\n#include <stdio.h>\n#include <windows.h>\n\nint main (int argc, char ** argv) {\n\tint fd;\n\tchar buf[2048] = {0};\n\n\tif (argc < 2) return 1;\n\n\t// read in shellcode from analysis target file\n\tfd = open(argv[1], 0);\n\tread(fd, buf, 2048);\n\tclose(fd);\n\n\t// jump into shellcode\n\tint (*func)();\n\tfunc = (int (*)()) buf;\n\t(int)(*func)();\n\n\treturn 0;\n}\n\n"
  },
  {
    "path": "data/strace.stp",
    "content": "/* Copyright (C) 2010-2015 Cuckoo Foundation.\n # This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n # See the file 'docs/LICENSE' for copying permission.\n #\n # Based on the Systemtap \"strace.stp\" example, adapted to our needs\n */\n\n/* configuration options; set these with stap -G */\nglobal timestamp = 1     /* -Gtimestamp=0 means don't print a syscall timestamp */\nglobal elapsed_time = 0  /* -Gelapsed_time=1 means print a syscall duration too */\n\nglobal thread_argstr%\nglobal thread_time%\n\nglobal syscalls_nonreturn\nprobe begin \n  {\n    /* list those syscalls that never .return */\n    syscalls_nonreturn[\"exit\"]=1\n    syscalls_nonreturn[\"exit_group\"]=1\n  }\n\nprobe nd_syscall.* \n  {\n    if (pid() == target()) next # skip our own helper process\n    if (!target_set_pid(pid())) next # skip unrelated processes\n\n    t=tid()\n    thread_argstr[t]=argstr\n    if (timestamp || elapsed_time)\n      thread_time[t]=gettimeofday_us()\n\n    if (name in syscalls_nonreturn)\n      report(name,argstr,\"\")\n  }\n\nprobe nd_syscall.*.return\n  {\n    if (pid() == target()) next # skip our own helper process\n    if (!target_set_pid(pid())) next # skip unrelated processes\n\n    report(name,thread_argstr[tid()],retstr)\n  }\n\nfunction report(syscall_name, syscall_argstr, syscall_retstr)\n  {\n    t=tid()\n\n    if (timestamp || elapsed_time)\n      {\n        now = gettimeofday_us()\n        then = thread_time[t]\n\n        if (timestamp)\n          prefix=sprintf(\"%s.%06d \", ctime(then/1000000), then%1000000)\n\n        if (elapsed_time && (now>then)) {\n          diff = now-then\n          suffix=sprintf(\" <%d.%06d>\", diff/1000000, diff%1000000)\n        }\n\n        delete thread_time[t]\n      }\n\n    /* add a thread-id string in lots of cases, except if\n       stap strace.stp -c SINGLE_THREADED_CMD */\n    if (tid() != target()) {\n      prefix .= sprintf(\"%s@%x[%d] \", execname(), uaddr(), t)\n    }\n\n    printf(\"%s%s(%s) = %s%s\\n\",\n           prefix, \n           syscall_name, syscall_argstr, syscall_retstr,\n           suffix)\n\n    //print_ubacktrace_brief()\n    \n    delete thread_argstr[t]\n  }\n"
  },
  {
    "path": "data/test-internet.vbs",
    "content": "' http://www.motobit.com/tips/detpg_read-write-binary-files/\nFunction SaveBinaryData(FileName, ByteArray)\n    Const adTypeBinary = 1\n    Const adSaveCreateOverWrite = 2\n\n    ' create Stream object\n    dim BinaryStream\n    set BinaryStream = CreateObject(\"ADODB.Stream\")\n\n    ' specify stream type - we want to save binary data.\n    BinaryStream.Type = adTypeBinary\n\n    ' open the stream and write binary data To the object\n    BinaryStream.Open\n    BinaryStream.Write ByteArray\n\n    ' save binary data to disk\n    BinaryStream.SaveToFile FileName, adSaveCreateOverWrite\nEnd Function\n\n' http://stackoverflow.com/questions/5907089/how-to-post-https-request-using-vbscript\nFunction DownloadFile(FileName, Url)\n    dim http\n    set http = createobject(\"MSXML2.ServerXMLHTTP\")\n\n    http.Open \"GET\", Url, False\n\n    ' 2 stands for SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS\n    ' 13056 means ignore all server side cert error\n    http.setOption 2, 13056\n    http.Send\n\n    ' read response body\n    SaveBinaryData FileName, http.responseBody\nEnd Function\n\nDownloadFile \"index.html\", \"http://google.com/\"\n"
  },
  {
    "path": "data/whitelist/domain.txt",
    "content": "java.com\nwww.msn.com\nwww.bing.com\nwindows.microsoft.com\ngo.microsoft.com\nstatic-hp-eas.s-msn.com\nimg-s-msn-com.akamaized.net\nsdlc-esd.oracle.com\njavadl.sun.com\nres2.windows.microsoft.com\nres1.windows.microsoft.com\nimg.s-msn.com\njs.microsoft.com\nfbstatic-a.akamaihd.net\najax.microsoft.com\najax.aspnetcdn.com\nieonline.microsoft.com\napi.bing.com\nschemas.microsoft.com\nwww.w3.org\n"
  },
  {
    "path": "data/yara/binaries/embedded.yar",
    "content": "// Copyright (C) 2010-2014 Cuckoo Foundation.\n// This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n// See the file 'docs/LICENSE' for copying permission.\n\nrule embedded_macho\n{\n    meta:\n        author = \"nex\"\n        description = \"Contains an embedded Mach-O file\"\n\n    strings:\n        $magic1 = { ca fe ba be }\n        $magic2 = { ce fa ed fe }\n        $magic3 = { fe ed fa ce }\n    condition:\n        any of ($magic*) and not ($magic1 at 0) and not ($magic2 at 0) and not ($magic3 at 0)\n}\n\nrule embedded_pe\n{\n    meta:\n        author = \"nex\"\n        description = \"Contains an embedded PE32 file\"\n\n    strings:\n        $a = \"PE32\"\n        $b = \"This program\"\n        $mz = { 4d 5a }\n    condition:\n        ($a or $b) and not ($mz at 0)\n}\n\nrule embedded_win_api\n{\n    meta:\n        author = \"nex\"\n        description = \"A non-Windows executable contains win32 API functions names\"\n\n    strings:\n        $mz = { 4d 5a }\n        $api1 = \"CreateFileA\"\n        $api2 = \"GetProcAddress\"\n        $api3 = \"LoadLibraryA\"\n        $api4 = \"WinExec\"\n        $api5 = \"GetSystemDirectoryA\"\n        $api6 = \"WriteFile\"\n        $api7 = \"ShellExecute\"\n        $api8 = \"GetWindowsDirectory\"\n        $api9 = \"URLDownloadToFile\"\n        $api10 = \"IsBadReadPtr\"\n        $api11 = \"IsBadWritePtr\"\n        $api12 = \"SetFilePointer\"\n        $api13 = \"GetTempPath\"\n        $api14 = \"GetWindowsDirectory\"\n    condition:\n        not ($mz at 0) and any of ($api*)\n}\n"
  },
  {
    "path": "data/yara/binaries/shellcodes.yar",
    "content": "// Copyright (C) 2010-2014 Cuckoo Foundation.\n// This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n// See the file 'docs/LICENSE' for copying permission.\n\nrule shellcode\n{\n    meta:\n        author = \"nex\"\n        description = \"Matched shellcode byte patterns\"\n\n    strings:\n        $mz = { 4d 5a }\n        $shell1 = { 64 8b 64 }\n        $shell2 = { 64 a1 30 }\n        $shell3 = { 64 8b 15 30 }\n        $shell4 = { 64 8b 35 30 }\n        $shell5 = { 55 8b ec 83 c4 }\n        $shell6 = { 55 8b ec 81 ec }\n        $shell7 = { 55 8b ec e8 }\n        $shell8 = { 55 8b ec e9 }\n    condition:\n        not ($mz at 0) and\n        any of ($shell*)\n}\n"
  },
  {
    "path": "data/yara/binaries/vmdetect.yar",
    "content": "// Copyright (C) 2010-2014 Cuckoo Foundation.\n// This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n// See the file 'docs/LICENSE' for copying permission.\n\nrule vmdetect\n{\n    meta:\n        author = \"nex\"\n        description = \"Possibly employs anti-virtualization techniques\"\n\n    strings:\n        // Binary tricks\n        $vmware = {56 4D 58 68}\n        $virtualpc = {0F 3F 07 0B}\n        $ssexy = {66 0F 70 ?? ?? 66 0F DB ?? ?? ?? ?? ?? 66 0F DB ?? ?? ?? ?? ?? 66 0F EF}\n        $vmcheckdll = {45 C7 00 01}\n        $redpill = {0F 01 0D 00 00 00 00 C3}\n\n        // Random strings\n        $vmware1 = \"VMXh\"\n        $vmware2 = \"Ven_VMware_\" nocase\n        $vmware3 = \"Prod_VMware_Virtual_\" nocase\n        $vmware4 = \"hgfs.sys\" nocase\n        $vmware5 = \"mhgfs.sys\" nocase\n        $vmware6 = \"prleth.sys\" nocase\n        $vmware7 = \"prlfs.sys\" nocase\n        $vmware8 = \"prlmouse.sys\" nocase\n        $vmware9 = \"prlvideo.sys\" nocase\n        $vmware10 = \"prl_pv32.sys\" nocase\n        $vmware11 = \"vpc-s3.sys\" nocase\n        $vmware12 = \"vmsrvc.sys\" nocase\n        $vmware13 = \"vmx86.sys\" nocase\n        $vmware14 = \"vmnet.sys\" nocase\n        $vmware15 = \"vmicheartbeat\" nocase\n        $vmware16 = \"vmicvss\" nocase\n        $vmware17 = \"vmicshutdown\" nocase\n        $vmware18 = \"vmicexchange\" nocase\n        $vmware19 = \"vmdebug\" nocase\n        $vmware20 = \"vmmouse\" nocase\n        $vmware21 = \"vmtools\" nocase\n        $vmware22 = \"VMMEMCTL\" nocase\n        $vmware23 = \"vmx86\" nocase\n        $vmware24 = \"vmware\" nocase\n        $virtualpc1 = \"vpcbus\" nocase\n        $virtualpc2 = \"vpc-s3\" nocase\n        $virtualpc3 = \"vpcuhub\" nocase\n        $virtualpc4 = \"msvmmouf\" nocase\n        $xen1 = \"xenevtchn\" nocase\n        $xen2 = \"xennet\" nocase\n        $xen3 = \"xennet6\" nocase\n        $xen4 = \"xensvc\" nocase\n        $xen5 = \"xenvdb\" nocase\n        $xen6 = \"XenVMM\" nocase\n        $virtualbox1 = \"VBoxHook.dll\" nocase\n        $virtualbox2 = \"VBoxService\" nocase\n        $virtualbox3 = \"VBoxTray\" nocase\n        $virtualbox4 = \"VBoxMouse\" nocase\n        $virtualbox5 = \"VBoxGuest\" nocase\n        $virtualbox6 = \"VBoxSF\" nocase\n        $virtualbox7 = \"VBoxGuestAdditions\" nocase\n        $virtualbox8 = \"VBOX HARDDISK\"  nocase\n\n        // MAC addresses\n        $vmware_mac_1a = \"00-05-69\"\n        $vmware_mac_1b = \"00:05:69\"\n        $vmware_mac_1c = \"000569\"\n        $vmware_mac_2a = \"00-50-56\"\n        $vmware_mac_2b = \"00:50:56\"\n        $vmware_mac_2c = \"005056\"\n        $vmware_mac_3a = \"00-0C-29\" nocase\n        $vmware_mac_3b = \"00:0C:29\" nocase\n        $vmware_mac_3c = \"000C29\" nocase\n        $vmware_mac_4a = \"00-1C-14\" nocase\n        $vmware_mac_4b = \"00:1C:14\" nocase\n        $vmware_mac_4c = \"001C14\" nocase\n        $virtualbox_mac_1a = \"08-00-27\"\n        $virtualbox_mac_1b = \"08:00:27\"\n        $virtualbox_mac_1c = \"080027\"\n\n    condition:\n        any of them\n}\n"
  },
  {
    "path": "data/yara/memory/.gitignore",
    "content": ""
  },
  {
    "path": "data/yara/memory/index_memory.yar",
    "content": "// Copyright (C) 2010-2014 Cuckoo Foundation.\n// This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n// See the file 'docs/LICENSE' for copying permission.\n\n// The contents of this file are Yara rules processed by procmemory.py processing\n// module. Add your signatures here."
  },
  {
    "path": "data/yara/urls/.gitignore",
    "content": ""
  },
  {
    "path": "distributed/alembic.ini",
    "content": "# A generic, single database configuration.\n\n[alembic]\n# path to migration scripts\nscript_location = migration\n\n# Logging configuration\n[loggers]\nkeys = root,sqlalchemy,alembic\n\n[handlers]\nkeys = console\n\n[formatters]\nkeys = generic\n\n[logger_root]\nlevel = WARN\nhandlers = console\nqualname =\n\n[logger_sqlalchemy]\nlevel = WARN\nhandlers =\nqualname = sqlalchemy.engine\n\n[logger_alembic]\nlevel = INFO\nhandlers =\nqualname = alembic\n\n[handler_console]\nclass = StreamHandler\nargs = (sys.stderr,)\nlevel = NOTSET\nformatter = generic\n\n[formatter_generic]\nformat = %(levelname)-5.5s [%(name)s] %(message)s\ndatefmt = %H:%M:%S\n"
  },
  {
    "path": "distributed/app.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport argparse\nimport logging\nimport os.path\nimport sys\n\nfrom distributed.app import create_app\n\nsys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), \"..\"))\n\nfrom lib.cuckoo.core.startup import drop_privileges\n\nlogging.basicConfig(level=logging.INFO)\nlogging.getLogger(\"requests\").setLevel(logging.WARNING)\nlogging.getLogger(\"urllib3\").setLevel(logging.WARNING)\nlog = logging.getLogger(\"cuckoo.distributed\")\n\napplication = create_app()\n\nif __name__ == \"__main__\":\n    p = argparse.ArgumentParser()\n    p.add_argument(\"host\", nargs=\"?\", default=\"127.0.0.1\", help=\"Host to listen on.\")\n    p.add_argument(\"port\", nargs=\"?\", type=int, default=9003, help=\"Port to listen on.\")\n    p.add_argument(\"-u\", \"--user\", type=str, help=\"Drop user privileges to this user.\")\n    p.add_argument(\"-v\", \"--verbose\", action=\"store_true\", help=\"Enable verbose logging.\")\n    args = p.parse_args()\n\n    if args.user:\n        drop_privileges(args.user)\n\n    log.setLevel(logging.DEBUG)\n    application.run(host=args.host, port=args.port, debug=True)\n"
  },
  {
    "path": "distributed/distributed/__init__.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "distributed/distributed/api.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os.path\nimport shutil\nimport requests\n\nfrom distributed.exception import InvalidReport\n\ndef list_machines(url):\n    r = requests.get(os.path.join(url, \"machines\", \"list\"))\n    return r.json()[\"machines\"]\n\ndef node_status(url):\n    try:\n        r = requests.get(os.path.join(url, \"cuckoo\", \"status\"), timeout=120)\n        return r.json()\n    except:\n        pass\n\ndef submit_task(url, task):\n    url = os.path.join(url, \"tasks\", \"create\", \"file\")\n    data = dict(\n        package=task[\"package\"],\n        timeout=task[\"timeout\"],\n        priority=task[\"priority\"],\n        options=task[\"options\"],\n        machine=task[\"machine\"],\n        platform=task[\"platform\"],\n        tags=task[\"tags\"],\n        custom=task[\"custom\"],\n        owner=task[\"owner\"],\n        memory=task[\"memory\"],\n        clock=task[\"clock\"],\n        enforce_timeout=task[\"enforce_timeout\"],\n    )\n\n    # If the file does not exist anymore, ignore it and move on\n    # to the next file.\n    if not os.path.isfile(task[\"path\"]):\n        return task[\"id\"], None\n\n    files = {\"file\": (task[\"filename\"], open(task[\"path\"], \"rb\"))}\n    r = requests.post(url, data=data, files=files)\n    return r.json()[\"task_id\"]\n\ndef fetch_tasks(url, status):\n    url = os.path.join(url, \"tasks\", \"list\")\n    r = requests.get(url, params=dict(status=status))\n    return r.json()[\"tasks\"]\n\ndef store_report(url, task_id, report_format, dirpath):\n    url = os.path.join(url, \"tasks\", \"report\", \"%d\" % task_id, report_format)\n    report = requests.get(url, stream=True)\n    if report is None:\n        raise InvalidReport(\"Report is none..\")\n\n    if report.status_code != 200:\n        raise InvalidReport(\"Report status code %d\" % report.status_code)\n\n    path = os.path.join(dirpath, \"report.%s\" % report_format)\n    with open(path, \"wb\") as f:\n        for chunk in report.iter_content(chunk_size=1024*1024):\n            f.write(chunk)\n\n    return task_id, report_format\n\ndef delete_task(url, task_id):\n    url = os.path.join(url, \"tasks\", \"delete\", \"%d\" % task_id)\n    return requests.get(url).status_code == 200\n\ndef fetch_pcap(url, task_id, filepath):\n    url = os.path.join(url, \"pcap\", \"get\", \"%s\" % task_id)\n    # Explicitly disable any compression as otherwise we'd end up with a\n    # compressed file as shutil.copyfileobj() wouldn't decompress it\n    # transparently.\n    headers = {\n        \"accept-encoding\": \"gzip;q=0,deflate,sdch\",\n    }\n    r = requests.get(url, headers=headers, stream=True)\n    with open(filepath, \"wb\") as f:\n        shutil.copyfileobj(r.raw, f)\n"
  },
  {
    "path": "distributed/distributed/app.py",
    "content": "# Copyright (C) 2010-2015 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os.path\nimport sys\n\ntry:\n    from flask import Flask\nexcept ImportError:\n    sys.exit(\"Error: you need to install flask (`pip install flask`)\")\n\nfrom distributed.db import db, AlembicVersion\nfrom distributed.views import blueprints\n\nimport settings\n\ndef create_app():\n    app = Flask(\"Distributed Cuckoo\")\n    app.config.from_object(settings)\n\n    for blueprint, routes in blueprints:\n        for route in routes:\n            app.register_blueprint(blueprint, url_prefix=route)\n\n    db.init_app(app)\n    db.create_all(app=app)\n\n    # Check whether an alembic version is present and whether\n    # we're up-to-date.\n    with app.app_context():\n        row = AlembicVersion.query.first()\n        if not row:\n            db.session.add(AlembicVersion(AlembicVersion.VERSION))\n            db.session.commit()\n        elif row.version_num != AlembicVersion.VERSION:\n            sys.exit(\"Your database is not up-to-date. Please upgrade it \"\n                     \"using alembic (run `alembic upgrade head`).\")\n\n    # Further check the configuration.\n    if not settings.SQLALCHEMY_DATABASE_URI:\n        sys.exit(\"Please configure a database connection.\")\n\n    if not settings.report_formats:\n        sys.exit(\"Please configure one or more reporting formats.\")\n\n    if not settings.samples_directory or \\\n            not os.path.isdir(settings.samples_directory):\n        sys.exit(\"Please configure a samples directory path.\")\n\n    if not settings.reports_directory or \\\n            not os.path.isdir(settings.reports_directory):\n        sys.exit(\"Please configure a reports directory path.\")\n\n    return app\n"
  },
  {
    "path": "distributed/distributed/db.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport json\n\nfrom datetime import datetime\nfrom flask.ext.sqlalchemy import SQLAlchemy\nfrom sqlalchemy.inspection import inspect\n\ndb = SQLAlchemy(session_options=dict(autoflush=True))\nALEMBIC_VERSION = \"4b86bc0d40aa\"\n\nclass Serializer(object):\n    \"\"\"Serialize a query result object.\"\"\"\n    def to_dict(self):\n        ret = {}\n        for key in inspect(self).attrs.keys():\n            ret[key] = getattr(self, key)\n        return ret\n\nclass StringList(db.TypeDecorator):\n    \"\"\"List of comma-separated strings as field.\"\"\"\n    impl = db.Text\n\n    def process_bind_param(self, value, dialect):\n        return \", \".join(value)\n\n    def process_result_value(self, value, dialect):\n        return value.split(\", \")\n\nclass JsonType(db.TypeDecorator):\n    \"\"\"List of comma-separated strings as field.\"\"\"\n    impl = db.Text\n\n    def process_bind_param(self, value, dialect):\n        return json.dumps(value)\n\n    def process_result_value(self, value, dialect):\n        return json.loads(value)\n\nclass Node(db.Model):\n    \"\"\"Cuckoo node database model.\"\"\"\n    id = db.Column(db.Integer, primary_key=True)\n    name = db.Column(db.Text, nullable=False, unique=True)\n    url = db.Column(db.Text, nullable=False)\n    mode = db.Column(db.Text, nullable=False)\n    enabled = db.Column(db.Boolean, nullable=False)\n    machines = db.relationship(\"Machine\", backref=\"node\", lazy=\"dynamic\")\n\n    def __init__(self, name, url, mode, enabled=True):\n        self.name = name\n        self.url = url\n        self.mode = mode\n        self.enabled = enabled\n\nclass Machine(db.Model):\n    \"\"\"Machine database model related to a Cuckoo node.\"\"\"\n    id = db.Column(db.Integer, primary_key=True)\n    name = db.Column(db.Text, nullable=False)\n    platform = db.Column(db.Text, nullable=False)\n    tags = db.Column(StringList)\n    node_id = db.Column(db.Integer, db.ForeignKey(\"node.id\"))\n\n    def __init__(self, name, platform, tags):\n        self.name = name\n        self.platform = platform\n        self.tags = tags\n\nclass Task(db.Model, Serializer):\n    \"\"\"Analysis task database model.\"\"\"\n    PENDING = \"pending\"\n    ASSIGNED = \"assigned\"\n    PROCESSING = \"processing\"\n    FINISHED = \"finished\"\n    DELETED = \"deleted\"\n\n    task_status = db.Enum(PENDING, ASSIGNED, PROCESSING, FINISHED, DELETED,\n                          name=\"task_status_type\")\n\n    id = db.Column(db.Integer, primary_key=True)\n    path = db.Column(db.Text)\n    filename = db.Column(db.Text)\n    package = db.Column(db.Text)\n    timeout = db.Column(db.Integer)\n    priority = db.Column(db.Integer)\n    options = db.Column(db.Text)\n    machine = db.Column(db.Text)\n    platform = db.Column(db.Text)\n    tags = db.Column(db.Text)\n    custom = db.Column(db.Text)\n    owner = db.Column(db.Text)\n    memory = db.Column(db.Text)\n    clock = db.Column(db.Integer)\n    enforce_timeout = db.Column(db.Text)\n\n    # Cuckoo node and Task ID this has been submitted to.\n    node_id = db.Column(db.Integer, db.ForeignKey(\"node.id\"))\n    task_id = db.Column(db.Integer)\n    status = db.Column(task_status, nullable=False)\n\n    # Timestamps for this task. When it was submitted, when it was delegated\n    # to a Cuckoo node, when the analysis started, and when we retrieved\n    # the report.\n    submitted = db.Column(db.DateTime(timezone=False), default=datetime.now)\n    delegated = db.Column(db.DateTime(timezone=False), nullable=True)\n    started = db.Column(db.DateTime(timezone=False), nullable=True)\n    completed = db.Column(db.DateTime(timezone=False), nullable=True)\n\n    __table_args__ = db.Index(\"ix_node_task\", node_id, task_id),\n\n    def __init__(self, path=None, filename=None, package=None, timeout=None,\n                 priority=None, options=None, machine=None, platform=None,\n                 tags=None, custom=None, owner=None, memory=None, clock=None,\n                 enforce_timeout=None, node_id=None, task_id=None,\n                 status=PENDING):\n        self.path = path\n        self.filename = filename\n        self.package = package\n        self.timeout = timeout\n        self.priority = priority\n        self.options = options\n        self.machine = machine\n        self.platform = platform\n        self.tags = tags\n        self.custom = custom\n        self.owner = owner\n        self.memory = memory\n        self.clock = clock\n        self.enforce_timeout = enforce_timeout\n        self.node_id = node_id\n        self.task_id = task_id\n        self.status = status\n\nclass NodeStatus(db.Model, Serializer):\n    \"\"\"Node status monitoring database model.\"\"\"\n    id = db.Column(db.Integer, primary_key=True)\n    name = db.Column(db.Text, nullable=False)\n    timestamp = db.Column(db.DateTime(timezone=False), nullable=False,\n                          index=True)\n    status = db.Column(JsonType, nullable=False)\n\n    def __init__(self, name, timestamp, status):\n        self.name = name\n        self.timestamp = timestamp\n        self.status = status\n\nclass AlembicVersion(db.Model):\n    \"\"\"Support model for keeping track of the alembic revision identifier.\"\"\"\n    VERSION = ALEMBIC_VERSION\n    version_num = db.Column(db.Text, nullable=False, primary_key=True)\n\n    def __init__(self, version_num):\n        self.version_num = version_num\n"
  },
  {
    "path": "distributed/distributed/exception.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nclass InvalidReport(Exception):\n    pass\n"
  },
  {
    "path": "distributed/distributed/views/__init__.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\n\n__all__ = [\"blueprints\"]\nblueprints = []\n\nfor fname in os.listdir(os.path.dirname(__file__)):\n    if fname.endswith(\".py\") and not fname.startswith(\"__init__\"):\n        view = __import__(\"distributed.views.%s\" % fname.rstrip(\".py\"),\n                          globals(), locals(), [\"blueprint\", \"routes\"], -1)\n        blueprints.append((view.blueprint, view.routes))\n"
  },
  {
    "path": "distributed/distributed/views/api.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport tempfile\nimport time\n\nfrom flask import Blueprint, jsonify, request, send_file\n\nimport settings\n\nfrom distributed.db import db, Node, Task, Machine, NodeStatus\nfrom distributed.api import list_machines\n\nblueprint = Blueprint(\"api\", __name__)\nroutes = [\"/api\", \"/api/v1\"]\n\ndef json_error(status_code, message, *args):\n    r = jsonify(success=False, message=message % args if args else message)\n    r.status_code = status_code\n    return r\n\ndef node_url(ip=None, url=None):\n    if ip is not None:\n        return \"http://%s:8090/\" % ip\n    return url\n\n@blueprint.route(\"/node\")\n@blueprint.route(\"/node/<string:name>\")\ndef node_get(name=None):\n    nodes = {}\n    for node in Node.query.all():\n        if name and node.name != name:\n            continue\n\n        machines = []\n        for machine in node.machines.all():\n            machines.append(dict(\n                name=machine.name,\n                platform=machine.platform,\n                tags=machine.tags,\n            ))\n\n        nodes[node.name] = dict(\n            enabled=node.enabled,\n            name=node.name,\n            url=node.url,\n            mode=node.mode,\n            machines=machines,\n        )\n\n    # In the \"workers\" mode we only report the names of each enabled node.\n    if request.args.get(\"mode\") == \"workers\":\n        workers = []\n        for node in nodes.values():\n            if not node[\"enabled\"]:\n                continue\n\n            workers.append(node[\"name\"])\n\n        return \" \".join(sorted(workers))\n\n    return jsonify(success=True, nodes=nodes)\n\n@blueprint.route(\"/node\", methods=[\"POST\"])\ndef node_post():\n    if \"name\" not in request.form:\n        return json_error(404, \"Missing node name\")\n\n    if \"ip\" not in request.form and \"url\" not in request.form:\n        return json_error(404, \"Missing IP address or direct URL\")\n\n    if Node.query.filter_by(name=request.form[\"name\"]).first():\n        return json_error(409, \"There is already a node with this name\")\n\n    url = node_url(ip=request.form.get(\"ip\"), url=request.form.get(\"url\"))\n    node = Node(name=request.form[\"name\"], url=url,\n                mode=request.form.get(\"mode\", \"normal\"))\n\n    try:\n        machines = list_machines(url)\n    except Exception as e:\n        return json_error(404, \"Error connecting to Cuckoo node: %s\", e)\n\n    for machine in machines:\n        m = Machine(name=machine[\"name\"], platform=machine[\"platform\"],\n                    tags=machine[\"tags\"])\n        node.machines.append(m)\n        db.session.add(m)\n\n    db.session.add(node)\n    db.session.commit()\n    return jsonify(success=True, machines=machines)\n\n@blueprint.route(\"/node/<string:name>\", methods=[\"PUT\"])\ndef node_put(name):\n    node = Node.query.filter_by(name=name).first()\n    if not node:\n        return json_error(404, \"No such node\")\n\n    if \"name\" in request.form:\n        node.name = request.form[\"name\"]\n\n    if \"ip\" in request.form or \"url\" in request.form:\n        node.url = \\\n            node_url(ip=request.form.get(\"ip\"), url=request.form.get(\"url\"))\n\n    if \"enabled\" in request.form:\n        node.enabled = bool(int(request.form[\"enabled\"]))\n\n    db.session.commit()\n    return jsonify(success=True)\n\n@blueprint.route(\"/node/<string:name>\", methods=[\"DELETE\"])\ndef node_delete(name):\n    node = Node.query.filter_by(name=name).first()\n    if not node:\n        return json_error(404, \"No such node\")\n\n    node.enabled = False\n    db.session.commit()\n    return jsonify(success=True)\n\n@blueprint.route(\"/task\")\ndef task_list():\n    offset = request.args.get(\"offset\")\n    limit = request.args.get(\"limit\")\n    finished = request.args.get(\"finished\")\n    status = request.args.get(\"status\")\n    owner = request.args.get(\"owner\")\n    priority = request.args.get(\"priority\")\n\n    if finished is not None and status is not None:\n        return json_error(400, \"Do not combine finished and status. \"\n                               \"Finished has been deprecated.\")\n\n    q = Task.query.order_by(Task.id)\n\n    if finished is not None:\n        if int(finished):\n            q = q.filter_by(status=Task.FINISHED)\n        else:\n            q = q.filter(Task.status.in_((Task.PENDING, Task.ASSIGNED,\n                                          Task.PROCESSING)))\n\n    if status is not None:\n        q = q.filter_by(status=status)\n\n    if owner:\n        q = q.filter_by(owner=owner)\n\n    if priority:\n        q = q.filter_by(priority=int(priority))\n\n    if offset is not None:\n        q = q.offset(int(offset))\n\n    if limit is not None:\n        q = q.limit(int(limit))\n\n    tasks = {}\n    for task in q.all():\n        tasks[task.id] = dict(\n            id=task.id,\n            path=task.path,\n            filename=task.filename,\n            package=task.package,\n            timeout=task.timeout,\n            priority=task.priority,\n            options=task.options,\n            machine=task.machine,\n            platform=task.platform,\n            tags=task.tags,\n            custom=task.custom,\n            owner=task.owner,\n            memory=task.memory,\n            clock=task.clock,\n            enforce_timeout=task.enforce_timeout,\n            task_id=task.task_id,\n            node_id=task.node_id,\n        )\n    return jsonify(success=True, tasks=tasks)\n\n@blueprint.route(\"/task\", methods=[\"POST\"])\ndef task_post():\n    if \"file\" not in request.files:\n        return json_error(404, \"No file has been provided\")\n\n    args = dict(\n        package=request.form.get(\"package\"),\n        timeout=request.form.get(\"timeout\"),\n        priority=request.form.get(\"priority\", 1),\n        options=request.form.get(\"options\"),\n        machine=request.form.get(\"machine\"),\n        platform=request.form.get(\"platform\"),\n        tags=request.form.get(\"tags\"),\n        custom=request.form.get(\"custom\"),\n        owner=request.form.get(\"owner\"),\n        memory=request.form.get(\"memory\"),\n        clock=request.form.get(\"clock\"),\n        enforce_timeout=request.form.get(\"enforce_timeout\"),\n    )\n\n    f = request.files[\"file\"]\n\n    fd, path = tempfile.mkstemp(dir=settings.samples_directory)\n    f.save(path)\n    os.close(fd)\n\n    task = Task(path=path, filename=os.path.basename(f.filename), **args)\n    db.session.add(task)\n    db.session.commit()\n    return jsonify(success=True, task_id=task.id)\n\n@blueprint.route(\"/task/<int:task_id>\")\ndef task_get(task_id):\n    task = Task.query.get(task_id)\n    if task is None:\n        return json_error(404, \"Task not found\")\n\n    return jsonify(success=True, tasks={task.id: dict(\n        id=task.id,\n        path=task.path,\n        filename=task.filename,\n        package=task.package,\n        timeout=task.timeout,\n        priority=task.priority,\n        options=task.options,\n        machine=task.machine,\n        platform=task.platform,\n        tags=task.tags,\n        custom=task.custom,\n        owner=task.owner,\n        memory=task.memory,\n        clock=task.clock,\n        enforce_timeout=task.enforce_timeout,\n        node_id=task.node_id,\n        task_id=task.task_id,\n        status=task.status,\n    )})\n\n@blueprint.route(\"/task/<int:task_id>\", methods=[\"DELETE\"])\ndef task_delete(task_id):\n    task = Task.query.get(task_id)\n    if task is None:\n        return json_error(404, \"Task not found\")\n\n    # Remove all available reports.\n    dirpath = os.path.join(settings.reports_directory, \"%d\" % task_id)\n    for report_format in settings.report_formats:\n        path = os.path.join(dirpath, \"report.%s\" % report_format)\n        if os.path.isfile(path):\n            os.unlink(path)\n\n    # Remove the sample related to this task (if there's any).\n    if task.path and os.path.isfile(task.path):\n        os.unlink(task.path)\n\n    # If the task has been finalized then we set the status as deleted. But\n    # otherwise we just delete the entry altogether, as it'd incorrectly\n    # reflect the amount of processed samples in our database.\n    if task.status == Task.PENDING:\n        db.session.delete(task)\n    else:\n        task.status = Task.DELETED\n\n    db.session.commit()\n    return jsonify(success=True)\n\n@blueprint.route(\"/report/<int:task_id>\")\n@blueprint.route(\"/report/<int:task_id>/<string:report_format>\")\ndef report_get(task_id, report_format=\"json\"):\n    task = Task.query.get(task_id)\n    if not task:\n        return json_error(404, \"Task not found\")\n\n    if task.status == Task.DELETED:\n        return json_error(404, \"Task report has been deleted\")\n\n    if task.status != Task.FINISHED:\n        return json_error(420, \"Task not finished yet\")\n\n    report_path = os.path.join(settings.reports_directory,\n                               \"%d\" % task_id, \"report.%s\" % report_format)\n    if not os.path.isfile(report_path):\n        return json_error(404, \"Report format not found\")\n\n    return send_file(report_path)\n\n@blueprint.route(\"/pcap/<int:task_id>\")\ndef pcap_get(task_id):\n    task = Task.query.get(task_id)\n    if not task:\n        return json_error(404, \"Task not found\")\n\n    if task.status == Task.DELETED:\n        return json_error(404, \"Task files has been deleted\")\n\n    if task.status != Task.FINISHED:\n        return json_error(420, \"Task not finished yet\")\n\n    pcap_path = os.path.join(settings.reports_directory,\n                             \"%s\" % task_id, \"dump.pcap\")\n    if not os.path.isfile(pcap_path):\n        return json_error(404, \"Pcap file not found\")\n\n    return send_file(pcap_path)\n\n@blueprint.route(\"/status\")\ndef status_get():\n    paths = dict(\n        reports=settings.reports_directory,\n        samples=settings.samples_directory,\n    )\n\n    diskspace = {}\n    for key, path in paths.items():\n        if hasattr(os, \"statvfs\"):\n            stats = os.statvfs(path)\n            diskspace[key] = dict(\n                free=stats.f_bavail * stats.f_frsize,\n                total=stats.f_blocks * stats.f_frsize,\n                used=(stats.f_blocks - stats.f_bavail) * stats.f_frsize,\n            )\n\n    dist = {\n        \"diskspace\": diskspace,\n    }\n\n    statuses = {}\n    for node in Node.query.filter_by(enabled=True).all():\n        q = NodeStatus.query.filter_by(name=node.name)\n        status = q.order_by(NodeStatus.timestamp.desc()).first()\n        if status:\n            statuses[node.name] = status.status\n\n    q = NodeStatus.query.filter_by(name=\"dist.scheduler\")\n    tasks = q.order_by(NodeStatus.timestamp.desc()).first()\n    if tasks:\n        tasks = tasks.status\n\n    return jsonify(success=True, nodes=statuses, tasks=tasks,\n                   dist=dist, timestamp=int(time.time()))\n"
  },
  {
    "path": "distributed/instance.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport argparse\nimport datetime\nimport logging\nimport os.path\nimport time\n\nimport settings\n\nfrom distributed.api import node_status, fetch_tasks, delete_task\nfrom distributed.api import store_report, submit_task, fetch_pcap\nfrom distributed.app import create_app\nfrom distributed.db import db, Task, Node, NodeStatus\nfrom distributed.exception import InvalidReport\n\ndef scheduler():\n    while True:\n        for node in Node.query.filter_by(enabled=True, mode=\"normal\").all():\n            # Fetch the status of this node.\n            status = node_status(node.url)\n            if not status:\n                log.debug(\"Error retrieving status of node %s\", node.name)\n                time.sleep(settings.interval)\n                continue\n\n            # Check whether this node still has enough samples to work with.\n            if status[\"tasks\"][\"pending\"] >= settings.threshold:\n                continue\n\n            # Schedule new samples for this node.\n            q = Task.query.filter_by(status=Task.PENDING)\n            tasks = q.limit(settings.threshold).all()\n            for task in tasks:\n                task.status = Task.ASSIGNED\n                task.node_id = node.id\n\n            if tasks:\n                log.debug(\"Assigned %d tasks to %s\", len(tasks), node.name)\n\n            db.session.commit()\n\n        time.sleep(10)\n\ndef status_caching():\n    def fetch_stats(tasks):\n        return dict(\n            pending=tasks.filter_by(status=Task.PENDING).count(),\n            processing=tasks.filter_by(status=Task.PROCESSING).count(),\n            finished=tasks.filter_by(status=Task.FINISHED).count(),\n            deleted=tasks.filter_by(status=Task.DELETED).count(),\n        )\n\n    while True:\n        yesterday = datetime.datetime.now() - datetime.timedelta(1)\n        today = Task.query.filter(Task.completed > yesterday)\n\n        status = {\n            \"all\": fetch_stats(Task.query),\n            \"prio1\": fetch_stats(Task.query.filter_by(priority=1)),\n            \"prio2\": fetch_stats(Task.query.filter_by(priority=2)),\n            \"today\": fetch_stats(today),\n            \"today1\": fetch_stats(today.filter_by(priority=1)),\n            \"today2\": fetch_stats(today.filter_by(priority=2)),\n        }\n\n        ns = NodeStatus(\"dist.scheduler\", datetime.datetime.now(), status)\n        db.session.add(ns)\n        db.session.commit()\n\n        time.sleep(30)\n\ndef handle_node(instance):\n    node = Node.query.filter_by(name=instance).first()\n    if not node:\n        log.critical(\"Node not found: %s\", instance)\n        return\n\n    while True:\n        # Fetch the status of this node.\n        status = node_status(node.url)\n        if not status:\n            log.debug(\"Error retrieving status of node %s\", node.name)\n            time.sleep(settings.interval)\n            continue\n\n        # Include the timestamp of when we retrieved this status.\n        status[\"timestamp\"] = int(time.time())\n\n        # Add this node status to the database for monitoring purposes.\n        ns = NodeStatus(node.name, datetime.datetime.now(), status)\n        db.session.add(ns)\n        db.session.commit()\n\n        # Submission of new tasks.\n        if status[\"tasks\"][\"pending\"] < settings.threshold:\n            q = Task.query.filter_by(node_id=node.id, status=Task.ASSIGNED)\n            q = q.order_by(Task.priority.desc(), Task.id)\n            tasks = q.limit(settings.threshold).all()\n            for t in tasks:\n                t.task_id = submit_task(node.url, t.to_dict())\n                t.status = Task.PROCESSING\n                t.delegated = datetime.datetime.now()\n\n            log.debug(\"Submitted %d tasks to %s\", len(tasks), node.name)\n            db.session.commit()\n\n        # Fetching of reports.\n        tasks = fetch_tasks(node.url, status=\"reported\")\n        for task in tasks[:settings.threshold]:\n            # In the case that a Cuckoo node has been reset over time it's\n            # possible that there are multiple combinations of\n            # node-id/task-id, in this case we take the last one available.\n            # (This makes it possible to re-setup a Cuckoo node).\n            q = Task.query.filter_by(node_id=node.id, task_id=task[\"id\"])\n            t = q.order_by(Task.id.desc()).first()\n\n            if t is None:\n                log.debug(\"Node %s task #%d has not been submitted \"\n                          \"by us!\", instance, task[\"id\"])\n\n                # Should we delete this task? Improve through the usage of\n                # the \"owner\" parameter.\n                delete_task(node.url, task[\"id\"])\n                continue\n\n            dirpath = os.path.join(settings.reports_directory, \"%d\" % t.id)\n            if not os.path.isdir(dirpath):\n                os.makedirs(dirpath)\n\n            # Fetch each report.\n            for report_format in settings.report_formats:\n                try:\n                    store_report(node.url, t.task_id, report_format, dirpath)\n                except InvalidReport as e:\n                    log.critical(\"Error fetching report: %s\", e)\n\n            # Fetch the pcap file.\n            if settings.pcap:\n                pcap_path = os.path.join(dirpath, \"dump.pcap\")\n                fetch_pcap(node.url, t.task_id, pcap_path)\n\n            # Delete the task and all its associated files from the\n            # Cuckoo node.\n            delete_task(node.url, t.task_id)\n\n            t.status = Task.FINISHED\n            t.started = datetime.datetime.strptime(task[\"started_on\"],\n                                                   \"%Y-%m-%d %H:%M:%S\")\n            t.completed = datetime.datetime.now()\n\n        log.debug(\"Fetched %d reports from %s\", len(tasks), node.name)\n\n        db.session.commit()\n        time.sleep(settings.interval)\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"instance\", type=str, help=\"Name of this node instance.\")\n    parser.add_argument(\"-v\", \"--verbose\", action=\"store_true\", help=\"Enable verbosity for debug information.\")\n    args = parser.parse_args()\n\n    app = create_app()\n\n    if args.verbose:\n        logging.basicConfig(level=logging.DEBUG)\n    else:\n        logging.basicConfig(level=logging.INFO)\n\n    logging.getLogger(\"requests\").setLevel(logging.WARNING)\n    logging.getLogger(\"urllib3\").setLevel(logging.WARNING)\n    log = logging.getLogger(\"dist-%s\" % args.instance)\n\n    with app.app_context():\n        if args.instance == \"dist.scheduler\":\n            scheduler()\n        elif args.instance == \"dist.status\":\n            status_caching()\n        else:\n            handle_node(args.instance)\n"
  },
  {
    "path": "distributed/migration/env.py",
    "content": "from __future__ import with_statement\nfrom alembic import context\nfrom sqlalchemy import create_engine, pool\n\nimport os.path\nimport sys\n\nsys.path.append(os.path.join(os.path.dirname(__file__), \"..\"))\n\nimport settings\n\nfrom distributed.db import db\ntarget_metadata = db.metadata\n\nconfig = context.config\n\ndef run_migrations():\n    engine = create_engine(settings.SQLALCHEMY_DATABASE_URI,\n                           poolclass=pool.NullPool)\n\n    connection = engine.connect()\n    context.configure(connection=connection, target_metadata=target_metadata)\n\n    try:\n        with context.begin_transaction():\n            context.run_migrations()\n    finally:\n        connection.close()\n\nrun_migrations()\n"
  },
  {
    "path": "distributed/migration/script.py.mako",
    "content": "\"\"\"${message}\n\nRevision ID: ${up_revision}\nRevises: ${down_revision | comma,n}\nCreate Date: ${create_date}\n\n\"\"\"\n\nrevision = ${repr(up_revision)}\ndown_revision = ${repr(down_revision)}\nbranch_labels = ${repr(branch_labels)}\ndepends_on = ${repr(depends_on)}\n\nfrom alembic import op\nimport sqlalchemy as sa\n${imports if imports else \"\"}\n\ndef upgrade():\n    ${upgrades if upgrades else \"pass\"}\n\ndef downgrade():\n    ${downgrades if downgrades else \"pass\"}\n"
  },
  {
    "path": "distributed/migration/versions/151400d38e03_node_status_timestamp_index.py",
    "content": "\"\"\"node status timestamp index\n\nRevision ID: 151400d38e03\nRevises: 4d0a2590e997\nCreate Date: 2015-07-15 15:53:56.016839\n\n\"\"\"\n\nrevision = \"151400d38e03\"\ndown_revision = \"4d0a2590e997\"\nbranch_labels = None\ndepends_on = None\n\nfrom alembic import op\n\ndef upgrade():\n    op.create_index(\"ix_node_status_timestamp\", \"node_status\", [\"timestamp\"], unique=False)\n\ndef downgrade():\n    op.drop_index(\"ix_node_status_timestamp\", table_name=\"node_status\")\n"
  },
  {
    "path": "distributed/migration/versions/166078eb1311_change_node_id_to_name.py",
    "content": "\"\"\"change node-id to name\n\nRevision ID: 166078eb1311\nRevises: 3d1d8fd2cdbb\nCreate Date: 2015-06-27 09:59:43.366796\n\n\"\"\"\n\nrevision = \"166078eb1311\"\ndown_revision = \"3d1d8fd2cdbb\"\nbranch_labels = None\ndepends_on = None\n\nfrom alembic import op\nimport sqlalchemy as sa\n\ndef upgrade():\n    op.add_column(\"node_status\", sa.Column(\"name\", sa.Text(), nullable=True))\n\n    # Convert all .node_id's to .name's.\n    op.execute(\"UPDATE node_status SET name = node.name FROM node WHERE node.id = node_status.node_id\")\n\n    op.drop_constraint(\"node_status_node_id_fkey\", \"node_status\", type_=\"foreignkey\")\n    op.drop_column(\"node_status\", \"node_id\")\n\n    # Add the \"assigned\" value to the task status type. The \"if not exists\"\n    # part seems to be a PostgreSQL 9.3+ feature, but that should be fine.\n    op.execute(\"COMMIT\")\n    op.execute(\"ALTER TYPE task_status_type ADD VALUE IF NOT EXISTS 'assigned' AFTER 'pending'\")\n\ndef downgrade():\n    # There's not really a need for proper downgrade support, so we're just\n    # going to ignore this. The complexity involved with removing a value from\n    # an enum doesn't really make it worth the effort.\n    pass\n"
  },
  {
    "path": "distributed/migration/versions/2aa59981b59d_node_task_not_unique.py",
    "content": "\"\"\"node task not unique\n\nRevision ID: 2aa59981b59d\nRevises: 151400d38e03\nCreate Date: 2015-07-17 10:54:27.568346\n\n\"\"\"\n\nrevision = \"2aa59981b59d\"\ndown_revision = \"151400d38e03\"\nbranch_labels = None\ndepends_on = None\n\nfrom alembic import op\n\ndef upgrade():\n    op.drop_index(\"ix_node_task\", table_name=\"task\")\n    op.create_index(\"ix_node_task\", \"task\", [\"node_id\", \"task_id\"])\n\ndef downgrade():\n    op.drop_index(\"ix_node_task\", table_name=\"task\")\n    op.create_index(\"ix_node_task\", \"task\", [\"node_id\", \"task_id\"], unique=True)\n"
  },
  {
    "path": "distributed/migration/versions/37c08c9655bb_initial_database.py",
    "content": "\"\"\"initial database\n\nRevision ID: 37c08c9655bb\nRevises:\nCreate Date: 2015-03-30 16:55:03.404293\n\n\"\"\"\n\nrevision = \"37c08c9655bb\"\ndown_revision = None\nbranch_labels = None\ndepends_on = None\n\nfrom alembic import op\nimport sqlalchemy as sa\n\ndef upgrade():\n    op.create_table(\n        \"node\",\n        sa.Column(\"id\", sa.Integer(), nullable=False),\n        sa.Column(\"name\", sa.Text(), nullable=False),\n        sa.Column(\"url\", sa.Text(), nullable=False),\n        sa.Column(\"enabled\", sa.Boolean(), nullable=False),\n        sa.PrimaryKeyConstraint(\"id\"),\n        sa.UniqueConstraint(\"name\")\n    )\n    op.create_table(\n        \"machine\",\n        sa.Column(\"id\", sa.Integer(), nullable=False),\n        sa.Column(\"name\", sa.Text(), nullable=False),\n        sa.Column(\"platform\", sa.Text(), nullable=False),\n        sa.Column(\"tags\", sa.Text(), nullable=True),\n        sa.Column(\"node_id\", sa.Integer(), nullable=True),\n        sa.ForeignKeyConstraint([\"node_id\"], [\"node.id\"]),\n        sa.PrimaryKeyConstraint(\"id\")\n    )\n    op.create_table(\n        \"task\",\n        sa.Column(\"id\", sa.Integer(), nullable=False),\n        sa.Column(\"path\", sa.Text(), nullable=True),\n        sa.Column(\"filename\", sa.Text(), nullable=True),\n        sa.Column(\"package\", sa.Text(), nullable=True),\n        sa.Column(\"timeout\", sa.Integer(), nullable=True),\n        sa.Column(\"priority\", sa.Integer(), nullable=True),\n        sa.Column(\"options\", sa.Text(), nullable=True),\n        sa.Column(\"machine\", sa.Text(), nullable=True),\n        sa.Column(\"platform\", sa.Text(), nullable=True),\n        sa.Column(\"tags\", sa.Text(), nullable=True),\n        sa.Column(\"custom\", sa.Text(), nullable=True),\n        sa.Column(\"owner\", sa.Text(), nullable=True),\n        sa.Column(\"memory\", sa.Text(), nullable=True),\n        sa.Column(\"clock\", sa.Integer(), nullable=True),\n        sa.Column(\"enforce_timeout\", sa.Text(), nullable=True),\n        sa.Column(\"node_id\", sa.Integer(), nullable=True),\n        sa.Column(\"task_id\", sa.Integer(), nullable=True),\n        sa.Column(\"finished\", sa.Boolean(), nullable=False),\n        sa.ForeignKeyConstraint([\"node_id\"], [\"node.id\"]),\n        sa.PrimaryKeyConstraint(\"id\")\n    )\n\ndef downgrade():\n    op.drop_table(\"task\")\n    op.drop_table(\"machine\")\n    op.drop_table(\"node\")\n"
  },
  {
    "path": "distributed/migration/versions/3cc1509b7fdc_node_status.py",
    "content": "\"\"\"node status\n\nRevision ID: 3cc1509b7fdc\nRevises: 37c08c9655bb\nCreate Date: 2015-03-30 17:14:39.604125\n\n\"\"\"\n\nrevision = \"3cc1509b7fdc\"\ndown_revision = \"37c08c9655bb\"\nbranch_labels = None\ndepends_on = None\n\nfrom alembic import op\nimport sqlalchemy as sa\n\ndef upgrade():\n    op.create_table(\n        \"node_status\",\n        sa.Column(\"id\", sa.Integer(), nullable=False),\n        sa.Column(\"node_id\", sa.Integer(), nullable=True),\n        sa.Column(\"timestamp\", sa.DateTime(), nullable=False),\n        sa.Column(\"status\", sa.Text(), nullable=False),\n        sa.ForeignKeyConstraint([\"node_id\"], [\"node.id\"]),\n        sa.PrimaryKeyConstraint(\"id\")\n    )\n\ndef downgrade():\n    op.drop_table(\"node_status\")\n"
  },
  {
    "path": "distributed/migration/versions/3d1d8fd2cdbb_timestamps.py",
    "content": "\"\"\"timestamps\n\nRevision ID: 3d1d8fd2cdbb\nRevises: 69ecf07a99b\nCreate Date: 2015-06-03 22:55:51.357575\n\n\"\"\"\n\nrevision = \"3d1d8fd2cdbb\"\ndown_revision = \"69ecf07a99b\"\nbranch_labels = None\ndepends_on = None\n\nfrom alembic import op\nimport sqlalchemy as sa\n\ndef upgrade():\n    op.add_column(\"task\", sa.Column(\"submitted\", sa.DateTime(), nullable=True))\n    op.add_column(\"task\", sa.Column(\"delegated\", sa.DateTime(), nullable=True))\n    op.add_column(\"task\", sa.Column(\"started\", sa.DateTime(), nullable=True))\n    op.add_column(\"task\", sa.Column(\"completed\", sa.DateTime(), nullable=True))\n\ndef downgrade():\n    op.drop_column(\"task\", \"submitted\")\n    op.drop_column(\"task\", \"started\")\n    op.drop_column(\"task\", \"delegated\")\n    op.drop_column(\"task\", \"completed\")\n"
  },
  {
    "path": "distributed/migration/versions/4b86bc0d40aa_node_mode.py",
    "content": "\"\"\"node mode\n\nRevision ID: 4b86bc0d40aa\nRevises: 2aa59981b59d\nCreate Date: 2015-09-09 00:04:56.119968\n\n\"\"\"\n\nrevision = \"4b86bc0d40aa\"\ndown_revision = \"2aa59981b59d\"\nbranch_labels = None\ndepends_on = None\n\nfrom alembic import op\nimport sqlalchemy as sa\n\ndef upgrade():\n    op.add_column(\"node\", sa.Column(\"mode\", sa.Text()))\n    op.execute(\"update node set mode = 'normal'\")\n    op.alter_column(\"node\", \"mode\", nullable=False)\n\ndef downgrade():\n    op.drop_column(\"node\", \"mode\")\n"
  },
  {
    "path": "distributed/migration/versions/4d0a2590e997_node_task_index.py",
    "content": "\"\"\"node task index\n\nRevision ID: 4d0a2590e997\nRevises: 166078eb1311\nCreate Date: 2015-06-30 15:46:11.780052\n\n\"\"\"\n\nrevision = \"4d0a2590e997\"\ndown_revision = \"166078eb1311\"\nbranch_labels = None\ndepends_on = None\n\nfrom alembic import op\n\ndef upgrade():\n    op.create_index(\"ix_node_task\", \"task\", [\"node_id\", \"task_id\"], unique=True)\n\ndef downgrade():\n    op.drop_index(\"ix_node_task\", table_name=\"task\")\n"
  },
  {
    "path": "distributed/migration/versions/69ecf07a99b_finished_to_status.py",
    "content": "\"\"\"finished to status\n\nRevision ID: 69ecf07a99b\nRevises: 3cc1509b7fdc\nCreate Date: 2015-04-03 09:35:47.523157\n\n\"\"\"\n\nrevision = \"69ecf07a99b\"\ndown_revision = \"3cc1509b7fdc\"\nbranch_labels = None\ndepends_on = None\n\nfrom alembic import op\nimport sqlalchemy as sa\n\ndef upgrade():\n    op.add_column(\"task\", sa.Column(\"status\", sa.Enum(\"pending\", \"processing\", \"finished\", \"deleted\", name=\"task_status_type\"), server_default=\"pending\", nullable=False))\n\n    op.execute(\"update task set status = 'pending' where finished = false and node_id is null\")\n    op.execute(\"update task set status = 'processing' where finished = false and node_id is not null\")\n    op.execute(\"update task set status = 'finished' where finished = true\")\n\n    op.drop_column(\"task\", \"finished\")\n\ndef downgrade():\n    op.add_column(\"task\", sa.Column(\"finished\", sa.BOOLEAN(), autoincrement=False))\n\n    op.execute(\"update task set finished = true where status = 'finished'\")\n    op.execute(\"update task set finished = false where status in ('pending', 'processing')\")\n    op.execute(\"delete from task where status = 'deleted'\")\n\n    op.alter_column(\"task\", \"finished\", nullable=False)\n\n    op.drop_column(\"task\", \"status\")\n"
  },
  {
    "path": "distributed/requirements.txt",
    "content": "flask\nflask-sqlalchemy\nrequests\nsqlalchemy\npsycopg2\nalembic\n"
  },
  {
    "path": "distributed/settings.py",
    "content": "# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\n\n# Database connection URI. PostgreSQL or MySQL suggested.\n# Examples, see documentation for more:\n# postgresql://foo:bar@localhost:5432/mydatabase\n# mysql://foo:bar@localhost/mydatabase\nSQLALCHEMY_DATABASE_URI = \"postgresql://cuckoo:cuckoo@localhost/distributed\"\n\n# Secret key used by Flask to generate sessions etc. (This feature is not\n# actually used at the moment as we have no user accounts etc).\nSECRET_KEY = os.urandom(32)\n\n# A list of reporting formats, e.g., json.\nreport_formats = \"json\",\n\n# Fetch the pcap?\npcap = False\n\n# Directory for storing samples as long as their task is available.\nsamples_directory = \"/tmp\"\n\n# Directory for storing reports as long as their task is available.\nreports_directory = \"/tmp\"\n\n# Rough interval between each status checkup per Cuckoo node. As it's not\n# necessary to check the status every second half a minute should do.\ninterval = 10\n\n# Threshold and amount of tasks to push every time a Cuckoo node requires\n# more samples. That is, whenever the \"pending\" task count drops below\n# \"threshold\" tasks, \"threshold\" tasks are submitted to the node.\nthreshold = 500\n"
  },
  {
    "path": "docs/.debug.yml",
    "content": "remote_theme: false\n\ntheme: jekyll-rtd-theme"
  },
  {
    "path": "docs/CNAME",
    "content": "jekyll-rtd-theme.rundocs.io\n"
  },
  {
    "path": "docs/Gemfile",
    "content": "source \"https://gems.ruby-china.com\" # gems.ruby-china.com rubygems.org\n\ngem \"jekyll-rtd-theme\"\n\ngem \"github-pages\", group: :jekyll_plugins"
  },
  {
    "path": "docs/Makefile",
    "content": "DEBUG=JEKYLL_GITHUB_TOKEN=blank PAGES_API_URL=http://0.0.0.0\n\ndefault:\n\t@gem install jekyll bundler && bundle install\n\nupdate:\n\t@bundle update\n\nclean:\n\t@bundle exec jekyll clean\n\nbuild: clean\n\t@${DEBUG} bundle exec jekyll build --profile --config _config.yml,.debug.yml\n\nserver: clean\n\t@${DEBUG} bundle exec jekyll server --livereload --config _config.yml,.debug.yml"
  },
  {
    "path": "docs/README.md",
    "content": "```shell\n                  ____        _     _       _____     _                 \n                 | __ )  ___ | | __| |     |  ___|_ _| | ___ ___  _ __  \n                 |  _ \\ / _ \\| |/ _` |_____| |_ / _` | |/ __/ _ \\| '_ \\ \n                 | |_) | (_) | | (_| |_____|  _| (_| | | (_| (_) | | | |\n                 |____/ \\___/|_|\\__,_|     |_|  \\__,_|_|\\___\\___/|_| |_|\n```\n<img src=\"pics/logo.png\" align=\"right\" width=\"256px\" height=\"176px\">\n\n# 毕方智能云沙箱\n\n毕方智能云沙箱(***Bold-Falcon***)是一个开源的自动化恶意软件分析系统。\n它用于自动运行和分析文件，并收集全面的分析结果，概述恶意软件在独立操作系统中运行时所做的工作。\n我们的工作是二次开发开源cuckoo沙箱，包括**更新项目结构**，**重写整个前端的用户交互**和**添加基于机器学习的检测模块**，\n使恶意软件分析系统可以**思考**。\n\n![](https://img.shields.io/badge/GitHub-Bold--Falcon-000000)\n\n**`说明文档`** https://powerlzy.github.io/Bold-Falcon/\n\n**`开发文档`** https://boldfalcon.readthedocs.io\n\n#### 开源资料\n+ [cuckoo](https://github.com/cuckoosandbox/cuckoo) Cuckoo Sandbox is an automated dynamic malware analysis system\n+ [cuckoo-modified](https://github.com/spender-sandbox/cuckoo-modified) Modified edition of cuckoo\n+ [cuckooDroid](https://github.com/idanr1986/cuckoo-droid) CuckooDroid - Automated Android Malware Analysis with Cuckoo Sandbox.\n+ [docker-cuckoo](https://github.com/blacktop/docker-cuckoo) Cuckoo Sandbox Dockerfile\n+ [cuckooautoinstall](https://github.com/buguroo/cuckooautoinstall) Auto Installer Script for Cuckoo Sandbox\n+ [cuckooML](https://github.com/honeynet/cuckooml) CuckooML: Machine Learning for Cuckoo Sandbox\n+ [Panda-Sandbox](https://github.com/PowerLZY/Panda-Sandbox) Cuckoo python3 (Unfinished)\n+ [HaboMalHunter](https://github.com/Tencent/HaboMalHunter#readme_cn) HaboMalHunter is a sub-project of Habo Malware Analysis System\n\n#### 源码分析\n+ [cuckoo技术分析全景图](https://cloud.tencent.com/developer/article/1597020)\n+ [cuckoo沙箱源码分析上](https://bbs.pediy.com/thread-260038.htm)\n+ [cuckoo沙箱源码分析中](https://bbs.pediy.com/thread-260087.htm)\n+ [cuckoo沙箱源码分析后](https://bbs.pediy.com/thread-260252.htm)\n+ [腾讯哈勃Linux沙箱源码分析上](https://zhuanlan.zhihu.com/p/54756592)\n+ [腾讯哈勃Linux沙箱源码分析下](https://zhuanlan.zhihu.com/p/54756845)\n\n#### 项目结构更新\n  - [x] 整理工程目录打包lib：（common，core），Modules（辅助功能、虚拟机、处理、签名、机器学习模型检测）\n  - [x] 省略\\CWD目录：添加 analyzer、db、examples、Mal_sample、sample_data、storage、log等目录\n\n#### 主要更新内容\n\n+ 学习内容\n  - [x] Yara规则、ssdeep\n  - [x] DLL注入、动态信息提取原理\n  - [x] [用Github Page快速创建项目文档网站](https://zhuanlan.zhihu.com/p/323457078)\n  - [x] [动态牌子](https://img.shields.io)\n  - [x] 创建Bold-Falcon logo \n  - [x] [pypi上传模块，pip安装](https://pypi.org/project/Bold-Falcon/#description) \n  - [x] [Python-Sphinx 自动生成Python项目文档 ](https://www.jianshu.com/p/d4a1347f467b)\n  - [x] [Sphinx-readthedocs](https://how-to-use-sphinx-write.readthedocs.io/zh_CN/latest/)\n  - [x] requirements.txt 整理\n  - [ ] Frog:create an image and add an image and a host to the Fog server\n\n+ 设计文档\n  + [x] 参考文献记录（设计依据）\n  + [x] 国内沙箱深度调研\n  + [x] 图标+起名\n\n+ 家族签名模块\n  - [x] [cuckoo 社区签名库](https://github.com/cuckoosandbox/community)\n  - [x] [cuckoo的行为签名](https://www.secpulse.com/archives/75180.html)\n  - [ ] 添加挖矿+使用自定义签名\n\n+ 机器学习模块\n  - [x] 数据集：kaggle microsoft 10000个软件、挖矿软件 6000个；\n  - [x] 报告显示内容：模型检测图展示、使用特征展示、预测威胁得分；\n  - [x] 静态检测引擎：string、malconv；\n  - [x] 动态检测引擎：API调用序列；\n  - [x] 定义基类Dectection、Instance等；\n  - [x] 添加Smaple——malware，200个json report样本；\n\n+ 后期需求\n  + [ ] 环境打包，Docker\\shells安装\n  + [ ] blog解析文档编写\n  + [ ] 虚拟机管理：libvirt+高并发虚拟机\n  + [ ] 沙箱内存管理：MemScrimper: Time- and Space-Efficient Storage of *Malware* Sandbox Memory Dumps （2018 DIVMA）\n  + [ ] 3.3.5 REST API(Cuckoo docs) wsgi应用程序\n   \n#### 常见问题\n+ Machine * status gurumeditation\n  -  找到虚拟机安装目录下VBox.log日志文件\n  -  在日志文件中找到ProcessID, ```kill - 9 ProcessID```\n+ python 2/3 joblib.dump() 和 joblib.load()\n  - 不同python版本的pickle.dump()和pickle.load()是可以相互转换和支持的\n  - 在python3中，您应该使用较低的协议号来编写pickle数据 ```pickle.dump(your_object, your_file, protocol=2)```\n+ Pytorch Cpu 导入 Gpu 训练的模型\n  - `model.load(model_path, map_location='cpu')`\n+ Sphinx-readthedocs 开发文档自动生成\n  - `sphinx-quickstart`\n  - `sphinx-apidoc -o ./source ../Bold-Falcon`\n  - `python -m sphinx -T -E -b html -d _build/doctrees -D language=en . _build/html`\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "docs/_config.yml",
    "content": "  \ntitle: Bold-Falcon\nlang: zh\ndescription: 恶意软件检测平台\n\nremote_theme: rundocs/jekyll-rtd-theme\n\nreadme_index:\n  with_frontmatter: true\n\nexclude:\n  - Makefile\n  - CNAME\n  - Gemfile\n  - Gemfile.lock\n\ntheme: jekyll-theme-slate\n"
  },
  {
    "path": "docs/book/DevelopmentDocumentation.md",
    "content": "---\nsort: 4\n\n\n---\n\n# 开发\n\n## 4.1 开发环境配置\n\n### 4.1.1 Python环境配置\n\n在使用到一些全新的Python库之后，代码的开发和测试流程与以前相比略有不同。由于在首次使用Bold-Falcon之前必须先进行安装，这使得常规的“修改——测试”的迭代开发过程无法像以前一样独立进行。\n下面我们将概述如何在使用Bold-Falcon的同时开发和测试新的特性。\n\n- 初始化一个新的虚拟环境。考虑到放置在`/tmp`目录下的虚拟环境在重启后便不会继续保存，因此可以设置一个单独的存储目录路径，例如，`~/venv/bold-falcon-development`(即用于在通用的`~/venv`目录下为所有的虚拟环境设置一个名为`bold-falcon-development`的存储子目录)。\n\n  ```shell\n  $ virtualenv /tmp/bold-falcon-development\n  ```\n\n- 激活该虚拟环境。该操作必须在每次启动新的shell会话时完成（除非将该命令放入`~/.bashrc`或者类似的配置文件中）。\n\n  ```shell\n  $ . /tmp/bold-falcon-development/bin/activate\n  ```\n\n- 为了创建一个Bold-Falcon分发包，需要从[社区库](https://github.com/cuckoosandbox/community)中获取一些匹配监控二进制文件。这里我们提供了一个简单易用的脚本来半自动地执行这一操作。通过在当前库的根目录下按以下方式运行，即可自动获取上述二进制文件。\n\n  ```shell\n  (bold-falcon-development)$ python stuff/monitor.py\n  ```\n\n- 在开发者模式下安装Bold-Falcon，在执行期间将使用当前目录下的相关文件。\n\n  ```shell\n  (bold-falcon-development)$ python setup.py sdist develop\n  ```\n\n完成以上步骤后，现在可以修改和测试代码文件了，代码文件位于[Bold-Falcon](https://github.com/PowerLZY/Bold-Falcon)目录下。实际上，即使是对当前库的开发版本进行测试，`Cuckoo Working Directory`和`Cuckoo Working Directory Usage`中的所有规则仍然有效。\n\n### 4.1.2 Pycharm环境配置\n\n在这一节中，我们将在Bold-Falcon开发的背景下介绍大量的Pycharm配置选项，并尝试在Pycharm IDE下开展Bold-Falcon的运行和开发任务。\n\n#### 网页端界面\n\n本节会介绍基于Django框架运行的Bold-Falcon网页端界面。这一部分的代码修改以及自定义特性的新增工作比较容易。\n\n#### 路径和概念\n\n- Bold-Falcon网页端提供了Web接口和RESTAPI\n- Django项目根目录位于`Bold-Falcon/web`\n- 配置位于``Bold-Falcon/web/web/settings.py``\n- URL调度程序位于`Bold-Falcon/web/web/urls.py`，以及其他路径下，包括但不限于`Bold-Falcon/web/analysis/urls.py`\n- HTML模板使用Django模板语言。\n- 前端中与Bold-Falcon相关的JavaScript内容位于`Bold-Falcon/web/static/js/cuckoo/`，其中源代码位于` Bold-Falcon/web/static/js/cuckoo/src/`目录下。\n- 所谓的“控制器”用于代替基于类的视图，其中控制器负责不属于视图函数的操作（通常是后端）。例如：``Bold-Falcon/web/controllers/analysis/analysis.py``\n- 视图函数是视图使用的函数，位于``routes.py``。例如：``Bold-Falcon/web/controllers/analysis/routes.py``\n- API函数是API使用的函数，位于``api.py``。例如：``Bold-Falcon/web/controllers/analysis/api.py``\n\n#### 运行和调试\n\n直接使用PyCharm运行和调试Bold-Falcon，可以直接绕过Bold-Falcon启动程序并使用PyCharm的内置Django服务器，而且无需对源代码进行任何修改即可做到这一点。\n首先，建议全程在虚拟环境中操作，从而将Bold-Falcon所需的依赖项与系统范围内安装的Python隔离开来。其次，建议在开发模式下安装Bold-Falcon.\n假设Bold-Falcon成功安装（并且有一个正在使用的工作目录，参见`Cuckoo Working Directory Installation`）；启动PyCharm并打开Bold-Falcon目录。选择`Run->Edit Configurations`并单击`+`，选择“Django服务器”。服务器配置使用下列参数值：\n\n- **Name** - web\n- **Host** - 127.0.0.1\n- **Port** - 8080\n- **Environment variables** -单击 `...` 并增加 `CUCKOO_APP:web` \n- **Python interpreter** - 选择之前配置的虚拟环境。如果该虚拟环境不存在，请使用`File->Settings->Project: Cuckoo->Project Interpreter`将该虚拟环境添加到本项目中。\n- **Working directory** -Django项目根目录的绝对路径，例如：`/home/test/PycharmProjects/virtualenv/Bold-Falcon/web/`\n\n此时，可以使用PyCharm运行和调试Bold-Falcon了，通过选择`Run->Run->web`即可启动网页端服务器。\n\n#### JavaScript传输\n\nBold-Falcon前端中的Javascript代码是基于ECMAScript 6标准开发的。为了兼容浏览器，需要将它转回ECMAScript 5标准。\n首先，配置PyCharm使其能够识别并理解ECMAScript 6的语法。选择`File->Settings->Languages & Frameworks->Javascript`并从“Javascript语言版本”下拉列表中选择“ECMAScript 6”。然后选择`Apply`.\n然后，使用Babel传输Javascript代码。在Bold-Falcon项目根目录中安装Babel（需要npm）：\n\n```shell\n(bold-falcon)    test:$ pwd\n/home/test/PycharmProjects/virtualenv/bold-falcon\n(bold-falcon)    test:$ npm install --save-dev babel-cl\n```\n\n它将在Bold-Falcon项目根目录下创建一个名为`node_modules`的文件夹。切换回PyCharm并打开`cuckoo/web/static/js/cuckoo/src`路径下的任意js文件，PyCharm将询问是否要为该文件配置一个文件监视程序。点击`Add watcher`（如果此选项不可用，请在`File->Settings->Tools->File watchers`下找到“file watcher”位置）。\n在弹出屏幕“Edit Watcher”中，输入下列值：\n\n- **Name** -  Babel ES6->ES5\n- **Description** - Transpiles ECMAScript 6 code to ECMAScript 5\n- **Output filters** - None\n- **Show console** - Error\n- **Immediate file synchronisation** - yes\n- **Track only root files** - yes\n- **Trigger watcher regardless of syntax errors** - no\n- **File type** - Javascript\n- **Scope** - 单击 `...` ->  `+` (添加范围) ->  `local` -> `OK`. 在文件浏览器中，进入 `Bold-Falcon/web/static/js/cuckoo/src/`目录下并选择`src`文件夹，单击`include`. `src`中的文件现在应该会变成绿色。选择 `OK`.\n- **Program** - 应该是 `node_modules/.bin/babel`的绝对路径，例如：`/home/test/PycharmProjects/virtualenv/cuckoo/node_modules/.bin/babel`. 再次检查输入的路径是否反映文件`node_modules/.bin/babel`的实际位置。\n- **Arguments** - `--source-maps --out-file $FileNameWithoutExtension$.js $FilePath$`\n- **Working directory** - 浏览并选择 `Bold-Falcon/web/static/js/cuckoo`\n- **Output paths to refresh** `$FileNameWithoutExtension$-compiled.js:$FileNameWithoutExtension$-compiled.js.map`\n\n最后，需要创建一个`manage.py` mock文件，以便PyCharm将其视为Django项目。文件`Bold-Falcon/web/manage.py`的内容如下：\n\n```python\n#!/usr/bin/env python\nimport sys\n\nif __name__ == \"__main__\":\n   from django.core.management import execute_from_command_line\n   execute_from_command_line(sys.argv)\n```\n\n转到`File->Settings->Languages & Frameworks->Django`，然后配置如下：\n\n- **Django Project root** - `Bold-Falcon/web`\n- **Settings** - `web/settings.py`\n- **Manage script** - `manage.py`\n\n#### 测试\n\n到目前为止，项目配置已经完成，可以使用PyCharm运行和调试Bold-Falcon了！\n\n## 4.2 辅助功能模块\n\n### 4.2.1 设计说明\n\n**辅助功能模块**定义了一些需要与每个**样本分析过程并行执行的辅助功能**，例如：记录并为用户提供分析样本的网络流量、中间人代理、客户端重启等辅助功能。全部辅助模块放在 `Bold-Falcon/moduls/auxiliary/` 目录下，全部辅助模块配置选项在 `Bold-Falcon/conf/auxiliary.conf` 文件下。\n\n**1）辅助功能定义函数**\n\n```python\nfrom lib.cuckoo.common.abstracts import Auxiliary\n\nclass MyAuxiliary(Auxiliary):\n    \"\"\"定义辅助模块\"\"\"\n    \n    def start(self):\n        # 定义辅助功能\n\n    def stop(self):\n        # 定义模块关闭\n```\n\n- start()：将在主机启动客户机并有效执行提交的恶意文件之前执行\n- stop()：将在分析过程的最后以及启动处理和报告过程之前执行\n\n**2）辅助功能运行函数**\n\n```python\nclass RunAuxiliary(object):\n    \"\"\"辅助模块管理\"\"\"\n    \n\tdef __init__(self, task, machine, guest_manager)：\n    \t# 辅助功能模块初始化\n    \n  \tdef start(self):\n    \t# 辅助功能模块配置\n        options = config2(\"auxiliary\", module_name)\n       \t\n    def callback(self, name, *args, **kwargs):\n    \t# 辅助功能模块加载\n        MyAuxiliary.start()\n        \n  \tdef stop(self):\n    \t# 辅助功能模块关闭\n    \tMyAuxiliary.stop()\t\n```\n\n+  \\__init\\_\\_(): 辅助功能模块初始化（任务号、虚拟机软件、客户机IP映射等）\n+  start(): 根据 `Bold-Falcon/conf/auxiliary.conf` 下的配置选择辅助功能模块列表\n+  callback(): 开启辅助功能模块列表的辅助功能\n+  stop(): 关闭辅助功能模块列表的辅助功能\n\n**3）辅助功能列表**\n\n| 辅助模块名称 | 辅助模块功能                                          |\n| ------------ | :---------------------------------------------------- |\n| **sniffer**  | 负责执行tcpdump以转储沙箱样本分析过程中生成的网络流量 |\n| **mitm**     | 负责执行mitmdump以提供中间人代理功能                  |\n| **reboot**   | 负责提供重启分析支持                                  |\n\n### 4.2.2 设计流程\n\n**1) 辅助功能模块时序图**\n\n```mermaid\n%% 时序图例子,-> 直线，-->虚线，->>实线箭头\n sequenceDiagram\n  participant 沙箱主机\n  participant 客户机\n  autonumber \n    #opt is run\n      %%rect rgb(121, 255, 121)\n      沙箱主机->客户机: 启动沙箱主机\n      沙箱主机->客户机: 初始化沙箱配置\n      #rect rgb(135,206,250)\n      沙箱主机->>客户机: 辅助功能模块初始化\n      沙箱主机->>沙箱主机: 辅助功能模块加载\n      沙箱主机->>客户机: 辅助功能模块开启\n      loop 文件分析模块\n        沙箱主机->>+客户机: 样本上传\n        客户机->>-客户机: 样本分析\n        Note right of 客户机: 执行分析脚本\n        客户机->>沙箱主机: 分析结果存储\n      end\n      沙箱主机->>沙箱主机: 辅助功能模块存储\n      沙箱主机->客户机: 辅助功能模块结束\n      #end\n      沙箱主机->客户机: ....\n    #end\n```\n\n**2）辅助功能模块流程设计**\n\n1. 启动沙箱主机\n2. 初始化沙箱配置\n3. 辅助功能模块初始化\n4. 辅助功能模块加载\n5. 辅助功能模块开启\n6. 样本上传\n7. 样本分析\n8. 分析结果存储\n9. 辅助功能模块存储\n10. 辅助功能模块关闭\n\n## 4.3 机器交互模块\n\n### 4.3.1 设计说明\n\n**机器交互模块**定义了沙箱主机与虚拟化软件的交互过程，包括开启虚拟机、启动任务调度、上传样本、上传分析模块和分析配置文件、在数据库中记录虚拟机的状态等操作。全部机器交互模块放在 `Bold-Falcon/modules/mechinery/`目录下，我们默认使用了VirtualBox虚拟机软件。全部辅助模块配置选项在 `Bold-Falcon/conf/virualbox.conf`文件下。\n\n**沙箱主机**与**客户机**网络配置中使用**Host-Only**连接方式。对于一个恶意软件，当其被安装配置了Bold-Falcon的主机提交到各个客户机进行运行分析时，主机是想要知道客户机的所有流量信息的，因为绝大部分的恶意软件都需要依赖网络来执行恶意行为。此时只有设置Host-Only连接，主机才能截获客户机与互联网之间流经的所有流量，进而更好地分析恶意软件的行为方式。\n\n**1）机器交互定义函数**\n\n```python\nfrom lib.cuckoo.common.abstracts import Machinery\nfrom lib.cuckoo.common.exceptions import CuckooMachineError\n\nclass MyMachinery(Machinery):\n    def start(self, label):\n    \t# 开启定义虚拟机管理软件\n        try:\n            revert(label)\n            start(label)\n        except SomethingBadHappens:\n            raise CuckooMachineError(\"oops!\")\n    \n    def initialize(self, module_name):\n        # 初始化配置信息\n    \tself._initialize(module_name)\n    \n    def stop(self, label):\n    \t# 关闭定义虚拟机管理软件\n        try:\n            stop(label)\n        except SomethingBadHappens:\n            raise CuckooMachineError(\"oops!\")\n```\n\n- start()：开启定义虚拟机管理软件\n- stop()：关闭定义虚拟机管理软件\n- initialize()：根据指定的配置信息（标签、平台、IP等）生成可用客户机的列表\n\n**2）机器交互管理函数**\n\n```python\nclass AnalysisManager(threading.Thread):\n\n    def __init__(self, task_id, error_queue):\n        # 读取任务的消息、配置文件中的服务端ip和端口\n\n    def init(self):\n        # 初始化分析, 创建分析结果存储目录\n\n    def acquire_machine(self):\n        # 开启配置虚拟机\n        \n    def launch_analysis(self):\n  \t\t# 开启分析任务\n        self.init():\n        self.acquire_machine()\n        # 开启虚拟机如：machinery/virtualbox.py 中 VirtualBox.start\n        machinery.start(self.machine.label, self.task)\n        return succeeded\n```\n\n+ \\__init\\_\\_(): 读取任务的消息（指明分析时间、系统类型、开始时间、结束时间、指明分析状态）；配置文件中的服务端ip和端口（我这里设置的是192.168.56.1和2042）\n+ init()：创建文件夹, 用于存放分析结果和样本文件，将target指向的文件存放到`storage/binaries`下\n+ acquire_machine(): 开启配置虚拟机\n+ launch_analysis(): 开启分析任务，各个模块的清理工作\n\n**3）客户端代理函数**\n\nHost和Client端的数据传输,客户端代理 **agent.py** 脚本在客户机运行\n\n```python\nclass MiniHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):\n  \t# 用作对不同路径的不同函数处理(响应)\n    server_version = \"Cuckoo Agent\"\n\n    def do_GET(self):\n        # 响应GET请求\n\n    def do_POST(self):\n        # 响应POST请求\n    \t# host与client之间的数据传输, 格式为multipart/form-data\n```\n\n+ do_GET(): 响应GET请求\n+ do_POST():\n  +  响应POST请求\n  +  host与client之间的数据传输, 格式为multipart/form-data，可以理解为key:value形式\n  +  如: analysis.conf, 分析模块, 样本等，这些数据在传输的时候, 都要带有filename字段\n\n```python\nAGENT_VERSION = \"0.10\"\nAGENT_FEATURES = [\n    \"execpy\", \"pinning\", \"logs\", \"largefile\", \"unicodepath\",\n]\n \n@app.route(\"/\")\ndef get_index():\n  \n@app.route(\"/environ\")\ndef get_environ():\n\n@app.route(\"/mktemp\", methods=[\"GET\", \"POST\"])\ndef do_mktemp():\n    \n@app.route(\"/mkdtemp\", methods=[\"GET\", \"POST\"])\ndef do_mkdtemp():  \n    \n@app.route(\"/extract\", methods=[\"POST\"])\ndef do_extract():\n    \n@app.route(\"/store\", methods=[\"POST\"])\ndef do_store():\n  \n@app.route(\"/execpy\", methods=[\"POST\"])\ndef do_execpy():\n       \n@app.route(\"/status\")\ndef get_status():\n```\n\n+ get_index(): agent的一些基本信息\n\n  + 浏览器输入`192.168.56.2:8000` 返回：\n\n    ```python\n    {\"message\": \"Cuckoo Agent!\", \"version\": \"0.10\", \"features\": [\"execpy\", \"pinning\", \"logs\", \"largefile\", \"unicodepath\"]}\n    ```\n\n+ get_environ(): 获取client端环境变量,以便后面后续的一些命令执行\n\n+ do_mktemp() 和 do_mkdtemp()\n\n  + 两个创建临时文件夹的命令: mktemp和mkdtemp，但二者创建的位置不一样\n  + mkdtemp --> 在%SYSTEMDRIVE%(C:\\)下创建一个随机文件夹\n  + mktemp --> 在%TEMP%(C:\\Users\\bill\\AppData\\Local\\Temp)下创建一个随机文件夹\n\n+ do_extract(): 将分析模块以zip格式压缩,发送给client端；发送extrac命令, 将分析模块解压到上一步创建的文件夹中。\n\n+ do_store():\n\n  + 执行store命令, 写入analysis.conf 到 C:/tmppx7scx/analysis.conf\n\n  | analysis.conf | 内容                                                         |\n  | ------------- | ------------------------------------------------------------ |\n  | **category**  | file                                                         |\n  | **target**    | /tmp/cuckoo-tmp-pwnmelife/tmpZ3SA0v/maze.exe (host端的样本地址) |\n  | **package**   | exe                                                          |\n  | **file_type** | PE32 executable (GUI) Intel 80386, for MS Windows            |\n  | **file_name** | maze.exe                                                     |\n  | **clock**     | 20200620T09:28:00                                            |\n  | **id**        | 1                                                            |\n  | **timeout**   | 120                                                          |\n  | **ip**        | 192.168.56.1                                                 |\n  | **port**      | 2042                                                         |\n\n  + 执行store命令, 写入simple.bin 到 C:\\Users\\bill\\AppData\\Local\\Temp\\simple.bin\n\n+ do_execpy(): 执行分析脚本\n\n+ get_status(): 不断获取样本分析状态\n\n**4）客户端管理函数**\n\n```python\nclass GuestManager(object):\n\n    def __init__(self, vmid, ipaddr, platform, task_id, analysis_manager):\n      \t# 初始化信息\n\n    def stop(self):\n        # 关闭客户端分析\n    \n    def upload_analyzer(self, monitor):\n        # 上传分析模块\n     \n    def add_config(self, options):\n        # 上传分析脚本\n\n    def start_analysis(self, options, monitor):\n        # 客户端开启分析\n        self.upload_analyzer(monitor)\n\n        self.add_config(options)\n\n        # 执行store命令 --> 在系统中执行写入analysis.conf\n        self.post(\"/store\", files=files, data=data)\n\n        # 执行execpy命令 --> 在系统中执行python analyzer.py\n        self.post(\"/execpy\", data=data)\n            \n        # 执行execute命令, execute(command)\n        self.post(\"/execute\", data=data)\n\n    def wait_for_completion(self):\n        # 不断获取客户端分析状态\n```\n\n+ \\__init\\_\\_(): 初始化IP、端口号、系统、任务号、保存路径信息\n+ stop(): 关闭客户端分析\n+ upload_analyzer(): \n  + 分析模块的文件位于`Bold-Falcon/data/analyzer/(android, darwin, linux, windows)`\n  + analyzer_zipfile 也会将 dumpmem.yarac 和Monitor 写入到压缩文件流中\n+ add_config(): 上传分析脚本，将options中的内容传入client中, 写入到self.analyzer_path的analysis.conf中\n+ start_analysis(): 客户端开启分析,client 端也开启了http server, 获取agent（配置的时候,需要在虚拟机中放置agent.py）的信息\n+ wait_for_completion(): 不断获取客户端分析状态\n\n### 4.3.2 设计流程\n\n**1) 机器交互模块时序图**\n\n```mermaid\n%% 时序图例子,-> 直线，-->虚线，->>实线箭头\n sequenceDiagram\n  participant 沙箱主机\n  participant 代理\n  participant 客户机\n  autonumber\n    #opt is run\n      %%rect rgb(121, 255, 121)\n      沙箱主机->客户机: 启动沙箱主机\n      沙箱主机->客户机: 初始化沙箱配置\n\t\t\t沙箱主机->客户机: 启动虚拟机管理软件，生成可用客户机的列表\n\t\t\t沙箱主机->沙箱主机: 创建文件夹, 用于存放分析结果和样本文件\n\t\t\t沙箱主机-->沙箱主机: 开启分析任务、开启客户端\n      #rect rgb(135,206,250)\n      #loop 机器交互模块\n      沙箱主机->>代理: Get/index\n      客户机-->>沙箱主机: 获取代理的基本信息\n      沙箱主机->>代理: Get/environ\n      客户机-->>沙箱主机: 获取client端环境变量\n    \t沙箱主机->>代理: Get/mktemp\n      客户机-->>客户机:  在%SYSTEMDRIVE%(C:\\)下创建一个随机文件夹\n      沙箱主机->>代理: Get/mkdtemp\n      客户机-->>客户机:  在%TEMP%(C:\\Users\\bill\\AppData\\Local\\Temp)下创建一个随机文件夹\n     \t沙箱主机->>代理:  POST/extract\n      沙箱主机-->>客户机:  将分析模块以zip格式压缩,发送给client端\n      沙箱主机->>代理: POST/store\n      沙箱主机-->>客户机:  写入analysis.conf 到 C:/tmppx7scx/analysis.conf\n      沙箱主机->>代理: POST/store\n      沙箱主机-->>客户机:  写入simple.bin 到 C:\\Users\\bill\\AppData\\Local\\Temp\\simple.bin\n    \t沙箱主机->>代理: POST/execpy\n      客户机->>客户机:  执行分析脚本\n      沙箱主机->>代理: Get/status\n      客户机-->>沙箱主机:  不断获取样本分析状态\n      #end\n      沙箱主机->客户机: 关闭客户端\n      沙箱主机->沙箱主机: 关闭虚拟机管理软件\n \n      沙箱主机->客户机: ....\n    #end\n```\n\n**2) 机器交互模块设计流程**\n\n1. 启动沙箱主机\n2. 初始化沙箱配置\n3. 启动虚拟机管理软件\n4. 根据指定的配置信息（标签、平台、IP等）生成可用客户机的列表\n5. 创建文件夹, 用于存放分析结果和样本文件，将target指向的文件存放到storage/binaries下\n6. 开启分析任务、开启客户端\n7. 使用GET/index访问代理\n8. 获取agent的一些基本信息\n9. 使用GET/environ访问代理\n10. 获取client端环境变量,以便后面后续的一些命令执行\n11. 使用GET/mktemp访问代理\n12. mkdtemp --> 在%SYSTEMDRIVE%(C:\\)下创建一个随机文件夹\n13. 使用GET/mkdtemp访问代理\n14. mktemp --> 在%TEMP%(C:\\Users\\bill\\AppData\\Local\\Temp)下创建一个随机文件夹\n15. 使用POST/extract访问代理\n16. 将分析模块以zip格式压缩,发送给client端. 发送extrac命令, 将分析模块解压到上一步创建的文件夹中.\n17. 使用POST/store访问代理\n18. 写入analysis.conf 到 C:/tmppx7scx/analysis.conf\n19. 使用POST/store访问代理\n20. 写入simple.bin 到 C:\\Users\\bill\\AppData\\Local\\Temp\\simple.bin\n21. 使用POST/execpy访问代理\n22. 执行分析脚本\n23. 使用POST/status访问代理\n24. 不断获取样本分析状态\n25. 关闭客户端\n26. 关闭虚拟机管理软件\n\n## 4.4 文件分析模块\n\n### 4.4.1 设计说明\n\n**文件分析模块**定义了分析组件在客户机环境中**执行并分析给定的文件**的过程。可以通过设置一个包含对所有类型的文件的通用处理方法的基类Package，然后使用多态的形式为不同类型的文件实现不同的启动分析方式。可供样本运行的客户机环境包括Windows、Linux、Android系统等，模块代码存放在`Bold-Falcon/data/analyzer/`目录下，包含所有用户指定选项的配置存储在***self.options***文件中。\n\n**1）文件分析定义函数**\n\n```python\nfrom lib.api.process import Process\nfrom lib.common.exceptions import CuckooPackageError\n\nclass Package(object):\n    \"\"\"定义文件分析模块\"\"\"\n    \n \tdef start(self):\n        # 定义文件分析初始化操作\n \t\traise NotImplementedError\n\n    def check(self):\n        # 执行重复操作\n        return True\n\n    def execute(self, path, args):\n        # 启动分析进程\n        dll = self.options.get(\"dll\")\n        free = self.options.get(\"free\")\n        suspended = True\n        if free:\n            suspended = False\n        p = Process()\n        if not p.execute(path=path, args=args, suspended=suspended):\n            raise CuckooPackageError(\n                    \"Unable to execute the initial process, analysis aborted.\"\n            )\n\n        if not free and suspended:\n            p.inject(dll)\n            p.resume()\n            p.close()\n            return p.pid\n\n    def finish(self):\n        # 转储进程内存\n        if self.options.get(\"procmemdump\"):\n            for pid in self.pids:\n                p = Process(pid=pid)\n                p.dump_memory()\n        return True\n```\n\n+ start()：进行所有初始化操作，包括运行恶意软件进程、启动其他应用程序、拍摄内存快照等。\n+ check()：执行任何类型的重复操作（每秒），可用于分析终止条件的触发机制。\n+ execute()：封装恶意软件执行和DLL注入两个操作。\n+ finish()：在完成分析并关闭客户机之前执行，用于转储所有受监控进程的进程内存。\n\n**2）分析进程定义函数**\n\n以Windows环境中的分析进程为例：\n\n```python\nClass Process(object):\n    \"\"\"Windows分析进程\"\"\"\n    \n    def execute(self):\n        # 执行样本分析\n        \n        # 启动inject.exe作为中间人，负责启动目标样本进程并挂起主线程\n        argv = [\n            inject_exe,\n            \"--app\", path,\n            \"--only-start\",\n        ]\n\t\t\t\tsubprocess_checkoutput(argv, env)\n        \n        # 再次启动inject.exe作为中间人，执行dll注入功能\n        argv = [\n            inject_exe,\n            \"--resume-thread\",\n            \"--pid\", \"%s\" % self.pid,\n            \"--tid\", \"%s\" % self.tid,\n        ]\n        if free:\n            argv.append(\"--free\")\n        else:\n            argv += [\n                \"--apc\",\n                \"--dll\", dllpath,\n            ]\n        subprocess_checkoutput(argv, env)\n```\n\n**3）管道通信定义函数**\n\n```python\nClass PipeServer(threading.Thread):\n    # 接收传入的管道句柄，创建新线程\n    \n    def run(self):\n        handler.start()\n```\n\n```python\nClass PipeForwarder(threading.Thread):\n\t# 将通过管道接收的数据发送给中心服务器\n    \n    def run(self):\n        socket.create_connection()\n        socket.sendall()\n```\n\n**4）Windows分析模块运行函数**\n\n以分析通用Windows可执行文件的默认方法为例：\n\n```python\nfrom lib.common.abstracts import Package\n\nclass Exe(Package):\n    \"\"\"EXE分析包\"\"\"\n\t\n    def start(self, path):\n        args = self.options.get(\"arguments\")\n        return self.execute(path, args)\n```\n\n**5）Linux分析模块运行函数（后期扩展）**\n\n```python\nclass Generic(Package):\n    \"\"\"基于Shell的通用执行分析包\"\"\"\n\n    def start(self, path):\n        os.chmod(path, 0o755)\n        return self.execute([\"sh\", \"-c\", path])\n```\n\n**6）Android分析模块运行函数（后期扩展）**\n\n```python\nclass Apk(Package):\n    \"\"\"APK分析包\"\"\"\n\n    def start(self, path):\n        install_sample(path)\n        execute_sample(self.package, self.activity)\n```\n\n**7）分析脚本运行函数**\n\n```python\nclass Analyzer(object):\n    \"\"\"Windows分析脚本\"\"\"\n    \n    def prepare(self):\n        # 配置分析环境\n        \n    def run(self):\n    \t# 启动分析进程\n        \n        self.prepare()\n        Package()\n        # 根据文件类型选择对应的分析包\n        package = choose_package()\n        Auxiliary()\n        # 启动一系列辅助分析工具\n        aux.init()\n        aux.start()\n        # 隐藏进程\n        zer0m0n.hidepid(self.pid)\n        zer0m0n.hidepid(self.ppid)\n        # 开始执行分析包\n        package.start()\n        package.execute()\n```\n\n- prepare(): 为分析进程配置环境，包括授予权限、启动管道服务器等\n- run(): 启动分析进程，首先启动一系列辅助分析工具，并根据上传的文件类型选择其对应的文件包，在隐藏当前进程及其父进程后，执行分析包\n\n**8）文件分析对象列表**\n\n<table align=\"center\">\n\t<tr>\n\t    <th>客户机环境</th>\n\t    <th>文件对象</th>\n\t</tr>\n\t<tr>\n\t    <th rowspan=\"8\">Windows</th>\n\t    <td>通用Windows可执行文件</td>\n\t</tr>\n\t<tr>\n\t    <td>DLL文件</td>\n\t</tr>\n\t<tr>\n        <td>PDF文档</td>\n\t</tr>\n\t<tr>\n\t    <td>Microsoft Office文档</td>\n\t</tr>\n\t<tr>\n        <td>ZIP文件</td>\n\t</tr>\n\t<tr>\n\t    <td>Java JAR文件</td>\n\t</tr>\n\t<tr>\n\t    <td>Python文件</td>\n\t</tr>\n\t<tr>\n\t    <td>......</td>\n\t</tr>\n\t<tr>\n\t    <th>Linux</th>\n\t    <td>基于Shell的通用可执行文件</td>\n\t</tr>\n\t<tr>\n\t    <th>Android</th>\n\t    <td>APK文件</td>\n\t</tr>\n</table>\n\n### \t4.4.2 设计流程\n\n**1）文件分析模块时序图**\n\n```mermaid\nsequenceDiagram\n\nparticipant host_server\nparticipant analyzer\nparticipant inject\nparticipant monitor\n\nautonumber\nloop 分析环境准备\n\tanalyzer->>analyzer: 授予权限<br/>开启管道\nend\nanalyzer->analyzer: 启动辅助分析工具\nanalyzer->analyzer: Package()\nanalyzer->analyzer: 隐藏进程\nanalyzer->>inject: 启动目标样本的分析进程\nanalyzer->>inject: 挂起主线程\ninject-->>analyzer: 输出目标样本进程pid和主线程tid\nanalyzer-->>monitor: 注入monitor.dll到目标样本的进程\nmonitor->>monitor: 唤醒主线程\ninject->>monitor: monitor_init()\nmonitor-->>monitor: process.py\ninject->>monitor: monitor_hook()\nmonitor-->>analyzer: 管道返回日志\nanalyzer-->>host_server: Socket返回日志\nloop 分析结果存储\n\thost_server-->>host_server: 在线分析日志<br/>数据库<br/>结果文件夹\nend\n```\n\n**2）文件分析模块流程设计**\n\n1. 分析环境准备\n   - 授予当前进程两个新权限，用于后续操作样本所在进程和加载驱动使用\n   - 启动两个管道服务器与目标样本进程交互，分别用于传输代码执行日志和函数调用记录日志\n2. 启动一系列辅助分析工具，主要包括截屏工具、驱动加载工具等\n3. 调用Package类，根据上传的文件类型选择其对应的文件包来启动分析\n4. 调用驱动功能，实现对当前进程（Analyzer进程）和父进程（Agent）的隐藏，防止目标检测到沙箱的存在\n5. 启动目标样本的分析进程\n6. 挂起主线程\n7. 输出目标样本进程pid和主线程tid，退出\n8. 再次启动目标样本进程，注入monitor.dll\n9. 唤醒主线程，执行样本\n10. monitor_init()\n\n   - 配置读取初始化\n   - hook初始化\n   - 管道初始化，连接前面Analyzer进程开启的两个管道\n   - sleep初始化，针对sleep函数进行特殊处理\n   - monitor模块的自我隐藏：抹去PE头数据+从PEB中的模块链表中将自己摘掉\n\n11. process.py\n\n    - 工具脚本，处理对象为根据不同功能分成的rst文件（file.rst、process.rst、network.rst等等）\n\n    - 提取rst文件中所有需要HOOK的函数的信息，包括函数所在的模块名，函数名称、函数的所有参数信息、函数的返回值等\n    - 将所有rst文件通过一个hooks.c的代码模板渲染出来，得到完整的hooks.c文件，该代码文件里面定义了一个全局的g_hooks的数组，来记录所有待hook的函数信息\n12. monitor_hook()：安装HOOK，生成函数调用记录\n13. 通过管道发送代码执行日志和函数调用记录日志\n14. 通过Socket通信发送代码执行日志和函数调用记录日志到中心服务器\n15. 中心服务器对文件分析结果进行各种形式的存储（分析日志、数据库、结果文件夹等），分析结果放置在`Bold-Falcon/storage/analyse/{task_id}`目录下，供后续结果处理模块使用\n\n## 4.5 结果处理模块\n\n### 4.5.1 设计说明\n\n**结果处理模块**允许自定义方法来分析沙盒生成的原始结果，并将一些信息附加到一个**全局结果容器**中，该结果容器稍后将由**家族签名模块**、**机器学习模块**和**报告生成模块**使用。 \n\n**结果处理模块都将被初始化和执行**，返回的数据将被附加到一个名为**全局结果容器**的数据结构中。这个容器仅仅是一个大的**Python字典**，它包含了由所有按标识键分类的模块生成的抽象结果。每次分析的全局结果容器被储存在 `Bold-Falcon/storage/analysis/task_id` 文件夹下。\n\n**1）结果处理定义函数**\n\n```python\nfrom lib.cuckoo.common.exceptions import CuckooProcessingError\nfrom lib.cuckoo.common.abstracts import Processing\n\nclass MyModule(Processing):\n\n    def run(self):\n        self.key = \"key\"\n        \n        try:\n            data = do_something()\n        except SomethingFailed:\n            raise CuckooProcessingError(\"Failed\")\n            \n        return data\n```\n\n+ run()：***self.key*** 该属性定义要用作返回 ***data*** 的子容器的名称。\n+ 将 ***data*** 附加到全局容器中（列表、字典、字符串等）。\n+ 可以指定一个***order***值，允许按顺序运行可用的处理模块。\n\n**2）结果处理运行函数**\n\n```python\nclass RunProcessing(object):\n\n    def __init__(self, task):\n        # 初始化信息\n        \n    def process(self, module, results):\n      \t# 执行一个结果处理模块\n        \n    def run(self):\n        # 执行所有结果处理模块，返回全局结果容器\n        # 获得 processing 功能列表\n        processing_list = cuckoo.processing.plugins\n        \n        for module in processing_list:\n            # 执行功能\n            key, result = self.process(module, results)\n            # If the module provided results, append it to the fat dict.\n            if key and result:\n                results[key] = result\n        return results\n```\n\n+ \\__init\\_\\_(): 初始化任务信息、虚拟机信息、分析结果存储路径\n+ process():\n  + 执行一个结果处理模块\n  + 初始化对应处理功能\n  + 如果在配置中禁用了处理模块，请跳过它\n  + 获得分析结果存储路径\n  + 执行对应处理功能\n  + 返回关键字，对应处理功能结果\n+ run(): 执行所有结果处理模块，返回全局结果容器\n\n**3）结果处理功能列表**\n\n| 处理模块名称         | 处理模块功能                                                 |\n| -------------------- | ------------------------------------------------------------ |\n| **Analysisinfo**     | 生成有关当前分析的一些基本信息，例如时间戳、沙箱版本等       |\n| **BehaviorAnalysis** | 解析原始行为日志，执行一些初始转换并提供解释，包括完整的进程跟踪、行为摘要和进程树 |\n| **Buffer**           | 丢弃缓冲区分析                                               |\n| **Debug**            | 包括错误和分析程序生成的analysis.log                         |\n| **Dropped**          | 包括由恶意软件丢弃并由沙箱转储的文件的信息                   |\n| **Memory**           | 在完整的内存转储上执行 Volatility 内存取证分析工具           |\n| **NetworkAnalysis**  | 解析PCAP文件并提取一些网络信息，例如DNS流量、域、ip、HTTP请求、IRC和SMTP流量 |\n| **Screenshots**      | 屏幕截图和OCR分析                                            |\n| **StaticAnalysis**   | 对文件执行一些静态分析                                       |\n| **Strings**          | 从分析的二进制文件中提取字符串                               |\n| **TargetInfo**       | 包括当前所分析文件的信息，如哈希，ssdeep等                   |\n| **VirusTotal**       | 在VirusTotal.com上搜索所分析文件的反病毒签名                 |\n| **ApkInfo**          | 生成有关当前APK分析的一些基本信息（Android分析）             |\n| **Baseline**         | 从采集的信息中获取基线结果                                   |\n| **Drioidmon**        | 从Droidmon日志中提取动态API调用信息                          |\n| **DumpTls**          | 交叉引用从监控程序中提取的TLS主密钥和从PCAP提取的密钥信息以转储主密钥文件 |\n| **GooglePlay**       | 有关分析会话过程的Google Play信息                            |\n| **Irma**             | IRMA连接器                                                   |\n| **Misp**             | MISP连接器                                                   |\n| **ProcMemory**       | 执行进程内存转储的分析，并能够处理用户自定义的Yara规则       |\n| **ProcMon**          | 从procmon.exe的输出中提取事件                                |\n| **Snort**            | Snort处理                                                    |\n| **Suricata**         | Suricata处理                                                 |\n\n**4）全局结果容器内容**\n\n全局结果容器为python的字典格式，为**家族签名模块**、**机器学习模块**和**报告生成模块**提供信息，最后保存在 `Bold-Falcon/storage/analyses/{task_id}/reports/report.json` 文件中。\n\n```python\n- info\n  - added/strarted/ended: 上传样本, 启动分析与结束分析的时间戳\n  - duration: 分析时长\n  - id: ={task_id}, 数据库中的任务id\n  - package: 文件类型\n  - machine: 样本运行环境\n- signatures\n\t- families: 恶意软件家族\n\t- description: 签名描述\n\t- severity: 安全等级\n\t- references: URL列表\n  - name: 签名名称\n- target\n  - file\n    - yara: yara规则匹配\n    - sha-1/sha256/sha512/md5: 文件哈希值\n    - name: 文件名\n    - type: 文件类型(包括运行系统与压缩加壳方式)\n    - crc32: 校验码\n    - path: 文件二进制形式存储路径\n    - size: 文件大小\n- network\n  - tls/udp/http/icmp/smtp/tcp/dns: 协议解析字段\n  - pcap_sha256: 流量包哈希值\n- static\n  - pe_imports: 导入地址表(IAT), 列出了动态链接库和它们的函数\n  - imported_dll_count: DLL数量\n  - pe_resources: 资源节, 列出了文件中的可打印字符串/图形图像/按钮图标等信息\n  - pe_sections: 文件节区信息, 包括节区大小/虚拟地址/熵/加壳方式/虚拟内存等\n- behavior\n  - generic\n    - process_path: 进程启动路径\n    - process_name: 进程执行程序名\n    - pid: 进程id\n    - first_seen: 进程启动时间戳\n    - ppid: 父进程id\n  - processes\n    - modules: 样本运行时调用的系统文件信息, 包括被调用文件名/路径/基地址及其大小\n    - time: 运行时间\n  - processtree\n    - children: 子进程列表\n- debug: analysis.log分析结果\n- screenshots: 指定运行截图存储路径\n- strings: 文件中的可打印字符串列表\n```\n\n**5）结果处理模块属性**\n\n结果处理模块提供了一些属性，可用于访问当前分析任务的原始结果：\n\n- self.analysis_path：存储分析结果的目录路径，例如：`Bold-Falcon/storage/analysis/1`\n- self.log_path：analysis.log文件的路径\n- self.file_path：所分析文件的路径\n- self.dropped_path：存储丢弃文件的目录路径\n- self.logs_path：存储原始行为日志的目录路径\n- self.pcap_path：网络pcap转储的路径\n- self.memory_path：完整的内存转储的路径（如果已创建）\n- self.pmemory_path：进程内存转储的路径（如果已创建）\n\n使用这些属性，能够轻松地访问由Bold-Falcon存储的所有原始结果，并对它们执行分析操作。\n\n### 4.5.2 设计流程\n\n**1）结果处理模块时序图**\n\n```mermaid\n%% 时序图例子,-> 直线，-->虚线，->>实线箭头\n sequenceDiagram\n  participant 沙箱主机\n  participant 任务目录\n  autonumber \n    #opt is run\n      %%rect rgb(121, 255, 121)\n      沙箱主机->任务目录: 启动结果处理模块\n      沙箱主机->任务目录: 初始化任务信息、虚拟机信息、分析结果存储路径\n      #rect rgb(135,206,250)\n      沙箱主机->>沙箱主机: 获得处理功能列表\n      loop 执行处理功能列表\n      沙箱主机->>任务目录: 执行一个结果处理功能\n      沙箱主机->>任务目录: 初始化对应处理功能\n      任务目录-->>沙箱主机: 获得分析数据\n      沙箱主机->>+任务目录: 执行对应处理功能\n      任务目录-->>-沙箱主机: 返回关键字及处理功能结果  \n      end\n      沙箱主机->>沙箱主机: 全局结果容器\n      沙箱主机->任务目录: 结果处理模块结束\n      #end\n      沙箱主机->任务目录: ....\n    #end\n```\n\n**2）结果处理模块设计流程**\n\n1. 启动结果处理模块\n2. 初始化任务信息、虚拟机信息、分析结果存储路径\n3. 获得处理功能列表\n4. 执行一个结果处理功能\n5. 初始化对应处理功能\n6. 获得分析数据读取路径\n7. 执行对应处理功能\n8. 返回关键字，对应处理功能结果\n9. 执行所有结果处理模块，返回全局结果容器\n\n## 4.6 家族签名模块\n\n### 4.6.1 设计说明\n\n**家族签名模块**定义了一些特定的“签名”，用于表示特定的恶意行为模式或特征指标，一定程度上实现特定的恶意软件家族的类别划分，并将一些信息附加到一个全局容器中。这类特征简化了结果的解释，也可以自动识别感兴趣的恶意软件样本。所有签名位于`Bold-Falcon/modules/signatures/`目录或社区库的`Bold-Falcon/data/signatures/`目录下。\n\n+ 通过隔离一些独特的行为（如文件名或互斥）来识别您感兴趣的特定恶意软件系列\n\n+ 发现恶意软件在系统上执行的修改活动，例如安装设备驱动程序\n\n+ 通过隔离通常由银行特洛伊木马或勒索软件执行的典型操作，识别特定的恶意软件类别\n\n+ 将样本分类为恶意软件/未知类别，**无法识别未知的样本**\n\n**1）家族签名定义函数**\n\n**例：**检查是否有以“.exe”结尾的文件：在这种情况下，它将返回True，表示签名匹配，否则返回False\n\n```python\nfrom lib.cuckoo.common.abstracts import Signature\n\nclass CreatesExe(Signature):\n    name = \"creates_exe\"\n    description = \"Creates a Windows executable on the filesystem\"\n    severity = 2\n    categories = [\"generic\"]\n    authors = [\"Cuckoo Developers\"]\n    minimum = \"2.0\"\n\n    def on_complete(self):\n        return self.check_file(pattern=\".*\\\\.exe$\", regex=True)\n    \n    def on_call(self, call, pid, tid):\n        # 只用于事件签名\n```\n\n- 初始签名属性\n  - name：签名的标识符\n  - description：签名所代表内容的简要描述\n  - severity：标识匹配事件严重性的数字（通常在1到3之间）\n  - categories：描述匹配事件类型的类别列表，例如：banker, injection, anti-vm, Bold-Falcon.\n  - families：恶意软件家族名称列表（如果签名与已知签名高度匹配）\n  - authors：签名作者的列表\n  - references：提供签名上下文的引用（URL）列表\n  - enable：如果设置为False，则跳过签名\n  - alert：如果设置为True，则可用于指定应报告的签名\n  - minimum：成功运行此签名所需的最低沙箱版本\n  - maximum：成功运行此签名所需的最高沙箱版本\n- on_complete()：特征匹配签名函数，在签名进程结束时被调用\n- on_call()：签名匹配时执行的回调函数\n\n**2）家族签名运行函数**\n\n所有签名都将并行执行，并通过API调用集合为一个单循环中的每个签名调用回调函数on_call().\n\n```python\nclass RunSignatures(object):\n\n    def __init__(self, results):\n        # 初始化签名，记录标签API\n\n    def call_signature(self, signature, handler, *args, **kwargs):   \n        # 签名的包装器。这个包装器将事件产生给签名，并递归地处理匹配的签名\n      \n    def process_yara_matches(self):\n       \n    def process_extracted(self):\n\n    def run(self):\n      \n        self.process_yara_matches()\n        # 遍历所有Yara匹配项\n        self.process_extracted()\n        for sig in self.signatures:\n            self.call_signature(sig, sig.on_extract, ExtractedMatch(item))\n        # 遍历所有提取的匹配项    \n        self.matched.append(signature.results())\n        # 分数计算\n        score += signature.severity\n        # 按严重性级别对匹配的签名进行排序，并将其放入结果字典\n        self.matched.sort(key=lambda key: key[\"severity\"])\n        self.results[\"signatures\"] = self.matched\n        if \"info\" in self.results:\n            self.results[\"info\"][\"score\"] = score / 5.0\n    \n    required = [\"creates_exe\", \"badmalware\"]\n    \n    def on_signature(self, matched_sig):\n        # 将识别异常的多个签名组合为一个签名分类实例（恶意软件警报）\n        \n        if matched_sig in self.required:\n            self.required.remove(matched_sig)\n            \n        if not self.required:\n            return True\n        \n        return False\n```\n\n**3）生成的签名结果**、\n\n如果签名匹配成功，生成的签名结果将被添加到全局容器中。\n\n```python\n\"signatures\": [\n    {\n        \"severity\": 2,\n        \"description\": \"Creates a Windows executable on the filesystem\",\n        \"alert\": false,\n        \"references\": [],\n        \"data\": [\n            {\n                \"file_name\": \"C:\\\\d.exe\"\n            }\n        ],\n        \"name\": \"creates_exe\"\n    }\n]\n```\n\n**4）Yara规则**\n\n[Yara](https://yara.readthedocs.io/en/stable/)是一个能够帮助恶意软件研究人员识别和分类恶意软件样本的工具，使用Yara可以基于文本或二进制模式创建恶意软件家族描述信息。每一条YARA规则都由一系列字符串和一个布尔型表达式构成，并阐述其逻辑。Yara规则可以提交给正在运行的进程，**以帮助系统识别其样本是否属于某个已进行规则描述的恶意软件家族**。Yara规则语法类似于C语言，每个规则都以关键字“**rule**”开头，后面跟着一个规则标识符。规则示例如下：\n\n```c\nrule Test : Trojan\n{\n    //规则描述\n    meta:\n        author = \"Sunset\"\n        date = \"2021-04-21\"\n        description = \"Trojan Detection\"\n\n    //规则字符串\n    strings:\n        $a = {6A 40 68 00 30 00 00 6A 14 8D 91}\n        $b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}\n        $c = \"UVODFRYSIHLNWPEJXQZAKCBGMT\"\n\n    //条件表达式\n    condition:\n        $a or $b or $c\n}\n```\n\n根据已有的恶意软件家族的专家知识，现在一般将[Yara规则](https://github.com/Yara-Rules/rules)分为11类：\n\n1.  Antidebug_AntiVM：反调试/反沙箱类yara规则 \n2.  Crypto：加密类yara规则 \n3.  CVE_Rules：CVE漏洞利用类yara规则 \n4.  email：恶意邮件类yara规则 \n5.  Exploit-Kits：EK类yara规则 \n6.  Malicious_Documents：恶意文档类yara规则 \n7.  malware：恶意软件类yara规则 \n8.  Mobile_Malware：移动恶意软件类yara规则 \n9.  Packers：加壳类yara规则 \n10.  capabilities：通用类yara规则 \n11.  Webshells：Webshell类yara规则\n\n### 4.6.2 设计流程\n\n**1)  家族签名模块时序图**\n\n```mermaid\n%% 时序图例子,-> 直线，-->虚线，->>实线箭头\n sequenceDiagram\n  participant 沙箱主机\n  participant 结果容器\n  autonumber \n      %%rect rgb(121, 255, 121)\n      沙箱主机->结果容器: 结果处理模块\n      沙箱主机->结果容器: 启动家族签名模块\n      #rect rgb(135,206,250)\n      沙箱主机->>沙箱主机: 初试化所有可用签名，记录标签API\n      沙箱主机->>结果容器: 遍历所有Yara规则\n      结果容器-->>沙箱主机: 记录匹配的Yara规则结果\n      沙箱主机->>结果容器: 遍历所有签名\n      结果容器-->>沙箱主机: 记录匹配的签名结果\n      沙箱主机->>沙箱主机: 签名分数计算\n      沙箱主机->>沙箱主机: 按严重性级别对匹配的签名进行排序\n      沙箱主机-->>结果容器: 将签名结果放入结果字典\n      沙箱主机->>结果容器: ...\n    #end\n```\n\n**2）家族签名模块流程设计**\n\n1. 文件分析模块\n2. 结果处理模块\n3. 启动家族签名模块\n4. 初试化所有可用签名，记录标签API\n5. 遍历所有匹配的Yara规则\n6. 遍历所匹配的签名\n7. 分数计算\n8. 按严重性级别对匹配的签名进行排序\n9. 将签名结果放入结果字典\n\n## 4.7 机器学习模块\n\n### 4.7.1 设计说明\n\n**机器学习模块**定义一些基于机器学习的Windows恶意软件检测模型（其他文件检测模型后续添加），用于检测恶意软件，并将一些信息附加到一个全局容器中。\n\n**1) 检测模型定义函数 **\n\n```python\nfrom lib.cuckoo.common.exceptions import CuckooDetectionError\n\nclass Detection(object):\n    \"\"\"\n    Base abstract class for detection module.\n    \"\"\"\n    def set_options(self, options):\n        \"\"\" Set report options.\"\"\"\n    def set_path(self, analysis_path):\n        \"\"\"Set paths.\"\"\"\n    def set_task(self, task):\n        \"\"\"Add task information.\"\"\"\n    def load_instance(self, results):\n        \"\"\"\n        Initialize the sample instance and load the dictionary\n        need a class Instance \n        \"\"\"\n    def run(self):\n        \"\"\" Start detection.\"\"\"\n        raise NotImplementedError    \n```\n\n```python\nclass MyDetection(Detection):\n \t\t\n    def load_features(self)\n    \t# 数据预处理\n    def load_model(self):\n      # 加载模型训练\n    def run(self, Y)\n    \t# 预测目标值\n      \treturn predict\n```\n\n+ extract_features()：数据预处理\n+ fit()：模型训练\n+ predict()：预测目标值\n\n**2）检测模型运行函数**\n\n```python\nclass RunDetection(object):\n\t\"\"\" plugins.py \"\"\"\n       \n    def __init__(self, task):\n        # 初始化模型信息\n        \n    def process(self, module, results):\n      \t# 执行一个检测模块\n        \n    def run(self):\n        # 执行所有结果检测模块，返回全局结果容器\n        # 获得 detection 功能列表\n        detection_list = cuckoo.detection.plugins\n        \n        for module in detection_list:\n            # 执行功能\n            model_name,predict = self.process(module, results)\n            if model_name and predict:\n                results[model_name] = predict\n        return results\n```\n\n+ \\__init\\_\\_(): 初始化检测模型\n+ process():\n  + 执行一个检测模块\n  + 初始化对应检测功能\n  + 如果在配置中禁用了检测模块，请跳过它\n  + 读取分析数据路径\n  + 加载预训练检测模型\n  + 特征工程\n  + 返回关键字，预测结果\n+ run(): 执行所有检测模块，返回全局结果容器\n\n**3）检测模型列表**\n\n| 名称         | 类型     | 特征        | 算法模型            |\n| ------------ | -------- | ----------- | ------------------- |\n| **Malconv**  | 静态分析 | 字节序列    | Malconv卷积神经网络 |\n| **String**   | 静态分析 | 字符串序列  | XGBoost集成学习模型 |\n| **Apistats** | 动态分析 | API调用序列 | XGBoost集成学习模型 |\n\n### 4.7.2 设计流程\n\n**1）模型检测模块时序图**\n\n```mermaid\n%% 时序图例子,-> 直线，-->虚线，->>实线箭头\n sequenceDiagram\n  participant 沙箱主机\n  participant 任务目录\n  autonumber \n    #opt is run\n      %%rect rgb(121, 255, 121)\n      沙箱主机->任务目录: 启动机器学习模块\n      沙箱主机->任务目录: 初始化检测模型\n      #rect rgb(135,206,250)\n      沙箱主机->>沙箱主机: 获得检测模型功能列表\n      loop 执行检测功能列表\n      沙箱主机->>任务目录: 执行一个检测模块\n      沙箱主机->>任务目录: 初始化对应处理功能\n      任务目录-->>沙箱主机: 读取分析数据\n      任务目录-->>沙箱主机: 加载预训练检测模型\n      沙箱主机->>+任务目录: 特征工程\n      任务目录-->>-沙箱主机: 返回关键字，对应预测结果\n      end\n      沙箱主机->>沙箱主机: 全局结果容器\n      沙箱主机->任务目录: 机器学习模块结束\n      #end\n      沙箱主机->任务目录: ....\n    #end\n```\n\n**2）模型检测模块设计流程**\n\n1. 启动机器学习模块\n2. 初始化检测模型\n3. 获得检测模型功能列表\n4. 执行一个检测模块\n5. 初始化对应检测功能\n6. 如果在配置中禁用了检测模块，请跳过它\n7. 读取分析数据路径\n8. 加载预训练检测模型\n9. 特征工程\n10. 返回关键字，对应预测结果\n11. 执行所有检测模块\n12. 保存到全局结果容器\n13. 机器学习模块结束\n\n## 4.8 对抗攻击模块\n\n**对抗攻击模块**在结果处理模块、家族签名模块处理之后，与**机器学习模块同时**进行，**对抗攻击模块**定义了生成恶意软件对抗样本的添加**扰动方式**和**搜索策略算法**。`Bold-Falcon/modules/adversarial/`目录 中提供的所有处理模块，都属于对抗攻击模块。每个模块在 `Bold-Falcon/conf/adversarial.conf`中都应该有一个专门的配置选项。该模块生成恶意软件对抗样本保存在`Bold-Falcon/storage/analysis/task_id/Adversarial/` 文件夹下。\n\n#### 4.8.1 对抗攻击功能列表\n\n>   **secml_malware** :https://github.com/pralab/secml_malware\n\n+   **扰动方式**（问题空间扰动）\n    +   文件末尾填充字节 [Yuan et. al.](Black-Box Adversarial Attacks Against Deep Learning Based Malware Binaries Detection with GAN)\n    +   节区末空间中添加字节 [Suciu et al.](https://arxiv.org/abs/1810.08280)\n    +   填充DOS字段 [Demetrio et al.](https://arxiv.org/abs/1901.03583)\n    +   修改PE文件头部字节 [Demetrio et al.](Explaining Vulnerabilities of Deep Learning to Adversarial Malware Binaries)\n+   **搜索策略**\n    +   FGSM (白盒) \n    +   MAEGAN（黑盒）\n\n**1) 对抗模型定义函数 **\n\n```python\nfrom lib.cuckoo.common.exceptions import CuckooDetectionError\n\nclass Adversarial(object):\n    \"\"\"\n    Base abstract class for Adversarial module.\n    \"\"\"\n    def set_options(self, options):\n        \"\"\" Set report options.\"\"\"\n    def set_path(self, analysis_path):\n        \"\"\"Set paths.\"\"\"\n    def set_task(self, task):\n        \"\"\"Add task information.\"\"\"\n    def get_adversarial(self, results):\n        \"\"\"\n        Initialize the sample instance and load the dictionary need a class Instance \n        \"\"\"\n        \n    def run(self):\n        \"\"\" Start Adversarial\"\"\"\n        raise NotImplementedError    \n```\n\n```python\nclass MyAdversarial(Detection):\n \t\t\n    def load_features(self)\n    \t# 数据预处理\n    def load_model(self):\n      # 加载模型训练\n    def run(self, Y)\n    \t# 预测目标值\n      \treturn predict\n```\n\n+ extract_features()：数据预处理\n+ fit()：模型训练\n+ predict()：预测目标值\n\n**2）检测模型运行函数**\n\n```python\nclass RunAdversarial(object):\n\t\"\"\" plugins.py \"\"\"\n       \n    def __init__(self, task):\n        # 初始化模型信息\n        \n    def process(self, module, results):\n      \t# 执行一个检测模块\n        \n    def run(self):\n        # 执行所有结果检测模块，返回全局结果容器\n        # 获得 detection 功能列表\n        detection_list = cuckoo.detection.plugins\n        \n        for module in detection_list:\n            # 执行功能\n            model_name,predict = self.process(module, results)\n            if model_name and predict:\n                results[model_name] = predict\n        return results\n```\n\n+ \\__init\\_\\_(): 初始化检测模型\n+ process():\n    + 执行一个检测模块\n    + 初始化对应检测功能\n    + 如果在配置中禁用了检测模块，请跳过它\n    + 读取分析数据路径\n    + 加载预训练检测模型\n    + 特征工程\n    + 返回关键字，预测结果\n+ run(): 执行所有检测模块，返回全局结果容器\n\n#### 4.8.3 设计流程\n\n**secml_malware** :https://github.com/pralab/secml_malware\n\n**1）对抗攻击模块时序图**\n\n```mermaid\n%% 时序图例子,-> 直线，-->虚线，->>实线箭头\n sequenceDiagram\n  participant 沙箱主机\n  participant 任务目录\n  participant 模型服务器\n  autonumber \n    \t#opt is run\n      %%rect rgb(121, 255, 121)\n      沙箱主机->任务目录: 启动对抗攻击模块\n      沙箱主机->任务目录: 初始化对抗攻击模型\n      #rect rgb(135,206,250)\n      沙箱主机->>沙箱主机: 获得对抗攻击功能列表\n      模型服务器-->>沙箱主机: 加载检测模型（生成器模型）\n      loop 执行对抗攻击功能列表\n      沙箱主机->任务目录: 执行一个对抗模块（基于GAN的逃逸攻击）\n      沙箱主机->任务目录: 初始化攻击扰动策略\n      任务目录-->>沙箱主机: 读取样本数据\n      任务目录-->>沙箱主机: 加载预训练检测模型（MalConv）\n      沙箱主机->+任务目录: 特征工程\n      任务目录-->>-沙箱主机: 返回关键字，对应预测结果\n      沙箱主机->>沙箱主机: 生成对抗样本特征\n      任务目录-->>沙箱主机: 加载预训练检测模型（MalConv）\n      任务目录-->>沙箱主机: 返回关键字，对应预测结果\n      沙箱主机->>沙箱主机: 对比预测结果\n      沙箱主机-->>任务目录: 结果不同，保存对抗样本\n      沙箱主机->>沙箱主机: 全局结果容器\n      end\n      任务目录-->>模型服务器: 返回成功的对抗样本\n      模型服务器->>模型服务器: 添加对抗样本到数据集\n      模型服务器->>模型服务器: 对抗训练\n      沙箱主机->任务目录: 对抗攻击模块结束\n      #end\n      沙箱主机->任务目录: ....\n    #en\n```\n\n\n\n## 4.9 报告生成模块\n\n### 4.9.1 设计说明\n\n在结果处理模块、家族签名模块、机器学习模块处理之后，**报告生成模块**定义了恶意软件分析报告生成的不同格式，将全局结果容器转化为json，将分析目录保存到非关系数据库 **(MongoDB)** 中。`Bold-Falcon/modules/reporting/`目录 中提供的所有处理模块，都属于结果处理模块。每个模块在 `Bold-Falcon/conf/reporting.conf`中都应该有一个专门的配置选项，供用户选择结果处理功能。\n\n**1）Json报告模块**\n\n接收结果处理模块生成的全局容器，将其转换为Json并写入文件\n\n```python\nfrom lib.cuckoo.common.abstracts import Report\n\nclass JsonDump(Report):\n\n    def erase_calls(self, results):\n        # 通过将调用替换为空列表，暂时从报表中删除\n        \n    def run(self, results)\n        # 将report.json写入report文件夹\n```\n\n+ erase_calls(): 通过将调用替换为空列表，暂时从报表中删除\n+ run(): 将report.json写入report文件夹\n\n**2)  MongoDB存储函数**\n\n```python\nclass MongoDB(Report):\n\n    @classmethod\n    def init_once(cls):\n      \t# 初始化mongo数据库\n\n    def store_file(self, file_obj, filename=\"\"):\n        # 存储成 GridFS 文件格式.\n \n    def run(self, results):\n        # 创建词典的副本。这样做是为了不修改原始字典，并可能损害以下报告模块\n        # 依次读取结果容器字段，并保存\n        self.db.analysis.save(report)\n```\n\n+ init_once(): 初始化mongo数据库\n+ store_file(): 储成 GridFS 文件格式\n+ run():\n  + 创建词典的副本。这样做是为了不修改原始字典，并可能损害以下报告模块\n  + 依次读取结果容器字段，并保存\n\n**3）报告生成运行函数**\n\n```python\nclass RunReporting(object):\n\n    def __init__(self, task, results):\n      \t# 初始化任务、结果容器、任务目录\n        \n    def process(self, module):\n       \t# 执行一个生成功能模块\n        # 初始化生成功能模块\n        # 获得分析任务目录\n    \t  # 执行对应处理功能\n        current.run(self.results)\n    \n    def run(self):\n        #依次执行report模块jsondump,mongodb\n        reporting_list = cuckoo.reporting.plugins\n        \n        for module in reporting_list:\n            self.process(module)\n```\n\n### 4.9.2 设计流程\n\n**1）报告生成模块时序图**\n\n```mermaid\n%% 时序图例子,-> 直线，-->虚线，->>实线箭头\n sequenceDiagram\n  participant 沙箱主机\n  participant 任务目录\n  participant 数据库\n  autonumber \n    #opt is run\n      %%rect rgb(121, 255, 121)\n      沙箱主机->任务目录: 启动报告生成模块\n      沙箱主机->数据库: 初始化结果容器、任务目录\n      #rect rgb(135,206,250)\n      沙箱主机->>沙箱主机: 获得报告生成功能列表（jsondump,mongodb）\n      沙箱主机->>任务目录: 执行一个jsondump生成功能\n      沙箱主机->>任务目录: 初始化jsondump生成功能\n      沙箱主机-->>任务目录: 通过将调用替换为空列表，暂时从报表中删除\n      沙箱主机-->>任务目录: 将report.json写入report文件夹\n      沙箱主机->>任务目录: 执行一个mongodb生成功能\n      沙箱主机->>任务目录: 初始化mongodb生辰功能\n      任务目录-->>沙箱主机: 创建结果容器的副本\n      loop 数据库存储\n      沙箱主机-->>沙箱主机: 依次读取结果容器字段\n      沙箱主机-->>数据库: 并保存到数据库\n      end\n      沙箱主机->任务目录: 报告生成模块结束\n      #end\n      沙箱主机->任务目录: ....\n    #end\n```\n\n**2）报告生成模块设计流程**\n\n1. 启动报告生成模块\n\n2. 初始化 任务、结果容器、任务目录\n3. 获得报告生成功能列表（jsondump,mongodb）\n4. 执行一个jsondump生成功能\n5. 初始化对应生成功能\n6. 通过将调用替换为空列表，暂时从报表中删除\n7. 将report.json写入report文件夹\n8. 执行一个mongodb生成功能\n9. 初始化对应生成功能\n10. 创建词典的副本\n11. 依次读取结果容器字段\n12. 保存到数据库\n13. 报告生成模块结束\n\n## 4.10 用户交互模块\n\n### 4.10.1 设计说明\n\n**1）前端框架Django**\n\n前端基于Python的Django框架开发，Django是一个开源的Web应用框架，采用MTV的框架模式：Model(模型), Template(模板), Views(视图)\n\n| 模块     | 功能                                                         |\n| -------- | ------------------------------------------------------------ |\n| Model    | 数据存取层，处理和数据相关的所有事物                         |\n| Template | 表现层，处理与表现相关的决定                                 |\n| Views    | 业务逻辑层，存取模型以及调取恰当的模板，是模板和模型之间的桥梁 |\n\n![Django框架](/Users/apple/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/076b7987d1501ed1ebeee6aecab0dccc/Message/MessageTemp/209186dee58a2f4b843a841addd1a580/File/图-交互设计/Django框架.png)\t\t\n\n**2）Django的一些特性：**\n\n| 特性     | 内容                                                         |\n| -------- | ------------------------------------------------------------ |\n| URL设计  | 可以设计任意的URL，而且还支持使用正则表达式匹配              |\n| 模板系统 | 提供可扩展的模板语言，并且模板之间具有继承性                 |\n| Nginx    | Nginx是一款轻量级的Web服务器，占用内存少，并发性强           |\n| WSGI     | 是一种为Python语言定义的Web服务器和Web应用程序或框架之间的通用的接口协议 |\n\n**3）WSGI的三级架构：**\n\n![WSGI三级架构](/Users/apple/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/076b7987d1501ed1ebeee6aecab0dccc/Message/MessageTemp/209186dee58a2f4b843a841addd1a580/File/图-交互设计/WSGI三级架构.png)\n\n**4）项目配置说明**\n\n项目应用路径为`Bold-Falcon/web`,项目总体设置：`Bold-Falcon/web/web/setting.py`文件中，包含了整个应用的配置信息，包括数据库连接、静态资源和url的路径定义、中间件和cookie的配置、模板文件的配置等\n\n```python\nmongo.connect()\nDATABASES = {}\n\t#数据库连接\n    \nSTATIC_URL = \"/static/\"\nSTATICFILES_DIRS = (\n    ...#添加静态资源路径\n)\n\nSECURE_PROXY_SSL_HEADER = (\"HTTP_X_FORWARDED_PROTO\", \"https\")\n\t#配置https\n    \nSESSION_ENGINE = \"django.contrib.sessions.backends.signed_cookies\"\nSESSION_COOKIE_HTTPONLY = True\n\t#配置cookie\n    \nSTATICFILES_FINDERS = (\n\t...#finder函数用来寻找静态文件\n)\n\nMIDDLEWARE_CLASSES = (\n\t...#配置中间件\n)\n\nROOT_URLCONF = \"web.urls\"\n\t#配置路由路径\n    \nTEMPLATES = [\n\t...#配置模板文件路径\n]\n\nWSGI_APPLICATION = \"web.wsgi.application\"\n\t#注册WSGI服务\n    \nINSTALLED_APPS = (\n\t...#注册应用\n)\n```\n\n**项目url配置：**`Bold-Falcon/web/web/urls.py`文件中配置了视图类views绑定页面的url\n\n```python\nurlpatterns = [\n\t...#自定义URL绑定视图函数\n]\n\nhandler404 = web.errors.handler404\nhandler500 = web.errors.handler500\n\t#错误页面绑定自定义视图\n```\n\n**数据库配置：**前端数据库使用非关系型数据库MongoDB.数据库配置信息：`lib/cuckoo/common/config.py`\n\n```python\n\"mongodb\": {\n    \"enabled\": Boolean(False),\n    \"host\": String(\"127.0.0.1\"),\n    \"port\": Int(27017),\n    \"db\": String(\"cuckoo\"),\n    \"store_memdump\": Boolean(True),\n    \"paginate\": Int(100),\n    \"username\": String(),\n    \"password\": String(),\n},\n```\n\n在Django前端框架中配置并连接数据库：`Bold-Falcon/web/web/setting.py`\n\n```python\nmongo.connect()\n```\n\n```python\nclass Mongo(object):\n    def init(self):\n        #初始化\n    def drop(self):\n        #删除数据库表\n    def close(self):\n        #关闭数据库链接\n    def connect(self):\n        #连接数据库\n```\n\n**API接口：**获取数据库Analysis表的数据的API接口定义在`Bold-Falcon/web/controllers/analysis/api.py`\n\n```python\ndb = Database()\n\t#数据库连接\n\t\nclass AnalysisApi(object):\n\n    def tasks_list(request, body):\n        #获取任务列表\n    def task_info(request, task_id):\n        #获取指定任务信息\n\tdef task_delete(request, task_id):\n        #删除指定任务\n    def task_screenshots(request, task_id, screenshot=None):\n        #获取指定任务截图\n    def tasks_stats(request, body):\n        #返回任务状态\n    def tasks_recent(request, body):\n        #返回最近任务\n    ...\n```\n\n \n"
  },
  {
    "path": "docs/book/Installation.md",
    "content": "---\nsort: 2\n\n\n---\n\n# 安装\n\nBold-Falcon的主机安装过程推荐在*GNU/Linux*（最好是Debian或Ubuntu）上进行，当然在*Max OS X*和*Microsoft Windows 7*上也可以正常使用。对于客户机安装过程，Windows分析任务推荐在*Windows XP*或*64位Windows 7*系统上进行，Mac OS X分析任务推荐在*Mac OS X Yosemite*上进行，Linux分析任务推荐在Debian上进行，尽管Bold-Falcon理论上也可以与其他版本的客户机操作系统配合使用。不要使用Windows Linux子系统（WLS）运行Bold-Falcon.\n\n## 2.1 准备主机\n\n主机是指运行Bold-Falcon的底层操作系统（通常为GNU/Linux发行版），在本文档中我们使用Ubuntu LTS 16.04为例进行介绍。在安装和配置Bold-Falcon之前，需要为主机安装一些必需的软件包和依赖库。\n\n### 2.1.1 系统环境配置\n\n#### 基于Ubuntu/Debian发行版\n\nBold-Falcon的主机组件完全基于Python 2.7编写。为了确保Bold-Falcon能够正确安装并运行，需要从apt软件库中安装以下软件包：\n\n```shell\n$ sudo apt-get install python python-pip python-dev libffi-dev libssl-dev\n$ sudo apt-get install python-virtualenv python-setuptools\n$ sudo apt-get install libjpeg-dev zlib1g-dev swig\n```\n\n为了使用基于Django的Web界面，需要安装MongoDB：\n\n```shell\n$ sudo apt-get install mongodb\n```\n\n建议使用PostgreSQL作为数据库，需要安装PostgreSQL：\n\n```shell\n$ sudo apt-get install postgresql libpq-dev\n```\n\n还有一些可选插件或Python库，以实现特定的功能：\n\n- Pydeep - pydeep\n- KVM - KVM\n- XenServer - XenAPI\n- mitm - mitmproxy\n\n#### 基于Mac OS X\n\n这与基于Ubuntu/Debian的安装与配置过程基本相同，只是在当前环境中将使用brew包管理工具来安装所需的依赖：\n\n```shell\n$ brew install libmagic cairo pango openssl\n```\n\n此外，如果希望在GCC/Clang包含目录中公开openssl头文件，从而使得yara-python能够成功编译，可以按以下步骤操作：\n\n```shell\n$ cd /usr/local/include\n$ ln -s ../opt/openssl/include/openssl\n```\n\n### 2.1.2 虚拟化软件\n\nBold-Falcon支持大多数虚拟化软件解决方案，并已经尽可能地保持模块化。这使得沙箱在丢失与软件集成的情况下，仍然可以被很容易地添加。在本文档中我们默认安装VirtualBox，使用以下命令可以在Ubuntu LTS上安装最新版本的VirtualBox：\n\n```shell\n$ echo deb http://download.virtualbox.org/virtualbox/debian xenial contrib | sudo tee -a /etc/apt/sources.list.d/virtualbox.list\n$ wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key add -\n$ sudo apt-get update\n$ sudo apt-get install virtualbox-5.2\n```\n\n### 2.1.3 工具安装\n\n#### Tcpdump安装\n\n为了转储恶意软件在执行过程中进行的网络活动，需要安装网络嗅探器tcpdump，该嗅探器经过适当配置可以捕获流量并将其转储到一个文件中。在Ubuntu上安装tcpdump的命令如下：\n\n```shell\n$ sudo apt-get install tcpdump apparmor-utils\n$ sudo aa-disable /usr/sbin/tcpdump\n```\n\n必须将特定的Linux capabilities设置为二进制，以保证tcpdump无法以root权限运行。建议在允许tcpdump运行的专用系统或可信环境中运行Bold-Falcon.\n\n```shell\n$ sudo groupadd pcap\n$ sudo usermod -a -G pcap cuckoo\n$ sudo chgrp pcap /usr/sbin/tcpdump\n$ sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump\n```\n\n#### Volatility安装\n\nVolatility是对内存转储进行取证分析的可选工具。通过与沙箱结合，它可以自动提供额外的可见信息，帮助使用者深入操作系统，并检测rootkit技术的存在。为了保证Bold-Falcon的正常工作，Volatility的版本至少应为2.3，建议使用最新版本，可以从[Volatility官方仓库](https://github.com/volatilityfoundation)下载。\n\n#### M2Crypto安装\n\n目前只有在安装了SWIG之后才能够支持M2Crypto库。在诸如Ubuntu/Debian的系统上，安装命令如下：\n\n```shell\n$ sudo apt-get install swig\n$ sudo pip install m2crypto==0.24.0\n```\n\n#### guacd安装\n\nguacd是一个可选的能够为前端web界面中的远程控制功能提供RDP、VNC和SSH的转换层服务。为了保证远程控制功能正常使用，guacd的版本至少应为0.9.9，建议使用最新版本。在Ubuntu 17.04系统上，安装0.9.9-2版本的命令如下：\n\n```shell\n$ sudo apt install libguac-client-rdp0 libguac-client-vnc0 libguac-client-ssh0 guacd\n```\n\n如果只需要RDP支持，可以跳过libguac-client-vnc0和libguac-client-ssh0包的安装。如果只想使用最新版本，则可以通过以下命令从源代码生成最新版本（0.9.14）：\n\n```shell\n$ sudo apt -y install libcairo2-dev libjpeg-turbo8-dev libpng-dev libossp-uuid-dev libfreerdp-dev\n$ mkdir /tmp/guac-build && cd /tmp/guac-build\n$ wget https://www.apache.org/dist/guacamole/0.9.14/source/guacamole-server-0.9.14. tar.gz\n$ tar xvf guacamole-server-0.9.14.tar.gz && cd guacamole-server-0.9.14\n$ ./configure --with-init-dir=/etc/init.d\n$ make && sudo make install && cd ..\n$ sudo ldconfig\n$ sudo /etc/init.d/guacd start\n```\n\n从源代码安装时，需确保没有从包管理器安装任何libguac库的其他版本，否则可能会遇到由于版本不兼容而导致guacd奔溃的问题。\n\n此外，还必须安装VituralBox扩展包，以利用Guacamole公开的沙箱控制功能。\n\n### 2.1.4 Bold-Falcon安装\n\n下载源码可以通过如下两种方式：\n\n```shell\n$ git clone https://github.com/PowerLZY/Bold-Falcon\n```\n\n```shell\npip install Bold-Falcon\n```\n\n首先升级pip和setuptools库，然后安装最新版本的Bold-Falcon，推荐在虚拟环境中执行安装过程。原因有以下几点：\n\n- Bold-Falcon的依赖项可能不完全是最新的，而是固定到已知的能够支持正常运行的版本\n- 源代码不兼容请[Issues](https://github.com/PowerLZY/Bold-Falcon/issues)\n\n```shell\n$ virtualenv venv\n$ . venv/bin/activate\n(venv)$ pip install -U pip setuptools\n(venv)$ pip install -U Bold-Falcon\n```\n\n### 2.1.5 工作目录（CWD）\n\n所有可配置组件、生成的数据和分析的结果都存储在此目录中。这些文件包括但不仅限于以下内容：\n\n- 配置\n- 签名\n- 分析组件\n- 代理\n- Yara规则\n- 分析结果存储文件\n- ......\n\n所有配置文件都可以在`$CWD/conf`目录中找到。主要的配置文件如下：\n\n- cuckoo.conf：用于配置常规行为和分析选项\n- auxiliary.conf：用于启用和配置辅助模块\n- machinery.conf：用于定义虚拟化软件的选项\n- processing.conf：用于启用和配置处理模块\n- detection.conf: 用于启用和配置机器学习模块\n- reporting.conf：用于启用或禁用报告格式\n\n## 2.2 准备客户机\n\n首先要在``Ubuntu``的``vitrualbox``中创建一个虚拟机，设定为``windows 7 64``位操作系统。\n\n### 2.2.1 关闭防火墙、自动更新、UAC\n\n+ [关闭防火墙](https://jingyan.baidu.com/article/dca1fa6f0953bbf1a44052d7.html)\n+ [关闭自动更新](https://jingyan.baidu.com/article/03b2f78c4ce2ad5ea337ae5b.html)\n+ [关闭UAC](http://www.win7zhijia.cn/jiaocheng/win7_26850.html)\n\n### 2.2.2 安装PIL\n\n``PIL``用于截屏，``cuckoo``生成报告中会有``windows 7``的截图。\n首先进到``C:\\Python27\\Scripts``路径下，在此路径下安装``pillow``。\n\n    >cd C:\\Python27\\Scripts\n    >pip install Pillow\n    Collecting Pillow\n    Downloading Pillow-4.3.0-cp27-cp27m-win32.whl (1.3MB\n      100% |################################| 1.3MB 114k\n    Collecting olefile (from Pillow)\n    Downloading olefile-0.44.zip (74kB)\n      100% |################################| 81kB 145kB\n    Installing collected packages: olefile, Pillow\n    Running setup.py install for olefile ... done\n    Successfully installed Pillow-4.3.0 olefile-0.44\n\n### 2.2.3 agent.py设置开机自启动\n\n前面主机中找到的``agent.py``文件上传到``windows 7``中，建议用``send anywhere``比较快速。把上传成功的``agent.py``文件放进``C:\\Users[USER]\\AppData\\Roaming\\MicroSoft\\Windows\\Start Menu\\Programs\\Startup\\ ``下，并把后缀名改为``.pyw``。其中``users``是指用户名。\n\n### 2.2.4 配置系统开机自动登录\n\n使用``Administrator``权限启动``cmd``,并依序在cmd中输入以下指令\n``[USERNAME]``和``[PASSWORD]``需替换为登入的``Windows user``与对应的``password``\n\n    >reg add \"hklm\\software\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon\" /v DefaultUserName /d [USERNAME] /t REG_SZ /f\n    >reg add \"hklm\\software\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon\" /v DefaultPassword /d [PASSWORD] /t REG_SZ /f\n    >reg add \"hklm\\software\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon\" /v AutoAdminLogon /d 1 /t REG_SZ /f\n    >reg add \"hklm\\system\\CurrentControlSet\\Control\\TerminalServer\" /v AllowRemoteRPC /d 0x01 /t REG_DWORD /f\n    >reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\" /v    LocalAccountTokenFilterPolicy /d 0x01 /t REG_DWORD /f\n\n### 2.2.5 配置连接网络\n\n在``virtualbox``中添加一块网卡，管理——主机网络管理器，按照下面信息进行设置。\n\n<img src=\"https://user-images.githubusercontent.com/16918550/124224460-43f95f80-db38-11eb-8a0b-f365f4f00b50.png\"  alt=\"网卡配置\" style=\"zoom:67%;\"/>\n\n设置windows 7网络，设置为Host-Only。界面名称为刚刚设置的网卡。\n\n<img src=\"https://user-images.githubusercontent.com/16918550/124224491-51164e80-db38-11eb-9348-66ac2cb4c6c7.png\"  alt=\"网卡配置\" style=\"zoom:67%;\"/>\n\n进入Windows 7 系统，设置win7 ip网络\n\n<img src=\"https://user-images.githubusercontent.com/16918550/124224523-5c697a00-db38-11eb-93fb-a5b48d6577d5.png\"  alt=\"网卡配置\" style=\"zoom:67%;\"/>\n\n检查是否配置成功，主机和客机是否能通信。\n主机中操作：\n\n    $ ping 192.168.56.101\n\n客机中操作：\n\n    >ping 192.168.56.1\n\n设置``IP``报文转发\n\n这是在``Ubuntu``中的操作，因为``win7``无法上网，所以要通过主机才能访问网络，所以需要以下操作：\n\n流量转发服务：\n\n    $ sudo vim /etc/sysctl.conf\n    net.ipv4.ip_forward=1\n    sudo sysctl -p /etc/systl.conf\n\n使用``iptables``提供``NAT``机制\n注意：其中``eth0``为``Ubuntu``中的网卡名称，需要提前查看自己``Ubuntu``中的网卡名称然后修改``eth0``\n\n    $ sudo iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT\n    $ sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT\n    $ sudo iptables -A POSTROUTING -t nat -j MASQUERADE\n    $ sudo vim /etc/network/interfaces\n    #文件最终新增下面两行\n    pre-up iptables-restore < /etc/iptables.rules \n    post-down iptables-save > /etc/iptables.rules\n\n执行：\n\n    sudo apt-get install iptables=persistent\n    sudo netfilter-persistent save\n\n``DNS``服务\n\n    $ sudo apt-get install -y dnsmasq\n    $ sudo service dnsmasq start\n\n在``win7``中查看是否有网络：\n\n    ping www.baidu.com\n\n### 2.2.6 快照\n\n要保证``agent.py``文件时运行状态，可以在``cmd``控制台启动，成功后对``win7``进行快照名字取为``snapshot``。\n\n### 2.2.7 设置Bold-Falcon配置文件\n\n配置``virtualbox.conf``：\n\n    $ vim virtualbox.conf\n    machines = cuckoo1 # 指定VirtualBox中Geust OS的虛擬機名稱\n    [cuckoo1] # 對應machines\n    label = cuckoo1  .\n    platform = windows\n    ip = 192.168.56.101 # 指定VirtualBox中Geust OS的IP位置\n    snapshot =snapshot\n\n配置``reporting.conf``：\n\n    $ vim reporting.conf\n    [jsondump]\n    enabled = yes # no -> yes\n    indent = 4\n    calls = yes\n    [singlefile]\n    # Enable creation of report.html and/or report.pdf?\n    enabled = yes # no -> yes\n    # Enable creation of report.html?\n    html = yes # no -> yes\n    # Enable creation of report.pdf?\n    pdf = yes # no -> yes\n    [mongodb]\n    enabled = yes # no -> yes\n    host = 127.0.0.1\n    port = 27017\n    db = cuckoo\n    store_memdump = yes \n    paginate = 100\n\n配置``cuckoo.conf``：\n\n    version_check = no\n    machinery = virtualbox\n    memory_dump = yes\n    [resultserver]\n    ip = 192.168.56.1\n    port = 2042\n"
  },
  {
    "path": "docs/book/Introduction.md",
    "content": "---\nsort: 1\n\n---\n\n# 说明\n\n## 1.1 背景介绍\n\n### 1.1.1 恶意软件\n\n恶意软件是指为达成某种恶意目的而编写的可执行程序，包括病毒、蠕虫和特洛伊木马。其中勒索软件给社会造成了严重影响，勒索软件主要采用邮件钓鱼、账号爆破和漏洞利用等方式攻击企业、政府和教育等中大型政企机构，从中牟取暴利。同时，恶意软件的数量也在逐年增加，如2020年，[安全社区]( https://www.av-test.org/en/statistics/malware)已知的恶意可执行软件的数量已经超过11亿，而且这个数字可能还会持续增长。造成恶意软件数量增加的原因有以下三点：\n\n1.  随着网络技术的高速发展，恶意软件的传播途径也越来越多，如下载盗版电影、搜索热话题和安装来路不明的防病毒软件等。\n2.  自动化恶意软件生成工具的滥用导致恶意软件变体数量的增多。\n3.  恶意软件犯罪团伙逐渐形成规模化的商业运行，形成新的恶意软件合作生态。\n\n **目前恶意软件检测方法对比如下：**\n\n<img src=\"../pics/机器学习方法.png\" alt=\"机器学习方法\" style=\"zoom:80%;\" />\n\n\n### 1.1.2 恶意软件造成的财富损失\n\n尽管勒索软件约占恶意软件总事件的3%,，但相比其他恶意软件破坏力更大，一旦遭遇勒索，企业将面临业务中断、高额赎金的风险。根据 Coveware 的数据显示，与 2019 年相比，2020 年第二季度的赎金要求同比增加了 4 倍。\n\n<img src=\"../pics/财务损失.png\" alt=\"财务损失\" style=\"zoom:67%;\" />\n\n\n### 1.1.3 沙箱\n\n#### 沙箱的介绍     \n\n沙箱（**sandbox**）在计算机领域指一种虚拟技术，且多用于计算机安全技术。安全软件可以先让它在沙盒中运行。沙箱中的所有改动对操作系统不会造成任何损失。通常这种技术被计算机技术人员广泛使用，尤其是计算机反病毒行业，沙箱是一个观察计算机病毒的重要环境。影子系统即是利用了这种技术的软件之一。沙箱早期主要用于测试可疑软件等，比如黑客们为了试用某种病毒或者不安全产品，往往可以将它们在沙箱环境中运行。经典的沙箱系统的实现途径一般是通过拦截系统调用，监视程序行为，然后依据用户定义的策略来控制和限制程序对计算机资源的使用，比如改写注册表，读写磁盘等。\n\n#### 沙箱的工作原理\n\n沙箱的工作原理为通过重定向技术，把程序生成和修改的文件，定向到本身的文件夹中。这也包括数据的变更，包括注册表和一些系统的核心数据。通过加载自身的驱动来保护底层数据，属于驱动级别的保护。如果我们用沙箱来测试病毒的，在里面运行病毒可以说也是安全操作。所以，绝大多数的病毒软件都有沙箱的功能。\n\n### 1.1.4 沙箱深度调研对\n\n国内外基于机器学习安全产品现在如下：\n\n<img src=\"../pics/沙箱调研.jpg\" alt=\"沙箱调研\" style=\"zoom:60%;\" />\n\n## 1.2 内容设计\n\n### 1.2.1 核心组成部分\n\n- 主机（一台）：系统的核心服务器端，运行着云沙箱的核心组件，负责恶意软件分析任务的启动和分析结果报告的生成，同时负责管理多个客户机。\n\n- 客户机（若干）：多个独立的隔离环境（即多台虚拟机），负责提供虚拟环境供恶意软件样本运行，同时检测目标样本的运行情况，并将检测到的数据反馈给主机。\n\n### 1.2.2 系统架构图\n\n主机和客户机之间通过虚拟网络连接，多个客户机与主机共同组成一个局域网\n\n<img src=\"../pics/系统架构.jpg\" alt=\"系统架构\" style=\"zoom:67%;\" />\n\n### 1.2.3 系统部署环境\n\n\n| 名称       | 版本                  |\n| ---------- | --------------------- |\n| **主机**   | 16.04                 |\n| **客户机** | Windows XP（32-bits） |\n| **Django** | 1.8.4                 |\n| **Python** | 2.7                   |\n| ...        | ...                   |\n\n### 1.2.4 工作目录\n\n工作目录`CWD（Contain Working Directory)`存放程序所有使用的文件（代理、分析脚本、配置文件、日志、注入程序、签名、结果目录、Web设置、白名单、Yara规则和MongoDB数据库等），其CWD内容如下：\n\n```python\n- agent代理文件\n  - agent.py \n- analyzer文件分析脚本\n\t- windows \n\t- android (可扩展)\n\t- linux (可扩展)\n- conf配置文件\n  - auxiliary.conf 辅助模块\n  - cuckoo.conf 沙箱主机\n\t- processing.conf 结果处理模块\n\t- detection.conf 机器学习模块\n\t- reporting.conf 报告生成模块\n\t- virualbox.conf 虚拟机管理软件\n- log 日志\n- monitor 进程注入的DLL\n- signatures 签名\n- models 模型\n\t- 静态特征\n\t\t- string.model\n\t\t- malconv.model\n\t- 动态特征\n\t\t- apistats.model\n- storage\n\t- analyses\n\t\t- task_id 结果目录\n\t\t\t- 结果容器\n\t\t\t- report\n- web 前端配置文件\n- whitelist 白名单\n- yara yara规则\n- cuckoo.db 数据库\n```\n\n\n### 1.2.5 功能列表\n\n#### **文件对象**\n\n<img src=\"../pics/文件对象.png\" alt=\"image\" style=\"zoom:50%;\" />\n\n#### **数据集描述**\n\n**1）[Microsoft Malware - Kaggle](https://www.kaggle.com/c/malware-classification/data)**\n\n- **数据说明**：本数据集提供了一组已知的恶意代码文件，它们代表9个不同的家族。每个恶意代码文件都有一个 Id（唯一标识文件的散列值）和一个类别标记（恶意代码可能属于的9个家族之一）。\n- **数据类型**：对于每个恶意代码文件，分别存在两种格式\n  - 原始数据文件（.bytes），包含文件二进制内容的十六进制表示，没有PE头（以确保不可执行）\n  - 元数据清单日志（.asm），包含从二进制文件中提取的各种元数据信息，如函数调用、字符串等\n- **数据分布**\n\n```mermaid\npie\n\ntitle Microsoft Malware - 10868 entries\n  \n\"Ramnit\": 1541\n\"Lollipop\": 2478\n\"Kelihos_ver3\": 2942\n\"Vundo\": 475\n\"Simda\": 42\n\"Tracur\": 751\n\"Kelihos_ver1\": 398\n\"Obfuscator.ACY\": 1228\n\"Gatak\": 1013\n```\n\n**2）[Mining Malware - Datacon](https://datacon.qianxin.com/opendata/maliciouscode)**\n\n- **数据说明**：本数据集来自每天从现网捕获的大量挖矿型恶意代码和非挖矿型恶意代码，经过数据清洗、代码相似性分析等方法对样本进行处理，并已抹去样本PE结构中的MZ头、PE头、导入导出表等区域。\n\n- **数据类型**：对于每个恶意代码，提供包含文件二进制内容的原始数据文件\n\n- **数据分布**\n\n  ```mermaid\n  pie\n  \n  title Mining Malware - 6000 entries\n    \n  \"Mining\": 2000\n  \"Non-mining\": 4000\n  ```\n\n\n\n#### 检测信息\n\n**1）辅助信息**\n\n| 辅助模块名称 | 辅助模块功能                                          |\n| ------------ | :---------------------------------------------------- |\n| **sniffer**  | 负责执行tcpdump以转储沙箱样本分析过程中生成的网络流量 |\n\n**2）结果信息**\n\n| 处理模块名称         | 处理木模块功能                                               |\n| -------------------- | ------------------------------------------------------------ |\n| **Analysisinfo**     | 生成当前分析的一些基本信息，例如时间戳、沙箱的版本等         |\n| **BehaviorAnalysis** | 解析原始行为日志并执行一些初始转换和解释，包括完整的流程跟踪、行为摘要和流程树 |\n| **Buffer**           | 丢弃缓冲区分析                                               |\n| **Debug**            | 包括错误和analysis.log由文本分析模块生成                     |\n| **Dropped**          | 恶意软件丢弃文件的信息                                       |\n| **Memory**           | 在内存上执行 Volatility 工具                                 |\n| **NetworkAnalysis**  | 解析PCAP文件并提取一些网络信息，例如DNS流量、域、ip、HTTP请求、IRC和SMTP流量 |\n| **Screenshots**      | 屏幕截图                                                     |\n| **StaticAnalysis**   | 对文件执行一些静态分析                                       |\n| **String**           | 从分析的二进制文件中提取字符串                               |\n| **TargetInfo**       | 包括有关分析文件的信息，如哈希，ssdeep等                     |\n| **VirusTotal**       | 搜索VirusTotal.com分析文件的防病毒签名                       |\n\n#### **核心检测方法**\n\n**1）签名检测（500+开源签名）**\n\n| 签名名称               | 签名描述                                   |\n| ---------------------- | ------------------------------------------ |\n| **antidbg_windows**    | 检查是否存在来自调试器和取证工具的已知窗口 |\n| **generic_metrics**    | 使用GetSystem                              |\n| **modifies_wallpaper** | 尝试修改桌面墙纸                           |\n| **...**                | ...                                        |\n\n**2）Yara匹配**\n\n| 类型          | 内容                 |\n| ------------- | -------------------- |\n| **braries**   | 恶意软件类yara规则   |\n| **office**    | office文档类yara规则 |\n| **scripts**   | scripts类yara规则    |\n| **shellcode** | shellcode类yara规则  |\n| **urls**      | url类yara规则        |\n| **Packers**   | 加壳类yara规则       |\n| **...**       | ...                  |\n\n**3）基于机器学习的恶意软件模型**\n\n| 名称         | 类型     | 特征        | 算法模型            |\n| ------------ | -------- | ----------- | ------------------- |\n| **Malconv**  | 静态分析 | 字节序列    | Malconv卷积神经网络 |\n| **String**   | 静态分析 | 字符串序列  | XGBoost集成学习模型 |\n| **API_gram** | 动态分析 | API调用序列 | XGBoost集成学习模型 |\n\n### 1.2.6 功能模块组成\n\n| 模块名称     | 模块功能                                                     |\n| ------------ | ------------------------------------------------------------ |\n| **辅助功能** | 定义了一些需要与每个分析过程并行执行的功能                   |\n| **机器交互** | 定义了与虚拟化软件的交互过程                                 |\n| **文件分析** | 定义了在客户机环境中执行并分析给定的文件的过程               |\n| **结果处理** | 定义了处理生成的原始分析结果的方法，并将一些信息附加到一个全局结果容器中 |\n| **家族签名** | 定义了一些特定的“签名”，用于表示特定的恶意行为模式或特征指标 |\n| **机器学习** | 定义了一些基于机器学习的恶意软件检测模型,生成检测结果        |\n| **报告生成** | 定义了将全局结果容器保存格式，并存储到数据库中               |\n| **用户交互** | 定义了用户的提交样本和样本报告显示形式                       |\n\n### 1.2.7 沙箱运行流程\n\n![沙箱运行流程](../pics/沙箱运行流程.png)\n\n## 1.3 功能全景图\n\n核心函数调用流程如下所示：\n\n`高清图下载`\n\n```url\nhttps://pan.baidu.com/s/1VH9RjcjwDEDqnus6lm5hlQ 提取码: s2xb \n```\n\n\n\n![合并图](../pics/合并图.png)\n\n## 1.4 界面设计\n\n`毕方智能云沙箱`名字来源：`Bold-Falcon`译为无畏的雄鹰，其中取首字母`毕方`为山海经神鸟之一。\n\n### 1.4.1 沙箱提交界面\n\n![沙箱提交界面](../pics/界面/沙箱提交界面.png)\n\n### 1.4.2 样本分析界面\n\n**（1）摘要分析报告**\n\n![样本分析界面1](../pics/界面/样本分析界面1.png)\n\n**（2）静态分析报告**\n\n![静态分析结果](../pics/界面/静态分析结果.png)\n\n**（3）动态分析报告**\n\n![动态分析界面](../pics/界面/动态分析界面.png)\n\n**（4）流量分析报告**\n\n![流量分析界面](../pics/界面/流量分析界面.png)\n\n### 1.4.3 历史报告查询\n\n![image-20210713232137555](../pics/历史任务.png)\n\n### 1.4.4 分析结果下载\n\n![导出分析结果界面](../pics/界面/导出分析结果界面.png)\n"
  },
  {
    "path": "docs/book/README.md",
    "content": "---\nsort: 1\n---\n\n# 中文文档\n\n{% include list.liquid %}\n"
  },
  {
    "path": "docs/book/Usage.md",
    "content": "---\nsort: 3\n\n\n\n---\n\n# 使用\n\n这部分解释如何使用Bold-Falcon沙箱。\n\n## 3.1 启动沙箱\n\n使用如下命令启动 Bold-Falcon沙箱：\n\n```shell\n$ cuckoo\n```\n\n你会得到如下类似的输出：\n\n```shell\n     ____        _     _       _____     _                 \n    | __ )  ___ | | __| |     |  ___|_ _| | ___ ___  _ __  \n    |  _ \\ / _ \\| |/ _` |_____| |_ / _` | |/ __/ _ \\| '_ \\ \n    | |_) | (_) | | (_| |_____|  _| (_| | | (_| (_) | | | |\n    |____/ \\___/|_|\\__,_|     |_|  \\__,_|_|\\___\\___/|_| |_|\n    \n\n Bold-Falcon Sandbox 2.0-dev\n https://github.com/PowerLZY/Bold-Falcon\n Copyright (c) 2020-2021\n\n2021-07-12 21:58:45,841 [lib.cuckoo.core.resultserver] WARNING: Cannot bind ResultServer on port 2042, trying another port.\n2021-07-12 21:58:45,843 [lib.cuckoo.core.scheduler] INFO: Using \"virtualbox\" as machine manager\n2021-07-12 21:58:47,256 [lib.cuckoo.core.scheduler] INFO: Loaded 1 machine/s\n2021-07-12 21:58:47,270 [lib.cuckoo.core.scheduler] INFO: Waiting for analysis tasks.\n```\n\n你可以使用一些命令行选项，比如`cuckoo --help`\n\n```shell\n$ cuckoo --help\nusage: cuckoo.py [-h] [-q] [-d] [-v] [-a] [-t] [-m MAX_ANALYSIS_COUNT]\n                 [-u USER] [--ml] [--clean]\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -q, --quiet           Display only error messages\n  -d, --debug           Display debug messages\n  -v, --version         show program's version number and exit\n  -a, --artwork         Show artwork\n  -t, --test            Test startup\n  -m MAX_ANALYSIS_COUNT, --max-analysis-count MAX_ANALYSIS_COUNT\n                        Maximum number of analyses\n  -u USER, --user USER  Drop user privileges to this user\n  --ml                  CuckooML: cluster reports and compare new samples\n  --clean               Remove all tasks and samples and their associated data\n\n```\n\n## 3.2 样本提交\n\nBold-Falcon沙箱有`Django Web`、`Submit`and`API`三种分析样本的方法。\n\n### 3.2.1 Django Web\n\nBold-Falcon以Django应用程序的形式提供了一个完整的web界面。此界面将允许您提交文件、浏览报告以及统计所有分析结果。\n\n#### 配置\n\nWeb界面从`Mongo`数据库中提取数据，因此在`reporting`模块中启用了`Mongo` 模块。配置文件是Web界面运行所必需的。`Bold-Falcon/web/local_settings.py`配置文件中存在一些其他配置选项。\n\n#### 启动Web界面\n\n要启动web界面，只需从`Bold-Falcon/web`目录运行以下命令：\n\n```shell\n$  manage.py \n```\n\n如果要将web界面配置为侦听指定端口上的任何IP，可以使用以下命令启动它（用所需的端口号替换端口）：\n\n```shell\n$  manage.py 0.0.0.0:PORT\n```\n\n### 3.2.2 Submit脚本\n\n提交分析的最简单方法是在`utils\\submit.py` 使用`Bold-Falcon submit`实用程序。它目前有以下可用选项：\n\n```shell\n$  submit --help\nusage: submit.py [-h] [-d] [--remote REMOTE] [--url] [--package PACKAGE]\n                 [--custom CUSTOM] [--owner OWNER] [--timeout TIMEOUT]\n                 [-o OPTIONS] [--priority PRIORITY] [--machine MACHINE]\n                 [--platform PLATFORM] [--memory] [--enforce-timeout]\n                 [--clock CLOCK] [--tags TAGS] [--baseline] [--max MAX]\n                 [--pattern PATTERN] [--shuffle] [--unique] [--quiet]\n                 [target]\n\npositional arguments:\n  target                URL, path to the file or folder to analyze\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -d, --debug           Enable debug logging\n  --remote REMOTE       Specify IP:port to a Cuckoo API server to submit\n                        remotely\n  --url                 Specify whether the target is an URL\n  --package PACKAGE     Specify an analysis package\n  --custom CUSTOM       Specify any custom value\n  --owner OWNER         Specify the task owner\n  --timeout TIMEOUT     Specify an analysis timeout\n  -o OPTIONS, --options OPTIONS\n                        Specify options for the analysis package (e.g.\n                        \"name=value,name2=value2\")\n  --priority PRIORITY   Specify a priority for the analysis represented by an\n                        integer\n  --machine MACHINE     Specify the identifier of a machine you want to use\n  --platform PLATFORM   Specify the operating system platform you want to use\n                        (windows/darwin/linux)\n  --memory              Enable to take a memory dump of the analysis machine\n  --enforce-timeout     Enable to force the analysis to run for the full\n                        timeout period\n  --clock CLOCK         Set virtual machine clock\n  --tags TAGS           Specify tags identifier of a machine you want to use\n  --baseline            Run a baseline analysis\n  --max MAX             Maximum samples to add in a row\n  --pattern PATTERN     Pattern of files to submit\n  --shuffle             Shuffle samples before submitting them\n  --unique              Only submit new samples, ignore duplicates\n  --quiet               Only print text on failure\n```\n\n**以下是一些用法示例：**\n\n(1) 提交一个本地文件\n\n```shell\n$  submit /path/to/binary\n```\n\n(2) 提交一个本地文件并明确优先级\n\n```shell\n$  submit --priority 5 /path/to/binary\n```\n\n(3) 提交一个本地文件并明确分析60s\n\n```shell\n$  submit --timeout 60 /path/to/binary\n```\n\n### 3.2.3 API访问\n\n正如提交分析中所提到的，Bold-Falcon沙箱兼容cuckoo沙箱提供了一个简单而轻量级的restapi服务器，它是使用Flask实现的。\n\n#### 开启API服务器\n\n在`Bold-Falcon\\utils`使用如下命令启动 API服务：\n\n```shell\n$  api\n$  * Running on http://localhost:8090/ (Press CTRL+C to quit)\n```\n\n默认情况下，它绑定的服务是`localhost:8090`, 如果你想要的去改变这些值，可以使用如下语法：\n\n```shell\n$  cuckoo api --host 0.0.0.0 --port 1337\n$  cuckoo api -H 0.0.0.0 -p 1337\n```\n\n使用API需要进行身份验证，必须将``cuckoo.conf``的``api_token``的值填充在``Authorization: Bearer <token>``中。\n\n#### 资源\n\n以下是当前可用资源的列表以及每个资源的简要说明。有关详细信息，请单击资源名称。\n\n| 访问方式                    | 描述                                          |\n| --------------------------- | --------------------------------------------- |\n| `POST /tasks/create/file`   | 将文件添加到待处理任务列表中并分析            |\n| `POST /tasks/create/url`    | 将URL添加到待处理任务列表中并分析             |\n| `POST /tasks/create/submit` | 将一个或多个文件添加到待分析的任务列表中      |\n| `GET /tasks/list`           | 返回一个存储在内部Bold-Falcon数据库的任务列表 |\n| `GET /tasks/sample`         | 返回一个存储在内部Bold-Falcon数据库的样本列表 |\n| `GET /tasks/view`           | 返回一个对应ID的任务信息                      |\n| `GET /tasks/delete`         | 删除一个数据库中的任务信息                    |\n| `GET /tasks/report`         | 返回一个对应ID任务生成的json报告              |\n| `GET /tasks/summary`        | 返回一个对应ID任务生成的摘要json报告          |\n| `GET /tasks/screenshots`    | 返回一个对应ID任务生成的所有截图文件          |\n| `GET /files/view`           | 返回一个对应ID的MD5、SHA256等标识             |\n| `GET /files/get`            | 返回二进制样本内容和对应SHA256                |\n| `GET /pcap/get`             | 返回相关任务的PCAP网络流量包                  |\n| `GET  /machines/list`       | 返回目前Bold-Falcon依赖的虚拟机列表           |\n| `GET /cuckoo/status`        | 返回目前Bold-Falcon的版本和状态               |\n| `GET /exit`                 | 关闭API服务器                                 |\n\n**以下是一些用法示例：**                                                       \n\n**（1）POST /tasks/create/file**\n\n将文件添加到待处理任务列表中并分析\n\n**请求示例**:\n\n```shell\ncurl -H \"Authorization: Bearer S4MPL3\" -F file=@/path/to/file http://localhost:8090/tasks/create/file\n```\n\n**使用Python的请求示例**\n\n\n```python\nimport requests\n\nREST_URL = \"http://localhost:8090/tasks/create/file\"\nSAMPLE_FILE = \"/path/to/malwr.exe\"\nHEADERS = {\"Authorization\": \"Bearer S4MPL3\"}\n\nwith open(SAMPLE_FILE, \"rb\") as sample:\n    files = {\"file\": (\"temp_file_name\", sample)}\n    r = requests.post(REST_URL, headers=HEADERS, files=files)\n\n# Add your code to error checking for r.status_code.\n\ntask_id = r.json()[\"task_id\"]\n\n# Add your code for error checking if task_id is None.\n```\n\n**响应示例**\n\n```json\n{\n    \"task_id\" : 1\n}\n```\n\n**（2）POST /tasks/create/url**\n\n将URL添加到待处理任务列表中并分析\n\n**请求示例**\n\n\n```shell\ncurl -H \"Authorization: Bearer S4MPL3\" -F url=\"http://www.malicious.site\" http://localhost:8090/tasks/create/url\n```\n\n**使用Python的请求示例**\n\n```python\nimport requests\n\nREST_URL = \"http://localhost:8090/tasks/create/url\"\nSAMPLE_URL = \"http://example.org/malwr.exe\"\nHEADERS = {\"Authorization\": \"Bearer S4MPL3\"}\n\ndata = {\"url\": SAMPLE_URL}\nr = requests.post(REST_URL, headers=HEADERS, data=data)\n\n# Add your code to error checking for r.status_code.\n\ntask_id = r.json()[\"task_id\"]\n\n# Add your code to error checking if task_id is None.\n```\n\n**（3）POST /tasks/create/submit**\n\n将一个或多个文件添加到待分析的任务列表中\n\n**请求示例**\n\n\n```shell\n# Submit two executables.\ncurl -H \"Authorization: Bearer S4MPL3\" http://localhost:8090/tasks/create/submit -F files=@1.exe -F files=@2.exe\n\n# Submit http://google.com\ncurl -H \"Authorization: Bearer S4MPL3\" http://localhost:8090/tasks/create/submit -F strings=google.com\n\n# Submit http://google.com & http://facebook.com\ncurl -H \"Authorization: Bearer S4MPL3\" http://localhost:8090/tasks/create/submit -F strings=$'google.com\\nfacebook.com'\n```\n\n**使用Python的请求示例**\n\n\n```python\nimport requests\n\nHEADERS = {\"Authorization\": \"Bearer S4MPL3\"}\n\n# Submit one or more files.\nr = requests.post(\"http://localhost:8090/tasks/create/submit\", files=[\n    (\"files\", open(\"1.exe\", \"rb\")),\n    (\"files\", open(\"2.exe\", \"rb\")),\n], headers=HEADERS)\n\n# Add your code to error checking for r.status_code.\n\nsubmit_id = r.json()[\"submit_id\"]\ntask_ids = r.json()[\"task_ids\"]\nerrors = r.json()[\"errors\"]\n\n# Add your code to error checking on \"errors\".\n\n# Submit one or more URLs or hashes.\nurls = [\n    \"google.com\", \"facebook.com\", \"cuckoosandbox.org\",\n]\nr = requests.post(\n    \"http://localhost:8090/tasks/create/submit\",\n    headers=HEADERS,\n    data={\"strings\": \"\\n\".join(urls)}\n)\n```\n\n**响应事例**\n\n\n```json\n{\n    \"submit_id\": 1,\n    \"task_ids\": [1, 2],\n    \"errors\": []\n}\n```\n\n**（4） GET /files/get/ *(str: sha256)***\n\n返回二进制样本内容和对应SHA256\n\n**请求示例**\n\n```shell\ncurl -H \"Authorization: Bearer S4MPL3\" http://localhost:8090/files/get/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 > sample.exe\n```\n\n**（5）GET /machines/list**\n\n\n返回目前Bold-Falcon依赖的虚拟机列表\n\n**请求示例**\n\n```shell\ncurl -H \"Authorization: Bearer S4MPL3\" http://localhost:8090/machines/list\n```\n\n**响应示例**\n\n```json\n{\n    \"machines\": [\n        {\n            \"status\": null,\n            \"locked\": false,\n            \"name\": \"cuckoo1\",\n            \"resultserver_ip\": \"192.168.56.1\",\n            \"ip\": \"192.168.56.101\",\n            \"tags\": [\n                        \"32bit\",\n                        \"acrobat_6\",\n                    ],\n            \"label\": \"cuckoo1\",\n            \"locked_changed_on\": null,\n            \"platform\": \"windows\",\n            \"snapshot\": null,\n            \"interface\": null,\n            \"status_changed_on\": null,\n            \"id\": 1,\n            \"resultserver_port\": \"2042\"\n        }\n    ]\n}\n```\n\n**（6）GET /exit**\n\n如果处于调试模式并使用werkzeug服务器，则关闭服务器。\n\n**请求示例**\n\n```shell\ncurl -H \"Authorization: Bearer S4MPL3\" http://localhost:8090/exit\n```\n\n## 3.3 社区\n\nBold-Falcon沙箱兼容Cuckoo沙箱的[开源社区](https://github.com/cuckoosandbox/community),它是一个致力于社区贡献的开放存储库。在这里，您可以提交为布谷鸟沙盒设置编写的自定义模块，并希望与社区的其他成员共享这些模块。其中包括代理agent、分析脚本analzyer和各种功能模块。\n\n如果想要从[开源社区](https://github.com/cuckoosandbox/community)下载对应数据到`Bold-Falcon\\data`下，可以使用`Bold-Falcon\\utils\\community`：\n\n```shell\n$  cummunity -h\nusage: community.py [-h] [-a] [-s] [-p] [-m] [-n] [-M] [-g] [-r] [-f] [-w]\n                    [-b BRANCH]\n                    [archive]\n\npositional arguments:\n  archive               Install a stored archive\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -a, --all             Download everything\n  -s, --signatures      Download Cuckoo signatures\n  -p, --processing      Download processing modules\n  -m, --machinery       Download machine managers\n  -n, --analyzer        Download analyzer modules\n  -M, --monitor         Download monitoring binaries\n  -g, --agent           Download agent modules\n  -r, --reporting       Download reporting modules\n  -f, --force           Install files without confirmation\n  -w, --rewrite         Rewrite existing files\n  -b BRANCH, --branch BRANCH\n```\n\n**例：重写所有开源数据到最新版**\n\n```shell\n$  cummunity -waf\n```\n\n## 3.4 分析样本获取\n\n### 3.4.1 样本分享\n\nBold-Falcon沙箱分享了200个已经分析完成的json报告在`百度云盘`如下链接：\n\n```html\nhttps://pan.baidu.com/s/19TRWbQSRWJHetUBpNtMj_w 提取码: r7gk \n```\n\nBold-Falcon沙箱分享了一些32bit的windows样本在`百度云盘`如下链接：\n\n```\nhttps://pan.baidu.com/s/1x6a9j7D7Ktp242fcJhT5aA 提取码: qxbp \n```\n\n### 3.4.2 开源样本\n\n如果你想要获取更多的`恶意样本`请访问查询：\n\n**推荐：**\n\n-   [Blue Hexagon Open Dataset for Malware AnalysiS (BODMAS)](https://whyisyoung.github.io/BODMAS/)\n-   [EMBER](https://github.com/elastic/ember) - Endgame Malware BEnchmark for Research\n-   [Malware Training Sets: A machine learning dataset for everyone](http://marcoramilli.blogspot.cz/2016/12/malware-training-sets-machine-learning.html) ([data](https://github.com/marcoramilli/MalwareTrainingSets))\n-   [SoReL-20M](https://github.com/sophos-ai/SOREL-20M) - Sophos-ReversingLabs 20 Million dataset.\n-   [Virusshare](https://virusshare.com/)\n\n**其他：**\n\n+   [Samples of Security Related Dats](http://www.secrepo.com/)\n+   [DARPA Intrusion Detection Data Sets](https://www.ll.mit.edu/ideval/data/)\n+   [Stratosphere IPS Data Sets](https://stratosphereips.org/category/dataset.html)\n+   [Open Data Sets](http://csr.lanl.gov/data/)\n+   [Data Capture from National Security Agency](http://www.westpoint.edu/crc/SitePages/DataSets.aspx)\n+   [The ADFA Intrusion Detection Data Sets](https://www.unsw.adfa.edu.au/australian-centre-for-cyber-security/cybersecurity/ADFA-IDS-Datasets)\n+   [NSL-KDD Data Sets](https://github.com/defcom17/NSL_KDD)\n+   [Malicious URLs Data Sets](https://sysnet.ucsd.edu/projects/url)\n+   [Multi-Source Cyber-Security Events](http://csr.lanl.gov/data/cyber1/)\n+   [Malware Training Sets: A machine learning dataset for everyone](http://marcoramilli.blogspot.cz/2016/12/malware-training-sets-machine-learning.html)\n\n如果你想要获取更多的`良性样本`请在如下等网络自行爬取：\n\n-   [portablefreeware](http://www.portablefreeware.com/)\n-   [onlyfreewares](http://www.onlyfreewares.com/)\n-   [snapfiles](https://www.snapfiles.com/new/list-whatsnew.html)\n-   [downloadcrew](https://downloadcrew.com/)\n\n"
  },
  {
    "path": "docs/book/设计文档.md",
    "content": "# \t\t\t\t\t\t\t\t\t   毕方智能云沙箱\n\n## 一、目标问题与意义价值\n\n### 1.1 恶意软件\n\n恶意软件是指为达成某种恶意目的而编写的可执行程序，包括病毒、蠕虫和特洛伊木马。其中勒索软件给社会造成了严重影响，勒索软件主要采用邮件钓鱼、账号爆破和漏洞利用等方式攻击企业、政府和教育等中大型政企机构，从中牟取暴利。同时，恶意软件的数量也在逐年增加，如2020年，[安全社区]( https://www.av-test.org/en/statistics/malware)已知的恶意可执行软件的数量已经超过11亿，而且这个数字可能还会持续增长。造成恶意软件数量增加的原因有以下三点：\n\n1.  随着网络技术的高速发展，恶意软件的传播途径也越来越多，如下载盗版电影、搜索热话题和安装来路不明的防病毒软件等。\n2.  自动化恶意软件生成工具的滥用导致恶意软件变体数量的增多。\n3.  恶意软件犯罪团伙逐渐形成规模化的商业运行，形成新的恶意软件合作生态。\n\n **目前恶意软件检测方法对比如下：**\n\n<img src=\"../pics/机器学习方法.png\" alt=\"机器学习方法\" style=\"zoom:80%;\" />\n\n\n### 1.2 恶意软件造成的财富损失\n\n随着全球信息化的飞速发展，整个国家和社会对网络的依赖程度也越来越大，网络已经成为社会和经济发展的强大推动力。其中网络面临的各种威胁，防范和消除这些威胁变的越来越重要。报告统计2022年国内网络安全市场规模预计达到759.27亿元。从2021开年到现在，已有近30家安全企业宣布完成融资，其中基于人工智能技术的新兴公司别受青睐，悬镜安全、墨云科技、微步在线、观安信息、数美科技等基于人工智能赋能安全领域的公司均融资逾亿元。其中微步在线专注于威胁情报领域，凭借其优秀的威胁分析能力和威胁情报数据能力融资5亿元。所以目前对于类似智能云沙箱的威胁分析平台需求极大，有很高的市场价值。       \n\n恶意软件的检测是威胁分析中的一个重要问题，尤其是随着社会越来越依赖于计算机系统。恶意软件的单一事件已经可以造成数百万美元的损失。反病毒产品提供了一些针对恶意软件的保护，但对这个问题越来越无效。沙箱作为重要的恶意软件分析工具使用基于签名的检测方法，其中签名根据大量专家经验来手动构建的规则使得传统沙箱无法识别未知的恶意软件。 \n\n尽管勒索软件约占恶意软件总事件的3%,，但相比其他恶意软件破坏力更大，一旦遭遇勒索，企业将面临业务中断、高额赎金的风险。根据 Coveware 的数据显示，与 2019 年相比，2020 年第二季度的赎金要求同比增加了 4 倍。\n\n<img src=\"../pics/财务损失.png\" alt=\"财务损失\" style=\"zoom:67%;\" />\n\n### 1.3 沙箱\n\n#### 沙箱的介绍     \n\n沙箱（**sandbox**）在计算机领域指一种虚拟技术，且多用于计算机安全技术。安全软件可以先让它在沙盒中运行。沙箱中的所有改动对操作系统不会造成任何损失。通常这种技术被计算机技术人员广泛使用，尤其是计算机反病毒行业，沙箱是一个观察计算机病毒的重要环境。影子系统即是利用了这种技术的软件之一。沙箱早期主要用于测试可疑软件等，比如黑客们为了试用某种病毒或者不安全产品，往往可以将它们在沙箱环境中运行。经典的沙箱系统的实现途径一般是通过拦截系统调用，监视程序行为，然后依据用户定义的策略来控制和限制程序对计算机资源的使用，比如改写注册表，读写磁盘等。\n\n#### 沙箱的工作原理\n\n沙箱的工作原理为通过重定向技术，把程序生成和修改的文件，定向到本身的文件夹中。这也包括数据的变更，包括注册表和一些系统的核心数据。通过加载自身的驱动来保护底层数据，属于驱动级别的保护。如果我们用沙箱来测试病毒的，在里面运行病毒可以说也是安全操作。所以，绝大多数的病毒软件都有沙箱的功能。\n\n### 1.4 沙箱深度调研对\n\n国内外基于机器学习安全产品现在如下：\n\n# <img src=\"../pics/沙箱调研.jpg\" alt=\"沙箱调研\" style=\"zoom:60%;\" />\n\n## 二、设计思路与方案\n\n*阐述作品解决问题的主要设计思路与技术路线，以及详细的设计方案。*\n\n### 2.1 内容设计\n\n#### 2.1.1 核心组成部分\n\n- 主机（一台）：系统的核心服务器端，运行着云沙箱的核心组件，负责恶意软件分析任务的启动和分析结果报告的生成，同时负责管理多个客户机。\n\n- 客户机（若干）：多个独立的隔离环境（即多台虚拟机），负责提供虚拟环境供恶意软件样本运行，同时检测目标样本的运行情况，并将检测到的数据反馈给主机。\n\n#### 2.1.2 系统架构图\n\n主机和客户机之间通过虚拟网络连接，多个客户机与主机共同组成一个局域网\n\n<img src=\"../pics/系统架构.jpg\" alt=\"系统架构\" style=\"zoom:67%;\" />\n\n#### 2.1.3 系统部署环境\n\n\n| 名称       | 版本                  |\n| ---------- | --------------------- |\n| **主机**   | 16.04                 |\n| **客户机** | Windows XP（32-bits） |\n| **Django** | 1.8.4                 |\n| **Python** | 2.7                   |\n| ...        | ...                   |\n\n#### 2.1.4 工作目录\n\n工作目录`CWD（Contain Working Directory)`存放程序所有使用的文件（代理、分析脚本、配置文件、日志、注入程序、签名、结果目录、Web设置、白名单、Yara规则和MongoDB数据库等），其CWD内容如下：\n\n```python\n- agent代理文件\n  - agent.py \n- analyzer文件分析脚本\n\t- windows \n\t- android (可扩展)\n\t- linux (可扩展)\n- conf配置文件\n  - auxiliary.conf 辅助模块\n  - cuckoo.conf 沙箱主机\n\t- processing.conf 结果处理模块\n\t- detection.conf 机器学习模块\n\t- reporting.conf 报告生成模块\n\t- virualbox.conf 虚拟机管理软件\n- log 日志\n- monitor 进程注入的DLL\n- signatures 签名\n- models 模型\n\t- 静态特征\n\t\t- string.model\n\t\t- malconv.model\n\t- 动态特征\n\t\t- apistats.model\n- storage\n\t- analyses\n\t\t- task_id 结果目录\n\t\t\t- 结果容器\n\t\t\t- report\n- web 前端配置文件\n- whitelist 白名单\n- yara yara规则\n- cuckoo.db 数据库\n```\n\n\n### 2.1.5 功能列表\n\n#### **文件对象**\n\n<img src=\"../pics/文件对象.png\" alt=\"image\" style=\"zoom:50%;\" />\n\n#### **数据集描述**\n\n**1）[Microsoft Malware - Kaggle](https://www.kaggle.com/c/malware-classification/data)**\n\n- **数据说明**：本数据集提供了一组已知的恶意代码文件，它们代表9个不同的家族。每个恶意代码文件都有一个 Id（唯一标识文件的散列值）和一个类别标记（恶意代码可能属于的9个家族之一）。\n- **数据类型**：对于每个恶意代码文件，分别存在两种格式\n    - 原始数据文件（.bytes），包含文件二进制内容的十六进制表示，没有PE头（以确保不可执行）\n    - 元数据清单日志（.asm），包含从二进制文件中提取的各种元数据信息，如函数调用、字符串等\n- **数据分布**\n\n```mermaid\npie\n\ntitle Microsoft Malware - 10868 entries\n  \n\"Ramnit\": 1541\n\"Lollipop\": 2478\n\"Kelihos_ver3\": 2942\n\"Vundo\": 475\n\"Simda\": 42\n\"Tracur\": 751\n\"Kelihos_ver1\": 398\n\"Obfuscator.ACY\": 1228\n\"Gatak\": 1013\n```\n\n**2）[Mining Malware - Datacon](https://datacon.qianxin.com/opendata/maliciouscode)**\n\n- **数据说明**：本数据集来自每天从现网捕获的大量挖矿型恶意代码和非挖矿型恶意代码，经过数据清洗、代码相似性分析等方法对样本进行处理，并已抹去样本PE结构中的MZ头、PE头、导入导出表等区域。\n\n- **数据类型**：对于每个恶意代码，提供包含文件二进制内容的原始数据文件\n\n- **数据分布**\n\n    ```mermaid\n    pie\n    \n    title Mining Malware - 6000 entries\n      \n    \"Mining\": 2000\n    \"Non-mining\": 4000\n    ```\n\n\n\n#### 检测信息\n\n**1）辅助信息**\n\n| 辅助模块名称 | 辅助模块功能                                          |\n| ------------ | :---------------------------------------------------- |\n| **sniffer**  | 负责执行tcpdump以转储沙箱样本分析过程中生成的网络流量 |\n\n**2）结果信息**\n\n| 处理模块名称         | 处理木模块功能                                               |\n| -------------------- | ------------------------------------------------------------ |\n| **Analysisinfo**     | 生成当前分析的一些基本信息，例如时间戳、沙箱的版本等         |\n| **BehaviorAnalysis** | 解析原始行为日志并执行一些初始转换和解释，包括完整的流程跟踪、行为摘要和流程树 |\n| **Buffer**           | 丢弃缓冲区分析                                               |\n| **Debug**            | 包括错误和analysis.log由文本分析模块生成                     |\n| **Dropped**          | 恶意软件丢弃文件的信息                                       |\n| **Memory**           | 在内存上执行 Volatility 工具                                 |\n| **NetworkAnalysis**  | 解析PCAP文件并提取一些网络信息，例如DNS流量、域、ip、HTTP请求、IRC和SMTP流量 |\n| **Screenshots**      | 屏幕截图                                                     |\n| **StaticAnalysis**   | 对文件执行一些静态分析                                       |\n| **String**           | 从分析的二进制文件中提取字符串                               |\n| **TargetInfo**       | 包括有关分析文件的信息，如哈希，ssdeep等                     |\n| **VirusTotal**       | 搜索VirusTotal.com分析文件的防病毒签名                       |\n\n#### **核心检测方法**\n\n**1）签名检测（500+开源签名）**\n\n| 签名名称               | 签名描述                                   |\n| ---------------------- | ------------------------------------------ |\n| **antidbg_windows**    | 检查是否存在来自调试器和取证工具的已知窗口 |\n| **generic_metrics**    | 使用GetSystem                              |\n| **modifies_wallpaper** | 尝试修改桌面墙纸                           |\n| **...**                | ...                                        |\n\n**2）Yara匹配**\n\n| 类型          | 内容                 |\n| ------------- | -------------------- |\n| **braries**   | 恶意软件类yara规则   |\n| **office**    | office文档类yara规则 |\n| **scripts**   | scripts类yara规则    |\n| **shellcode** | shellcode类yara规则  |\n| **urls**      | url类yara规则        |\n| **Packers**   | 加壳类yara规则       |\n| **...**       | ...                  |\n\n**3）基于机器学习的恶意软件模型**\n\n| 名称         | 类型     | 特征        | 算法模型            |\n| ------------ | -------- | ----------- | ------------------- |\n| **Malconv**  | 静态分析 | 字节序列    | Malconv卷积神经网络 |\n| **String**   | 静态分析 | 字符串序列  | XGBoost集成学习模型 |\n| **API_gram** | 动态分析 | API调用序列 | XGBoost集成学习模型 |\n\n#### 2.1.6 功能模块组成\n\n| 模块名称     | 模块功能                                                     |\n| ------------ | ------------------------------------------------------------ |\n| **辅助功能** | 定义了一些需要与每个分析过程并行执行的功能                   |\n| **机器交互** | 定义了与虚拟化软件的交互过程                                 |\n| **文件分析** | 定义了在客户机环境中执行并分析给定的文件的过程               |\n| **结果处理** | 定义了处理生成的原始分析结果的方法，并将一些信息附加到一个全局结果容器中 |\n| **家族签名** | 定义了一些特定的“签名”，用于表示特定的恶意行为模式或特征指标 |\n| **机器学习** | 定义了一些基于机器学习的恶意软件检测模型,生成检测结果        |\n| **报告生成** | 定义了将全局结果容器保存格式，并存储到数据库中               |\n| **用户交互** | 定义了用户的提交样本和样本报告显示形式                       |\n\n#### 2.1.7 沙箱运行流程\n\n![沙箱运行流程](../pics/沙箱运行流程.png)\n\n### 2.2 功能全景图\n\n核心函数调用流程如下所示：\n\n`高清图下载`\n\n```url\nhttps://pan.baidu.com/s/1VH9RjcjwDEDqnus6lm5hlQ 提取码: s2xb \n```\n\n\n\n![合并图](../pics/合并图.png) \n\n## 三、方案实现\n\n### 3.1 开发环境配置\n\n#### 3.1.1 Python环境配置\n\n在使用到一些全新的Python库之后，代码的开发和测试流程与以前相比略有不同。由于在首次使用Bold-Falcon之前必须先进行安装，这使得常规的“修改——测试”的迭代开发过程无法像以前一样独立进行。\n下面我们将概述如何在使用Bold-Falcon的同时开发和测试新的特性。\n\n- 初始化一个新的虚拟环境。考虑到放置在`/tmp`目录下的虚拟环境在重启后便不会继续保存，因此可以设置一个单独的存储目录路径，例如，`~/venv/bold-falcon-development`(即用于在通用的`~/venv`目录下为所有的虚拟环境设置一个名为`bold-falcon-development`的存储子目录)。\n\n    ```shell\n    $ virtualenv /tmp/bold-falcon-development\n    ```\n\n- 激活该虚拟环境。该操作必须在每次启动新的shell会话时完成（除非将该命令放入`~/.bashrc`或者类似的配置文件中）。\n\n    ```shell\n    $ . /tmp/bold-falcon-development/bin/activate\n    ```\n\n- 为了创建一个Bold-Falcon分发包，需要从[社区库](https://github.com/cuckoosandbox/community)中获取一些匹配监控二进制文件。这里我们提供了一个简单易用的脚本来半自动地执行这一操作。通过在当前库的根目录下按以下方式运行，即可自动获取上述二进制文件。\n\n    ```shell\n    (bold-falcon-development)$ python stuff/monitor.py\n    ```\n\n- 在开发者模式下安装Bold-Falcon，在执行期间将使用当前目录下的相关文件。\n\n    ```shell\n    (bold-falcon-development)$ python setup.py sdist develop\n    ```\n\n完成以上步骤后，现在可以修改和测试代码文件了，代码文件位于[Bold-Falcon](https://github.com/PowerLZY/Bold-Falcon)目录下。实际上，即使是对当前库的开发版本进行测试，`Cuckoo Working Directory`和`Cuckoo Working Directory Usage`中的所有规则仍然有效。\n\n#### 3.1.2 Pycharm环境配置\n\n在这一节中，我们将在Bold-Falcon开发的背景下介绍大量的Pycharm配置选项，并尝试在Pycharm IDE下开展Bold-Falcon的运行和开发任务。\n\n#### 网页端界面\n\n本节会介绍基于Django框架运行的Bold-Falcon网页端界面。这一部分的代码修改以及自定义特性的新增工作比较容易。\n\n#### 路径和概念\n\n- Bold-Falcon网页端提供了Web接口和RESTAPI\n- Django项目根目录位于`Bold-Falcon/web`\n- 配置位于``Bold-Falcon/web/web/settings.py``\n- URL调度程序位于`Bold-Falcon/web/web/urls.py`，以及其他路径下，包括但不限于`Bold-Falcon/web/analysis/urls.py`\n- HTML模板使用Django模板语言。\n- 前端中与Bold-Falcon相关的JavaScript内容位于`Bold-Falcon/web/static/js/cuckoo/`，其中源代码位于` Bold-Falcon/web/static/js/cuckoo/src/`目录下。\n- 所谓的“控制器”用于代替基于类的视图，其中控制器负责不属于视图函数的操作（通常是后端）。例如：``Bold-Falcon/web/controllers/analysis/analysis.py``\n- 视图函数是视图使用的函数，位于``routes.py``。例如：``Bold-Falcon/web/controllers/analysis/routes.py``\n- API函数是API使用的函数，位于``api.py``。例如：``Bold-Falcon/web/controllers/analysis/api.py``\n\n#### 运行和调试\n\n直接使用PyCharm运行和调试Bold-Falcon，可以直接绕过Bold-Falcon启动程序并使用PyCharm的内置Django服务器，而且无需对源代码进行任何修改即可做到这一点。\n首先，建议全程在虚拟环境中操作，从而将Bold-Falcon所需的依赖项与系统范围内安装的Python隔离开来。其次，建议在开发模式下安装Bold-Falcon.\n假设Bold-Falcon成功安装（并且有一个正在使用的工作目录，参见`Cuckoo Working Directory Installation`）；启动PyCharm并打开Bold-Falcon目录。选择`Run->Edit Configurations`并单击`+`，选择“Django服务器”。服务器配置使用下列参数值：\n\n- **Name** - web\n- **Host** - 127.0.0.1\n- **Port** - 8080\n- **Environment variables** -单击 `...` 并增加 `CUCKOO_APP:web` \n- **Python interpreter** - 选择之前配置的虚拟环境。如果该虚拟环境不存在，请使用`File->Settings->Project: Cuckoo->Project Interpreter`将该虚拟环境添加到本项目中。\n- **Working directory** -Django项目根目录的绝对路径，例如：`/home/test/PycharmProjects/virtualenv/Bold-Falcon/web/`\n\n此时，可以使用PyCharm运行和调试Bold-Falcon了，通过选择`Run->Run->web`即可启动网页端服务器。\n\n#### JavaScript传输\n\nBold-Falcon前端中的Javascript代码是基于ECMAScript 6标准开发的。为了兼容浏览器，需要将它转回ECMAScript 5标准。\n首先，配置PyCharm使其能够识别并理解ECMAScript 6的语法。选择`File->Settings->Languages & Frameworks->Javascript`并从“Javascript语言版本”下拉列表中选择“ECMAScript 6”。然后选择`Apply`.\n然后，使用Babel传输Javascript代码。在Bold-Falcon项目根目录中安装Babel（需要npm）：\n\n```shell\n(bold-falcon)    test:$ pwd\n/home/test/PycharmProjects/virtualenv/bold-falcon\n(bold-falcon)    test:$ npm install --save-dev babel-cl\n```\n\n它将在Bold-Falcon项目根目录下创建一个名为`node_modules`的文件夹。切换回PyCharm并打开`cuckoo/web/static/js/cuckoo/src`路径下的任意js文件，PyCharm将询问是否要为该文件配置一个文件监视程序。点击`Add watcher`（如果此选项不可用，请在`File->Settings->Tools->File watchers`下找到“file watcher”位置）。\n在弹出屏幕“Edit Watcher”中，输入下列值：\n\n- **Name** -  Babel ES6->ES5\n- **Description** - Transpiles ECMAScript 6 code to ECMAScript 5\n- **Output filters** - None\n- **Show console** - Error\n- **Immediate file synchronisation** - yes\n- **Track only root files** - yes\n- **Trigger watcher regardless of syntax errors** - no\n- **File type** - Javascript\n- **Scope** - 单击 `...` ->  `+` (添加范围) ->  `local` -> `OK`. 在文件浏览器中，进入 `Bold-Falcon/web/static/js/cuckoo/src/`目录下并选择`src`文件夹，单击`include`. `src`中的文件现在应该会变成绿色。选择 `OK`.\n- **Program** - 应该是 `node_modules/.bin/babel`的绝对路径，例如：`/home/test/PycharmProjects/virtualenv/cuckoo/node_modules/.bin/babel`. 再次检查输入的路径是否反映文件`node_modules/.bin/babel`的实际位置。\n- **Arguments** - `--source-maps --out-file $FileNameWithoutExtension$.js $FilePath$`\n- **Working directory** - 浏览并选择 `Bold-Falcon/web/static/js/cuckoo`\n- **Output paths to refresh** `$FileNameWithoutExtension$-compiled.js:$FileNameWithoutExtension$-compiled.js.map`\n\n最后，需要创建一个`manage.py` mock文件，以便PyCharm将其视为Django项目。文件`Bold-Falcon/web/manage.py`的内容如下：\n\n```python\n#!/usr/bin/env python\nimport sys\n\nif __name__ == \"__main__\":\n   from django.core.management import execute_from_command_line\n   execute_from_command_line(sys.argv)\n```\n\n转到`File->Settings->Languages & Frameworks->Django`，然后配置如下：\n\n- **Django Project root** - `Bold-Falcon/web`\n- **Settings** - `web/settings.py`\n- **Manage script** - `manage.py`\n\n#### 测试\n\n到目前为止，项目配置已经完成，可以使用PyCharm运行和调试Bold-Falcon了！\n\n### 3.2 辅助功能模块\n\n#### 3.2.1 实现说明\n\n**辅助功能模块**定义了一些需要与每个**样本分析过程并行执行的辅助功能**，例如：记录并为用户提供分析样本的网络流量、中间人代理、客户端重启等辅助功能。全部辅助模块放在 `Bold-Falcon/moduls/auxiliary/` 目录下，全部辅助模块配置选项在 `Bold-Falcon/conf/auxiliary.conf` 文件下。\n\n**1）辅助功能定义函数**\n\n```python\nfrom lib.cuckoo.common.abstracts import Auxiliary\n\nclass MyAuxiliary(Auxiliary):\n    \"\"\"定义辅助模块\"\"\"\n    \n    def start(self):\n        # 定义辅助功能\n\n    def stop(self):\n        # 定义模块关闭\n```\n\n- start()：将在主机启动客户机并有效执行提交的恶意文件之前执行\n- stop()：将在分析过程的最后以及启动处理和报告过程之前执行\n\n**2）辅助功能运行函数**\n\n```python\nclass RunAuxiliary(object):\n    \"\"\"辅助模块管理\"\"\"\n    \n\tdef __init__(self, task, machine, guest_manager)：\n    \t# 辅助功能模块初始化\n    \n  \tdef start(self):\n    \t# 辅助功能模块配置\n        options = config2(\"auxiliary\", module_name)\n       \t\n    def callback(self, name, *args, **kwargs):\n    \t# 辅助功能模块加载\n        MyAuxiliary.start()\n        \n  \tdef stop(self):\n    \t# 辅助功能模块关闭\n    \tMyAuxiliary.stop()\t\n```\n\n+  \\__init\\_\\_(): 辅助功能模块初始化（任务号、虚拟机软件、客户机IP映射等）\n+  start(): 根据 `Bold-Falcon/conf/auxiliary.conf` 下的配置选择辅助功能模块列表\n+  callback(): 开启辅助功能模块列表的辅助功能\n+  stop(): 关闭辅助功能模块列表的辅助功能\n\n**3）辅助功能列表**\n\n| 辅助模块名称 | 辅助模块功能                                          |\n| ------------ | :---------------------------------------------------- |\n| **sniffer**  | 负责执行tcpdump以转储沙箱样本分析过程中生成的网络流量 |\n| **mitm**     | 负责执行mitmdump以提供中间人代理功能                  |\n| **reboot**   | 负责提供重启分析支持                                  |\n\n### 3.2.2 实现流程\n\n**1) 辅助功能模块时序图**\n\n```mermaid\n%% 时序图例子,-> 直线，-->虚线，->>实线箭头\n sequenceDiagram\n  participant 沙箱主机\n  participant 客户机\n  autonumber \n    #opt is run\n      %%rect rgb(121, 255, 121)\n      沙箱主机->客户机: 启动沙箱主机\n      沙箱主机->客户机: 初始化沙箱配置\n      #rect rgb(135,206,250)\n      沙箱主机->>客户机: 辅助功能模块初始化\n      沙箱主机->>沙箱主机: 辅助功能模块加载\n      沙箱主机->>客户机: 辅助功能模块开启\n      loop 文件分析模块\n        沙箱主机->>+客户机: 样本上传\n        客户机->>-客户机: 样本分析\n        Note right of 客户机: 执行分析脚本\n        客户机->>沙箱主机: 分析结果存储\n      end\n      沙箱主机->>沙箱主机: 辅助功能模块存储\n      沙箱主机->客户机: 辅助功能模块结束\n      #end\n      沙箱主机->客户机: ....\n    #end\n```\n\n**2）辅助功能模块实现流程**\n\n1. 启动沙箱主机\n2. 初始化沙箱配置\n3. 辅助功能模块初始化\n4. 辅助功能模块加载\n5. 辅助功能模块开启\n6. 样本上传\n7. 样本分析\n8. 分析结果存储\n9. 辅助功能模块存储\n10. 辅助功能模块关闭\n\n### 3.3 机器交互模块\n\n### 3.3.1 实现说明\n\n**机器交互模块**定义了沙箱主机与虚拟化软件的交互过程，包括开启虚拟机、启动任务调度、上传样本、上传分析模块和分析配置文件、在数据库中记录虚拟机的状态等操作。全部机器交互模块放在 `Bold-Falcon/modules/mechinery/`目录下，我们默认使用了VirtualBox虚拟机软件。全部辅助模块配置选项在 `Bold-Falcon/conf/virualbox.conf`文件下。\n\n**沙箱主机**与**客户机**网络配置中使用**Host-Only**连接方式。对于一个恶意软件，当其被安装配置了Bold-Falcon的主机提交到各个客户机进行运行分析时，主机是想要知道客户机的所有流量信息的，因为绝大部分的恶意软件都需要依赖网络来执行恶意行为。此时只有设置Host-Only连接，主机才能截获客户机与互联网之间流经的所有流量，进而更好地分析恶意软件的行为方式。\n\n**1）机器交互定义函数**\n\n```python\nfrom lib.cuckoo.common.abstracts import Machinery\nfrom lib.cuckoo.common.exceptions import CuckooMachineError\n\nclass MyMachinery(Machinery):\n    def start(self, label):\n    \t# 开启定义虚拟机管理软件\n        try:\n            revert(label)\n            start(label)\n        except SomethingBadHappens:\n            raise CuckooMachineError(\"oops!\")\n    \n    def initialize(self, module_name):\n        # 初始化配置信息\n    \tself._initialize(module_name)\n    \n    def stop(self, label):\n    \t# 关闭定义虚拟机管理软件\n        try:\n            stop(label)\n        except SomethingBadHappens:\n            raise CuckooMachineError(\"oops!\")\n```\n\n- start()：开启定义虚拟机管理软件\n- stop()：关闭定义虚拟机管理软件\n- initialize()：根据指定的配置信息（标签、平台、IP等）生成可用客户机的列表\n\n**2）机器交互管理函数**\n\n```python\nclass AnalysisManager(threading.Thread):\n\n    def __init__(self, task_id, error_queue):\n        # 读取任务的消息、配置文件中的服务端ip和端口\n\n    def init(self):\n        # 初始化分析, 创建分析结果存储目录\n\n    def acquire_machine(self):\n        # 开启配置虚拟机\n        \n    def launch_analysis(self):\n  \t\t# 开启分析任务\n        self.init():\n        self.acquire_machine()\n        # 开启虚拟机如：machinery/virtualbox.py 中 VirtualBox.start\n        machinery.start(self.machine.label, self.task)\n        return succeeded\n```\n\n+ \\__init\\_\\_(): 读取任务的消息（指明分析时间、系统类型、开始时间、结束时间、指明分析状态）；配置文件中的服务端ip和端口（我这里设置的是192.168.56.1和2042）\n+ init()：创建文件夹, 用于存放分析结果和样本文件，将target指向的文件存放到`storage/binaries`下\n+ acquire_machine(): 开启配置虚拟机\n+ launch_analysis(): 开启分析任务，各个模块的清理工作\n\n**3）客户端代理函数**\n\nHost和Client端的数据传输,客户端代理 **agent.py** 脚本在客户机运行\n\n```python\nclass MiniHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):\n  \t# 用作对不同路径的不同函数处理(响应)\n    server_version = \"Cuckoo Agent\"\n\n    def do_GET(self):\n        # 响应GET请求\n\n    def do_POST(self):\n        # 响应POST请求\n    \t# host与client之间的数据传输, 格式为multipart/form-data\n```\n\n+ do_GET(): 响应GET请求\n+ do_POST():\n    +  响应POST请求\n    +  host与client之间的数据传输, 格式为multipart/form-data，可以理解为key:value形式\n    +  如: analysis.conf, 分析模块, 样本等，这些数据在传输的时候, 都要带有filename字段\n\n```python\nAGENT_VERSION = \"0.10\"\nAGENT_FEATURES = [\n    \"execpy\", \"pinning\", \"logs\", \"largefile\", \"unicodepath\",\n]\n \n@app.route(\"/\")\ndef get_index():\n  \n@app.route(\"/environ\")\ndef get_environ():\n\n@app.route(\"/mktemp\", methods=[\"GET\", \"POST\"])\ndef do_mktemp():\n    \n@app.route(\"/mkdtemp\", methods=[\"GET\", \"POST\"])\ndef do_mkdtemp():  \n    \n@app.route(\"/extract\", methods=[\"POST\"])\ndef do_extract():\n    \n@app.route(\"/store\", methods=[\"POST\"])\ndef do_store():\n  \n@app.route(\"/execpy\", methods=[\"POST\"])\ndef do_execpy():\n       \n@app.route(\"/status\")\ndef get_status():\n```\n\n+ get_index(): agent的一些基本信息\n\n    + 浏览器输入`192.168.56.2:8000` 返回：\n\n        ```python\n        {\"message\": \"Cuckoo Agent!\", \"version\": \"0.10\", \"features\": [\"execpy\", \"pinning\", \"logs\", \"largefile\", \"unicodepath\"]}\n        ```\n\n+ get_environ(): 获取client端环境变量,以便后面后续的一些命令执行\n\n+ do_mktemp() 和 do_mkdtemp()\n\n    + 两个创建临时文件夹的命令: mktemp和mkdtemp，但二者创建的位置不一样\n    + mkdtemp --> 在%SYSTEMDRIVE%(C:\\)下创建一个随机文件夹\n    + mktemp --> 在%TEMP%(C:\\Users\\bill\\AppData\\Local\\Temp)下创建一个随机文件夹\n\n+ do_extract(): 将分析模块以zip格式压缩,发送给client端；发送extrac命令, 将分析模块解压到上一步创建的文件夹中。\n\n+ do_store():\n\n    + 执行store命令, 写入analysis.conf 到 C:/tmppx7scx/analysis.conf\n\n    | analysis.conf | 内容                                                         |\n    | ------------- | ------------------------------------------------------------ |\n    | **category**  | file                                                         |\n    | **target**    | /tmp/cuckoo-tmp-pwnmelife/tmpZ3SA0v/maze.exe (host端的样本地址) |\n    | **package**   | exe                                                          |\n    | **file_type** | PE32 executable (GUI) Intel 80386, for MS Windows            |\n    | **file_name** | maze.exe                                                     |\n    | **clock**     | 20200620T09:28:00                                            |\n    | **id**        | 1                                                            |\n    | **timeout**   | 120                                                          |\n    | **ip**        | 192.168.56.1                                                 |\n    | **port**      | 2042                                                         |\n\n    + 执行store命令, 写入simple.bin 到 C:\\Users\\bill\\AppData\\Local\\Temp\\simple.bin\n\n+ do_execpy(): 执行分析脚本\n\n+ get_status(): 不断获取样本分析状态\n\n**4）客户端管理函数**\n\n```python\nclass GuestManager(object):\n\n    def __init__(self, vmid, ipaddr, platform, task_id, analysis_manager):\n      \t# 初始化信息\n\n    def stop(self):\n        # 关闭客户端分析\n    \n    def upload_analyzer(self, monitor):\n        # 上传分析模块\n     \n    def add_config(self, options):\n        # 上传分析脚本\n\n    def start_analysis(self, options, monitor):\n        # 客户端开启分析\n        self.upload_analyzer(monitor)\n\n        self.add_config(options)\n\n        # 执行store命令 --> 在系统中执行写入analysis.conf\n        self.post(\"/store\", files=files, data=data)\n\n        # 执行execpy命令 --> 在系统中执行python analyzer.py\n        self.post(\"/execpy\", data=data)\n            \n        # 执行execute命令, execute(command)\n        self.post(\"/execute\", data=data)\n\n    def wait_for_completion(self):\n        # 不断获取客户端分析状态\n```\n\n+ \\__init\\_\\_(): 初始化IP、端口号、系统、任务号、保存路径信息\n+ stop(): 关闭客户端分析\n+ upload_analyzer(): \n    + 分析模块的文件位于`Bold-Falcon/data/analyzer/(android, darwin, linux, windows)`\n    + analyzer_zipfile 也会将 dumpmem.yarac 和Monitor 写入到压缩文件流中\n+ add_config(): 上传分析脚本，将options中的内容传入client中, 写入到self.analyzer_path的analysis.conf中\n+ start_analysis(): 客户端开启分析,client 端也开启了http server, 获取agent（配置的时候,需要在虚拟机中放置agent.py）的信息\n+ wait_for_completion(): 不断获取客户端分析状态\n\n### 3.3.2 实现流程\n\n**1) 机器交互模块时序图**\n\n```mermaid\n%% 时序图例子,-> 直线，-->虚线，->>实线箭头\n sequenceDiagram\n  participant 沙箱主机\n  participant 代理\n  participant 客户机\n  autonumber\n    #opt is run\n      %%rect rgb(121, 255, 121)\n      沙箱主机->客户机: 启动沙箱主机\n      沙箱主机->客户机: 初始化沙箱配置\n\t\t\t沙箱主机->客户机: 启动虚拟机管理软件，生成可用客户机的列表\n\t\t\t沙箱主机->沙箱主机: 创建文件夹, 用于存放分析结果和样本文件\n\t\t\t沙箱主机-->沙箱主机: 开启分析任务、开启客户端\n      #rect rgb(135,206,250)\n      #loop 机器交互模块\n      沙箱主机->>代理: Get/index\n      客户机-->>沙箱主机: 获取代理的基本信息\n      沙箱主机->>代理: Get/environ\n      客户机-->>沙箱主机: 获取client端环境变量\n    \t沙箱主机->>代理: Get/mktemp\n      客户机-->>客户机:  在%SYSTEMDRIVE%(C:\\)下创建一个随机文件夹\n      沙箱主机->>代理: Get/mkdtemp\n      客户机-->>客户机:  在%TEMP%(C:\\Users\\bill\\AppData\\Local\\Temp)下创建一个随机文件夹\n     \t沙箱主机->>代理:  POST/extract\n      沙箱主机-->>客户机:  将分析模块以zip格式压缩,发送给client端\n      沙箱主机->>代理: POST/store\n      沙箱主机-->>客户机:  写入analysis.conf 到 C:/tmppx7scx/analysis.conf\n      沙箱主机->>代理: POST/store\n      沙箱主机-->>客户机:  写入simple.bin 到 C:\\Users\\bill\\AppData\\Local\\Temp\\simple.bin\n    \t沙箱主机->>代理: POST/execpy\n      客户机->>客户机:  执行分析脚本\n      沙箱主机->>代理: Get/status\n      客户机-->>沙箱主机:  不断获取样本分析状态\n      #end\n      沙箱主机->客户机: 关闭客户端\n      沙箱主机->沙箱主机: 关闭虚拟机管理软件\n \n      沙箱主机->客户机: ....\n    #end\n```\n\n**2) 机器交互模块实现流程**\n\n1. 启动沙箱主机\n2. 初始化沙箱配置\n3. 启动虚拟机管理软件\n4. 根据指定的配置信息（标签、平台、IP等）生成可用客户机的列表\n5. 创建文件夹, 用于存放分析结果和样本文件，将target指向的文件存放到storage/binaries下\n6. 开启分析任务、开启客户端\n7. 使用GET/index访问代理\n8. 获取agent的一些基本信息\n9. 使用GET/environ访问代理\n10. 获取client端环境变量,以便后面后续的一些命令执行\n11. 使用GET/mktemp访问代理\n12. mkdtemp --> 在%SYSTEMDRIVE%(C:\\)下创建一个随机文件夹\n13. 使用GET/mkdtemp访问代理\n14. mktemp --> 在%TEMP%(C:\\Users\\bill\\AppData\\Local\\Temp)下创建一个随机文件夹\n15. 使用POST/extract访问代理\n16. 将分析模块以zip格式压缩,发送给client端. 发送extrac命令, 将分析模块解压到上一步创建的文件夹中.\n17. 使用POST/store访问代理\n18. 写入analysis.conf 到 C:/tmppx7scx/analysis.conf\n19. 使用POST/store访问代理\n20. 写入simple.bin 到 C:\\Users\\bill\\AppData\\Local\\Temp\\simple.bin\n21. 使用POST/execpy访问代理\n22. 执行分析脚本\n23. 使用POST/status访问代理\n24. 不断获取样本分析状态\n25. 关闭客户端\n26. 关闭虚拟机管理软件\n\n### 3.4 文件分析模块\n\n#### 3.4.1 实现说明\n\n**文件分析模块**定义了分析组件在客户机环境中**执行并分析给定的文件**的过程。可以通过设置一个包含对所有类型的文件的通用处理方法的基类Package，然后使用多态的形式为不同类型的文件实现不同的启动分析方式。可供样本运行的客户机环境包括Windows、Linux、Android系统等，模块代码存放在`Bold-Falcon/data/analyzer/`目录下，包含所有用户指定选项的配置存储在***self.options***文件中。\n\n**1）文件分析定义函数**\n\n```python\nfrom lib.api.process import Process\nfrom lib.common.exceptions import CuckooPackageError\n\nclass Package(object):\n    \"\"\"定义文件分析模块\"\"\"\n    \n \tdef start(self):\n        # 定义文件分析初始化操作\n \t\traise NotImplementedError\n\n    def check(self):\n        # 执行重复操作\n        return True\n\n    def execute(self, path, args):\n        # 启动分析进程\n        dll = self.options.get(\"dll\")\n        free = self.options.get(\"free\")\n        suspended = True\n        if free:\n            suspended = False\n        p = Process()\n        if not p.execute(path=path, args=args, suspended=suspended):\n            raise CuckooPackageError(\n                    \"Unable to execute the initial process, analysis aborted.\"\n            )\n\n        if not free and suspended:\n            p.inject(dll)\n            p.resume()\n            p.close()\n            return p.pid\n\n    def finish(self):\n        # 转储进程内存\n        if self.options.get(\"procmemdump\"):\n            for pid in self.pids:\n                p = Process(pid=pid)\n                p.dump_memory()\n        return True\n```\n\n+ start()：进行所有初始化操作，包括运行恶意软件进程、启动其他应用程序、拍摄内存快照等。\n+ check()：执行任何类型的重复操作（每秒），可用于分析终止条件的触发机制。\n+ execute()：封装恶意软件执行和DLL注入两个操作。\n+ finish()：在完成分析并关闭客户机之前执行，用于转储所有受监控进程的进程内存。\n\n**2）分析进程定义函数**\n\n以Windows环境中的分析进程为例：\n\n```python\nClass Process(object):\n    \"\"\"Windows分析进程\"\"\"\n    \n    def execute(self):\n        # 执行样本分析\n        \n        # 启动inject.exe作为中间人，负责启动目标样本进程并挂起主线程\n        argv = [\n            inject_exe,\n            \"--app\", path,\n            \"--only-start\",\n        ]\n\t\tsubprocess_checkoutput(argv, env)\n        \n        # 再次启动inject.exe作为中间人，执行dll注入功能\n        argv = [\n            inject_exe,\n            \"--resume-thread\",\n            \"--pid\", \"%s\" % self.pid,\n            \"--tid\", \"%s\" % self.tid,\n        ]\n        if free:\n            argv.append(\"--free\")\n        else:\n            argv += [\n                \"--apc\",\n                \"--dll\", dllpath,\n            ]\n        subprocess_checkoutput(argv, env)\n```\n\n**3）管道通信定义函数**\n\n```python\nClass PipeServer(threading.Thread):\n    # 接收传入的管道句柄，创建新线程\n    \n    def run(self):\n        handler.start()\n```\n\n```python\nClass PipeForwarder(threading.Thread):\n\t# 将通过管道接收的数据发送给中心服务器\n    \n    def run(self):\n        socket.create_connection()\n        socket.sendall()\n```\n\n**4）Windows分析模块运行函数**\n\n以分析通用Windows可执行文件的默认方法为例：\n\n```python\nfrom lib.common.abstracts import Package\n\nclass Exe(Package):\n    \"\"\"EXE分析包\"\"\"\n\t\n    def start(self, path):\n        args = self.options.get(\"arguments\")\n        return self.execute(path, args)\n```\n\n**5）Linux分析模块运行函数（后期扩展）**\n\n```python\nclass Generic(Package):\n    \"\"\"基于Shell的通用执行分析包\"\"\"\n\n    def start(self, path):\n        os.chmod(path, 0o755)\n        return self.execute([\"sh\", \"-c\", path])\n```\n\n**6）Android分析模块运行函数（后期扩展）**\n\n```python\nclass Apk(Package):\n    \"\"\"APK分析包\"\"\"\n\n    def start(self, path):\n        install_sample(path)\n        execute_sample(self.package, self.activity)\n```\n\n**7）分析脚本运行函数**\n\n```python\nclass Analyzer(object):\n    \"\"\"Windows分析脚本\"\"\"\n    \n    def prepare(self):\n        # 配置分析环境\n        \n    def run(self):\n    \t# 启动分析进程\n        \n        self.prepare()\n        Package()\n        # 根据文件类型选择对应的分析包\n        package = choose_package()\n        Auxiliary()\n        # 启动一系列辅助分析工具\n        aux.init()\n        aux.start()\n        # 隐藏进程\n        zer0m0n.hidepid(self.pid)\n        zer0m0n.hidepid(self.ppid)\n        # 开始执行分析包\n        package.start()\n        package.execute()\n```\n\n- prepare(): 为分析进程配置环境，包括授予权限、启动管道服务器等\n- run(): 启动分析进程，首先启动一系列辅助分析工具，并根据上传的文件类型选择其对应的文件包，在隐藏当前进程及其父进程后，执行分析包\n\n**8）文件分析对象列表**\n\n<table align=\"center\">\n\t<tr>\n\t    <th>客户机环境</th>\n\t    <th>文件对象</th>\n\t</tr>\n\t<tr>\n\t    <th rowspan=\"8\">Windows</th>\n\t    <td>通用Windows可执行文件</td>\n\t</tr>\n\t<tr>\n\t    <td>DLL文件</td>\n\t</tr>\n\t<tr>\n        <td>PDF文档</td>\n\t</tr>\n\t<tr>\n\t    <td>Microsoft Office文档</td>\n\t</tr>\n\t<tr>\n        <td>ZIP文件</td>\n\t</tr>\n\t<tr>\n\t    <td>Java JAR文件</td>\n\t</tr>\n\t<tr>\n\t    <td>Python文件</td>\n\t</tr>\n\t<tr>\n\t    <td>......</td>\n\t</tr>\n\t<tr>\n\t    <th>Linux</th>\n\t    <td>基于Shell的通用可执行文件</td>\n\t</tr>\n\t<tr>\n\t    <th>Android</th>\n\t    <td>APK文件</td>\n\t</tr>\n</table>\n\n\n#### \t3.4.2 实现流程\n\n**1）文件分析模块时序图**\n\n```mermaid\nsequenceDiagram\n\nparticipant host_server\nparticipant analyzer\nparticipant inject\nparticipant monitor\n\nautonumber\nloop 分析环境准备\n\tanalyzer->>analyzer: 授予权限<br/>开启管道\nend\nanalyzer->analyzer: 启动辅助分析工具\nanalyzer->analyzer: Package()\nanalyzer->analyzer: 隐藏进程\nanalyzer->>inject: 启动目标样本的分析进程\nanalyzer->>inject: 挂起主线程\ninject-->>analyzer: 输出目标样本进程pid和主线程tid\nanalyzer-->>monitor: 注入monitor.dll到目标样本的进程\nmonitor->>monitor: 唤醒主线程\ninject->>monitor: monitor_init()\nmonitor-->>monitor: process.py\ninject->>monitor: monitor_hook()\nmonitor-->>analyzer: 管道返回日志\nanalyzer-->>host_server: Socket返回日志\nloop 分析结果存储\n\thost_server-->>host_server: 在线分析日志<br/>数据库<br/>结果文件夹\nend\n```\n\n**2）文件分析模块实现流程**\n\n1. 分析环境准备\n    - 授予当前进程两个新权限，用于后续操作样本所在进程和加载驱动使用\n    - 启动两个管道服务器与目标样本进程交互，分别用于传输代码执行日志和函数调用记录日志\n2. 启动一系列辅助分析工具，主要包括截屏工具、驱动加载工具等\n3. 调用Package类，根据上传的文件类型选择其对应的文件包来启动分析\n4. 调用驱动功能，实现对当前进程（Analyzer进程）和父进程（Agent）的隐藏，防止目标检测到沙箱的存在\n5. 启动目标样本的分析进程\n6. 挂起主线程\n7. 输出目标样本进程pid和主线程tid，退出\n8. 再次启动目标样本进程，注入monitor.dll\n9. 唤醒主线程，执行样本\n10. monitor_init()\n\n   - 配置读取初始化\n   - hook初始化\n   - 管道初始化，连接前面Analyzer进程开启的两个管道\n   - sleep初始化，针对sleep函数进行特殊处理\n   - monitor模块的自我隐藏：抹去PE头数据+从PEB中的模块链表中将自己摘掉\n\n11. process.py\n\n    - 工具脚本，处理对象为根据不同功能分成的rst文件（file.rst、process.rst、network.rst等等）\n\n    - 提取rst文件中所有需要HOOK的函数的信息，包括函数所在的模块名，函数名称、函数的所有参数信息、函数的返回值等\n    - 将所有rst文件通过一个hooks.c的代码模板渲染出来，得到完整的hooks.c文件，该代码文件里面定义了一个全局的g_hooks的数组，来记录所有待hook的函数信息\n12. monitor_hook()：安装HOOK，生成函数调用记录\n13. 通过管道发送代码执行日志和函数调用记录日志\n14. 通过Socket通信发送代码执行日志和函数调用记录日志到中心服务器\n15. 中心服务器对文件分析结果进行各种形式的存储（分析日志、数据库、结果文件夹等），分析结果放置在`Bold-Falcon/storage/analyse/{task_id}`目录下，供后续结果处理模块使用\n\n### 3.5 结果处理模块\n\n#### 3.5.1 实现说明\n\n**结果处理模块**允许自定义方法来分析沙盒生成的原始结果，并将一些信息附加到一个**全局结果容器**中，该结果容器稍后将由**家族签名模块**、**机器学习模块**和**报告生成模块**使用。`Bold-Falcon/mol/processing/`目录 中提供的所有处理模块，都属于结果处理模块。每个模块在 `Bold-Falcon/conf/processing.conf`中都应该有一个专门的配置选项，供用户选择结果处理功能。\n\n**结果处理模块都将被初始化和执行**，返回的数据将被附加到一个名为**全局结果容器**的数据结构中。这个容器仅仅是一个大的**Python字典**，它包含了由所有按标识键分类的模块生成的抽象结果。每次分析的全局结果容器被储存在 `Bold-Falcon/storage/analysis/task_id` 文件夹下。\n\n**1）结果处理定义函数**\n\n```python\nfrom lib.cuckoo.common.exceptions import CuckooProcessingError\nfrom lib.cuckoo.common.abstracts import Processing\n\nclass MyModule(Processing):\n\n    def run(self):\n        self.key = \"key\"\n        \n        try:\n            data = do_something()\n        except SomethingFailed:\n            raise CuckooProcessingError(\"Failed\")\n            \n        return data\n```\n\n+ run()：***self.key*** 该属性定义要用作返回 ***data*** 的子容器的名称。\n+ 将 ***data*** 附加到全局容器中（列表、字典、字符串等）。\n+ 可以指定一个***order***值，允许按顺序运行可用的处理模块。\n\n**2）结果处理运行函数**\n\n```python\nclass RunProcessing(object):\n\n    def __init__(self, task):\n        # 初始化信息\n        \n    def process(self, module, results):\n      \t# 执行一个结果处理模块\n        \n    def run(self):\n        # 执行所有结果处理模块，返回全局结果容器\n        # 获得 processing 功能列表\n        processing_list = cuckoo.processing.plugins\n        \n        for module in processing_list:\n            # 执行功能\n            key, result = self.process(module, results)\n            # If the module provided results, append it to the fat dict.\n            if key and result:\n                results[key] = result\n        return results\n```\n\n+ \\__init\\_\\_(): 初始化任务信息、虚拟机信息、分析结果存储路径\n+ process():\n    + 执行一个结果处理模块\n    + 初始化对应处理功能\n    + 如果在配置中禁用了处理模块，请跳过它\n    + 获得分析结果存储路径\n    + 执行对应处理功能\n    + 返回关键字，对应处理功能结果\n+ run(): 执行所有结果处理模块，返回全局结果容器\n\n**3）结果处理功能列表**\n\n| 处理模块名称         | 处理模块功能                                                 |\n| -------------------- | ------------------------------------------------------------ |\n| **Analysisinfo**     | 生成有关当前分析的一些基本信息，例如时间戳、沙箱版本等       |\n| **BehaviorAnalysis** | 解析原始行为日志，执行一些初始转换并提供解释，包括完整的进程跟踪、行为摘要和进程树 |\n| **Buffer**           | 丢弃缓冲区分析                                               |\n| **Debug**            | 包括错误和分析程序生成的analysis.log                         |\n| **Dropped**          | 包括由恶意软件丢弃并由沙箱转储的文件的信息                   |\n| **Memory**           | 在完整的内存转储上执行 Volatility 内存取证分析工具           |\n| **NetworkAnalysis**  | 解析PCAP文件并提取一些网络信息，例如DNS流量、域、ip、HTTP请求、IRC和SMTP流量 |\n| **Screenshots**      | 屏幕截图和OCR分析                                            |\n| **StaticAnalysis**   | 对文件执行一些静态分析                                       |\n| **Strings**          | 从分析的二进制文件中提取字符串                               |\n| **TargetInfo**       | 包括当前所分析文件的信息，如哈希，ssdeep等                   |\n| **VirusTotal**       | 在VirusTotal.com上搜索所分析文件的反病毒签名                 |\n| **ApkInfo**          | 生成有关当前APK分析的一些基本信息（Android分析）             |\n| **Baseline**         | 从采集的信息中获取基线结果                                   |\n| **Drioidmon**        | 从Droidmon日志中提取动态API调用信息                          |\n| **DumpTls**          | 交叉引用从监控程序中提取的TLS主密钥和从PCAP提取的密钥信息以转储主密钥文件 |\n| **GooglePlay**       | 有关分析会话过程的Google Play信息                            |\n| **Irma**             | IRMA连接器                                                   |\n| **Misp**             | MISP连接器                                                   |\n| **ProcMemory**       | 执行进程内存转储的分析，并能够处理用户自定义的Yara规则       |\n| **ProcMon**          | 从procmon.exe的输出中提取事件                                |\n| **Snort**            | Snort处理                                                    |\n| **Suricata**         | Suricata处理                                                 |\n\n**4）全局结果容器内容**\n\n全局结果容器为python的字典格式，为**家族签名模块**、**机器学习模块**和**报告生成模块**提供信息，最后保存在 `Bold-Falcon/storage/analyses/{task_id}/reports/report.json` 文件中。\n\n```python\n- info\n  - added/strarted/ended: 上传样本, 启动分析与结束分析的时间戳\n  - duration: 分析时长\n  - id: ={task_id}, 数据库中的任务id\n  - package: 文件类型\n  - machine: 样本运行环境\n- signatures\n\t- families: 恶意软件家族\n\t- description: 签名描述\n\t- severity: 安全等级\n\t- references: URL列表\n  - name: 签名名称\n- target\n  - file\n    - yara: yara规则匹配\n    - sha-1/sha256/sha512/md5: 文件哈希值\n    - name: 文件名\n    - type: 文件类型(包括运行系统与压缩加壳方式)\n    - crc32: 校验码\n    - path: 文件二进制形式存储路径\n    - size: 文件大小\n- network\n  - tls/udp/http/icmp/smtp/tcp/dns: 协议解析字段\n  - pcap_sha256: 流量包哈希值\n- static\n  - pe_imports: 导入地址表(IAT), 列出了动态链接库和它们的函数\n  - imported_dll_count: DLL数量\n  - pe_resources: 资源节, 列出了文件中的可打印字符串/图形图像/按钮图标等信息\n  - pe_sections: 文件节区信息, 包括节区大小/虚拟地址/熵/加壳方式/虚拟内存等\n- behavior\n  - generic\n    - process_path: 进程启动路径\n    - process_name: 进程执行程序名\n    - pid: 进程id\n    - first_seen: 进程启动时间戳\n    - ppid: 父进程id\n  - processes\n    - modules: 样本运行时调用的系统文件信息, 包括被调用文件名/路径/基地址及其大小\n    - time: 运行时间\n  - processtree\n    - children: 子进程列表\n- debug: analysis.log分析结果\n- screenshots: 指定运行截图存储路径\n- strings: 文件中的可打印字符串列表\n```\n\n**5）结果处理模块属性**\n\n结果处理模块提供了一些属性，可用于访问当前分析任务的原始结果：\n\n- self.analysis_path：存储分析结果的目录路径，例如：`Bold-Falcon/storage/analysis/1`\n- self.log_path：analysis.log文件的路径\n- self.file_path：所分析文件的路径\n- self.dropped_path：存储丢弃文件的目录路径\n- self.logs_path：存储原始行为日志的目录路径\n- self.pcap_path：网络pcap转储的路径\n- self.memory_path：完整的内存转储的路径（如果已创建）\n- self.pmemory_path：进程内存转储的路径（如果已创建）\n\n使用这些属性，能够轻松地访问由Bold-Falcon存储的所有原始结果，并对它们执行分析操作。\n\n#### 3.5.2 实现流程\n\n**1）结果处理模块时序图**\n\n```mermaid\n%% 时序图例子,-> 直线，-->虚线，->>实线箭头\n sequenceDiagram\n  participant 沙箱主机\n  participant 任务目录\n  autonumber \n    #opt is run\n      %%rect rgb(121, 255, 121)\n      沙箱主机->任务目录: 启动结果处理模块\n      沙箱主机->任务目录: 初始化任务信息、虚拟机信息、分析结果存储路径\n      #rect rgb(135,206,250)\n      沙箱主机->>沙箱主机: 获得处理功能列表\n      loop 执行处理功能列表\n      沙箱主机->>任务目录: 执行一个结果处理功能\n      沙箱主机->>任务目录: 初始化对应处理功能\n      任务目录-->>沙箱主机: 获得分析数据\n      沙箱主机->>+任务目录: 执行对应处理功能\n      任务目录-->>-沙箱主机: 返回关键字及处理功能结果  \n      end\n      沙箱主机->>沙箱主机: 全局结果容器\n      沙箱主机->任务目录: 结果处理模块结束\n      #end\n      沙箱主机->任务目录: ....\n    #end\n```\n\n**2）结果处理模块设计流程**\n\n1. 启动结果处理模块\n2. 初始化任务信息、虚拟机信息、分析结果存储路径\n3. 获得处理功能列表\n4. 执行一个结果处理功能\n5. 初始化对应处理功能\n6. 获得分析数据读取路径\n7. 执行对应处理功能\n8. 返回关键字，对应处理功能结果\n9. 执行所有结果处理模块，返回全局结果容器\n\n### 3.6 家族签名模块\n\n#### 3.6.1 实现说明\n\n**家族签名模块**定义了一些特定的“签名”，用于表示特定的恶意行为模式或特征指标，一定程度上实现特定的恶意软件家族的类别划分，并将一些信息附加到一个全局容器中。这类特征简化了结果的解释，也可以自动识别感兴趣的恶意软件样本。所有签名位于`Bold-Falcon/modules/signatures/`目录或社区库的`Bold-Falcon/data/signatures/`目录下。\n\n+ 通过隔离一些独特的行为（如文件名或互斥）来识别您感兴趣的特定恶意软件系列\n\n+ 发现恶意软件在系统上执行的修改活动，例如安装设备驱动程序\n\n+ 通过隔离通常由银行特洛伊木马或勒索软件执行的典型操作，识别特定的恶意软件类别\n\n+ 将样本分类为恶意软件/未知类别，**无法识别未知的样本**\n\n**1）家族签名定义函数**\n\n**例：**检查是否有以“.exe”结尾的文件：在这种情况下，它将返回True，表示签名匹配，否则返回False\n\n```python\nfrom lib.cuckoo.common.abstracts import Signature\n\nclass CreatesExe(Signature):\n    name = \"creates_exe\"\n    description = \"Creates a Windows executable on the filesystem\"\n    severity = 2\n    categories = [\"generic\"]\n    authors = [\"Cuckoo Developers\"]\n    minimum = \"2.0\"\n\n    def on_complete(self):\n        return self.check_file(pattern=\".*\\\\.exe$\", regex=True)\n    \n    def on_call(self, call, pid, tid):\n        # 只用于事件签名\n```\n\n- 初始签名属性\n    - name：签名的标识符\n    - description：签名所代表内容的简要描述\n    - severity：标识匹配事件严重性的数字（通常在1到3之间）\n    - categories：描述匹配事件类型的类别列表，例如：banker, injection, anti-vm, Bold-Falcon.\n    - families：恶意软件家族名称列表（如果签名与已知签名高度匹配）\n    - authors：签名作者的列表\n    - references：提供签名上下文的引用（URL）列表\n    - enable：如果设置为False，则跳过签名\n    - alert：如果设置为True，则可用于指定应报告的签名\n    - minimum：成功运行此签名所需的最低沙箱版本\n    - maximum：成功运行此签名所需的最高沙箱版本\n- on_complete()：特征匹配签名函数，在签名进程结束时被调用\n- on_call()：签名匹配时执行的回调函数\n\n**2）家族签名运行函数**\n\n所有签名都将并行执行，并通过API调用集合为一个单循环中的每个签名调用回调函数on_call().\n\n```python\nclass RunSignatures(object):\n\n    def __init__(self, results):\n        # 初始化签名，记录标签API\n\n    def call_signature(self, signature, handler, *args, **kwargs):   \n        # 签名的包装器。这个包装器将事件产生给签名，并递归地处理匹配的签名\n      \n    def process_yara_matches(self):\n       \n    def process_extracted(self):\n\n    def run(self):\n      \n        self.process_yara_matches()\n        # 遍历所有Yara匹配项\n        self.process_extracted()\n        for sig in self.signatures:\n            self.call_signature(sig, sig.on_extract, ExtractedMatch(item))\n        # 遍历所有提取的匹配项    \n        self.matched.append(signature.results())\n        # 分数计算\n        score += signature.severity\n        # 按严重性级别对匹配的签名进行排序，并将其放入结果字典\n        self.matched.sort(key=lambda key: key[\"severity\"])\n        self.results[\"signatures\"] = self.matched\n        if \"info\" in self.results:\n            self.results[\"info\"][\"score\"] = score / 5.0\n    \n    required = [\"creates_exe\", \"badmalware\"]\n    \n    def on_signature(self, matched_sig):\n        # 将识别异常的多个签名组合为一个签名分类实例（恶意软件警报）\n        \n        if matched_sig in self.required:\n            self.required.remove(matched_sig)\n            \n        if not self.required:\n            return True\n        \n        return False\n```\n\n**3）生成的签名结果**、\n\n如果签名匹配成功，生成的签名结果将被添加到全局容器中。\n\n```python\n\"signatures\": [\n    {\n        \"severity\": 2,\n        \"description\": \"Creates a Windows executable on the filesystem\",\n        \"alert\": false,\n        \"references\": [],\n        \"data\": [\n            {\n                \"file_name\": \"C:\\\\d.exe\"\n            }\n        ],\n        \"name\": \"creates_exe\"\n    }\n]\n```\n\n**4）Yara规则**\n\n[Yara](https://yara.readthedocs.io/en/stable/)是一个能够帮助恶意软件研究人员识别和分类恶意软件样本的工具，使用Yara可以基于文本或二进制模式创建恶意软件家族描述信息。每一条YARA规则都由一系列字符串和一个布尔型表达式构成，并阐述其逻辑。Yara规则可以提交给正在运行的进程，**以帮助系统识别其样本是否属于某个已进行规则描述的恶意软件家族**。Yara规则语法类似于C语言，每个规则都以关键字“**rule**”开头，后面跟着一个规则标识符。规则示例如下：\n\n```c\nrule Test : Trojan\n{\n    //规则描述\n    meta:\n        author = \"Sunset\"\n        date = \"2021-04-21\"\n        description = \"Trojan Detection\"\n\n    //规则字符串\n    strings:\n        $a = {6A 40 68 00 30 00 00 6A 14 8D 91}\n        $b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}\n        $c = \"UVODFRYSIHLNWPEJXQZAKCBGMT\"\n\n    //条件表达式\n    condition:\n        $a or $b or $c\n}\n```\n\n根据已有的恶意软件家族的专家知识，现在一般将[Yara规则](https://github.com/Yara-Rules/rules)分为11类：\n\n1.  Antidebug_AntiVM：反调试/反沙箱类yara规则 \n2.  Crypto：加密类yara规则 \n3.  CVE_Rules：CVE漏洞利用类yara规则 \n4.  email：恶意邮件类yara规则 \n5.  Exploit-Kits：EK类yara规则 \n6.  Malicious_Documents：恶意文档类yara规则 \n7.  malware：恶意软件类yara规则 \n8.  Mobile_Malware：移动恶意软件类yara规则 \n9.  Packers：加壳类yara规则 \n10.  capabilities：通用类yara规则 \n11.  Webshells：Webshell类yara规则\n\n#### 3.6.2 实现流程\n\n**1)  家族签名模块时序图**\n\n```mermaid\n%% 时序图例子,-> 直线，-->虚线，->>实线箭头\n sequenceDiagram\n  participant 沙箱主机\n  participant 结果容器\n  autonumber \n      %%rect rgb(121, 255, 121)\n      沙箱主机->结果容器: 结果处理模块\n      沙箱主机->结果容器: 启动家族签名模块\n      #rect rgb(135,206,250)\n      沙箱主机->>沙箱主机: 初试化所有可用签名，记录标签API\n      沙箱主机->>结果容器: 遍历所有Yara规则\n      结果容器-->>沙箱主机: 记录匹配的Yara规则结果\n      沙箱主机->>结果容器: 遍历所有签名\n      结果容器-->>沙箱主机: 记录匹配的签名结果\n      沙箱主机->>沙箱主机: 签名分数计算\n      沙箱主机->>沙箱主机: 按严重性级别对匹配的签名进行排序\n      沙箱主机-->>结果容器: 将签名结果放入结果字典\n      沙箱主机->>结果容器: ...\n    #end\n```\n\n**2）家族签名模块流程设计**\n\n1. 文件分析模块\n2. 结果处理模块\n3. 启动家族签名模块\n4. 初试化所有可用签名，记录标签API\n5. 遍历所有匹配的Yara规则\n6. 遍历所匹配的签名\n7. 分数计算\n8. 按严重性级别对匹配的签名进行排序\n9. 将签名结果放入结果字典\n\n### 3.7 机器学习模块\n\n#### 3.7.1 实现说明\n\n**机器学习模块**定义一些基于机器学习的Windows恶意软件检测模型（其他文件检测模型后续添加），用于检测恶意软件，并将一些信息附加到一个全局容器中。\n\n**1) 检测模型定义函数 **\n\n```python\nfrom lib.cuckoo.common.exceptions import CuckooDetectionError\n\nclass Detection(object):\n    \"\"\"\n    Base abstract class for detection module.\n    \"\"\"\n    def set_options(self, options):\n        \"\"\" Set report options.\"\"\"\n    def set_path(self, analysis_path):\n        \"\"\"Set paths.\"\"\"\n    def set_task(self, task):\n        \"\"\"Add task information.\"\"\"\n    def load_instance(self, results):\n        \"\"\"\n        Initialize the sample instance and load the dictionary\n        need a class Instance \"\"\"\n    def run(self):\n        \"\"\" Start detection.\"\"\"\n        raise NotImplementedError    \n```\n\n```python\nclass MyDetection(Detection):\n \t\t\n    def load_features(self)\n    \t# 数据预处理\n    def load_model(self):\n      # 加载模型训练\n    def run(self, Y)\n    \t# 预测目标值\n      \treturn predict\n```\n\n+ extract_features()：数据预处理\n+ fit()：模型训练\n+ predict()：预测目标值\n\n**2）检测模型运行函数**\n\n```python\nclass RunDetection(object):\n\t\"\"\" plugins.py \"\"\"\n       \n    def __init__(self, task):\n        # 初始化模型信息\n        \n    def process(self, module, results):\n      \t# 执行一个检测模块\n        \n    def run(self):\n        # 执行所有结果检测模块，返回全局结果容器\n        # 获得 detection 功能列表\n        detection_list = cuckoo.detection.plugins\n        \n        for module in detection_list:\n            # 执行功能\n            model_name,predict = self.process(module, results)\n            if model_name and predict:\n                results[model_name] = predict\n        return results\n```\n\n+ \\__init\\_\\_(): 初始化检测模型\n+ process():\n    + 执行一个检测模块\n    + 初始化对应检测功能\n    + 如果在配置中禁用了检测模块，请跳过它\n    + 读取分析数据路径\n    + 加载预训练检测模型\n    + 特征工程\n    + 返回关键字，预测结果\n+ run(): 执行所有检测模块，返回全局结果容器\n\n**3）检测模型列表**\n\n| 名称         | 类型     | 特征        | 算法模型            |\n| ------------ | -------- | ----------- | ------------------- |\n| **Malconv**  | 静态分析 | 字节序列    | Malconv卷积神经网络 |\n| **String**   | 静态分析 | 字符串序列  | XGBoost集成学习模型 |\n| **Apistats** | 动态分析 | API调用序列 | XGBoost集成学习模型 |\n\n#### 3.7.2 实现流程\n\n**1）模型检测模块时序图**\n\n```mermaid\n%% 时序图例子,-> 直线，-->虚线，->>实线箭头\n sequenceDiagram\n  participant 沙箱主机\n  participant 任务目录\n  autonumber \n    #opt is run\n      %%rect rgb(121, 255, 121)\n      沙箱主机->任务目录: 启动机器学习模块\n      沙箱主机->任务目录: 初始化检测模型\n      #rect rgb(135,206,250)\n      沙箱主机->>沙箱主机: 获得检测模型功能列表\n      loop 执行检测功能列表\n      沙箱主机->>任务目录: 执行一个检测模块\n      沙箱主机->>任务目录: 初始化对应处理功能\n      任务目录-->>沙箱主机: 读取分析数据\n      任务目录-->>沙箱主机: 加载预训练检测模型\n      沙箱主机->>+任务目录: 特征工程\n      任务目录-->>-沙箱主机: 返回关键字，对应预测结果\n      end\n      沙箱主机->>沙箱主机: 全局结果容器\n      沙箱主机->任务目录: 机器学习模块结束\n      #end\n      沙箱主机->任务目录: ....\n    #end\n```\n\n**2）模型检测模块设计流程**\n\n1. 启动机器学习模块\n2. 初始化检测模型\n3. 获得检测模型功能列表\n4. 执行一个检测模块\n5. 初始化对应检测功能\n6. 如果在配置中禁用了检测模块，请跳过它\n7. 读取分析数据路径\n8. 加载预训练检测模型\n9. 特征工程\n10. 返回关键字，对应预测结果\n11. 执行所有检测模块\n12. 保存到全局结果容器\n13. 机器学习模块结束\n\n### 3.8 报告生成模块\n\n#### 3.8.1 实现说明\n\n在结果处理模块、家族签名模块、机器学习模块处理之后，**报告生成模块**定义了恶意软件分析报告生成的不同格式，将全局结果容器转化为json，将分析目录保存到非关系数据库 **(MongoDB)** 中。`Bold-Falcon/modules/reporting/`目录 中提供的所有处理模块，都属于结果处理模块。每个模块在 `Bold-Falcon/conf/reporting.conf`中都应该有一个专门的配置选项，供用户选择结果处理功能。\n\n**1）Json报告模块**\n\n接收结果处理模块生成的全局容器，将其转换为Json并写入文件\n\n```python\nfrom lib.cuckoo.common.abstracts import Report\n\nclass JsonDump(Report):\n\n    def erase_calls(self, results):\n        # 通过将调用替换为空列表，暂时从报表中删除\n        \n    def run(self, results)\n        # 将report.json写入report文件夹\n```\n\n+ erase_calls(): 通过将调用替换为空列表，暂时从报表中删除\n+ run(): 将report.json写入report文件夹\n\n**2)  MongoDB存储函数**\n\n```python\nclass MongoDB(Report):\n\n    @classmethod\n    def init_once(cls):\n      \t# 初始化mongo数据库\n\n    def store_file(self, file_obj, filename=\"\"):\n        # 存储成 GridFS 文件格式.\n \n    def run(self, results):\n        # 创建词典的副本。这样做是为了不修改原始字典，并可能损害以下报告模块\n        # 依次读取结果容器字段，并保存\n        self.db.analysis.save(report)\n```\n\n+ init_once(): 初始化mongo数据库\n+ store_file(): 储成 GridFS 文件格式\n+ run():\n    + 创建词典的副本。这样做是为了不修改原始字典，并可能损害以下报告模块\n    + 依次读取结果容器字段，并保存\n\n**3）报告生成运行函数**\n\n```python\nclass RunReporting(object):\n\n    def __init__(self, task, results):\n      \t# 初始化任务、结果容器、任务目录\n        \n    def process(self, module):\n       \t# 执行一个生成功能模块\n        # 初始化生成功能模块\n        # 获得分析任务目录\n    \t  # 执行对应处理功能\n        current.run(self.results)\n    \n    def run(self):\n        #依次执行report模块jsondump,mongodb\n        reporting_list = cuckoo.reporting.plugins\n        \n        for module in reporting_list:\n            self.process(module)\n```\n\n#### 3.8.2 实现流程\n\n**1）报告生成模块时序图**\n\n```mermaid\n%% 时序图例子,-> 直线，-->虚线，->>实线箭头\n sequenceDiagram\n  participant 沙箱主机\n  participant 任务目录\n  participant 数据库\n  autonumber \n    #opt is run\n      %%rect rgb(121, 255, 121)\n      沙箱主机->任务目录: 启动报告生成模块\n      沙箱主机->数据库: 初始化结果容器、任务目录\n      #rect rgb(135,206,250)\n      沙箱主机->>沙箱主机: 获得报告生成功能列表（jsondump,mongodb）\n      沙箱主机->>任务目录: 执行一个jsondump生成功能\n      沙箱主机->>任务目录: 初始化jsondump生成功能\n      沙箱主机-->>任务目录: 通过将调用替换为空列表，暂时从报表中删除\n      沙箱主机-->>任务目录: 将report.json写入report文件夹\n      沙箱主机->>任务目录: 执行一个mongodb生成功能\n      沙箱主机->>任务目录: 初始化mongodb生辰功能\n      任务目录-->>沙箱主机: 创建结果容器的副本\n      loop 数据库存储\n      沙箱主机-->>沙箱主机: 依次读取结果容器字段\n      沙箱主机-->>数据库: 并保存到数据库\n      end\n      沙箱主机->任务目录: 报告生成模块结束\n      #end\n      沙箱主机->任务目录: ....\n    #end\n```\n\n**2）报告生成模块实现流程**\n\n1. 启动报告生成模块\n\n2. 初始化 任务、结果容器、任务目录\n3. 获得报告生成功能列表（jsondump,mongodb）\n4. 执行一个jsondump生成功能\n5. 初始化对应生成功能\n6. 通过将调用替换为空列表，暂时从报表中删除\n7. 将report.json写入report文件夹\n8. 执行一个mongodb生成功能\n9. 初始化对应生成功能\n10. 创建词典的副本\n11. 依次读取结果容器字段\n12. 保存到数据库\n13. 报告生成模块结束\n\n### 3.9 用户交互模块\n\n#### 3.9.1 实现说明\n\n**1）前端框架Django**\n\n前端基于Python的Django框架开发，Django是一个开源的Web应用框架，采用MTV的框架模式：Model(模型), Template(模板), Views(视图)\n\n| 模块     | 功能                                                         |\n| -------- | ------------------------------------------------------------ |\n| Model    | 数据存取层，处理和数据相关的所有事物                         |\n| Template | 表现层，处理与表现相关的决定                                 |\n| Views    | 业务逻辑层，存取模型以及调取恰当的模板，是模板和模型之间的桥梁 |\n\n![Django框架](/Users/apple/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/076b7987d1501ed1ebeee6aecab0dccc/Message/MessageTemp/209186dee58a2f4b843a841addd1a580/File/图-交互设计/Django框架.png)\t\t\n\n**2）Django的一些特性：**\n\n| 特性     | 内容                                                         |\n| -------- | ------------------------------------------------------------ |\n| URL设计  | 可以设计任意的URL，而且还支持使用正则表达式匹配              |\n| 模板系统 | 提供可扩展的模板语言，并且模板之间具有继承性                 |\n| Nginx    | Nginx是一款轻量级的Web服务器，占用内存少，并发性强           |\n| WSGI     | 是一种为Python语言定义的Web服务器和Web应用程序或框架之间的通用的接口协议 |\n\n**3）WSGI的三级架构：**\n\n![WSGI三级架构](/Users/apple/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/076b7987d1501ed1ebeee6aecab0dccc/Message/MessageTemp/209186dee58a2f4b843a841addd1a580/File/图-交互设计/WSGI三级架构.png)\n\n**4）项目配置说明**\n\n项目应用路径为`Bold-Falcon/web`,项目总体设置：`Bold-Falcon/web/web/setting.py`文件中，包含了整个应用的配置信息，包括数据库连接、静态资源和url的路径定义、中间件和cookie的配置、模板文件的配置等\n\n```python\nmongo.connect()\nDATABASES = {}\n\t#数据库连接\n    \nSTATIC_URL = \"/static/\"\nSTATICFILES_DIRS = (\n    ...#添加静态资源路径\n)\n\nSECURE_PROXY_SSL_HEADER = (\"HTTP_X_FORWARDED_PROTO\", \"https\")\n\t#配置https\n    \nSESSION_ENGINE = \"django.contrib.sessions.backends.signed_cookies\"\nSESSION_COOKIE_HTTPONLY = True\n\t#配置cookie\n    \nSTATICFILES_FINDERS = (\n\t...#finder函数用来寻找静态文件\n)\n\nMIDDLEWARE_CLASSES = (\n\t...#配置中间件\n)\n\nROOT_URLCONF = \"web.urls\"\n\t#配置路由路径\n    \nTEMPLATES = [\n\t...#配置模板文件路径\n]\n\nWSGI_APPLICATION = \"web.wsgi.application\"\n\t#注册WSGI服务\n    \nINSTALLED_APPS = (\n\t...#注册应用\n)\n```\n\n**项目url配置：**`Bold-Falcon/web/web/urls.py`文件中配置了视图类views绑定页面的url\n\n```python\nurlpatterns = [\n\t...#自定义URL绑定视图函数\n]\n\nhandler404 = web.errors.handler404\nhandler500 = web.errors.handler500\n\t#错误页面绑定自定义视图\n```\n\n**数据库配置：**前端数据库使用非关系型数据库MongoDB.数据库配置信息：`lib/cuckoo/common/config.py`\n\n```python\n\"mongodb\": {\n    \"enabled\": Boolean(False),\n    \"host\": String(\"127.0.0.1\"),\n    \"port\": Int(27017),\n    \"db\": String(\"cuckoo\"),\n    \"store_memdump\": Boolean(True),\n    \"paginate\": Int(100),\n    \"username\": String(),\n    \"password\": String(),\n},\n```\n\n在Django前端框架中配置并连接数据库：`Bold-Falcon/web/web/setting.py`\n\n```python\nmongo.connect()\n```\n\n```python\nclass Mongo(object):\n    def init(self):\n        #初始化\n    def drop(self):\n        #删除数据库表\n    def close(self):\n        #关闭数据库链接\n    def connect(self):\n        #连接数据库\n```\n\n**API接口：**获取数据库Analysis表的数据的API接口定义在`Bold-Falcon/web/controllers/analysis/api.py`\n\n```python\ndb = Database()\n\t#数据库连接\n\t\nclass AnalysisApi(object):\n\n    def tasks_list(request, body):\n        #获取任务列表\n    def task_info(request, task_id):\n        #获取指定任务信息\n\t\tdef task_delete(request, task_id):\n        #删除指定任务\n    def task_screenshots(request, task_id, screenshot=None):\n        #获取指定任务截图\n    def tasks_stats(request, body):\n        #返回任务状态\n    def tasks_recent(request, body):\n        #返回最近任务\n    ...\n```\n\n## 四、运行结果/应用效果\n\n`毕方智能云沙箱`名字来源：`Bold-Falcon`译为无畏的雄鹰，其中取首字母`毕方`为山海经神鸟之一。\n\n### 4.1 沙箱提交界面\n\n![沙箱提交界面](../pics/界面/沙箱提交界面.png)\n\n### 4.2 样本分析界面\n\n**（1）摘要分析报告**\n\n![样本分析界面1](../pics/界面/样本分析界面1.png)\n\n**（2）静态分析报告**\n\n![静态分析结果](../pics/界面/静态分析结果.png)\n\n**（3）动态分析报告**\n\n![动态分析界面](../pics/界面/动态分析界面.png)\n\n**（4）流量分析报告**\n\n![流量分析界面](../pics/界面/流量分析界面.png)\n\n### 4.3 历史报告查询\n\n![image-20210713232137555](../pics/历史任务.png)\n\n### 2.3.4 分析结果下载\n\n![导出分析结果界面](../pics/界面/导出分析结果界面.png) \n\n## 五、创新与特色\n\n本作品针对传统沙箱不能识别未知的恶意软件的痛点，将基于机器学习的恶意软件检测技术赋能到传统沙箱中，增加了目前最先进的基于人工智能的恶意软件检测技术实现对未知恶意软件检测的功能。其检测方法中除了使用基于静态分析和动态分析提取的恶意软件检测器需要的特征信息之外，还实现了无需特征提取的基于深度学习的恶意软件检测模型，使沙箱在对恶意软件检测效率和准确率都得到了很大的提升。本作品整体架构由一个沙箱主机和多个独立的虚拟机组成，包括辅助功能、机器交互、文件分析、结果处理、家族签名、机器学习、报告生成、用户交互八个功能模块。实现了如下核心功能：     \n\n1.  本作品实现自动在虚拟运行和分析exe、dll、pdf、office、zip、jar、python等格式文件并收集流量、进程调用、内存、家族签名、样本静态信息等分析结果。      \n2.  本作品兼容Cuckoo沙箱的开源社区,它是一个致力于社区贡献的开源数据库。可以使用最新的代理agent、注入脚本monitor和分析脚本analzyer等功能模块。\n3.  本作品不仅实现使用基于字节熵直方图、PE静态特征、字符串序列等静态特征的检测模型。还实现了基于API调用序列等动态特征的检测模型。并且封装了沙箱所有特征提取方法供研究人员自定义机器学习的检测模型。   \n4.   本作品实现了目前最先进的基于字节序列的深度学习检测模型MalConv。无需专家经验，无需特征提取和处理，亦可实现快速高效的检测恶意软件。\n\n##  六、使用\n\n这部分解释如何使用Bold-Falcon沙箱。\n\n## 6.1 启动沙箱\n\n使用如下命令启动 Bold-Falcon沙箱：\n\n```shell\n$ cuckoo\n```\n\n你会得到如下类似的输出：\n\n```shell\n     ____        _     _       _____     _                 \n    | __ )  ___ | | __| |     |  ___|_ _| | ___ ___  _ __  \n    |  _ \\ / _ \\| |/ _` |_____| |_ / _` | |/ __/ _ \\| '_ \\ \n    | |_) | (_) | | (_| |_____|  _| (_| | | (_| (_) | | | |\n    |____/ \\___/|_|\\__,_|     |_|  \\__,_|_|\\___\\___/|_| |_|\n    \n\n Bold-Falcon Sandbox 2.0-dev\n https://github.com/PowerLZY/Bold-Falcon\n Copyright (c) 2020-2021\n\n2021-07-12 21:58:45,841 [lib.cuckoo.core.resultserver] WARNING: Cannot bind ResultServer on port 2042, trying another port.\n2021-07-12 21:58:45,843 [lib.cuckoo.core.scheduler] INFO: Using \"virtualbox\" as machine manager\n2021-07-12 21:58:47,256 [lib.cuckoo.core.scheduler] INFO: Loaded 1 machine/s\n2021-07-12 21:58:47,270 [lib.cuckoo.core.scheduler] INFO: Waiting for analysis tasks.\n```\n\n你可以使用一些命令行选项，比如`cuckoo --help`\n\n```shell\n$ cuckoo --help\nusage: cuckoo.py [-h] [-q] [-d] [-v] [-a] [-t] [-m MAX_ANALYSIS_COUNT]\n                 [-u USER] [--ml] [--clean]\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -q, --quiet           Display only error messages\n  -d, --debug           Display debug messages\n  -v, --version         show program's version number and exit\n  -a, --artwork         Show artwork\n  -t, --test            Test startup\n  -m MAX_ANALYSIS_COUNT, --max-analysis-count MAX_ANALYSIS_COUNT\n                        Maximum number of analyses\n  -u USER, --user USER  Drop user privileges to this user\n  --ml                  CuckooML: cluster reports and compare new samples\n  --clean               Remove all tasks and samples and their associated data\n\n```\n\n### 6.2 样本提交\n\nBold-Falcon沙箱有`Django Web`、`Submit`and`API`三种分析样本的方法。\n\n#### 6.2.1 Django Web\n\nBold-Falcon以Django应用程序的形式提供了一个完整的web界面。此界面将允许您提交文件、浏览报告以及统计所有分析结果。\n\n#### 配置\n\nWeb界面从`Mongo`数据库中提取数据，因此在`reporting`模块中启用了`Mongo` 模块。配置文件是Web界面运行所必需的。`Bold-Falcon/web/local_settings.py`配置文件中存在一些其他配置选项。\n\n#### 启动Web界面\n\n要启动web界面，只需从`Bold-Falcon/web`目录运行以下命令：\n\n```shell\n$  manage.py \n```\n\n如果要将web界面配置为侦听指定端口上的任何IP，可以使用以下命令启动它（用所需的端口号替换端口）：\n\n```shell\n$  manage.py 0.0.0.0:PORT\n```\n\n#### 6.2.2 Submit脚本\n\n提交分析的最简单方法是在`utils\\submit.py` 使用`Bold-Falcon submit`实用程序。它目前有以下可用选项：\n\n```shell\n$  submit --help\nusage: submit.py [-h] [-d] [--remote REMOTE] [--url] [--package PACKAGE]\n                 [--custom CUSTOM] [--owner OWNER] [--timeout TIMEOUT]\n                 [-o OPTIONS] [--priority PRIORITY] [--machine MACHINE]\n                 [--platform PLATFORM] [--memory] [--enforce-timeout]\n                 [--clock CLOCK] [--tags TAGS] [--baseline] [--max MAX]\n                 [--pattern PATTERN] [--shuffle] [--unique] [--quiet]\n                 [target]\n\npositional arguments:\n  target                URL, path to the file or folder to analyze\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -d, --debug           Enable debug logging\n  --remote REMOTE       Specify IP:port to a Cuckoo API server to submit\n                        remotely\n  --url                 Specify whether the target is an URL\n  --package PACKAGE     Specify an analysis package\n  --custom CUSTOM       Specify any custom value\n  --owner OWNER         Specify the task owner\n  --timeout TIMEOUT     Specify an analysis timeout\n  -o OPTIONS, --options OPTIONS\n                        Specify options for the analysis package (e.g.\n                        \"name=value,name2=value2\")\n  --priority PRIORITY   Specify a priority for the analysis represented by an\n                        integer\n  --machine MACHINE     Specify the identifier of a machine you want to use\n  --platform PLATFORM   Specify the operating system platform you want to use\n                        (windows/darwin/linux)\n  --memory              Enable to take a memory dump of the analysis machine\n  --enforce-timeout     Enable to force the analysis to run for the full\n                        timeout period\n  --clock CLOCK         Set virtual machine clock\n  --tags TAGS           Specify tags identifier of a machine you want to use\n  --baseline            Run a baseline analysis\n  --max MAX             Maximum samples to add in a row\n  --pattern PATTERN     Pattern of files to submit\n  --shuffle             Shuffle samples before submitting them\n  --unique              Only submit new samples, ignore duplicates\n  --quiet               Only print text on failure\n```\n\n**以下是一些用法示例：**\n\n(1) 提交一个本地文件\n\n```shell\n$  submit /path/to/binary\n```\n\n(2) 提交一个本地文件并明确优先级\n\n```shell\n$  submit --priority 5 /path/to/binary\n```\n\n(3) 提交一个本地文件并明确分析60s\n\n```shell\n$  submit --timeout 60 /path/to/binary\n```\n\n#### 6.2.3 API访问\n\n正如提交分析中所提到的，Bold-Falcon沙箱兼容cuckoo沙箱提供了一个简单而轻量级的restapi服务器，它是使用Flask实现的。\n\n#### 开启API服务器\n\n在`Bold-Falcon\\utils`使用如下命令启动 API服务：\n\n```shell\n$  api\n$  * Running on http://localhost:8090/ (Press CTRL+C to quit)\n```\n\n默认情况下，它绑定的服务是`localhost:8090`, 如果你想要的去改变这些值，可以使用如下语法：\n\n```shell\n$  cuckoo api --host 0.0.0.0 --port 1337\n$  cuckoo api -H 0.0.0.0 -p 1337\n```\n\n使用API需要进行身份验证，必须将``cuckoo.conf``的``api_token``的值填充在``Authorization: Bearer <token>``中。\n\n#### 资源\n\n以下是当前可用资源的列表以及每个资源的简要说明。有关详细信息，请单击资源名称。\n\n| 访问方式                    | 描述                                          |\n| --------------------------- | --------------------------------------------- |\n| `POST /tasks/create/file`   | 将文件添加到待处理任务列表中并分析            |\n| `POST /tasks/create/url`    | 将URL添加到待处理任务列表中并分析             |\n| `POST /tasks/create/submit` | 将一个或多个文件添加到待分析的任务列表中      |\n| `GET /tasks/list`           | 返回一个存储在内部Bold-Falcon数据库的任务列表 |\n| `GET /tasks/sample`         | 返回一个存储在内部Bold-Falcon数据库的样本列表 |\n| `GET /tasks/view`           | 返回一个对应ID的任务信息                      |\n| `GET /tasks/delete`         | 删除一个数据库中的任务信息                    |\n| `GET /tasks/report`         | 返回一个对应ID任务生成的json报告              |\n| `GET /tasks/summary`        | 返回一个对应ID任务生成的摘要json报告          |\n| `GET /tasks/screenshots`    | 返回一个对应ID任务生成的所有截图文件          |\n| `GET /files/view`           | 返回一个对应ID的MD5、SHA256等标识             |\n| `GET /files/get`            | 返回二进制样本内容和对应SHA256                |\n| `GET /pcap/get`             | 返回相关任务的PCAP网络流量包                  |\n| `GET  /machines/list`       | 返回目前Bold-Falcon依赖的虚拟机列表           |\n| `GET /cuckoo/status`        | 返回目前Bold-Falcon的版本和状态               |\n| `GET /exit`                 | 关闭API服务器                                 |\n\n**以下是一些用法示例：**                                                       \n\n**（1）POST /tasks/create/file**\n\n将文件添加到待处理任务列表中并分析\n\n**请求示例**:\n\n```shell\ncurl -H \"Authorization: Bearer S4MPL3\" -F file=@/path/to/file http://localhost:8090/tasks/create/file\n```\n\n**使用Python的请求示例**\n\n\n```python\nimport requests\n\nREST_URL = \"http://localhost:8090/tasks/create/file\"\nSAMPLE_FILE = \"/path/to/malwr.exe\"\nHEADERS = {\"Authorization\": \"Bearer S4MPL3\"}\n\nwith open(SAMPLE_FILE, \"rb\") as sample:\n    files = {\"file\": (\"temp_file_name\", sample)}\n    r = requests.post(REST_URL, headers=HEADERS, files=files)\n\n# Add your code to error checking for r.status_code.\n\ntask_id = r.json()[\"task_id\"]\n\n# Add your code for error checking if task_id is None.\n```\n\n**响应示例**\n\n```json\n{\n    \"task_id\" : 1\n}\n```\n\n**（2）POST /tasks/create/url**\n\n将URL添加到待处理任务列表中并分析\n\n**请求示例**\n\n\n```shell\ncurl -H \"Authorization: Bearer S4MPL3\" -F url=\"http://www.malicious.site\" http://localhost:8090/tasks/create/url\n```\n\n**使用Python的请求示例**\n\n```python\nimport requests\n\nREST_URL = \"http://localhost:8090/tasks/create/url\"\nSAMPLE_URL = \"http://example.org/malwr.exe\"\nHEADERS = {\"Authorization\": \"Bearer S4MPL3\"}\n\ndata = {\"url\": SAMPLE_URL}\nr = requests.post(REST_URL, headers=HEADERS, data=data)\n\n# Add your code to error checking for r.status_code.\n\ntask_id = r.json()[\"task_id\"]\n\n# Add your code to error checking if task_id is None.\n```\n\n**（3）POST /tasks/create/submit**\n\n将一个或多个文件添加到待分析的任务列表中\n\n**请求示例**\n\n\n```shell\n# Submit two executables.\ncurl -H \"Authorization: Bearer S4MPL3\" http://localhost:8090/tasks/create/submit -F files=@1.exe -F files=@2.exe\n\n# Submit http://google.com\ncurl -H \"Authorization: Bearer S4MPL3\" http://localhost:8090/tasks/create/submit -F strings=google.com\n\n# Submit http://google.com & http://facebook.com\ncurl -H \"Authorization: Bearer S4MPL3\" http://localhost:8090/tasks/create/submit -F strings=$'google.com\\nfacebook.com'\n```\n\n**使用Python的请求示例**\n\n\n```python\nimport requests\n\nHEADERS = {\"Authorization\": \"Bearer S4MPL3\"}\n\n# Submit one or more files.\nr = requests.post(\"http://localhost:8090/tasks/create/submit\", files=[\n    (\"files\", open(\"1.exe\", \"rb\")),\n    (\"files\", open(\"2.exe\", \"rb\")),\n], headers=HEADERS)\n\n# Add your code to error checking for r.status_code.\n\nsubmit_id = r.json()[\"submit_id\"]\ntask_ids = r.json()[\"task_ids\"]\nerrors = r.json()[\"errors\"]\n\n# Add your code to error checking on \"errors\".\n\n# Submit one or more URLs or hashes.\nurls = [\n    \"google.com\", \"facebook.com\", \"cuckoosandbox.org\",\n]\nr = requests.post(\n    \"http://localhost:8090/tasks/create/submit\",\n    headers=HEADERS,\n    data={\"strings\": \"\\n\".join(urls)}\n)\n```\n\n**响应事例**\n\n\n```json\n{\n    \"submit_id\": 1,\n    \"task_ids\": [1, 2],\n    \"errors\": []\n}\n```\n\n**（4） GET /files/get/ *(str: sha256)***\n\n返回二进制样本内容和对应SHA256\n\n**请求示例**\n\n```shell\ncurl -H \"Authorization: Bearer S4MPL3\" http://localhost:8090/files/get/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 > sample.exe\n```\n\n**（5）GET /machines/list**\n\n\n返回目前Bold-Falcon依赖的虚拟机列表\n\n**请求示例**\n\n```shell\ncurl -H \"Authorization: Bearer S4MPL3\" http://localhost:8090/machines/list\n```\n\n**响应示例**\n\n```json\n{\n    \"machines\": [\n        {\n            \"status\": null,\n            \"locked\": false,\n            \"name\": \"cuckoo1\",\n            \"resultserver_ip\": \"192.168.56.1\",\n            \"ip\": \"192.168.56.101\",\n            \"tags\": [\n                        \"32bit\",\n                        \"acrobat_6\",\n                    ],\n            \"label\": \"cuckoo1\",\n            \"locked_changed_on\": null,\n            \"platform\": \"windows\",\n            \"snapshot\": null,\n            \"interface\": null,\n            \"status_changed_on\": null,\n            \"id\": 1,\n            \"resultserver_port\": \"2042\"\n        }\n    ]\n}\n```\n\n**（6）GET /exit**\n\n如果处于调试模式并使用werkzeug服务器，则关闭服务器。\n\n**请求示例**\n\n```shell\ncurl -H \"Authorization: Bearer S4MPL3\" http://localhost:8090/exit\n```\n\n### 6.3 社区\n\nBold-Falcon沙箱兼容Cuckoo沙箱的[开源社区](https://github.com/cuckoosandbox/community),它是一个致力于社区贡献的开放存储库。在这里，您可以提交为布谷鸟沙盒设置编写的自定义模块，并希望与社区的其他成员共享这些模块。其中包括代理agent、分析脚本analzyer和各种功能模块。\n\n如果想要从[开源社区](https://github.com/cuckoosandbox/community)下载对应数据到`Bold-Falcon\\data`下，可以使用`Bold-Falcon\\utils\\community`：\n\n```shell\n$  cummunity -h\nusage: community.py [-h] [-a] [-s] [-p] [-m] [-n] [-M] [-g] [-r] [-f] [-w]\n                    [-b BRANCH]\n                    [archive]\n\npositional arguments:\n  archive               Install a stored archive\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -a, --all             Download everything\n  -s, --signatures      Download Cuckoo signatures\n  -p, --processing      Download processing modules\n  -m, --machinery       Download machine managers\n  -n, --analyzer        Download analyzer modules\n  -M, --monitor         Download monitoring binaries\n  -g, --agent           Download agent modules\n  -r, --reporting       Download reporting modules\n  -f, --force           Install files without confirmation\n  -w, --rewrite         Rewrite existing files\n  -b BRANCH, --branch BRANCH\n```\n\n**例：重写所有开源数据到最新版**\n\n```shell\n$  cummunity -waf\n```\n\n### 6.4 分析样本获取\n\n#### 6.4.1 样本分享\n\nBold-Falcon沙箱分享了200个已经分析完成的json报告在`百度云盘`如下链接：\n\n```html\nhttps://pan.baidu.com/s/19TRWbQSRWJHetUBpNtMj_w 提取码: r7gk \n```\n\nBold-Falcon沙箱分享了一些32bit的windows样本在`百度云盘`如下链接：\n\n```\nhttps://pan.baidu.com/s/1x6a9j7D7Ktp242fcJhT5aA 提取码: qxbp \n```\n\n#### 6.4.2 开源样本\n\n如果你想要获取更多的`恶意样本`请访问查询：\n\n**推荐：**\n\n-   [Blue Hexagon Open Dataset for Malware AnalysiS (BODMAS)](https://whyisyoung.github.io/BODMAS/)\n-   [EMBER](https://github.com/elastic/ember) - Endgame Malware BEnchmark for Research\n-   [Malware Training Sets: A machine learning dataset for everyone](http://marcoramilli.blogspot.cz/2016/12/malware-training-sets-machine-learning.html) ([data](https://github.com/marcoramilli/MalwareTrainingSets))\n-   [SoReL-20M](https://github.com/sophos-ai/SOREL-20M) - Sophos-ReversingLabs 20 Million dataset.\n-   [Virusshare](https://virusshare.com/)\n\n**其他：**\n\n+   [Samples of Security Related Dats](http://www.secrepo.com/)\n+   [DARPA Intrusion Detection Data Sets](https://www.ll.mit.edu/ideval/data/)\n+   [Stratosphere IPS Data Sets](https://stratosphereips.org/category/dataset.html)\n+   [Open Data Sets](http://csr.lanl.gov/data/)\n+   [Data Capture from National Security Agency](http://www.westpoint.edu/crc/SitePages/DataSets.aspx)\n+   [The ADFA Intrusion Detection Data Sets](https://www.unsw.adfa.edu.au/australian-centre-for-cyber-security/cybersecurity/ADFA-IDS-Datasets)\n+   [NSL-KDD Data Sets](https://github.com/defcom17/NSL_KDD)\n+   [Malicious URLs Data Sets](https://sysnet.ucsd.edu/projects/url)\n+   [Multi-Source Cyber-Security Events](http://csr.lanl.gov/data/cyber1/)\n+   [Malware Training Sets: A machine learning dataset for everyone](http://marcoramilli.blogspot.cz/2016/12/malware-training-sets-machine-learning.html)\n\n如果你想要获取更多的`良性样本`请在如下等网络自行爬取：\n\n-   [portablefreeware](http://www.portablefreeware.com/)\n-   [onlyfreewares](http://www.onlyfreewares.com/)\n-   [snapfiles](https://www.snapfiles.com/new/list-whatsnew.html)\n-   [downloadcrew](https://downloadcrew.com/)\n\n \n\n \n\n \n\n \n\n \n"
  },
  {
    "path": "docs-old/AUTHORS",
    "content": "                                    AUTHORS\n\nCuckoo is the result of the work and efforts of many people. Some main developers\nand some friends and users who kindly provided us with feedback and new features.\nYou'll find contributions to the code mentioned in the specific source files.\n\nDEVELOPERS:\nClaudio \"nex\" Guarnieri     Lead Developer    @botherder\nAlessandro \"jekil\" Tanasi   Developer         @jekil\nJurriaan \"skier\" Bremer     Developer         @skier_t\nMark \"rep\" Schloesser       Developer         @repmovsb\n\nCONTRIBUTORS:\n$ git shortlog -s -n\n  1058  Nex\n   960  jekil\n   286  Jurriaan Bremer\n   242  rep\n   185  nex\n    72  Ivan Kirillov\n    70  Thorsten Sick\n    35  Alessandro Tanasi\n    24  Mark Schloesser\n    24  Pietro Delsante\n    22  David Maciejak\n    15  Adam Meily\n    14  Justin Roberts\n    13  Greg Back\n    11  r3comp1le\n     9  Christopher Schmitt\n     9  Script Kiddie\n     7  Hugh Pearse\n     7  SpoonBoy\n     6  Tal Jerome\n     6  init99\n     5  David Francos\n     5  jamu\n     5  lehmz\n     4  Adam Pridgen\n     4  Ben Small\n     3  Allen Swackhamer\n     3  Espen Fjellvær Olsen\n     3  Jerome Marty\n     3  KillerInstinct\n     3  Nagy Ferenc László\n     3  Stephen DiCato\n     3  mak\n     3  robertsjw\n     3  wzr\n     3  z0mbiehunt3r\n     2  Claudio Guarnieri\n     2  Gael Muller\n     2  Mario Vilas\n     2  Max Taube\n     2  Neriberto C.Prado\n     2  Richard Harman\n     2  Roberto Abdelkader Martínez Pérez\n     2  SecTecRes\n     2  Thomas Penteker\n     2  Will Metcalf\n     2  bcyrill\n     2  kholbrook1303\n     2  mcpacosy\n     2  mt00at\n     2  upsidedwn\n     1  =\n     1  Aitor Gómez\n     1  Alexander J\n     1  Andrea De Pasquale\n     1  Ben Lyon\n     1  Benjamin Vanheuverzwijn\n     1  Crashman1983\n     1  Henrique Menezes\n     1  John Davison\n     1  Mark Woan\n     1  Micha Lenk\n     1  Nitzan Carmel\n     1  Ryan Peck\n     1  SnakeByte Lab\n     1  Valter Santos\n     1  bladeswords\n     1  chimerhapsody\n     1  chort\n     1  chrestme\n     1  jvoisin\n     1  sabri\n     1  shendo\n     1  vacmf\n\nThanks to the whole community and mailing list members who submitted bug\nreports and suggested new features.\n"
  },
  {
    "path": "docs-old/CHANGELOG",
    "content": "                                  CHANGELOG\n\nCuckoo Sandbox 2.0-rc2 (2016-xx-xx)\n===================================\n\n* Import and Export analysis for improved debugging of user issues\n* Added Elasticsearch support and rely on it for global search\n* Fixed pythonw.exe execution for the new Agent\n* Added .docm documents to the Word document analysis package\n* Added .wsf analysis package\n* Added dynamic VBA analysis for Office 2007 products\n* Added PE files reconstruction from memory dumps\n* Added dump_delete option to delete process memory dumps after analysis\n* Added sniffer.debug option to create a debug network capture\n* Fixed setting the clock in the Guest for non-English users\n* Added PID tracking for dropped files\n* Automatically start PowerPoint documents in slide show mode\n* Use the Linux routing table for properly routing analysis traffic\n* Document known 2.0-rc1 issues and fixes in our FAQ\n* Prettify HTML and Javascript content\n* Make Cuckoo Agent interaction less error prone on the Host\n* Updated monitor to include various improvements and fixes\n* Custom DNS serve utility\n* Added clicking through of French buttons\n* Resolve names for CLSID identifiers\n* Added meta information to our reports\n* Experimental alpha version of VPN check cronjob script\n* Many Web Interface UI & backend tweaks\n* Many, many bug fixes and code tweaks\n\nCuckoo Sandbox 2.0-rc1 (2016-01-21)\n===================================\n\n* Added Suricata processing module\n* Added screenshots processing module with OCR support\n* Added mitmproxy support to intercept SSL/TLS traffic\n* Added new Flask based distributed utility\n* Added Javascript analyzer package\n* Added Mozilla FireFox analyzer packege\n* Added auxiliary module to install a custom certificate in analysis' machine\n* Added auxiliary module to dump TLS master secrets as used by Windows libraries\n* Added analyzer for Linux\n* Added Qemu machinery module\n* Added PDB path extraction\n* Added public / private keys extraction\n* Added processing module for dropped buffers\n* Added option to drop privileges to a specified user\n* Added SMTP sinkhole utility\n* Added Javascript execution with jsbeautifier\n* Added \"service\" VM to optionally boot a second VM with honeyd support\n* Added noagent machine option for not engaging with cuckoo agent\n* Added nictrace machine option to have virtualbox dump network traffic\n* Added per-machine options (it allows to set extra per-machine options)\n* Added near realtime detection and reflection of changes to guest status\n* Added TLS & SSLv3 Master Secrets dump\n* Added httpreplay dissector to show HTTP and HTTPS traffic\n* Added option to skip calls from JSON report\n* Added option to load the entire process memory dump into IDA Pro\n* Added some process memory dump analysis improvements\n* Added URLs parsing from memory dump and URLs whitelist\n* Added tracking and reporting dead IP address/port combinations\n* Added maliciousness scoring system\n* Added option to web interface to submit dropped files for analysis\n* Added some performance improvements to signature engine\n* Added Volatility support for netscan and sockscan\n* Added re-submit button to web interface\n* Added baseline processing and representation\n* Added traffic routing options\n* Added moloch processing module\n* Added Snort processing module\n* By default HTML report is disabled now\n* By default Virtualbox is starting in headless mode now\n* Improved physical machine support\n* Improved reported data from Virustotal\n* Upgraded HTML analyzer package to Internet Explorer with proper setup phase\n* Upgraded to MAEC 4.1\n* Removed web.py interface\n* Removed option to store analysis data in legacy CSV format\n\nCuckoo Sandbox 1.2 (2015-03-04)\n===============================\n\n* Added support for baremetal analysis (physical machinery module)\n* Added XenServer machinery module\n* Added process memory processing module\n* Added support for Volatility 2.4 and additional modules\n* Added more memory analysis information to web interface\n* Added memory dump to VMWare workstation module\n* Added machine information in reports\n* Added skeleton for comparative analysis of two reports\n* Added TCP and UDP streams hexdump view\n* Added possibility to delete analysis from web interface\n* Added search by string to web interface\n* Added dynamic search of API call logs to web interface\n* Added display of PE compilation time to web interface\n* Added memory dump download to web interface\n* Refactored analysis packages and simplified syntax\n* Added analysis package for Microsoft PowerPoint\n* Added analysis package for MSI (Windows installer package)\n* Added analysis package for Python scripts\n* Added loader option to DLL analysis package (fake parent process)\n* Added additional signatures helper functions\n* Added terminate_processes option to terminate processes before virtual machine shutdown\n* Added option to skip an area when comparing screenshots, avoiding duplicates\n* Added automatic generation of Yara rules indexes\n* Added support for Pillow (PIL fork)\n* Added machine utility to automatically update machinery configuration\n* Added utility to distribute analysis across Cuckoo instances\n* Added un-hook detection (if malware removes Cuckoo's hooks) \n* Added Microsoft Crypto API hooks\n* Added optional aggressive sleep skipping mode\n* Allow Auxiliary modules to run a callback at the very end of an analysis\n* Replaced ./utils/clean.sh with ./cuckoo.py --clean\n* Replaced diStorm3 disassembler with Capstone disassembler\n* Fixed process.py to use delete_original and delete_bin_copy when used in auto mode\n* Fixed analysis of HTML pages without a proper extension\n* Fixed logic bug in mouse activity emulator\n* Fixed bug in the sleep skipping mechanism\n* Fixed memory leak if using a old version of python-magic\n* Fixed out of memory exceptions when calculating hash of big files\n* Fixed BPF filter to skip agent traffic from PCAP\n* Fixed a variety of bugs in Windows analyzer\n* Fixed a number of anti-sandbox tricks\n* Fixed locking issues with SQLite database\n* Removed hpfeeds reporting module\n\nCuckoo Sandbox 1.1.1 (2014-10-07)\n=================================\n\n* Fixed path sanitization vulnerability in resultserver.\n\nCuckoo Sandbox 1.1 (2014-04-07)\n===============================\n\n* Added imphash to static PE analysis\n* Added search for URLs in the web interface\n* Added search for PE Imphash in the web interface\n* Added possibility in web interface to queue to all machines\n* Added filtering by behavior category in Django web interface\n* Added analyzer log to Django web interface\n* Added REST API to retrieve screenshots associated with a task\n* Added REST API to retrieve the PCAP associated with a task\n* Added database migration utility\n* Added remote submission to submit.py utility\n* Added small stats utility (utils/stats.py)\n* Added analysis package for PowerShell scripts\n* Added overlay configuration for signatures (data/signatures_overlay.json)\n* Fixed bug in MAEC report\n* Fixed package selection for Office documents and CPL scripts\n* Fixed issue with tcpdump filters\n* Fixed unhandled exception when uploading files to the analysis machines\n* Fixed issues in CuckooMon that resulted in Internet Explorer crashes\n* Fixed bug in CuckooMon that caused mutexes to be resolved as file paths\n* Fixed bug in behavior processing module that resulted in a trailing backslash in summary's registry keys\n* Multiple minor bug fixes\n\nCuckoo Sandbox 1.0 (2014-01-09)\n===============================\n\n* Introduced Auxiliary modules\n* Added option to set sniffing interface for each virtual machine\n* Added option to set snapshot for each virtual machine\n* Added pagination to API\n* Added option to REST API to return compressed archives of files (\"all\" and \"dropped\")\n* Added option to set Result Server IP and port for each virtual machine\n* Added processing module for volatility to analyze memory dumps, disabled by default\n* Added new \"reported\" status for analysis tasks\n* Added automated rescheduling of locked tasks at startup\n* Added tags to machines\n* Added reduced behavioral events\n* Added new Django/Mongo-powered web interface\n* Added Windows analyzer auxiliary module to disguise the analysis environment\n* Added VBS, CPL and RTF analysis package\n* Added generic analysis package to execute samples via cmd.exe\n* Added MAEC 4.0.1 reporting module\n* Added filter for private networks in Network Analysis processing module\n* Added max_analysis_count to cuckoo.conf to automatically shutdown Cuckoo\n* Added check for available disk space\n* Added support for BSON logging format\n* Added option to specify a custom DLL to the analyzer and the analysis packages\n* Added ICMP protocol dissection\n* Added ESX Virtual Machine Manager\n* Slightly improved CuckooMon's stealthiness and stability\n* Refactored processing to improve performances\n* Refactored signature engine, introducing event-based signatures to improve performances\n* Refactored generation of process tree\n* Transitioned network sniffer to auxiliary module\n* Renamed MachineManagers to Machinery modules\n* Renamed Metadata to MMDef reporting module\n* Fixed virtual machine clock, now is updated to current time or specified by user via --clock option\n* Fixed bug in Human auxiliary module, now moving cursor to absolute positions\n* Fixed issue in Human auxiliary module, using SetCursorPos instead of mouse_event\n* Fixed issues with resolving relative filenames in CuckooMon\n* Removed support for GrayLog2\n* Removed pickle reporting module\n* Removed MAEC 1.1 reporting module\n\nCuckoo Sandbox 0.6 (2013-04-15)\n===============================\n\n* Added procmemdump option to all analysis packages\n* Added randomization of folders and pipes in the analysis machines\n* Added checks to block injection of Cuckoo's agent and analyzer\n* Added configuration file for processing modules\n* Added result server to collect logs, files, screenshots and all results in real-time\n* Added option for enabling/disabling generation of CSV logs\n* Added REST API function to delete analysis task\n* Added matching of Yara signatures against dropped files\n* Added default fail-over on \"exe\" package if can't automatically identify the correct one\n* Added password option to zip package\n* Improved human auxiliary module\n* Improved Sleep() bypass\n* Improved dump of dropped files by tracking writing operations\n* Improved creation of screenshots by calculating a diff threshold\n* Fixed memory error issues\n* Fixed bugs in analysis procedure logic and in deletion of original files\n* Fixed bugs in MongoDB reporting module\n* Fixed bugs in HTML reporting module\n* Fixed bugs in VirusTotal processing module\n* Fixed bug in handling GetLastError() result\n* Fixed bug in network traffic capture\n* Fixed bug in submission and creation of tasks in the database\n* Removed hooks for NtOpenProcess, NtClose, NtAllocateVirtualMemory and VirtualFreeEx because of stability issues\n\nCuckoo Sandbox 0.5 (2012-12-20)\n===============================\n\n* Added native support for URL analysis\n* Added full memory dump of the virtual machine\n* Added base class for libvirt machine managers\n* Added auxiliary modules for Windows analyzer\n* Added Jar analysis package\n* Added Java Applet analysis package\n* Added Zip analysis package\n* Added option to enforce full timeout execution\n* Added support for Graylog2 logging\n* Transitioned internal database to SQLAlchemy\n* Added logging of analysis errors into the database\n* Added logging of guest executions into the database\n* Added logging of active analysis machines into the database\n* Added logging of details of submitted samples into the database\n* Added functionality for automatic version lookup to get notified of available updates\n* Added possibility to order processing and reporting modules\n* Added extraction of strings from analyzed binaries\n* Added Yara signature with indicators of possible virtualization-aware samples\n* Added dissection of intercepted SMTP traffic\n* Added a REST API server to interact with Cuckoo\n* Added user interaction emulation (clicking dialogs buttons and mouse movements)\n* Added support for Windows 7 execution\n* Added support for dumping queried and modified registry data\n* Added more functions to be hooked and logged\n* Added simple functionality to omit injection into Cuckoo processes\n* Added support for dumping files with relative paths\n* Added shared VirusTotal API key\n* Introduced fairly smart way of skipping Sleep calls\n* Unified utility for results processing and reports generation\n* Improved analysis process logic\n* Improved automatic analysis package selection\n* Improved process injection and process following\n* Improved dumping of modified files\n* Improved logging to reduce the amount of useless entries\n* Improved unicode support\n* Improved management of analysis machines parallel execution\n* Improved internal management of plugins and modules\n* Improved dissection of intercepted DNS traffic\n* Fixed bugs in connection with the agent\n* Fixed some issues in dumping dropped files\n* Fixed bug in termination of tcpdump processes\n* Fixed bugs in MongoDB reporting module\n* Fixed issues with internal DNS resolution\n\nCuckoo Sandbox 0.4.2 (2012-09-08)\n=================================\n\n* Added support for VMWare Workstation\n* Added VirtualBox status change monitor and option \"timeout\" to virtualbox.conf\n* Added log file processing size limit and option \"analysis_size_limit\" to cuckoo.conf\n* Added directory submission to submit.py utility\n* Added community.py utility to sync custom modules from the community repository\n* Fixed missing critical_timeout implementation\n* Fixed delete_original race condition\n* Fixed some bugs in virtual machine management\n* Fixed submission with relative path\n* Fixed UTF-8 chars handling in analysis.log\n* Fixed race conditions in Windows analyzer\n* Some minor fixes\n\nCuckoo Sandbox 0.4.1 (2012-08-09)\n=================================\n\n* Added Yara signatures to HTML report\n* Replaced pyssdeep with pydeep\n* Added support for signatures' version requirements\n* Added unit tests\n* Fixed delete_original race condition\n* Fixed reconstruction of registry keys\n* Fixed logging in cuckoomon\n* Improved exception handling\n\nCuckoo Sandbox 0.4 (2012-07-24)\n===============================\n\n* Completely re-engineered the code base\n* Replaced hooking mechanism and DLL with new, more solid code\n* Removed dependency from VirtualBox\n* Added support for KVM\n* Introduced XMLRPC-based agent that handles the data exchange between host and guests\n* Refactored the project structure\n* Removed processor.py script\n* Introduced support for multiple platforms and multiple analyzers\n* Introduced support for custom virtualization modules\n* Introduced support for custom post-analysis processing modules\n* Introduced support for custom behavioral signatures\n* Added VirusTotal support\n* Added Yara support\n* Added MongoDB reporting module\n* Added HPFeeds reporting module\n* Refactored Windows analyzer\n* Refactored the analysis packages structure\n* Introduced support for analysis packages' options\n* Refactored Windows analyzer's API functions\n* Introduced process memory dump support\n* Introduced support for QueueUserAPC injection\n\nCuckoo Sandbox 0.3.2 (2012-02-04)\n=================================\n\n* Introduced MAEC analysis report.\n* Introduced MAEC metadata report.\n* Introduced Python pickled report.\n* Added base64 encoded screenshots to CuckooDict.\n* Added screenshots to HTML report.\n* Added static analysis Python modules.\n* Added static analysis to HTML report.\n* Added list of unique involved hosts to HTML report.\n* Added forced restore of snapshot at startup before checking if a virtual machine is in a valid state.\n* Added forced restore of snapshots at Cuckoo's termination.\n* Improved logging capabilities.\n* Added invocation of processor.py also at analysis failures.\n* Added IPv6 support to PCAP processing.\n* Added option to delete original files after submission.\n* Added folder for additional files and data to drop.\n* Added API category and parent ID to raw behavioral logs entries.\n* Removed distorm3.dll as a system dependency.\n* Fixed issue with dumped files' names.\n* Fixed bug in web server's search functionality.\n* Fixed generation of analysis duration time and timestamps.\n* Fixed bug in acquisition of a user-specified virtual machine.\n* Fixed PHP analysis package.\n* Fixed processing of screenshots and refactored their file names to a 3 digit format.\n* Fixed bugs on encoding special characters in analysis data and network packets.\n* Decreased default analysis timeout.\n* Removed instructions trace functionalities and analysis package.\n\nCuckoo Sandbox 0.3.1 (2011-12-28)\n=================================\n\n* Reintroduced an older version of cmonitor, in order to address troubles encountered in 0.3 release.\n* Fixed a bug in files dump caused by invalid/not regular files such as named pipes.\n* Disabled suspended mode in browsers' packages.\n\nCuckoo Sandbox 0.3 (2011-12-27)\n===============================\n\n* Introduced minimal web server with web interface to browse through the analysis reports.\n* Added a reporting engine, configurable via reporting.conf, which supports reporting modules.\n* Added HTML report.\n* Added TXT report.\n* Added JSON data export.\n* Introduced support to URL submission.\n* Added possibility to specify on which virtual machine run the analysis.\n* Added database interaction functions to search analysis by MD5.\n* Introduced DLL analysis package.\n* Introduced assembly instructions trace analysis package.\n* Added MD5 filtering of dropped files.\n* Added libmagic bindings to identify file types.\n* Added pydoc comments to all sources.\n* Added CRC32 hash.\n* Added ssdeep hash.\n* Added process tree generation class.\n* Added UDP connections extraction.\n* Distorm3 built-in into cmonitor\n* Fixed cmonitor.\n* Fixed chook.\n* Migrated Cuckoo to Python's logging library.\n* Improved Cuckoo User Guide.\n* Added changelog file.\n* Some minor fixes.\n\nCuckoo Sandbox 0.2 (2011-11-02)\n===============================\n\nFirst stable release, completely refactored.\n\nCuckoo Sandbox 0.1 beta (2011-02-05)\n====================================\n\nFirst public beta release.\n"
  },
  {
    "path": "docs-old/LICENSE",
    "content": "Cuckoo Sandbox is copyrighted by the Cuckoo Foundation and is licensed under\nthe following GNU General Public License version 3.\n\n                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\nThe file UserDB.txt is copyrighted by BoB / Team PEiD distributed under the following\nMIT license.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this \nsoftware and associated documentation files (the \"Software\"), to deal in the Software\nwithout restriction, including without limitation the rights to use, copy, modify,\nmerge, publish, distribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be included in all copies\nor substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, \nINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\nPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE\nFOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR \nOTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER\nDEALINGS IN THE SOFTWARE.\n\nThe file jquery.js is copyrighted by John Resig and dual licensed under the MIT or GPL\nVersion 2 licenses (see: http://jquery.org/license).\n\nThe files lightbox.js and lightbox.css are copyrighted by Lokesh Dhakar and licensed under\nthe Creative Commons Attribution 2.5 License\n(see: http://creativecommons.org/licenses/by/2.5/).\n\nThe files bootstrap-fileupload.js, jasny-bootstrap.js, jasny-bootstrap.min.js,\njasny-bootstrap.css, jasny-bootstrap.min.css, jasny-bootstrap-responsive.css,\njasny-bootstrap-responsive.min.css are copyrighted by Jasny BV and licensed under the Apache\nLicense, Version 2.0.\n\nThe files bootstrap.min.js, bootstrap.min.css, bootstrap-responsive.min.css,\nglyphicons-halflings.png, glyphicons-halflings-white.png are copyrighted by Twitter, Inc.\nand licensed under the Apache License, Version 2.0.\n"
  },
  {
    "path": "docs-old/README",
    "content": "                                    README\n\nThe documentation for installing, using and customizing Cuckoo Sandbox is\navailable under different forms and formats.\n\nUnder \"docs/book/\" you can find the complete Cuckoo Sandbox Book in three\ndifferent formats:\n    * HTML\n    * PDF\n    * Text\n\nUnder \"docs/books/src\" you'll find the Sphinx sources used to build the book.\n\nUnder \"epydoc/\" you'll find the Python documentation of Cuckoo's libs and apis\ngenerated by Epydoc. This directory contains two sub-directories: \"host\" and\n\"guest\", containing references for Cuckoo's Host and Guest components\nrespectively.\n"
  },
  {
    "path": "docs-old/book/src/Makefile",
    "content": "# Makefile for Sphinx documentation\n#\n\n# You can set these variables from the command line.\nSPHINXOPTS    =\nSPHINXBUILD   = sphinx-build\nPAPER         =\nBUILDDIR      = _build\n\n# Internal variables.\nPAPEROPT_a4     = -D latex_paper_size=a4\nPAPEROPT_letter = -D latex_paper_size=letter\nALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .\n\n.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest\n\nhelp:\n\t@echo \"Please use \\`make <target>' where <target> is one of\"\n\t@echo \"  html       to make standalone HTML files\"\n\t@echo \"  dirhtml    to make HTML files named index.html in directories\"\n\t@echo \"  singlehtml to make a single large HTML file\"\n\t@echo \"  pickle     to make pickle files\"\n\t@echo \"  json       to make JSON files\"\n\t@echo \"  htmlhelp   to make HTML files and a HTML help project\"\n\t@echo \"  qthelp     to make HTML files and a qthelp project\"\n\t@echo \"  devhelp    to make HTML files and a Devhelp project\"\n\t@echo \"  epub       to make an epub\"\n\t@echo \"  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter\"\n\t@echo \"  latexpdf   to make LaTeX files and run them through pdflatex\"\n\t@echo \"  text       to make text files\"\n\t@echo \"  man        to make manual pages\"\n\t@echo \"  changes    to make an overview of all changed/added/deprecated items\"\n\t@echo \"  linkcheck  to check all external links for integrity\"\n\t@echo \"  doctest    to run all doctests embedded in the documentation (if enabled)\"\n\nclean:\n\t-rm -rf $(BUILDDIR)/*\n\nhtml:\n\t$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/html.\"\n\ndirhtml:\n\t$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml\n\t@echo\n\t@echo \"Build finished. The HTML pages are in $(BUILDDIR)/dirhtml.\"\n\nsinglehtml:\n\t$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml\n\t@echo\n\t@echo \"Build finished. The HTML page is in $(BUILDDIR)/singlehtml.\"\n\npickle:\n\t$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle\n\t@echo\n\t@echo \"Build finished; now you can process the pickle files.\"\n\njson:\n\t$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json\n\t@echo\n\t@echo \"Build finished; now you can process the JSON files.\"\n\nhtmlhelp:\n\t$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp\n\t@echo\n\t@echo \"Build finished; now you can run HTML Help Workshop with the\" \\\n\t      \".hhp project file in $(BUILDDIR)/htmlhelp.\"\n\nqthelp:\n\t$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp\n\t@echo\n\t@echo \"Build finished; now you can run \"qcollectiongenerator\" with the\" \\\n\t      \".qhcp project file in $(BUILDDIR)/qthelp, like this:\"\n\t@echo \"# qcollectiongenerator $(BUILDDIR)/qthelp/CuckooSandbox.qhcp\"\n\t@echo \"To view the help file:\"\n\t@echo \"# assistant -collectionFile $(BUILDDIR)/qthelp/CuckooSandbox.qhc\"\n\ndevhelp:\n\t$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp\n\t@echo\n\t@echo \"Build finished.\"\n\t@echo \"To view the help file:\"\n\t@echo \"# mkdir -p $$HOME/.local/share/devhelp/CuckooSandbox\"\n\t@echo \"# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/CuckooSandbox\"\n\t@echo \"# devhelp\"\n\nepub:\n\t$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub\n\t@echo\n\t@echo \"Build finished. The epub file is in $(BUILDDIR)/epub.\"\n\nlatex:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo\n\t@echo \"Build finished; the LaTeX files are in $(BUILDDIR)/latex.\"\n\t@echo \"Run \\`make' in that directory to run these through (pdf)latex\" \\\n\t      \"(use \\`make latexpdf' here to do that automatically).\"\n\nlatexpdf:\n\t$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex\n\t@echo \"Running LaTeX files through pdflatex...\"\n\tmake -C $(BUILDDIR)/latex all-pdf\n\t@echo \"pdflatex finished; the PDF files are in $(BUILDDIR)/latex.\"\n\ntext:\n\t$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text\n\t@echo\n\t@echo \"Build finished. The text files are in $(BUILDDIR)/text.\"\n\nman:\n\t$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man\n\t@echo\n\t@echo \"Build finished. The manual pages are in $(BUILDDIR)/man.\"\n\nchanges:\n\t$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes\n\t@echo\n\t@echo \"The overview file is in $(BUILDDIR)/changes.\"\n\nlinkcheck:\n\t$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck\n\t@echo\n\t@echo \"Link check complete; look for any errors in the above output \" \\\n\t      \"or in $(BUILDDIR)/linkcheck/output.txt.\"\n\ndoctest:\n\t$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest\n\t@echo \"Testing of doctests in the sources finished, look at the \" \\\n\t      \"results in $(BUILDDIR)/doctest/output.txt.\"\n"
  },
  {
    "path": "docs-old/book/src/conf.py",
    "content": "# -*- coding: utf-8 -*-\n#\n# Cuckoo Sandbox documentation build configuration file.\n#\n# This file is execfile()d with the current directory set to its containing dir.\n#\n# Note that not all possible configuration values are present in this\n# autogenerated file.\n#\n# All configuration values have a default; values that are commented out\n# serve to show the default.\n\nimport sys, os\n\n# If extensions (or modules to document with autodoc) are in another directory,\n# add these directories to sys.path here. If the directory is relative to the\n# documentation root, use os.path.abspath to make it absolute, like shown here.\n#sys.path.insert(0, os.path.abspath('.'))\n\n# -- General configuration -----------------------------------------------------\n\n# If your documentation needs a minimal Sphinx version, state it here.\n#needs_sphinx = '1.0'\n\n# Add any Sphinx extension module names here, as strings. They can be extensions\n# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.\nextensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode']\n\n# Add any paths that contain templates here, relative to this directory.\ntemplates_path = ['_templates']\n\n# The suffix of source filenames.\nsource_suffix = '.rst'\n\n# The encoding of source files.\n#source_encoding = 'utf-8-sig'\n\n# The master toctree document.\nmaster_doc = 'index'\n\n# General information about the project.\nproject = u'Cuckoo Sandbox'\ncopyright = u'2010-2015, Cuckoo Foundation'\n\n# The version info for the project you're documenting, acts as replacement for\n# |version| and |release|, also used in various other places throughout the\n# built documents.\n#\n# The short X.Y version.\nversion = '2.0-dev'\n# The full version, including alpha/beta/rc tags.\nrelease = '2.0-dev'\n\n# The language for content autogenerated by Sphinx. Refer to documentation\n# for a list of supported languages.\n#language = en\n\n# There are two options for replacing |today|: either, you set today to some\n# non-false value, then it is used:\n#today = ''\n# Else, today_fmt is used as the format for a strftime call.\n#today_fmt = '%B %d, %Y'\n\n# List of patterns, relative to source directory, that match files and\n# directories to ignore when looking for source files.\nexclude_patterns = ['_build']\n\n# The reST default role (used for this markup: `text`) to use for all documents.\n#default_role = None\n\n# If true, '()' will be appended to :func: etc. cross-reference text.\n#add_function_parentheses = True\n\n# If true, the current module name will be prepended to all description\n# unit titles (such as .. function::).\n#add_module_names = True\n\n# If true, sectionauthor and moduleauthor directives will be shown in the\n# output. They are ignored by default.\n#show_authors = False\n\n# The name of the Pygments (syntax highlighting) style to use.\npygments_style = 'sphinx'\n\n# A list of ignored prefixes for module index sorting.\n#modindex_common_prefix = []\n\n\n# -- Options for HTML output ---------------------------------------------------\n\n# The theme to use for HTML and HTML Help pages.  See the documentation for\n# a list of builtin themes.\nhtml_theme = 'default'\n\n# Theme options are theme-specific and customize the look and feel of a theme\n# further.  For a list of options available for each theme, see the\n# documentation.\n#html_theme_options = {}\n\n# Add any paths that contain custom themes here, relative to this directory.\n#html_theme_path = []\n\n# The name for this set of Sphinx documents.  If None, it defaults to\n# \"<project> v<release> documentation\".\nhtml_title = \"%s v%s Book\" % (project, version)\n\n# A shorter title for the navigation bar.  Default is the same as html_title.\n#html_short_title = None\n\n# The name of an image file (relative to this directory) to place at the top\n# of the sidebar.\nhtml_logo = \"_images/logo/cuckoo.png\"\n\n# The name of an image file (within the static path) to use as favicon of the\n# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32\n# pixels large.\n#html_favicon = None\n\n# Add any paths that contain custom static files (such as style sheets) here,\n# relative to this directory. They are copied after the builtin static files,\n# so a file named \"default.css\" will overwrite the builtin \"default.css\".\n# html_static_path = ['_static']\n\n# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,\n# using the given strftime format.\n#html_last_updated_fmt = '%b %d, %Y'\n\n# If true, SmartyPants will be used to convert quotes and dashes to\n# typographically correct entities.\n#html_use_smartypants = True\n\n# Custom sidebar templates, maps document names to template names.\n#html_sidebars = {}\n\n# Additional templates that should be rendered to pages, maps page names to\n# template names.\n#html_additional_pages = {}\n\n# If false, no module index is generated.\nhtml_domain_indices = False\n\n# If false, no index is generated.\nhtml_use_index = False\n\n# If true, the index is split into individual pages for each letter.\n#html_split_index = False\n\n# If true, links to the reST sources are added to the pages.\n#html_show_sourcelink = True\n\n# If true, \"Created using Sphinx\" is shown in the HTML footer. Default is True.\n#html_show_sphinx = True\n\n# If true, \"(C) Copyright ...\" is shown in the HTML footer. Default is True.\n#html_show_copyright = True\n\n# If true, an OpenSearch description file will be output, and all pages will\n# contain a <link> tag referring to it.  The value of this option must be the\n# base URL from which the finished HTML is served.\n#html_use_opensearch = ''\n\n# This is the file name suffix for HTML files (e.g. \".xhtml\").\n#html_file_suffix = None\n\n# Output file base name for HTML help builder.\nhtmlhelp_basename = 'CuckooSandboxdoc'\n\n\n# -- Options for LaTeX output --------------------------------------------------\n\n# The paper size ('letter' or 'a4').\n#latex_paper_size = 'letter'\n\n# The font size ('10pt', '11pt' or '12pt').\n#latex_font_size = '10pt'\n\n# Grouping the document tree into LaTeX files. List of tuples\n# (source start file, target name, title, author, documentclass [howto/manual]).\nlatex_documents = [\n  ('index', 'CuckooSandbox.tex', u'Cuckoo Sandbox Book',\n   u'Cuckoo Sandbox', 'manual'),\n]\n\n# The name of an image file (relative to this directory) to place at the top of\n# the title page.\n#latex_logo = None\n\n# For \"manual\" documents, if this is true, then toplevel headings are parts,\n# not chapters.\n#latex_use_parts = False\n\n# If true, show page references after internal links.\n#latex_show_pagerefs = False\n\n# If true, show URL addresses after external links.\n#latex_show_urls = False\n\n# Additional stuff for the LaTeX preamble.\n#latex_preamble = ''\n\n# Documents to append as an appendix to all manuals.\n#latex_appendices = []\n\n# If false, no module index is generated.\n#latex_domain_indices = True\n\n\n# -- Options for manual page output --------------------------------------------\n\n# One entry per manual page. List of tuples\n# (source start file, name, description, authors, manual section).\nman_pages = [\n    ('index', 'cuckoosandbox', u'Cuckoo Sandbox Book',\n     [u'Cuckoo Sandbox'], 1)\n]\n"
  },
  {
    "path": "docs-old/book/src/customization/auxiliary.rst",
    "content": "=================\nAuxiliary Modules\n=================\n\n**Auxiliary** modules define some procedures that need to be executed in parallel\nto every single analysis process.\nAll auxiliary modules should be placed under the *modules/auxiliary/* directory.\n\nThe skeleton of a module would look something like this:\n\n    .. code-block:: python\n        :linenos:\n\n        from lib.cuckoo.common.abstracts import Auxiliary\n\n        class MyAuxiliary(Auxiliary):\n\n            def start(self):\n                # Do something.\n\n            def stop(self):\n                # Stop the execution.\n\nThe function ``start()`` will be executed before starting the analysis machine and effectively\nexecuting the submitted malicious file, while the ``stop()`` function will be launched at the\nvery end of the analysis process, before launching the processing and reporting procedures.\n\nFor example, an auxiliary module provided by default in Cuckoo is called *sniffer.py* and\ntakes care of executing **tcpdump** in order to dump the generated network traffic.\n"
  },
  {
    "path": "docs-old/book/src/customization/index.rst",
    "content": ".. Customization chapter frontpage\n\nCustomization\n=============\n\nThis chapter explains how to customize Cuckoo.\nCuckoo is written in a modular architecture built to be as customizable as it can,\nto fit the needs of all users.\n\n.. toctree::\n\n    auxiliary\n    machinery\n    packages\n    processing\n    signatures\n    reporting\n"
  },
  {
    "path": "docs-old/book/src/customization/machinery.rst",
    "content": "=================\nMachinery Modules\n=================\n\n**Machinery** modules define how Cuckoo should interact with\nyour virtualization software (or potentially even with physical disk imaging\nsolutions).\nSince we decided to not enforce any particular vendor, from release 0.4 you\nare able to use your preferred solution and, in case it's not supported by\ndefault, write a custom Python module that defines how to make Cuckoo use it.\n\nEvery machinery module should be located inside\n*modules/machinery/*.\n\nA basic machinery module would look like this:\n\n    .. code-block:: python\n        :linenos:\n\n        from lib.cuckoo.common.abstracts import Machinery\n        from lib.cuckoo.common.exceptions import CuckooMachineError\n\n        class MyMachinery(Machinery):\n            def start(self, label):\n                try:\n                    revert(label)\n                    start(label)\n                except SomethingBadHappens as e:\n                    raise CuckooMachineError(\"OPS!\")\n\n            def stop(self, label):\n                try:\n                    stop(label)\n                except SomethingBadHappens as e:\n                    raise CuckooMachineError(\"OPS!\")\n\nThe only requirements for Cuckoo are that:\n\n    * The class inherits from ``Machinery``.\n    * You have a ``start()`` and ``stop()`` functions.\n    * You raise ``CuckooMachineError`` when something fails.\n\nAs you understand, the machinery module is a core part of a Cuckoo setup,\ntherefore make sure to spend enough time debugging your code and make it\nsolid and resistant to any unexpected error.\n\nConfiguration\n=============\n\nEvery machinery module should come with a dedicated configuration file\nlocated in *conf/<machinery module name>.conf*.\nFor example for *modules/machinery/kvm.py* we have a *conf/kvm.conf*.\n\nThe configuration file should follow the default structure::\n\n    [kvm]\n    # Specify a comma-separated list of available machines to be used. For each\n    # specified ID you have to define a dedicated section containing the details\n    # on the respective machine. (E.g. cuckoo1,cuckoo2,cuckoo3)\n    machines = cuckoo1\n\n    [cuckoo1]\n    # Specify the label name of the current machine as specified in your\n    # libvirt configuration.\n    label = cuckoo1\n\n    # Specify the operating system platform used by current machine\n    # [windows/darwin/linux].\n    platform = windows\n\n    # Specify the IP address of the current machine. Make sure that the IP address\n    # is valid and that the host machine is able to reach it. If not, the analysis\n    # will fail.\n    ip = 192.168.122.105\n\nA main section called ``[<name of the module>]`` with a ``machines`` field\ncontaining a comma-separated list of machines IDs.\n\nFor each machine you should specify a ``label``, a ``platform`` and its\n``ip``.\n\nThese fields are required by Cuckoo in order to use the already embedded ``initialize()``\nfunction that generates the list of available machines.\n\nIf you plan to change the configuration structure you should override the ``initialize()``\nfunction (inside your own module, no need to modify Cuckoo's core code).\nYou can find its original code in the ``Machinery`` abstract inside\n*lib/cuckoo/common/abstracts.py*.\n\nLibVirt\n=======\n\nStarting with Cuckoo 0.5 developing new machinery modules based on LibVirt is easy.\nInside *lib/cuckoo/common/abstracts.py* you can find ``LibVirtMachinery`` that\nalready provides all the functionality for a LibVirt module.\nJust inherit this base class and specify your connection string, as in\nthe example below:\n\n    .. code-block:: python\n        :linenos:\n\n        from lib.cuckoo.common.abstracts import LibVirtMachinery\n\n        class MyMachinery(LibVirtMachinery):\n            # Set connection string.\n            dsn = \"my:///connection\"\n\n\nThis works for all the virtualization technologies supported by LibVirt. Just remember to\ncheck if your LibVirt package (if you are using one, for example from your Linux\ndistribution) is compiled with the support for the technology you need.\n\nYou can check it with the following command::\n\n    $ virsh -V\n    Virsh command line tool of libvirt 0.9.13\n    See web site at http://libvirt.org/\n\n    Compiled with support for:\n     Hypervisors: QEmu/KVM LXC UML Xen OpenVZ VMWare Test\n     Networking: Remote Daemon Network Bridging Interface Nwfilter VirtualPort\n     Storage: Dir Disk Filesystem SCSI Multipath iSCSI LVM\n     Miscellaneous: Nodedev AppArmor Secrets Debug Readline Modular\n\nIf you don't find your virtualization technology in the list of ``Hypervisors``, you will\nneed to recompile LibVirt with the specific support for the missing one.\n"
  },
  {
    "path": "docs-old/book/src/customization/packages.rst",
    "content": "=================\nAnalysis Packages\n=================\n\nAs explained in :doc:`../usage/packages`, analysis packages are structured\nPython classes that describe how Cuckoo's analyzer component should conduct\nthe analysis procedure for a given file inside the guest environment.\n\nAs you already know, you can create your own packages and add them along with\nthe default ones.\nDesigning new packages is very easy and requires just a minimal understanding\nof programming and of the Python language.\n\nGetting started\n===============\n\nAs an example we'll take a look at the default package for analyzing generic\nWindows executables (located at *analyzer/windows/packages/exe.py*):\n\n    .. code-block:: python\n        :linenos:\n\n        from lib.common.abstracts import Package\n\n        class Exe(Package):\n            \"\"\"EXE analysis package.\"\"\"\n\n            def start(self, path):\n                args = self.options.get(\"arguments\")\n                return self.execute(path, args)\n\nIt seems really easy, thanks to all method inherited by Package object.\nLet's have a look as some of the main methods an analysis package inherits from\nPackage object:\n\n    .. code-block:: python\n        :linenos:\n\n        from lib.api.process import Process\n        from lib.common.exceptions import CuckooPackageError\n\n        class Package(object):\n            def start(self):\n                raise NotImplementedError\n\n            def check(self):\n                return True\n\n            def execute(self, path, args):\n                dll = self.options.get(\"dll\")\n                free = self.options.get(\"free\")\n                suspended = True\n                if free:\n                    suspended = False\n\n                p = Process()\n                if not p.execute(path=path, args=args, suspended=suspended):\n                    raise CuckooPackageError(\"Unable to execute the initial process, \"\n                                             \"analysis aborted.\")\n\n                if not free and suspended:\n                    p.inject(dll)\n                    p.resume()\n                    p.close()\n                    return p.pid\n\n            def finish(self):\n                if self.options.get(\"procmemdump\"):\n                    for pid in self.pids:\n                        p = Process(pid=pid)\n                        p.dump_memory()\n                return True\n\nLet's walk through the code:\n    * Line **1**: import the ``Process`` API class, which is used to create and manipulate Windows processes.\n    * Line **2**: import the ``CuckooPackageError`` exception, which is used to notify issues with the execution of the package to the analyzer.\n    * Line **4**: define the main class, inheriting ``object``.\n    * Line **5**: define the ``start()`` function, which takes as argument the path to the file to execute. It should be implemented by each analysis package.\n    * Line **8**: define the ``check()`` function.\n    * Line **13**: acquire the ``free`` option, which is used to define whether the process should be monitored or not.\n    * Line **18**: initialize a ``Process`` instance.\n    * Line **19**: try to execute the malware, if it fails it aborts the execution and notify the analyzer.\n    * Line **23**: check if the process should be monitored.\n    * Line **24**: inject the process with our DLL.\n    * Line **25**: resume the process from the suspended state.\n    * Line **27**: return the PID of the newly created process to the analyzer.\n    * Line **29**: define the ``finish()`` function.\n    * Line **30**: check if the ``procmemdump`` option was enabled.\n    * Line **31**: loop through the currently monitored processes.\n    * Line **32**: open a ``Process`` instance.\n    * Line **33**: take a dump of the process memory.\n\n``start()``\n-----------\n\nIn this function you have to place all the initialization operations you want to run.\nThis may include running the malware process, launching additional applications,\ntaking memory snapshots and more.\n\n``check()``\n-----------\n\nThis function is executed by Cuckoo every second while the malware is running.\nYou can use this function to perform any kind of recurrent operation.\n\nFor example if in your analysis you are looking for just one specific indicator to\nbe created (e.g. a file) you could place your condition in this function and if\nit returns ``False``, the analysis will terminate straight away.\n\nThink of it as \"should the analysis continue or not?\".\n\nFor example::\n\n    def check(self):\n        if os.path.exists(\"C:\\\\config.bin\"):\n            return False\n        else:\n            return True\n\nThis ``check()`` function will cause Cuckoo to immediately terminate the analysis\nwhenever *C:\\\\config.bin* is created.\n\n``execute()``\n-------------\n\nWraps the malware execution and deal with DLL injection.\n\n``finish()``\n------------\n\nThis function is simply called by Cuckoo before terminating the analysis and powering\noff the machine.\nBy default, this function contains an optional feature to dump the process memory of\nall the monitored processes.\n\nOptions\n=======\n\nEvery package have automatically access to a dictionary containing all user-specified\noptions (see :doc:`../usage/submit`).\n\nSuch options are made available in the attribute ``self.options``. For example let's\nassume that the user specified the following string at submission::\n\n    foo=1,bar=2\n\nThe analysis package selected will have access to these values::\n\n    from lib.common.abstracts import Package\n\n    class Example(Package):\n\n        def start(self, path):\n            foo = self.options[\"foo\"]\n            bar = self.options[\"bar\"]\n\n        def check():\n            return True\n\n        def finish():\n            return True\n\nThese options can be used for anything you might need to configure inside your package.\n\nProcess API\n===========\n\nThe ``Process`` class provides access to different process-related features and functions.\nYou can import it in your analysis packages with::\n\n    from lib.api.process import Process\n\nYou then initialize an instance with::\n\n    p = Process()\n\nIn case you want to open an existing process instead of creating a new one, you can\nspecify multiple arguments:\n\n    * ``pid``: PID of the process you want to operate on.\n    * ``h_process``: handle of a process you want to operate on.\n    * ``thread_id``: thread ID of a process you want to operate on.\n    * ``h_thread``: handle of the thread of a process you want to operate on.\n\nThis class implements several methods that you can use in your own scripts.\n\nMethods\n-------\n\n.. function:: Process.open()\n\n    Opens an handle to a running process. Returns ``True`` or ``False`` in case of success or failure of the operation.\n\n    :rtype: boolean\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        p = Process(pid=1234)\n        p.open()\n        handle = p.h_process\n\n.. function:: Process.exit_code()\n\n    Returns the exit code of the opened process. If it wasn't already done before, ``exit_code()`` will perform a call to ``open()`` to acquire an handle to the process.\n\n    :rtype: ulong\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        p = Process(pid=1234)\n        code = p.exit_code()\n\n.. function:: Process.is_alive()\n\n    Calls ``exit_code()`` and verify if the returned code is ``STILL_ACTIVE``, meaning that the given process is still running. Returns ``True`` or ``False``.\n\n    :rtype: boolean\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        p = Process(pid=1234)\n        if p.is_alive():\n            print(\"Still running!\")\n\n.. function:: Process.get_parent_pid()\n\n    Returns the PID of the parent process of the opened process. If it wasn't already done before, ``get_parent_pid()`` will perform a call to ``open()`` to acquire an handle to the process.\n\n    :rtype: int\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        p = Process(pid=1234)\n        ppid = p.get_parent_pid()\n\n.. function:: Process.execute(path [, args=None[, suspended=False]])\n\n    Executes the file at the specified path. Returns ``True`` or ``False`` in case of success or failure of the operation.\n\n    :param path: path to the file to execute\n    :type path: string\n    :param args: arguments to pass to the process command line\n    :type args: string\n    :param suspended: enable or disable suspended mode flag at process creation\n    :type suspended: boolean\n    :rtype: boolean\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        p = Process()\n        p.execute(path=\"C:\\\\WINDOWS\\\\system32\\\\calc.exe\", args=\"Something\", suspended=True)\n\n.. function:: Process.resume()\n\n    Resumes the opened process from a suspended state. Returns ``True`` or ``False`` in case of success or failure of the operation.\n\n    :rtype: boolean\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        p = Process()\n        p.execute(path=\"C:\\\\WINDOWS\\\\system32\\\\calc.exe\", args=\"Something\", suspended=True)\n        p.resume()\n\n.. function:: Process.terminate()\n\n    Terminates the opened process. Returns ``True`` or ``False`` in case of success or failure of the operation.\n\n    :rtype: boolean\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        p = Process(pid=1234)\n        if p.terminate():\n            print(\"Process terminated!\")\n        else:\n            print(\"Could not terminate the process!\")\n\n.. function:: Process.inject([dll[, apc=False]])\n\n    Injects our DLL into the opened process. Returns ``True`` or ``False`` in case of success or failure of the operation.\n\n    :param dll: path to the DLL to inject into the process\n    :type dll: string\n    :param apc: enable to use ``QueueUserAPC()`` injection instead of ``CreateRemoteThread()``, beware that if the process is in suspended mode, Cuckoo will always use ``QueueUserAPC()``\n    :type apc: boolean\n    :rtype: boolean\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        p = Process()\n        p.execute(path=\"C:\\\\WINDOWS\\\\system32\\\\calc.exe\", args=\"Something\", suspended=True)\n        p.inject()\n        p.resume()\n\n.. function:: Process.dump_memory()\n\n    Takes a snapshot of the given process' memory space. Returns ``True`` or ``False`` in case of success or failure of the operation.\n\n    :rtype: boolean\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        p = Process(pid=1234)\n        p.dump_memory()\n"
  },
  {
    "path": "docs-old/book/src/customization/processing.rst",
    "content": "==================\nProcessing Modules\n==================\n\nCuckoo's processing modules are Python scripts that let you define custom\nways to analyze the raw results generated by the sandbox and append\nsome information to a global container that will be later used by the\nsignatures and the reporting modules.\n\nYou can create as many modules as you want, as long as they follow a\npredefined structure that we will present in this chapter.\n\nGlobal Container\n================\n\nAfter an analysis is completed, Cuckoo will invoke all the processing\nmodules available in the *modules/processing/* directory. Any additional\nmodule you decide to create must be placed inside that directory.\n\nEvery module should also have a dedicated section in the file *conf/processing.conf*: for\nexample if you create a module *module/processing/foobar.py* you will have to append\nthe following section to *conf/processing.conf*::\n\n    [foobar]\n    enabled = yes\n\nEvery module will then be initialized and executed and the data returned\nwill be appended in a data structure that we'll call **global container**.\n\nThis container is simply just a big Python dictionary that includes\nthe abstracted results produced by all the modules classified by their\nidentification key.\n\nCuckoo already provides a default set of modules which will\ngenerate a *standard* global container. It's important for the existing\nreporting modules (HTML report etc.) that these default modules are\nnot modified, otherwise the resulting global container structure would\nchange and the reporting modules wouldn't be able to recognize it and\nextract the information used to build the final reports.\n\nThe currently available default processing modules are:\n    * **AnalysisInfo** *(modules/processing/analysisinfo.py)* - generates some basic information on the current analysis, such as timestamps, version of Cuckoo and so on.\n    * **BehaviorAnalysis** *(modules/processing/behavior.py)* - parses the raw behavioral logs and perform some initial transformations and interpretations, including the complete processes tracing, a behavioral summary and a process tree.\n    * **Debug** *(modules/processing/debug.py)* - includes errors and the *analysis.log* generated by the analyzer.\n    * **Dropped** *(modules/processing/dropped.py)* - includes information on the files dropped by the malware and dumped by Cuckoo.\n    * **Memory** *(modules/processing/memory.py)* - executes Volatility on a full memory dump.\n    * **NetworkAnalysis** *(modules/processing/network.py)* - parses the PCAP file and extracts some network information, such as DNS traffic, domains, IPs, HTTP requests, IRC and SMTP traffic.\n    * **ProcMemory** *(modules/processing/procmemory.py)* - performs analysis of process memory dump. **Note**: the module is able to process user defined Yara rules from data/yara/memory/index_memory.yar. Just edit this file to add your Yara rules.\n    * **StaticAnalysis** *(modules/processing/static.py)* - performs some static analysis of PE32 files.\n    * **Strings** *(modules/processing/strings.py)* - extracts strings from the analyzed binary.\n    * **TargetInfo** *(modules/processing/targetinfo.py)* - includes information on the analyzed file, such as hashes.\n    * **VirusTotal** *(modules/processing/virustotal.py)* - searches on VirusTotal.com for antivirus signatures of the analyzed file. **Note**: the file is not uploaded on VirusTotal.com, if the file was not previously uploaded on the website no results will be retrieved.\n\nGetting started\n===============\n\nIn order to make them available to Cuckoo, all processing modules must be\nplaced inside the folder at *modules/processing/*.\n\nA basic processing module could look like:\n\n    .. code-block:: python\n        :linenos:\n\n        from lib.cuckoo.common.abstracts import Processing\n\n        class MyModule(Processing):\n\n            def run(self):\n                self.key = \"key\"\n                data = do_something()\n                return data\n\nEvery processing module should contain:\n    * A class inheriting ``Processing``.\n    * A ``run()`` function.\n    * A ``self.key`` attribute defining the name to be used as a sub container for the returned data.\n    * A set of data (list, dictionary, string, etc.) that will be appended to the global container.\n\nYou can also specify an ``order`` value, which allows you to run the available processing modules in\nan ordered sequence. By default all modules are set with an ``order`` value of ``1`` and are executed\nin alphabetical order.\n\nIf you want to change this value your module would look like:\n\n    .. code-block:: python\n        :linenos:\n\n        from lib.cuckoo.common.abstracts import Processing\n\n        class MyModule(Processing):\n            order = 2\n\n            def run(self):\n                self.key = \"key\"\n                data = do_something()\n                return data\n\nYou can also manually disable a processing module by setting the ``enabled`` attribute to ``False``:\n\n    .. code-block:: python\n        :linenos:\n\n        from lib.cuckoo.common.abstracts import Processing\n\n        class MyModule(Processing):\n            enabled = False\n\n            def run(self):\n                self.key = \"key\"\n                data = do_something()\n                return data\n\nThe processing modules are provided with some attributes that can be used to access the raw results\nfor the given analysis:\n\n    * ``self.analysis_path``: path to the folder containing the results (e.g. *storage/analysis/1*)\n    * ``self.log_path``: path to the *analysis.log* file.\n    * ``self.conf_path``: path to the *analysis.conf* file.\n    * ``self.file_path``: path to the analyzed file.\n    * ``self.dropped_path``: path to the folder containing the dropped files.\n    * ``self.logs_path``: path to the folder containing the raw behavioral logs.\n    * ``self.shots_path``: path to the folder containing the screenshots.\n    * ``self.pcap_path``: path to the network pcap dump.\n    * ``self.memory_path``: path to the full memory dump, if created.\n    * ``self.pmemory_path``: path to the process memory dumps, if created.\n\nWith these attributes you should be able to easily access all the raw results stored by Cuckoo and\nperform your analytic operations on them.\n\nAs a last note, a good practice is to use the ``CuckooProcessingError`` exception\nwhenever the module encounters an issue you want to report to Cuckoo.\nThis can be done by importing the class like this:\n\n    .. code-block:: python\n        :linenos:\n\n        from lib.cuckoo.common.exceptions import CuckooProcessingError\n        from lib.cuckoo.common.abstracts import Processing\n\n        class MyModule(Processing):\n\n            def run(self):\n                self.key = \"key\"\n\n                try:\n                    data = do_something()\n                except SomethingFailed:\n                    raise CuckooProcessingError(\"Failed\")\n\n                return data\n"
  },
  {
    "path": "docs-old/book/src/customization/reporting.rst",
    "content": "=================\nReporting Modules\n=================\n\nAfter the raw analysis results have been processed and abstracted by the\nprocessing modules and the global container is generated (ref. :doc:`processing`),\nit is passed over by Cuckoo to all the reporting modules available, which will\nmake use of it and will make it accessible and consumable in different\nformats.\n\nGetting Started\n===============\n\nAll reporting modules must be placed inside the directory *modules/reporting/*.\n\nEvery module must also have a dedicated section in the file *conf/reporting.conf*: for\nexample if you create a module *module/reporting/foobar.py* you will have to append\nthe following section to *conf/reporting.conf*::\n\n    [foobar]\n    enabled = on\n\nEvery additional option you add to your section will be available to your reporting module\nin the ``self.options`` dictionary.\n\nFollowing is an example of a working JSON reporting module:\n\n    .. code-block:: python\n        :linenos:\n\n        import os\n        import json\n        import codecs\n\n        from lib.cuckoo.common.abstracts import Report\n        from lib.cuckoo.common.exceptions import CuckooReportError\n\n        class JsonDump(Report):\n            \"\"\"Saves analysis results in JSON format.\"\"\"\n\n            def run(self, results):\n                \"\"\"Writes report.\n                @param results: Cuckoo results dict.\n                @raise CuckooReportError: if fails to write report.\n                \"\"\"\n                try:\n                    report = codecs.open(os.path.join(self.reports_path, \"report.json\"), \"w\", \"utf-8\")\n                    json.dump(results, report, sort_keys=False, indent=4)\n                    report.close()\n                except (UnicodeError, TypeError, IOError) as e:\n                    raise CuckooReportError(\"Failed to generate JSON report: %s\" % e)\n\nThis code is very simple, it basically just receives the global container produced by the\nprocessing modules, converts it into JSON and writes it to a file.\n\nThere are few requirements for writing a valid reporting module:\n\n    * Declare your class inheriting from ``Report``.\n    * Have a ``run()`` function performing the main operations.\n    * Try to catch most exceptions and raise ``CuckooReportError`` to notify the issue.\n\nAll reporting modules have access to some attributes:\n\n    * ``self.analysis_path``: path to the folder containing the raw analysis results (e.g. *storage/analyses/1/*)\n    * ``self.reports_path``: path to the folder where the reports should be written (e.g. *storage/analyses/1/reports/*)\n    * ``self.conf_path``: path to the *analysis.conf* file of the current analysis (e.g. *storage/analyses/1/analysis.conf*)\n    * ``self.options``: a dictionary containing all the options specified in the report's configuration section in *conf/reporting.conf*.\n"
  },
  {
    "path": "docs-old/book/src/customization/signatures.rst",
    "content": "==========\nSignatures\n==========\n\nWith Cuckoo you're able to create some customized signatures that you can run against\nthe analysis results in order to identify some predefined pattern that might\nrepresent a particular malicious behavior or an indicator you're interested in.\n\nThese signatures are very useful to give a context to the analyses: both because they\nsimplify the interpretation of the results as well as for automatically identifying\nmalware samples of interest.\n\nSome examples of what you can use Cuckoo's signatures for:\n    * Identify a particular malware family you're interested in by isolating some unique behaviors (like file names or mutexes).\n    * Spot interesting modifications the malware performs on the system, such as installation of device drivers.\n    * Identify particular malware categories, such as Banking Trojans or Ransomware by isolating typical actions commonly performed by those.\n    * Classify samples into the categories malware/unknown (it is not possible to identify clean samples)\n\nYou can find signatures created by us and by other Cuckoo users on our `Community`_ repository.\n\n.. _`Community`: https://github.com/cuckoosandbox/community\n\nGetting started\n===============\n\nCreation of signatures is a very simple process and requires just a decent\nunderstanding of Python programming.\n\nFirst things first, all signatures must be located inside *modules/signatures/*.\n\nThe following is a basic example signature:\n\n    .. code-block:: python\n        :linenos:\n\n        from lib.cuckoo.common.abstracts import Signature\n\n        class CreatesExe(Signature):\n            name = \"creates_exe\"\n            description = \"Creates a Windows executable on the filesystem\"\n            severity = 2\n            categories = [\"generic\"]\n            authors = [\"Cuckoo Developers\"]\n            minimum = \"2.0\"\n\n            def on_complete(self):\n                return self.check_file(pattern=\".*\\\\.exe$\",\n                                       regex=True)\n\nAs you can see the structure is really simple and consistent with the other\nmodules. We're going to get into details later, but since version 1.2 Cuckoo\nprovides some helper functions that make the process of\ncreating signatures much easier.\n\nIn this example we just walk through all the accessed files in the summary and check\nif there is anything ending with \"*.exe*\": in that case it will return ``True``, meaning that\nthe signature matched, otherwise return ``False``.\n\nthe function ``on_complete`` is called at the end of the cuckoo signature process.\nOther function will be called before on specific events and help you to write\nmore sophisticated and faster signatures.\n\nIn case the signature gets matched, a new entry in the \"signatures\" section will be added to\nthe global container as follows::\n\n    \"signatures\": [\n        {\n            \"severity\": 2,\n            \"description\": \"Creates a Windows executable on the filesystem\",\n            \"alert\": false,\n            \"references\": [],\n            \"data\": [\n                {\n                    \"file_name\": \"C:\\\\d.exe\"\n                }\n            ],\n            \"name\": \"creates_exe\"\n        }\n    ]\n\n\nCreating your new signature\n===========================\n\nIn order to make you better understand the process of creating a signature, we\nare going to create a very simple one together and walk through the steps and\nthe available options. For this purpose, we're simply going to create a\nsignature that checks whether the malware analyzed opened a mutex named\n\"i_am_a_malware\".\n\nThe first thing to do is import the dependencies, create a skeleton and define\nsome initial attributes. These are the ones you can currently set:\n\n    * ``name``: an identifier for the signature.\n    * ``description``: a brief description of what the signature represents.\n    * ``severity``: a number identifying the severity of the events matched (generally between 1 and 3).\n    * ``categories``: a list of categories that describe the type of event being matched (for example \"*banker*\", \"*injection*\" or \"*anti-vm*\").\n    * ``families``: a list of malware family names, in case the signature specifically matches a known one.\n    * ``authors``: a list of people who authored the signature.\n    * ``references``: a list of references (URLs) to give context to the signature.\n    * ``enable``: if set to False the signature will be skipped.\n    * ``alert``: if set to True can be used to specify that the signature should be reported (perhaps by a dedicated reporting module).\n    * ``minimum``: the minimum required version of Cuckoo to successfully run this signature.\n    * ``maximum``: the maximum required version of Cuckoo to successfully run this signature.\n\nIn our example, we would create the following skeleton:\n\n    .. code-block:: python\n        :linenos:\n\n        from lib.cuckoo.common.abstracts import Signature\n\n        class BadBadMalware(Signature): # We initialize the class inheriting Signature.\n            name = \"badbadmalware\" # We define the name of the signature\n            description = \"Creates a mutex known to be associated with Win32.BadBadMalware\" # We provide a description\n            severity = 3 # We set the severity to maximum\n            categories = [\"trojan\"] # We add a category\n            families = [\"badbadmalware\"] # We add the name of our fictional malware family\n            authors = [\"Me\"] # We specify the author\n            minimum = \"2.0\" # We specify that in order to run the signature, the user will simply need Cuckoo 2.0\n\n            def on_complete(self):\n                return\n\nThis is a perfectly valid signature. It doesn't really do anything yet,\nso now we need to define the conditions for the signature to be matched.\n\nAs we said, we want to match a particular mutex name, so we proceed as follows:\n\n    .. code-block:: python\n        :linenos:\n\n        from lib.cuckoo.common.abstracts import Signature\n\n        class BadBadMalware(Signature):\n            name = \"badbadmalware\"\n            description = \"Creates a mutex known to be associated with Win32.BadBadMalware\"\n            severity = 3\n            categories = [\"trojan\"]\n            families = [\"badbadmalware\"]\n            authors = [\"Me\"]\n            minimum = \"2.0\"\n\n            def on_complete(self):\n                return self.check_mutex(\"i_am_a_malware\")\n\nSimple as that, now our signature will return ``True`` whether the analyzed\nmalware was observed opening the specified mutex.\n\nIf you want to be more explicit and directly access the global container,\nyou could translate the previous signature in the following way:\n\n    .. code-block:: python\n        :linenos:\n\n        from lib.cuckoo.common.abstracts import Signature\n\n        class BadBadMalware(Signature):\n            name = \"badbadmalware\"\n            description = \"Creates a mutex known to be associated with Win32.BadBadMalware\"\n            severity = 3\n            categories = [\"trojan\"]\n            families = [\"badbadmalware\"]\n            authors = [\"Me\"]\n            minimum = \"2.0\"\n\n            def on_complete(self):\n                for process in self.get_processes_by_pid():\n                    if \"summary\" in process and \"mutexes\" in process[\"summary\"]:\n                        for mutex in process[\"summary\"][\"mutexes\"]:\n                            if mutex == \"i_am_a_malware\":\n                                return True\n\n                return False\n\nEvented Signatures\n==================\n\nSince version 1.0, Cuckoo provides a way to write more high performance signatures.\nIn the past every signature was required to loop through the whole collection of API calls\ncollected during the analysis. This was necessarily causing some performance issues when such\ncollection would be of a large size.\n\nSince 1.2 Cuckoo only supports the so called \"evented signatures\". The old signatures\nbased on the ``run`` function can be ported to using ``on_complete``.\nThe main difference is that with this new format, all the signatures will be executed in parallel\nand a callback function called ``on_call()`` will be invoked for each signature within one\nsingle loop through the collection of API calls.\n\nAn example signature using this technique is the following:\n\n    .. code-block:: python\n        :linenos:\n\n        from lib.cuckoo.common.abstracts import Signature\n\n        class SystemMetrics(Signature):\n            name = \"generic_metrics\"\n            description = \"Uses GetSystemMetrics\"\n            severity = 2\n            categories = [\"generic\"]\n            authors = [\"Cuckoo Developers\"]\n            minimum = \"2.0\"\n\n            # Evented signatures can specify filters that reduce the amount of\n            # API calls that are streamed in. One can filter Process name, API\n            # name/identifier and category. These should be sets for faster lookup.\n            filter_processnames = set()\n            filter_apinames = set([\"GetSystemMetrics\"])\n            filter_categories = set()\n\n            # This is a signature template. It should be used as a skeleton for\n            # creating custom signatures, therefore is disabled by default.\n            # The on_call function is used in \"evented\" signatures.\n            # These use a more efficient way of processing logged API calls.\n            enabled = False\n\n            def on_complete(self):\n                # In the on_complete method one can implement any cleanup code and\n                #  decide one last time if this signature matches or not.\n                #  Return True in case it matches.\n                return False\n\n            # This method will be called for every logged API call by the loop\n            # in the RunSignatures plugin. The return value determines the \"state\"\n            # of this signature. True means the signature matched and False it did not this time.\n            # Use self.deactivate() to stop streaming in API calls.\n            def on_call(self, call, pid, tid):\n                # This check would in reality not be needed as we already make use\n                # of filter_apinames above.\n                if call[\"api\"] == \"GetSystemMetrics\":\n                    # Signature matched, return True.\n                    return True\n\n                # continue\n                return None\n\nThe inline comments are already self-explanatory.\n\nAnother event is triggered when a signature matches.\n\n    .. code-block:: python\n        :linenos:\n\n        def on_signature(self, matched_sig):\n            required = [\"creates_exe\", \"badmalware\"]\n            for sig in required:\n                if not sig in self.list_signatures():\n                    return\n            return True\n\nThis kind of signature can be used to combine several signatures identifying anomalies into one signature\nclassifying the sample (malware alert).\n\nTwo more events can be used to write more complex signatures. They are called when new processes are processed or new threads.\n``on_process`` and ``on_thread``. They can be used to reset the state of flags when a new process is entered. Allowing\nto write signatures that take into account if a series of events happened in one thread/process or globally.\n\n.. code-block:: python\n        :linenos:\n\n        def on_process(self, pid):\n            pass\n\n        def on_thread(self, pid, tid):\n            pass\n\nQuickout\n========\nAdditionally to the filters you can use a quickout function to determine if the\nsignature can be matched at all. For example if a signature is written to identify\nbehavior of malicious PDFs you could test for the file type to be PDF. Returning ``True`` will\nremove the signature from the list of potential candidates (reducing False Positives and processing time).\n\nYou can find many more example of signatures in our `community repository`_.\n\n.. _`community repository`: https://github.com/cuckoosandbox/community\n\nMatches\n=======\n\nStarting from version 1.2, signatures are able to log exactly what triggered\nthe signature. This allows users to better understand why this signature is\npresent in the log, and to be able to better focus malware analysis.\n\nTwo helpers have been included in order to specify matching data.\n\n.. function:: Signature.add_match(process, type, match)\n\n    Adds a match to the signature. Can be called several times for the same signature.\n\n    :param process: process dictionary (same as the ``on_call`` argument). Should be ``None`` except when used in evented signatures.\n    :type process: dict\n    :param type: nature of the matching data. Can be anything (ex: ``'file'``, ``'registry'``, etc.). If match is composed of api calls (when used in evented signatures), should be ``'api'``.\n    :type type: string\n    :param match: matching data. Can be a single element or a list of elements. An element can be a string, a dict or an API call (when used in evented signatures).\n\n    Example Usage, with a single element:\n\n    .. code-block:: python\n        :linenos:\n\n        self.add_match(None, \"url\", \"http://malicious_url_detected.com\")\n\n    Example Usage, with a more complex signature, needing several API calls to be triggered:\n\n    .. code-block:: python\n        :linenos:\n\n        self.signs = []\n        self.signs.append(first_api_call)\n        self.signs.append(second_api_call)\n        self.add_match(process, 'api', self.signs)\n\n.. function:: Signature.has_matches()\n\n    Checks whether the current signature has any matching data registered. Returns ``True`` in case it does, otherwise returns ``False``.\n\n    This can be used to easily add several matches for the same signature. If you want to do so, make sure that all the api calls are scanned by making sure that ``on_call`` never returns ``True``. Then, use ``on_complete`` with ``has_matches`` so that the signature is triggered if any match was previously added.\n\n    :rtype: boolean\n\n    Example Usage, from the `network_tor` signature:\n\n    .. code-block:: python\n        :linenos:\n\n        def on_call(self, call, process):\n            if self.check_argument_call(call,\n                                        pattern=\"Tor Win32 Service\",\n                                        api=\"CreateServiceA\",\n                                        category=\"services\"):\n                self.add_match(process, \"api\", call)\n\n        def on_complete(self):\n            return self.has_matches()\n\nHelpers\n=======\n\nAs anticipated, from version 0.5 the ``Signature`` base class also provides\nsome helper methods that simplify the creation of signatures and avoid the need\nfor you having to access the global container directly (at least most of the times).\n\nWith Cuckoo 1.2 the amount of information extracted from a sample grew another step and the\nresulting data format got more complex. To avoid having to port your signatures with every extension and to reduce\nerrors we strongly suggest to use the helpers to access data.\n\nFollowing is a list of available methods.\n\n.. function:: Signature.check_file(pattern[, regex=False])\n\n    Checks whether the malware opened or created a file matching the specified pattern. Returns ``True`` in case it did, otherwise returns ``False``.\n\n    :param pattern: file name or file path pattern to be matched\n    :type pattern: string\n    :param regex: enable to compile the pattern as a regular expression\n    :type regex: boolean\n    :rtype: boolean\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        self.check_file(pattern=\".*\\.exe$\", regex=True)\n\n.. function:: Signature.check_key(pattern[, regex=False[, actions=[\"regkey_written\", \"regkey_opened\", \"regkey_read\"][, pid=None]]])\n\n    Checks whether the malware opened or created a registry key matching the specified pattern. Returns ``True`` in case it did, otherwise returns ``False``.\n\n    :param pattern: registry key pattern to be matched\n    :type pattern: string\n    :param regex: enable to compile the pattern as a regular expression\n    :type regex: boolean\n    :param actions: a list of key-access-actions to search the key in\n    :type actions: list\n    :param pid: process id to filter for\n    :type pid: int\n    :rtype: boolean\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        self.check_key(pattern=\".*CurrentVersion\\\\Run$\", regex=True)\n\n.. function:: Signature.check_mutex(pattern[, regex=False])\n\n    Checks whether the malware opened or created a mutex matching the specified pattern. Returns ``True`` in case it did, otherwise returns ``False``.\n\n    :param pattern: mutex pattern to be matched\n    :type pattern: string\n    :param regex: enable to compile the pattern as a regular expression\n    :type regex: boolean\n    :rtype: boolean\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        self.check_mutex(\"mutex_name\")\n\n.. function:: Signature.check_api(pattern[, process=None[, regex=False]])\n\n    Checks whether Windows function was invoked. Returns ``True`` in case it was, otherwise returns ``False``.\n\n    :param pattern: function name pattern to be matched\n    :type pattern: string\n    :param process: name of the process performing the call\n    :type process: string\n    :param regex: enable to compile the pattern as a regular expression\n    :type regex: boolean\n    :rtype: boolean\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        self.check_api(pattern=\"URLDownloadToFileW\", process=\"AcroRd32.exe\")\n\n.. function:: Signature.check_argument_call(call, pattern[, name=Name[, api=None[, category=None[, regex=False]]])\n\n    Checks whether the malware invoked a function with a specific argument value. Returns ``True`` in case it did, otherwise returns ``False``.\n\n    :param call: the call to check to check the argument in\n    :param pattern: argument value pattern to be matched\n    :type pattern: string\n    :param name: name of the argument to be matched\n    :type name: string\n    :param api: name of the Windows function associated with the argument value\n    :type api: string\n    :param category: name of the category of the function to be matched\n    :type category: string\n    :param regex: enable to compile the pattern as a regular expression\n    :type regex: boolean\n    :rtype: boolean\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        self.check_argument_call(call, pattern=\".*cuckoo.*\", category=\"filesystem\", regex=True)\n\n.. function:: Signatures.list_signatures()\n\n    Returns a list of signature names that matched so far. It can be used to write meta-signatures combining several\n    signatures on anomalies into a classification.\n\n    :rtype: list\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        def on_signature(self, matched_sig):\n            required = [\"creates_exe\", \"badmalware\"]\n            for sig in required:\n                if not sig in self.list_signatures():\n                    return\n            return True\n\n.. function:: Signatures.get_processes([name=None])\n\n    An iterator returning the processes monitored. If name is given, they will be filtered for the name\n\n    :param name: Name of the process to filter for\n    :type name: string\n    :rtype: iterator\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        for process in self.get_processes(\"foo\"):\n            pass\n\n.. function:: Signatures.get_processes_by_pid([pid=None])\n\n    An iterator returning the processes monitored. If pid is given, they will be filtered for the process id\n\n    :param pid: Process ID of the process to filter for\n    :type pid: int\n    :rtype: iterator\n\n    .. code-block:: python\n        :linenos:\n\n        for process in self.get_processes_by_pid(4):\n            pass\n\n.. function:: Signatures.get_threads([pid=None])\n\n    An iterator returning the threads monitored. If pid is given, they will be filtered for the process id.\n\n    :param pid: Name of the process to filter for\n    :type pid: int\n    :rtype: iterator\n\n    .. code-block:: python\n        :linenos:\n\n        for thread in self.get_threads():\n            pass\n\n.. function:: Signatures.get_files([pid=None,[actions=None]])\n\n    Iterates over the files accessed by a process (or all processes). Access type can be a list of \"file_written\",\n    \"file_read\", \"file_deleted\". Default is all.\n\n    :param pid: Name of the process to filter for\n    :type pid: int\n    :param actions: access types of the files to return\n    :type actions: list\n    :rtype: iterator\n\n    .. code-block:: python\n        :linenos:\n\n        for afile in self.get_files():\n            pass\n\n.. function:: Signatures.get_keys([pid=None,[actions=None]])\n\n    Iterates over the registry keys accessed by a process (or all processes). Access type can be a list of \"regkey_written\",\n    \"regkey_opened\", \"regkey_read\". Default is all.\n\n    :param pid: Name of the process to filter for\n    :type pid: int\n    :param actions: access types of the registry keys to return\n    :type actions: list\n    :rtype: iterator\n\n    .. code-block:: python\n        :linenos:\n\n        for akey in self.get_keys():\n            pass\n\n.. function:: Signatures.get_mutexes([pid=None])\n\n    Returns a list of mutexes. Optionally filtered by process id\n\n    :param pid: Name of the process to filter for\n    :type pid: int\n    :rtype: list\n\n    .. code-block:: python\n        :linenos:\n\n        for mutex in self.get_mutexes():\n            pass\n\n.. function:: Signature.get_net_hosts()\n\n    Returns a list of hosts from the network sniffing part of the collected data\n\n    :rtype: list\n\n    .. code-block:: python\n        :linenos:\n\n        for host in self.get_net_hosts():\n            pass\n\n.. function:: Signature.get_net_domains()\n\n    Returns a list of domains from the network sniffing part of the collected data\n\n    :rtype: list\n\n    .. code-block:: python\n        :linenos:\n\n        for domain in self.get_net_domains():\n            pass\n\n.. function:: Signature.get_net_http()\n\n    Returns a list of http information blocks from the network sniffing part of the collected data\n\n    :rtype: list\n\n    .. code-block:: python\n        :linenos:\n\n        for http_data in self.get_net_http():\n            pass\n\n.. function:: Signature.get_net_udp()\n\n    Returns a list of udp information blocks from the network sniffing part of the collected data\n\n    :rtype: list\n\n    .. code-block:: python\n        :linenos:\n\n        for udp_data in self.get_net_udp():\n            pass\n\n.. function:: Signature.get_net_icmp()\n\n    Returns a list of icmp information blocks from the network sniffing part of the collected data\n\n    :rtype: list\n\n    .. code-block:: python\n        :linenos:\n\n        for icmp_data in self.get_net_icmp():\n            pass\n\n.. function:: Signature.get_net_irc()\n\n    Returns a list of irc information blocks from the network sniffing part of the collected data\n\n    :rtype: list\n\n    .. code-block:: python\n        :linenos:\n\n        for irc_data in self.get_net_irc():\n            pass\n\n.. function:: Signature.get_net_smtp()\n\n    Returns a list of smtp information blocks from the network sniffing part of the collected data\n\n    :rtype: list\n\n    .. code-block:: python\n        :linenos:\n\n        for smtp_data in self.get_net_smtp():\n            pass\n\n.. function:: Signature.check_ip(pattern[, regex=False])\n\n    Checks whether the malware contacted the specified IP address. Returns ``True`` in case it did, otherwise returns ``False``.\n\n    :param pattern: IP address to be matched\n    :type pattern: string\n    :param regex: enable to compile the pattern as a regular expression\n    :type regex: boolean\n    :rtype: boolean\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        self.check_ip(\"123.123.123.123\")\n\n.. function:: Signature.check_domain(pattern[, regex=False])\n\n    Checks whether the malware contacted the specified domain. Returns ``True`` in case it did, otherwise returns ``False``.\n\n    :param pattern: domain name to be matched\n    :type pattern: string\n    :param regex: enable to compile the pattern as a regular expression\n    :type regex: boolean\n    :rtype: boolean\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        self.check_domain(pattern=\".*cuckoosandbox.org$\", regex=True)\n\n.. function:: Signature.check_url(pattern[, regex=False])\n\n    Checks whether the malware performed an HTTP request to the specified URL. Returns ``True`` in case it did, otherwise returns ``False``.\n\n    :param pattern: URL pattern to be matched\n    :type pattern: string\n    :param regex: enable to compile the pattern as a regular expression\n    :type regex: boolean\n    :rtype: boolean\n\n    Example Usage:\n\n    .. code-block:: python\n        :linenos:\n\n        self.check_url(pattern=\"^.+\\/load\\.php\\?file=[0-9a-zA-Z]+$\", regex=True)\n\n.. function:: Signature.flags.set(name, [pid=None[, tid=None[, timestamp=None]]])\n\n    Flags can be used to collect information in the on_call section of a signature and react (decide to alert) in the\n    on_complete part if all required flags are set. Flags are signature specific. They are identified by their name.\n    PID, TID and timestamp can be later used to identify if a flag was set in a specific process/thread or at a specific\n    time.\n\n    :param name: Name of the flag to set\n    :type name: string\n    :param pid: process id\n    :type pid: int\n    :param tid: thread id\n    :type tid: int\n    :param timestamp: timestamp in the log to mark this flag for\n    :type timestamp: int\n\n    .. code-block:: python\n        :linenos:\n\n        def on_call(self, call, pid, tid):\n            self.flags.set(\"foo\", 1, 2, 2345)\n\n.. function:: Signature.flags.find([name=None[, pid=None[, tid=None[, before=None[, after=None]]]])\n\n    Returns a list of flags matching the given criteria\n\n    :param name: Name of the flag look for\n    :type name: string\n    :param pid: process id to filter for\n    :type pid: int\n    :param tid: thread id to filter for\n    :type tid: int\n    :param before: flag timestamp must be <= before-timestamp\n    :type before: int\n    :param after: flag timestamp must be >= after-timestamp\n    :type after: int\n\n    .. code-block:: python\n        :linenos:\n\n        def on_complete(self):\n            if self.flags.find(\"foo\"):\n                self.data.append({\"Flag found matching name\": \"foo\"})\n                return True\n\n.. function:: Signature.mark_start()\n\n    Mark the start of a api-call region relevant for the signature. This way the report can contain a link to the API call that triggered the signature.\n    As soon as the signature returns ``True`` this mark will be stored in the report. Subsequent start marks will overwrite the old one till it is\n    stored in the results with the triggering of the signature. So you can set a start mark \"on suspicion\" and overwrite it several times till the signature triggers.\n\n    It is marking the api call. So the only reasonable signatures to use it is in on_call evented ones\n\n    .. code-block:: python\n        :linenos:\n\n        def on_call(self, call, pid, tid):\n            if self.check_argument_call(call, pattern=\".*cuckoo.*\", category=\"filesystem\", regex=True):\n                self.mark_start()\n                return True\n\n.. function:: Signature.mark_end()\n\n    A complementary function to mark_start. It is optional and marks the end of a api call range that triggered the signature. It should be\n    called before returning the ``True`` result.\n\n    Without a prior mark_start, the end-mark will not be stored in the result.\n\n    .. code-block:: python\n        :linenos:\n\n        def on_call(self, call, pid, tid):\n            if self.check_argument_call(call, pattern=\".*foo.*\", category=\"filesystem\", regex=True):\n                self.mark_start()\n                return None\n            if self.check_argument_call(call, pattern=\".*cuckoo.*\", category=\"filesystem\", regex=True):\n                self.mark_end()\n                return True\n\n.. function:: Signature.deactivate()\n\n    Deactivate a signature. Deactivated signatures will not be notified in ``on_call`` events. This can be used after a\n    signature triggered (just before the return) to match this signature only once.\n\n    .. code-block:: python\n        :linenos:\n\n        def on_call(self, call, pid, tid):\n            if call[\"api\"] == \"LdrGetProcedureAddress\":\n                self.deactivate()\n                return True\n\n\n.. function:: Signature.activate()\n\n    Re-activates a signature after it has been de-activated.\n\n    .. code-block:: python\n        :linenos:\n\n        def on_process(self, pid):\n            self.activate()\n"
  },
  {
    "path": "docs-old/book/src/development/code_style.rst",
    "content": "============\nCoding Style\n============\n\nIn order to contribute code to the project, you must diligently follow the\nstyle rules describe in this chapter. Having a clean and structured code is\nvery important for our development lifecycle, and not compliant code will\nmost likely be rejected.\n\nEssentially Cuckoo's code style is based on `PEP 8 - Style Guide for Python Code\n<http://www.python.org/dev/peps/pep-0008/>`_ and `PEP 257 -- Docstring\nConventions <http://www.python.org/dev/peps/pep-0257/>`_.\n\nFormatting\n==========\n\nCopyright header\n----------------\n\nAll source code files must start with the following copyright header::\n\n    # Copyright (C) 2010-2013 Claudio Guarnieri.\n    # Copyright (C) 2014-2016 Cuckoo Foundation.\n    # This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n    # See the file 'docs/LICENSE' for copying permission.\n\nIndentation\n-----------\n\nThe code must have a 4-spaces-tabs indentation.\nSince Python enforce the indentation, make sure to configure your editor\nproperly or your code might cause malfunctioning.\n\nMaximum Line Length\n-------------------\n\nLimit all lines to a maximum of 79 characters.\n\nBlank Lines\n-----------\n\nSeparate the class definition and the top level function with one blank line.\nMethods definitions inside a class are separated by a single blank line::\n\n    class MyClass:\n        \"\"\"Doing something.\"\"\"\n\n        def __init__(self):\n            \"\"\"Initialize\"\"\"\n            pass\n\n        def do_it(self, what):\n            \"\"\"Do it.\n            @param what: do what.\n            \"\"\"\n            pass\n\nUse blank lines in functions, sparingly, to isolate logic sections.\nImport blocks are separated by a single blank line, import blocks are separated\nfrom classes by one blank line.\n\nImports\n-------\n\nImports must be on separate lines. If you're importing multiple objects from a\npackage, use a single line::\n\n    from lib import a, b, c\n\n**NOT**::\n\n    from lib import a\n    from lib import b\n    from lib import c\n\nAlways specify explicitly the objects to import::\n\n    from lib import a, b, c\n\n**NOT**::\n\n    from lib import *\n\nStrings\n-------\n\nStrings must be delimited by double quotes (\").\n\nPrinting and Logging\n--------------------\n\nWe discourage the use of ``print()``: if you need to log an event please use\nPython's ``logging`` which is already initialized by Cuckoo.\n\nIn your module add::\n\n    import logging\n    log = logging.getLogger(__name__)\n\nAnd use the ``log`` handle, for more details refer to the Python documentation.\n\nIn case you really need to print a string to standard output, use the\n``print()`` function::\n\n    print(\"foo\")\n\n**NOT** the statement::\n\n    print \"foo\"\n\nChecking for keys in data structures\n------------------------------------\n\nWhen checking for a key in a data structure use the clause \"in\" instead of\nmethods like \"has_key()\", for example::\n\n    if \"bar\" in foo:\n        do_something(foo[\"bar\"])\n\nExceptions\n==========\n\nCustom exceptions must be defined in the *lib/cuckoo/common/exceptions.py* file\nor in the local module if the exception should not be global.\n\nThe following is the current Cuckoo exceptions chain::\n\n    .-- CuckooCriticalError\n    |   |-- CuckooStartupError\n    |   |-- CuckooDatabaseError\n    |   |-- CuckooMachineError\n    |   `-- CuckooDependencyError\n    |-- CuckooOperationalError\n    |   |-- CuckooAnalysisError\n    |   |-- CuckooProcessingError\n    |   `-- CuckooReportError\n    `-- CuckooGuestError\n\nBeware that the use of ``CuckooCriticalError`` and its child exceptions will\ncause Cuckoo to terminate.\n\nNaming\n------\n\nCustom exception names must start with \"Cuckoo\" and end with \"Error\" if it\nrepresents an unexpected malfunction.\n\nException handling\n------------------\n\nWhen catching an exception and accessing its handle, use ``as e``::\n\n    try:\n        foo()\n    except Exception as e:\n        bar()\n\n**NOT**::\n\n    try:\n        foo()\n    except Exception, something:\n        bar()\n\nIt's a good practice use \"e\" instead of \"e.message\".\n\nDocumentation\n=============\n\nAll code must be documented in docstring format, see `PEP 257 -- Docstring\nConventions <http://www.python.org/dev/peps/pep-0257/>`_.\nAdditional comments may be added in logical blocks to make the code easier to understand.\n\nAutomated testing\n=================\n\nWe believe in automated testing to provide high quality code and avoid dumb\nbugs.\nWhen possible, all code must be committed with proper unit tests. Particular\nattention must be placed when fixing bugs: it's good practice to write unit\ntests to reproduce the bug.\nAll unit tests and fixtures are placed in the tests folder in the Cuckoo\nroot.\nWe adopted `Nose <http://nose.readthedocs.org/en/latest/>`_ as unit testing framework.\n"
  },
  {
    "path": "docs-old/book/src/development/development_notes.rst",
    "content": "=================\nDevelopment Notes\n=================\n\nGit branches\n============\n\nCuckoo Sandbox source code is available in our `official git repository`_.\n\n.. _`official git repository`: https://github.com/cuckoosandbox/cuckoo\n\nUp until version 1.0 we used to coordinate all ongoing development in a\ndedicated \"development\" branch and we've been exclusively merging pull requests\nin such branch.\nSince version 1.1 we moved development to the traditional \"master\" branch and we\nmake use of GitHub's tags and release system to reference development milestones\nin time.\n\nRelease Versioning\n==================\n\nCuckoo releases are named using three numbers separated by dots, such as 1.2.3,\nwhere the first number is the release, the second number is the major version,\nthe third number is the bugfix version.\nThe testing stage from git ends with \"-beta\" and development stage with \"-dev\".\n\n    .. warning::\n\n        If you are using a \"beta\" or \"dev\" stage, please consider that it's not\n        meant to be an official release, therefore we don't guarantee its functioning\n        and we don't generally provide support.\n        If you think you encountered a bug there, make sure that the nature of the\n        problem is not related to your own misconfiguration and collect all the details\n        to be notified to our developers. Make sure to specify which exact version you\n        are using, eventually with your current git commit id.\n\nTicketing system\n================\n\nTo submit bug reports or feature requests, please use GitHub's `Issue`_ tracking\nsystem.\n\n.. _`Issue`: https://github.com/cuckoosandbox/cuckoo/issues\n\nContribute\n==========\n\nTo submit your patch just create a Pull Request from your GitHub fork.\nIf you don't now how to create a Pull Request take a look to `GitHub help`_.\n\n.. _`GitHub help`: https://help.github.com/articles/using-pull-requests/\n"
  },
  {
    "path": "docs-old/book/src/development/index.rst",
    "content": ".. Development chapter frontpage\n\nDevelopment\n===========\n\nThis chapter explains how to write Cuckoo's code and how to contribute.\n\n.. toctree::\n\n    development_notes\n    code_style\n"
  },
  {
    "path": "docs-old/book/src/faq/index.rst",
    "content": "===\nFAQ\n===\n\nFrequently Asked Questions:\n\n    * :ref:`analyze_urls`\n    * :ref:`general_volatility`\n    * :ref:`esxi_reqs`\n    * :ref:`troubles_upgrade`\n    * :ref:`troubles_problem`\n\n\nGeneral Questions\n=================\n\n.. _analyze_urls:\n\nCan I analyze URLs with Cuckoo?\n-------------------------------\n\nYes you can. Since version 0.5 URLs are natively supported by Cuckoo.\nAdditional details on how URL submissions is documented :doc:`../usage/submit.html#submission-utility`.\n\n\n    $ ./utils/submit.py --url http://www.example.com\n\n\n.. _general_volatility:\n\nCan I use Volatility with Cuckoo?\n---------------------------------\n\nCuckoo 0.5 introduces support for optional full memory dumps, which are created at\nthe end of the analysis process. You can use these memory dumps to perform additional\nmemory forensic analysis with `Volatility`_.\n\nPlease also consider that we don't particularly encourage this: since Cuckoo employs\nsome rootkit-like technologies to perform its operations, the results of a forensic\nanalysis would be polluted by the sandbox's components.\n\n.. _`Volatility`: http://code.google.com/p/volatility/\n\n.. _esxi_reqs:\n\nWhat do I need to use Cuckoo with VMware ESXi?\n----------------------------------------------\n\nTo run with VMware vSphere Hypervisor (or ESXi) Cuckoo leverages libvirt.\nLibivirt is currently using the VMware API to take control over virtual machines,\nthough these APIs are available only in the licensed version.\nIn VMware vSphere free edition, these APIs are read only, so you are unable\nto use Cuckoo with it.\nFor the minimum license needed, please have a look at VMware website.\n\nTroubleshooting\n===============\n\n.. _troubles_upgrade:\n\nAfter upgrade Cuckoo stops to work\n----------------------------------\n\nProbably you upgraded it in a wrong way.\nIt's not a good practice to rewrite the files due to Cuckoo's complexity and\nquick evolution.\n\nPlease follow the upgrade steps described in :doc:`../installation/upgrade`.\n\n.. _troubles_problem:\n\nCuckoo stumbles and produces some error I don't understand\n----------------------------------------------------------\n\nCuckoo is a mature but always evolving project, it's possible that\nyou encounter some problems while running it, but before you rush into\nsending emails to everyone make sure you read what follows.\n\nCuckoo is not meant to be a point-and-click tool: it's designed to be a highly\ncustomizable and configurable solution for somewhat experienced users and\nmalware analysts.\n\nIt requires you to have a decent understanding of your operating systems, Python,\nthe concepts behind virtualization and sandboxing.\nWe try to make it as easy to use as possible, but you have to keep in mind that\nit's not a technology meant to be accessible to just anyone.\n\nThat being said, if a problem occurs you have to make sure that you did everything\nyou could before asking for time and effort from our developers and users.\nWe just can't help everyone, we have limited time and it has to be dedicated to\nthe development and fixing of actual bugs.\n\n    * We have extensive documentation, read it carefully. You can't just skip parts\n      of it.\n    * We have a mailing list archive, search through it for previous threads where\n      your same problem could have been already addressed and solved.\n    * We have a `Community`_ platform for asking questions, use it.\n    * We have lot of users producing content on Internet, `Google`_ it.\n    * Spend some of your own time trying fixing the issues before asking ours, you\n      might even get to learn and understand Cuckoo better.\n\nLong story short: use the existing resources, put some efforts into it and don't\nabuse people.\n\nIf you still can't figure out your problem, you can ask help on our online communities\n(see :doc:`../finalremarks/index`).\nMake sure when you ask for help to:\n\n    * Use a clear and explicit title for your emails: \"I have a problem\", \"Help me\" or\n      \"Cuckoo error\" are **NOT** good titles.\n    * Explain **in details** what you're experiencing. Try to reproduce several\n      times your issue and write down all steps to achieve that.\n    * Use no-paste services and link your logs, configuration files and details on your\n      setup.\n    * Eventually provide a copy of the analysis that generated the problem.\n\n.. _`Community`: https://community.cuckoosandbox.org\n.. _`Google`: http://www.google.com\n\nCheck and restore current snapshot with KVM\n-------------------------------------------\n\nIf something goes wrong with virtual machine it's best practice to check current snapshot\nstatus.\nYou can do that with the following::\n\n    $ virsh snapshot-current \"<Name of VM>\"\n\nIf you got a long XML as output your current snapshot is configured and you can skip\nthe rest of this chapter; anyway if you got an error like the following your current\nsnapshot is broken::\n\n    $ virsh snapshot-current \"<Name of VM>\"\n    error: domain '<Name of VM>' has no current snapshot\n\nTo fix and create a current snapshot first list all machine's snapshots::\n\n    $ virsh snapshot-list \"<Name of VM>\"\n     Name                 Creation Time             State\n     ------------------------------------------------------------\n     1339506531           2012-06-12 15:08:51 +0200 running\n\nChoose one snapshot name and set it as current::\n\n    $ snapshot-current \"<Name of VM>\" --snapshotname 1339506531\n    Snapshot 1339506531 set as current\n\nNow the virtual machine state is fixed.\n\nCheck and restore current snapshot with VirtualBox\n--------------------------------------------------\n\nIf something goes wrong with virtual it's best practice to check the virtual machine\nstatus and the current snapshot.\nFirst of all check the virtual machine status with the following::\n\n    $ VBoxManage showvminfo \"<Name of VM>\" | grep State\n    State:           powered off (since 2012-06-27T22:03:57.000000000)\n\nIf the state is \"powered off\" you can go ahead with the next check, if the state is\n\"aborted\" or something else you have to restore it to \"powered off\" before::\n\n    $ VBoxManage controlvm \"<Name of VM>\" poweroff\n\nWith the following check the current snapshots state::\n\n    $ VBoxManage snapshot \"<Name of VM>\" list --details\n    Name: s1 (UUID: 90828a77-72f4-4a5e-b9d3-bb1fdd4cef5f)\n    Name: s2 (UUID: 97838e37-9ca4-4194-a041-5e9a40d6c205) *\n\nIf you have a snapshot marked with a star \"*\" your snapshot is ready, anyway\nyou have to restore the current snapshot::\n\n    $ VBoxManage snapshot \"<Name of VM>\" restorecurrent\n\nUnable to bind result server error\n----------------------------------\n\nAt Cuckoo startup if you get an error message like this one::\n\n    2014-01-07 18:42:12,686 [root] CRITICAL: CuckooCriticalError: Unable to bind result server on 192.168.56.1:2042: [Errno 99] Cannot assign requested address\n\nIt means that Cuckoo is unable to start the result server on the IP address written\nin cuckoo.conf (or in machinery.conf if you are using the resultserver_ip option inside).\nThis usually happen when you start Cuckoo without bringing up the virtual interface associated\nwith the result server IP address.\nYou can bring it up manually, it depends from one virtualization software to another, but\nif you don't know how to do, a good trick is to manually start and stop an analysis virtual\nmachine, this will bring virtual networking up.\n\nIn the case of VirtualBox the hostonly interface `vboxnet0` can be created as follows::\n\n    # If the hostonly interface vboxnet0 does not exist already.\n    $ VBoxManage hostonlyif create\n\n    # Configure vboxnet0.\n    $ VBoxManage hostonlyif ipconfig vboxnet0 --ip 192.168.56.1 --netmask 255.255.255.0\n\nError during template rendering\n-------------------------------\n\n.. versionchanged:: 2.0-rc1\n\nIn our 2.0-rc1 release a bug was introduced that looks as follows in the\nscreenshot below. In order to resolve this issue in your local setup, please\nopen the ``web/analysis/urls.py`` file and modify the 21st line by adding an\nunderscore as follows::\n\n     -        \"/(?P<ip>[\\d\\.]+)?/(?P<host>[a-zA-Z0-9-\\.]+)?\"\n     +        \"/(?P<ip>[\\d\\.]+)?/(?P<host>[a-zA-Z0-9-_\\.]+)?\"\n\nThe official commit fixing this issue can be found in `the following commit`_.\n\n.. _`the following commit`: https://github.com/cuckoosandbox/cuckoo/commit/9c704f50e70227ed21ae1b79ba90540c3087fc57\n\n.. image:: ../_images/screenshots/error_template_rendering.png\n\n501 Unsupported Method ('GET')\n------------------------------\n\n.. versionchanged:: 2.0-rc1\n\nSince 2.0-rc1 Cuckoo supports both the `legacy Cuckoo Agent`_ as well as a\n`new, REST API-based, Cuckoo Agent`_ for communication between the Guest and\nthe Host machine. The new ``Cuckoo Agent`` is an improved Agent in the sense\nthat it also allows usage outside of Cuckoo. As an example, it is used\nextensively by `VMCloak`_ in order to automatically create, configure, and\ncloak Virtual Machines.\n\nNow in order to determine whether the Cuckoo Host is talking to the legacy or\nnew ``Cuckoo Agent`` it does a ``HTTP GET`` request to the root path (``/``).\nThe legacy Cuckoo Agent, which is based on ``xmlrpc``, doesn't handle that\nspecific route and therefore returns an error, ``501 Unsupported method``.\n\nHaving said that, the message is not actually an error, it is simply Cuckoo\ntrying to determine to which version of the ``Cuckoo Agent`` it is talking.\n\n.. note::\n    It should be noted that even though there is a new ``Cuckoo Agent``\n    available, backwards compatibility for the legacy ``Cuckoo Agent`` is\n    still available and working properly.\n\n.. image:: ../_images/screenshots/unsupported_method.png\n\n.. _`legacy Cuckoo Agent`: https://github.com/cuckoosandbox/cuckoo/blob/master/agent/agent.py\n.. _`new, REST API-based, Cuckoo Agent`: https://github.com/jbremer/agent/blob/master/agent.py\n.. _`VMCloak`: https://github.com/jbremer/vmcloak\n"
  },
  {
    "path": "docs-old/book/src/finalremarks/index.rst",
    "content": "=============\nFinal Remarks\n=============\n\nLinks\n=====\n\n    * `www.cuckoosandbox.org`_\n    * `community.cuckoosandbox.org`_\n    * `github.com/cuckoosandbox`_\n    * `www.malwr.com`_\n\n.. _`www.cuckoosandbox.org`: http://www.cuckoosandbox.org\n.. _`community.cuckoosandbox.org`: https://community.cuckoosandbox.org\n.. _`github.com/cuckoosandbox`: http://github.com/cuckoosandbox\n.. _`www.malwr.com`: http://www.malwr.com\n\n.. _join_the_discussion:\n\nJoin the discussion\n===================\n\nYou can get in contact with the Cuckoo developers and users through the `Community`_\nportal or on IRC at the official `#cuckoosandbox`_ channel.\n\nIf you are encountering an issue you can't solve and are looking for some help,\ngo to our `Community`_ website.\n\nPlease read the following rules before posting:\n\n * Before posting, read the `Community`_ archives, the Cuckoo blog,\n   the documentation and Google about your issue. **DO NOT** post questions that\n   have already been answered over and over everywhere.\n * Posting messages saying just something like \"Doesn't work, help me\" are completely\n   useless. If something is not working report the error, paste the logs,\n   the config file, the information on the virtual machine, the\n   results of the troubleshooting, etc. Give context. We are not wizards and we\n   don't have a crystal ball.\n * Use a proper title. Stuff like \"Doesn't work\", \"Help me\", \"Error\" are not\n   proper titles.\n\n.. _`#cuckoosandbox`: irc://irc.freenode.net/cuckoosandbox\n.. _`Markdown`: http://daringfireball.net/projects/markdown/syntax\n.. _`Community`: https://community.cuckoosandbox.org\n\nSupport Us\n==========\n\nCuckoo Sandbox is a completely open source software, released freely to the public\nand developed mostly during free time by volunteers. If you enjoy it and want to\nsee it kept developed and updated, please consider supporting us.\n\nWe are always looking for financial support, hardware support and contributions of\nany sort. If you're interested in cooperating, feel free to contact us.\n\nPeople\n======\n\nCuckoo Sandbox is an open source project result of the efforts and contributions\nof a lot of people who enjoyed volunteering some of their time for a greater\ngood :).\n\nActive Developers\n-----------------\n\n    +------------------------------+--------------------+-------------------------------------+\n    | Name                         | Role               | Contact                             |\n    +==============================+====================+=====================================+\n    | Claudio `nex`_ Guarnieri     | Lead Developer     | ``nex at nex dot sx``               |\n    +------------------------------+--------------------+-------------------------------------+\n    | Alessandro `jekil`_ Tanasi   | Developer          | ``alessandro at tanasi dot it``     |\n    +------------------------------+--------------------+-------------------------------------+\n    | Jurriaan `skier`_ Bremer     | Developer          | ``jurriaanbremer at gmail dot com`` |\n    +------------------------------+--------------------+-------------------------------------+\n    | Mark `rep`_ Schloesser       | Developer          | ``ms at mwcollect dot org``         |\n    +------------------------------+--------------------+-------------------------------------+\n\nContributors\n------------\n\nIt's hard at this point to keep track of all individual contributions.\nFollowing is the list of people who contributed code to our GitHub repository::\n\n    $ git shortlog -s -n\n        1226  Jurriaan Bremer\n        1119  Nex\n        1076  jekil\n         372  Dmitry Rodionov\n         305  rep\n         185  nex\n         117  Thorsten Sick\n          85  Ivan Kirillov\n          50  Alessandro Tanasi\n          24  Mark Schloesser\n          24  Pietro Delsante\n          24  Charlie Hanner\n          22  David Maciejak\n          15  Adam Meily\n          14  Justin Roberts\n          13  Greg Back\n          11  r3comp1le\n          10  lehmz\n           9  Script Kiddie\n           9  Christopher Schmitt\n           7  Hugh Pearse\n           7  SpoonBoy\n           6  KillerInstinct\n           6  Tal Jerome\n           6  init99\n           5  jamu\n           5  Rajiv Subrahmanyam\n           5  David Francos\n           4  Nicky\n           4  Chris Boettcher\n           4  Adam Pridgen\n           4  Ben Small\n           4  Darren Spruell\n           3  Thibault Marquand\n           3  Allen Swackhamer\n           3  Espen Fjellvær Olsen\n           3  Jerome Marty\n           3  Nagy Ferenc László\n           3  Stephen DiCato\n           3  mak\n           3  robertsjw\n           3  wzr\n           3  z0mbiehunt3r\n           2  Roberto Abdelkader Martínez Pérez\n           2  kholbrook1303\n           2  Will Metcalf\n           2  bcyrill\n           2  upsidedwn\n           2  mcpacosy\n           2  mt00at\n           2  Henrique Menezes\n           2  nsmfoo\n           2  SecTecRes\n           2  Shane-Carr\n           2  Mario Vilas\n           2  Gael Muller\n           2  Jacob Gajek\n           2  Richard Harman\n           2  Mark Woan\n           2  Max Taube\n           2  Neriberto C.Prado\n           2  Thomas Penteker\n           2  Claudio Guarnieri\n           2  Nitzan Carmel\n           1  jvoisin\n           1  l0ngestever\n           1  Ben Lyon\n           1  Andrea De Pasquale\n           1  Alexander J\n           1  Aitor Gómez\n           1  vacmf\n           1  sabri\n           1  sharvilkatariya\n           1  shendo\n           1  Maxim Muzafarov\n           1  Micha Lenk\n           1  Michael George\n           1  ssobr\n           1  Michal Marek\n           1  John Davison\n           1  Jesús Hernández Gormaz\n           1  RiddleLei\n           1  Ryan Peck\n           1  SnakeByte Lab\n           1  tsmolka\n           1  Fedele Mantuano\n           1  =\n           1  Edouard Chamillard\n           1  Valter Santos\n           1  bladeswords\n           1  chimerhapsody\n           1  chort\n           1  chrestme\n           1  consen\n           1  dewiestr\n           1  dspruell\n           1  flo-vienna\n           1  Crashman1983\n           1  Benjamin Vanheuverzwijn\n\nThere is a number of friends who provided feedback, ideas and support during the years\nof development of this project, including:\n\n    * Felix Leder\n    * Tillmann Werner\n    * Georg Wicherski\n    * David Watson\n    * Christian Seifert\n\nSupporters\n==========\n\n    * `The Honeynet Project`_\n    * `The Shadowserver Foundation`_\n\n.. _`nex`: https://twitter.com/botherder\n.. _`jekil`: https://twitter.com/jekil\n.. _`skier`: https://twitter.com/skier_t\n.. _`rep`: https://twitter.com/repmovsb\n.. _`The Honeynet Project`: http://www.honeynet.org\n.. _`The Shadowserver Foundation`: http://www.shadowserver.org\n"
  },
  {
    "path": "docs-old/book/src/index.rst",
    "content": "\n.. _index:\n\n===================\nCuckoo Sandbox Book\n===================\n\nCuckoo Sandbox is an *Open Source* software for automating analysis of suspicious files.\nTo do so it makes use of custom components that monitor the behavior of the malicious\nprocesses while running in an isolated environment.\n\nThis guide will explain how to set up Cuckoo, use it and customize it.\n\nHaving troubles?\n================\n\nIf you're having troubles you might want to check out the :doc:`FAQ <faq/index>`\nas it may already have the answers to your questions.\n\n.. toctree::\n\n    faq/index\n\nOtherwise you can ask the developers and/or other Cuckoo users, see\n:doc:`Join the discussion <finalremarks/index>`.\n\nContents\n========\n\n.. toctree::\n\n    introduction/index\n    installation/index\n    usage/index\n    customization/index\n    development/index\n    finalremarks/index\n"
  },
  {
    "path": "docs-old/book/src/installation/guest/agent.rst",
    "content": "====================\nInstalling the Agent\n====================\n\nFrom release 0.4 Cuckoo adopts a custom agent that runs inside the Guest and\nthat handles the communication and the exchange of data with the Host.\nThis agent is designed to be cross-platform, therefore you should be able\nto use it on Windows as well as on Linux and OS X.\nIn order to make Cuckoo work properly, you'll have to install and start this\nagent.\n\nIt's very simple.\n\nIn the *agent/* directory you will find and *agent.py* file, just copy it\nto the Guest operating system (in whatever way you want, perhaps a temporary\nshared folder or by downloading it from a Host webserver) and run it.\nThis will launch the XMLRPC server which will be listening for connections.\n\nOn Windows simply launching the script will also spawn a Python window, if\nyou want to hide it you can rename the file from *agent.py* to **agent.pyw**\nwhich will prevent the window from spawning.\n\nIf you want the script to be launched at Windows' boot, just place the file in\nthe `Startup` folder.\n"
  },
  {
    "path": "docs-old/book/src/installation/guest/cloning.rst",
    "content": "===========================\nCloning the Virtual Machine\n===========================\n\nIn case you planned to use more than one virtual machine, there's no need to\nrepeat all the steps done so far: you can clone it. In this way you'll have\na copy of the original virtualized Windows with all requirements already\ninstalled.\n\nThe new virtual machine will also contain all the settings of the original one,\nwhich is not good. Now you need to proceed repeating the steps explained in\n:doc:`network`, :doc:`agent` and :doc:`saving` for this new machine.\n"
  },
  {
    "path": "docs-old/book/src/installation/guest/creation.rst",
    "content": "===============================\nCreation of the Virtual Machine\n===============================\n\nOnce you have :doc:`properly installed <../host/requirements>` your virtualization\nsoftware, you can proceed on creating all the virtual machines you need.\n\nUsing and configuring your virtualization software is out of the scope of this\nguide, so please refer to the official documentation.\n\n    .. note::\n\n        You can find some hints and considerations on how to design and create\n        your virtualized environment in the :doc:`../../introduction/sandboxing`\n        chapter.\n\n    .. note::\n\n        For analysis purposes you are recommended to use Windows XP Service Pack\n        3, but Cuckoo Sandbox also proved to work with Windows 7 with User\n        Access Control disabled.\n\n    .. note::\n\n        KVM Users - Be sure to choose a hard drive image format that supports snapshots.\n        See :doc:`saving`\n        for more information.\n\nWhen creating the virtual machine, Cuckoo doesn't require any specific\nconfiguration. You can choose the options that best fit your needs.\n"
  },
  {
    "path": "docs-old/book/src/installation/guest/index.rst",
    "content": "===================\nPreparing the Guest\n===================\n\nAt this point you should have configured the Cuckoo host component and you\nshould have designed and defined the number and the names of the virtual\nmachines you are going to use for malware execution.\n\nNow it's time to create such machines and to configure them properly.\n\n.. toctree::\n\n    creation\n    requirements\n    network\n    agent\n    saving\n    cloning\n\n"
  },
  {
    "path": "docs-old/book/src/installation/guest/network.rst",
    "content": "=====================\nNetwork Configuration\n=====================\n\nNow it's time to setup the network for your virtual machine.\n\nWindows Settings\n================\n\nBefore configuring the underlying networking of the virtual machine, you might\nwant to tweak some settings inside Windows itself.\n\nOne of the most important things to do is **disabling** *Windows Firewall* and the\n*Automatic Updates*. The reason behind this is that they can affect the behavior\nof the malware under normal circumstances and that they can pollute the network\nanalysis performed by Cuckoo, by dropping connections or including irrelevant\nrequests.\n\nYou can do so from Windows' Control Panel as shown in the picture:\n\n    .. image:: ../../_images/screenshots/windows_security.png\n        :align: center\n\nVirtual Networking\n==================\n\nNow you need to decide how to make your virtual machine able to access Internet\nor your local network.\n\nWhile in previous releases Cuckoo used shared folders to exchange data between\nthe Host and Guests, from release 0.4 it adopts a custom agent that works\nover the network using a simple XMLRPC protocol.\n\nIn order to make it work properly you'll have to configure your machine's\nnetwork so that the Host and the Guest can communicate.\nTesting the network access by pinging a guest is a good practice, to make sure the\nvirtual network was set up correctly.\nUse only static IP addresses for your guest, as today Cuckoo doesn't support DHCP\nand using it will break your setup.\n\nThis stage is very much up to your own requirements and to the\ncharacteristics of your virtualization software.\n\n    .. warning:: Virtual networking errors!\n        Virtual networking is a vital component for Cuckoo, you must be really\n        sure to get connectivity between host and guest.\n        Most of the issues reported by users are related to a wrong setup of\n        their networking.\n        If you aren't sure about that check your virtualization software\n        documentation and test connectivity with ping and telnet.\n\nThe recommended setup is using a Host-Only networking layout with proper\nforwarding and filtering configuration done with ``iptables`` on the Host.\n\nFor example, using VirtualBox, you can enable Internet access to the virtual\nmachines using the following ``iptables`` rules (assuming that eth0 is your\noutgoing interface, vboxnet0 is your virtual interface and 192.168.56.0/24 is\nyour subnet address)::\n\n    iptables -A FORWARD -o eth0 -i vboxnet0 -s 192.168.56.0/24 -m conntrack --ctstate NEW -j ACCEPT\n    iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT\n    iptables -A POSTROUTING -t nat -j MASQUERADE\n\nAnd adding IP forwarding::\n\n    sysctl -w net.ipv4.ip_forward=1\n"
  },
  {
    "path": "docs-old/book/src/installation/guest/requirements.rst",
    "content": "============\nRequirements\n============\n\nIn order to make Cuckoo run properly in your virtualized Windows system, you\nwill have to install some required software and libraries.\n\nInstall Python\n==============\n\nPython is a strict requirement for the Cuckoo guest component (*analyzer*) in\norder to run properly.\n\nYou can download the proper Windows installer from the `official website`_.\nAlso in this case Python 2.7 is preferred.\n\nSome Python libraries are optional and provide some additional features to\nCuckoo guest component. They include:\n\n    * `Python Image Library`_: it's used for taking screenshots of the Windows desktop during the analysis.\n\nThey are not strictly required by Cuckoo to work properly, but you are encouraged\nto install them if you want to have access to all available features. Make sure\nto download and install the proper packages according to your Python version.\n\n.. _`official website`: http://www.python.org/getit/\n.. _`Python Image Library`: http://www.pythonware.com/products/pil/\n\nAdditional Software\n===================\n\nAt this point you should have installed everything needed by Cuckoo to run\nproperly.\n\nDepending on what kind of files you want to analyze and what kind of sandboxed\nWindows environment you want to run the malware samples in, you might want to install\nadditional software such as browsers, PDF readers, office suites etc.\nRemember to disable the \"auto update\" or \"check for updates\" feature of\nany additional software.\n\nThis is completely up to you and to what your needs are. You can get some hints\nby reading the :doc:`../../introduction/sandboxing` chapter.\n\n"
  },
  {
    "path": "docs-old/book/src/installation/guest/saving.rst",
    "content": "==========================\nSaving the Virtual Machine\n==========================\n\nNow you should be ready to save the virtual machine to a snapshot state.\n\nBefore doing this **make sure you rebooted it softly and that it's currently\nrunning, with Cuckoo's agent running and with Windows fully booted**.\n\nNow you can proceed saving the machine. The way to do it obviously depends on\nthe virtualization software you decided to use.\n\nIf you follow all the below steps properly, your virtual machine should be ready\nto be used by Cuckoo.\n\nVirtualBox\n==========\n\nIf you are going for VirtualBox you can take the snapshot from the graphical user\ninterface or from the command line::\n\n    $ VBoxManage snapshot \"<Name of VM>\" take \"<Name of snapshot>\" --pause\n\nAfter the snapshot creation is completed, you can power off the machine and\nrestore it::\n\n    $ VBoxManage controlvm \"<Name of VM>\" poweroff\n    $ VBoxManage snapshot \"<Name of VM>\" restorecurrent\n\nKVM\n===\n\nIf decided to adopt KVM, you must first of all be sure to use a disk format for\nyour virtual machines which supports snapshots.\nBy default libvirt tools create RAW virtual disks, and since we need snapshots\nyou'll either have to use QCOW2 or LVM. For the scope of this guide we adopt QCOW2,\nwhich is easier to setup than LVM.\n\nThe easiest way to create such a virtual disk correctly is using the tools\nprovided by the libvirt suite. You can either use ``virsh`` if you prefer\ncommand-line interfaces or ``virt-manager`` for a nice GUI.\nYou should be able to directly create it in QCOW2 format, but in case you have\na RAW disk you can convert it like this::\n\n    $ cd /your/disk/image/path\n    $ qemu-img convert -O qcow2 your_disk.raw your_disk.qcow2\n\nNow you have to edit your VM definition as follows::\n\n    $ virsh edit \"<Name of VM>\"\n\nFind the disk section, it looks like this::\n\n    <disk type='file' device='disk'>\n        <driver name='qemu' type='raw'/>\n        <source file='/your/disk/image/path/your_disk.raw'/>\n        <target dev='hda' bus='ide'/>\n        <address type='drive' controller='0' bus='0' unit='0'/>\n    </disk>\n\nAnd change \"type\" to qcow2 and \"source file\" to your qcow2 disk image, like this::\n\n    <disk type='file' device='disk'>\n        <driver name='qemu' type='qcow2'/>\n        <source file='/your/disk/image/path/your_disk.qcow2'/>\n        <target dev='hda' bus='ide'/>\n        <address type='drive' controller='0' bus='0' unit='0'/>\n    </disk>\n\nNow test your virtual machine, if everything works prepare it for snapshotting while\nrunning Cuckoo's agent. This means the virtual machine needs to be running\nwhile you are taking the snapshot. Then you can shut it down.\nYou can finally take a snapshot with the following command::\n\n    $ virsh snapshot-create \"<Name of VM>\"\n\nHaving multiple snapshots can cause errors::\n\n    ERROR: No snapshot found for virtual machine VM-Name\n\nVM snapshots can be managed using the following commands::\n\n    $ virsh snapshot-list \"VM-Name\"\n    $ virsh snapshot-delete \"VM-Name\" 1234567890\n\nVMware Workstation\n==================\n\nIf you decided to adopt VMware Workstation, you can take the snapshot from the graphical user\ninterface or from the command line::\n\n    $ vmrun snapshot \"/your/disk/image/path/wmware_image_name.vmx\" your_snapshot_name\n\nWhere your_snapshot_name is the name you choose for the snapshot.\nAfter that power off the machine from the GUI or from the command line::\n\n    $ vmrun stop \"/your/disk/image/path/wmware_image_name.vmx\" hard\n\nXenServer\n=========\n\nIf you decided to adopt XenServer, the XenServer machinery supports starting\nvirtual machines from either disk or a memory snapshot. Creating and reverting\nmemory snapshots require that the Xen guest tools be installed in the\nvirtual machine. The recommended method of booting XenServer virtual machines is\nthrough memory snapshots because they can greatly reduce the boot time of\nvirtual machines during analysis. If, however, the option of installing the\nguest tools is not available, the virtual machine can be configured to have its\ndisks reset on boot. Resetting the disk ensures that malware samples cannot\npermanently modify the virtual machine.\n\nMemory Snapshots\n----------------\n\nThe Xen guest tools can be installed from the XenCenter application that ships\nwith XenServer. Once installed, restart the virtual machine and ensure that the\nCuckoo agent is running.\n\nSnapshots can be taken through the XenCenter application and the command line\ninterface on the control domain (Dom0). When creating the snapshot from\nXenCenter, ensure that the \"Snapshot disk and memory\" is checked. Once created,\nright-click on the snapshot and note the snapshot UUID.\n\nTo snapshot from the command line interface, run the following command::\n\n    $ xe vm-checkpoint vm=\"vm_uuid_or_name\" new-name-label=\"Snapshot Name/Description\"\n\nThe snapshot UUID is printed to the screen once the command completes.\n\nRegardless of how the snapshot was created, save the UUID in the virtual\nmachine's configuration section. Once the snapshot has been created, you can\nshutdown the virtual machine.\n\nBooting from Disk\n-----------------\n\nIf you can't install the Xen guest tools or if you don't need to use memory\nsnapshots, you will need to ensure that the virtual machine's disks are reset on\nboot and that the Cuckoo agent is set to run at boot time.\n\nRunning the agent at boot time can be configured in Windows by adding a startup\nitem for the agent.\n\nThe following commands must be run while the virtual machine is powered off.\n\nTo set the virtual machine's disks to reset on boot, you'll first need to list\nall the attached disks for the virtual machine. To list all attached disks, run\nthe following command::\n\n    $ xe vm-disk-list vm=\"vm_name_or_uuid\"\n\nIgnoring all CD-ROM and read-only disks, run the following command for each\nremaining disk to change it's behavior to reset on boot::\n\n    $ xe vdi-param-set uuid=\"vdi_uuid\" on-boot=reset\n\nAfter the disk is set to reset on boot, no permanent changes can be made to the\nvirtual machine's disk. Modifications that occur while a virtual machine is\nrunning will not persist past shutdown.\n"
  },
  {
    "path": "docs-old/book/src/installation/guest_physical/creation.rst",
    "content": "================================\nCreation of the Physical Machine\n================================\n\nOnce you have :doc:`properly installed <../host/requirements>` your imaging\nsoftware, you can proceed on creating all the physical machines you need.\n\nUsing and configuring your imaging software is out of the scope of this\nguide, so please refer to the official documentation.\n\n    .. note::\n        You can find some hints and considerations on how to design and create\n        your virtualized environment in the :doc:`../../introduction/sandboxing`\n        chapter.\n\n    .. note::\n        For analysis purposes you are recommended to use Windows XP Service Pack\n        3, but Cuckoo Sandbox also proved to work with Windows 7 with User\n        Access Control disabled.\n\n\nWhen creating the physical machine, Cuckoo doesn't require any specific\nconfiguration. You can choose the options that best fit your needs.\n"
  },
  {
    "path": "docs-old/book/src/installation/guest_physical/index.rst",
    "content": "======================================\nPreparing the Guest (Physical Machine)\n======================================\n\nAt this point you should have configured the Cuckoo host component and you\nshould have designed and defined the number and the names of the physical\nmachines you are going to use for malware execution.\n\nNow it's time to create such machines and to configure them properly.\n\n.. toctree::\n\n    creation\n    requirements\n    network\n    ../guest/agent\n    saving\n"
  },
  {
    "path": "docs-old/book/src/installation/guest_physical/network.rst",
    "content": "=====================\nNetwork Configuration\n=====================\n\nNow it's time to setup the network for your physical machine.\n\nWindows Settings\n================\n\nBefore configuring the underlying networking of the sandbox, you might\nwant to tweak some settings inside Windows itself.\n\nOne of the most important things to do is **disabling** *Windows Firewall* and the\n*Automatic Updates*. The reason behind this is that they can affect the behavior\nof the malware under normal circumstances and that they can pollute the network\nanalysis performed by Cuckoo, by dropping connections or including irrelevant\nrequests.\n\nYou can do so from Windows' Control Panel as shown in the picture:\n\n    .. image:: ../../_images/screenshots/windows_security.png\n        :align: center\n\nUsing a physical machine manager requires a few more configuration options than\nthe virtual machine managers in order to run properly. In addition to the steps\nlaid out in the regular Preparing the Guest section, some settings need to be changed\nfor physical machines to work properly.\n\n    * Enable auto-logon (Allows for the agent to start upon reboot)\n    * Enable Remote RPC (Allows for Cuckoo to reboot the sandbox using RPC)\n    * Turn off paging (Optional)\n    * Disable Screen Saver (Optional)\n\nIn Windows 7 the following commands can be entered into an Administrative command prompt to enable auto-logon and Remote RPC.\n::\n\n    reg add \"hklm\\software\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon\" /v DefaultUserName /d <USERNAME> /t REG_SZ /f\n    reg add \"hklm\\software\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon\" /v DefaultPassword /d <PASSWORD> /t REG_SZ /f\n    reg add \"hklm\\software\\Microsoft\\Windows NT\\CurrentVersion\\WinLogon\" /v AutoAdminLogon /d 1 /t REG_SZ /f\n    reg add \"hklm\\system\\CurrentControlSet\\Control\\TerminalServer\" /v AllowRemoteRPC /d 0x01 /t REG_DWORD /f\n    reg add \"HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\" /v LocalAccountTokenFilterPolicy /d 0x01 /t REG_DWORD /f\n\nNetworking\n==========\n\nNow you need to decide how to make your physical machine able to access Internet\nor your local network.\n\nWhile in previous releases Cuckoo used shared folders to exchange data between\nthe Host and Guests, from release 0.4 it adopts a custom agent that works\nover the network using a simple XMLRPC protocol.\n\nIn order to make it work properly you'll have to configure your machine's\nnetwork so that the Host and the Guest can communicate.\nTesting the network access by pinging a guest is a good practice, to make sure the\nvirtual network was set up correctly.\nUse only static IP addresses for your guest, as today Cuckoo doesn't support DHCP\nand using it will break your setup.\n\nThis stage is very much up to your own requirements and to the\ncharacteristics of your virtualization software.\n\nFor physical machines, make sure when setting the IP address of the guest to also set\nthe Gateway and DNS server to be the IP address of the Cuckoo server on the physical network.\nFor example, if your Cuckoo server has the IP address of 192.168.1.1, then you would set the\nGateway and DNS server in Windows Settings to be 192.168.1.1 as well.\n\n    .. image:: ../../_images/screenshots/windows_network.png\n        :align: center\n"
  },
  {
    "path": "docs-old/book/src/installation/guest_physical/requirements.rst",
    "content": "============\nRequirements\n============\n\nIn order to make Cuckoo run properly in your physical Windows system, you\nwill have to install some required software and libraries.\n\nInstall Python\n==============\n\nPython is a strict requirement for the Cuckoo guest component (*analyzer*) in\norder to run properly.\n\nYou can download the proper Windows installer from the `official website`_.\nAlso in this case Python 2.7 is preferred.\n\nSome Python libraries are optional and provide some additional features to\nCuckoo guest component. They include:\n\n    * `Python Image Library`_: it's used for taking screenshots of the Windows desktop during the analysis.\n\nThey are not strictly required by Cuckoo to work properly, but you are encouraged\nto install them if you want to have access to all available features. Make sure\nto download and install the proper packages according to your Python version.\n\n.. _`official website`: http://www.python.org/getit/\n.. _`Python Image Library`: http://www.pythonware.com/products/pil/\n\nAdditional Software\n===================\n\nAt this point you should have installed everything needed by Cuckoo to run\nproperly.\n\nDepending on what kind of files you want to analyze and what kind of sandboxed\nWindows environment you want to run the malware samples in, you might want to install\nadditional software such as browsers, PDF readers, office suites etc.\nRemember to disable the \"auto update\" or \"check for updates\" feature of\nany additional software.\n\nThis is completely up to you and to what your needs are. You can get some hints\nby reading the :doc:`../../introduction/sandboxing` chapter.\n\n\nAdditional Host Requirements\n============================\nThe physical machine manager uses RPC requests to reboot physical machines.\nThe `net` command is required for this to be accomplished, and is available\nfrom the samba-common-bin package.\n\nOn Debian/Ubuntu you can install it with::\n\n    $ sudo apt-get install samba-common-bin\n\nIn order for the physical machine manager to work, you must have a way\nfor physical machines to be returned to a clean state. In development/testing\n`Fog`_ was used as a platform to handle re-imaging the physical machines.\nHowever, any re-imaging platform can be used (Clonezilla, Deepfreeze, etc) to\naccomplish this.\n\n.. _`Fog`: http://www.fogproject.org/\n"
  },
  {
    "path": "docs-old/book/src/installation/guest_physical/saving.rst",
    "content": "================\nSaving the Guest\n================\n\nNow you should be ready to save the physical machine to a clean state.\nIn order for the physical machine manager to work, you must have a way\nfor physical machines to be returned to a clean state.\n\nBefore doing this **make sure you rebooted it softly and that it's currently\nrunning, with Cuckoo's agent running and with Windows fully booted**.\n\nNow you can proceed saving the machine. The way to do it obviously depends on\nthe imaging software you decided to use.\n\nIn development/testing Fog (http://www.fogproject.org/) was used as a platform\nto handle re-imaging the physical machines.\nHowever, any re-imaging platform can be used (Clonezilla, Deepfreeze, etc.) to\naccomplish this.\n\nIf you follow all the below steps properly, your virtual machine should be ready\nto be used by Cuckoo.\n\nFog\n===\n\nAfter installing Fog, you will need to create an image and add an image and a\nhost to the Fog server.\n\nTo add an image to the fog server, open the Image Management window\n(\\http://<your_fog_server>/fog/management/index.php?node=images)\nand click \"Create New Image.\"\nProvide the proper inputs for your OS configuration and click \"Add\"\n\n    .. image:: ../../_images/screenshots/fog_image_management.png\n        :align: center\n\nNext you will need to add the host you plan to re-image to Fog.\nTo add a host, open a web browser and navigate to the Host Management page of\nFog (\\http://<your_fog_server>/fog/management/index.php?node=host).\nClick \"Create New Host.\"\nProvide the proper inputs for your host configuration. Be sure to select the\nimage you created above from the \"Host Image\" option, when finished click the\n\"Add\" button.\n\n    .. image:: ../../_images/screenshots/fog_host_management.png\n        :align: center\n\nAt this point you should be ready to take an image from the guest machine.\nIn order to take an image you will need to navigate to the Task Management page\nand list all hosts (\\http://<your_fog_server>/fog/management/index.php?node=tasks&sub=listhosts).\nFrom here you should be able to click the Upload icon (Green up arrow), which\nshould instantly add a task to the queue to take an image.\nNow you should reboot your Cuckoo guest image and it should PXE boot into Fog\nand capture the base image from the cuckoo guest.\n\nAfter you have successfully taken an image of the guest machine, you can use\nthat image as one to deploy to the Cuckoo physical sandbox as needed.\nIt is recommended to use a scheduled task to accomplish this.\nIn order to create a scheduled task to re-image sandboxes, navigate to the Host\nManagement page on Fog (http://<your_fog_server>/fog/management/index.php?node=host&sub=list).\nThen click \"Download\" the machine you wish to schedule the re-image task for.\nFrom this menu, select \"Schedule Cron-style Deployment\" and put in the values\nyou wish for the schedule to apply to (``*/5 * * * *``) in the case shown in the\nscreenshot below, but you may need to tweak these times for your environment.\n\n    .. image:: ../../_images/screenshots/fog_scheduled_job.png\n        :align: center\n\n\nSetup using VMWare (Bonus!)\n===========================\n\nTraditionally Cuckoo requires to be running some sort of virtualization software\n(e.g. VMware, Virtualbox, etc).\nThe physical machine manager will also work with other virtual machines, so long\nas they are configured to revert to a snapshot on shutdown/reboot, and running\nthe agent.py script.\nA use case for this functionality would be to run the cuckoo server and the\nguest sandboxes each in their own virtual machine on a single host, allowing for\ndevelopment/testing of Cuckoo without requiring a dedicated Linux host.\n"
  },
  {
    "path": "docs-old/book/src/installation/host/configuration.rst",
    "content": "=============\nConfiguration\n=============\n\nCuckoo relies on six main configuration files:\n\n    * :ref:`cuckoo_conf`: for configuring general behavior and analysis options.\n    * :ref:`auxiliary_conf`: for enabling and configuring auxiliary modules.\n    * :ref:`machinery_conf`: for defining the options for your virtualization software\n        (the file has the same name of the machinery module you choose in cuckoo.conf).\n    * :ref:`memory_conf`: Volatility configuration.\n    * :ref:`processing_conf`: for enabling and configuring processing modules.\n    * :ref:`reporting_conf`: for enabling or disabling report formats.\n\nTo get Cuckoo working you have to edit :ref:`auxiliary_conf`:, :ref:`cuckoo_conf` and :ref:`machinery_conf` at least.\n\n.. _cuckoo_conf:\n\ncuckoo.conf\n===========\n\nThe first file to edit is *conf/cuckoo.conf*, it contains the generic configuration\noptions that you might want to verify before launching Cuckoo.\n\nThe file is largely commented and self-explaining, but some of the options you might\nwant to pay more attention to are:\n\n    * ``machinery`` in ``[cuckoo]``: this defines which Machinery module you want Cuckoo to use to interact with your analysis machines. The value must be the name of the module without extension.\n    * ``ip`` and ``port`` in ``[resultserver]``: defines the local IP address and port that Cuckoo is going to use to bind the result server on. Make sure this matches the network configuration of your analysis machines, or they won't be able to return the collected results.\n    * ``connection`` in ``[database]``: defines how to connect to the internal database. You can use any DBMS supported by `SQLAlchemy`_ using a valid `Database Urls`_ syntax.\n\n.. _`SQLAlchemy`: http://www.sqlalchemy.org/\n.. _`Database Urls`: http://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls\n\n.. warning:: Check your interface for resultserver IP! Some virtualization software (for example Virtualbox)\n    don't bring up the virtual networking interfaces until a virtual machine is started.\n    Cuckoo needs to have the interface where you bind the resultserver up before the start, so please\n    check your network setup. If you are not sure about how to get the interface up, a good trick is to manually start\n    and stop an analysis virtual machine, this will bring virtual networking up.\n    If you are using NAT/PAT in your network, you can set up the resultserver IP\n    to 0.0.0.0 to listen on all interfaces, then use the specific options `resultserver_ip` and `resultserver_port`\n    in *<machinery>.conf* to specify the address and port as every machine sees them. Note that if you set\n    resultserver IP to 0.0.0.0 in cuckoo.conf you have to set `resultserver_ip` for all your virtual machines.\n\n.. _auxiliary_conf:\n\nauxiliary.conf\n==============\n\nAuxiliary modules are scripts that run concurrently with malware analysis, this file defines\ntheir options.\n\nFollowing is the default *conf/auxiliary.conf* file::\n\n    [sniffer]\n    # Enable or disable the use of an external sniffer (tcpdump) [yes/no].\n    enabled = yes\n\n    # Specify the path to your local installation of tcpdump. Make sure this\n    # path is correct.\n    tcpdump = /usr/sbin/tcpdump\n\n    # We used to define the network interface to capture on in auxiliary.conf, but\n    # this has been moved to the \"interface\" field of each Virtual Machinery\n    # configuration.\n\n    # Specify a Berkeley packet filter to pass to tcpdump.\n    # Note: packer filtering is not possible when using \"nictrace\" functionality\n    # from VirtualBox (for example dumping inter-VM traffic).\n    # bpf = not arp\n\n    [mitm]\n    # Enable man in the middle proxying (mitmdump) [yes/no].\n    enabled = no\n\n    # Specify the path to your local installation of mitmdump. Make sure this\n    # path is correct.\n    mitmdump = /usr/local/bin/mitmdump\n\n    # Listen port base. Each virtual machine will use its own port to be\n    # able to make a good distinction between the various running analyses.\n    # Generally port 50000 should be fine, in this case port 50001, 50002, etc\n    # will also be used - again, one port per analyses.\n    port_base = 50000\n\n    # Script file to interact with the network traffic. Please refer to the\n    # documentation of mitmproxy/mitmdump to get an understand of their internal\n    # workings. (https://mitmproxy.org/doc/scripting/inlinescripts.html)\n    script = data/mitm.py\n\n    # Path to the certificate to be used by mitmdump. This file will be\n    # automatically generated for you if you run mitmdump once. It's just that\n    # you have to copy it from ~/.mitmproxy/mitmproxy-ca-cert.p12 to somewhere\n    # in the analyzer/windows/ directory. Recommended is to write the certificate\n    # to analyzer/windows/bin/cert.p12, in that case the following option should\n    # be set to bin/cert.p12.\n    certificate = bin/cert.p12\n\n    [services]\n    # Provide extra services accessible through the network of the analysis VM\n    # provided in separate, standalone, Virtual Machines [yes/no].\n    enabled = no\n\n    # Comma-separated list with each Virtual Machine containing said service(s).\n    services = honeyd\n\n    # Time in seconds required to boot these virtual machines. E.g., some services\n    # will only get online after a minute because initialization takes a while.\n    timeout = 0\n\n.. _machinery_conf:\n\n<machinery>.conf\n================\n\nMachinery modules are scripts that define how Cuckoo should interact with\nyour virtualization software of choice.\n\nEvery module should have a dedicated configuration file which defines the\ndetails on the available machines. For example, if you created a *vmware.py*\nmachinery module, you should specify *vmware* in *conf/cuckoo.conf*\nand have a *conf/vmware.conf* file.\n\nCuckoo provides some modules by default and for the sake of this guide, we'll\nassume you're going to use VirtualBox.\n\nFollowing is the default *conf/virtualbox.conf* file::\n\n    [virtualbox]\n    # Specify which VirtualBox mode you want to run your machines on.\n    # Can be \"gui\", \"sdl\" or \"headless\". Refer to VirtualBox's official\n    # documentation to understand the differences.\n    mode = headless\n\n    # Path to the local installation of the VBoxManage utility.\n    path = /usr/bin/VBoxManage\n\n    # Default network interface.\n    interface = vboxnet0\n\n    # Specify a comma-separated list of available machines to be used. For each\n    # specified ID you have to define a dedicated section containing the details\n    # on the respective machine. (E.g. cuckoo1,cuckoo2,cuckoo3)\n    machines = cuckoo1\n\n    [cuckoo1]\n    # Specify the label name of the current machine as specified in your\n    # VirtualBox configuration.\n    label = cuckoo1\n\n    # Specify the operating system platform used by current machine\n    # [windows/darwin/linux].\n    platform = windows\n\n    # Specify the IP address of the current virtual machine. Make sure that the\n    # IP address is valid and that the host machine is able to reach it. If not,\n    # the analysis will fail.\n    ip = 192.168.56.101\n\n    # (Optional) Specify the snapshot name to use. If you do not specify a snapshot\n    # name, the VirtualBox MachineManager will use the current snapshot.\n    # Example (Snapshot1 is the snapshot name):\n    # snapshot = Snapshot1\n\n    # (Optional) Specify the name of the network interface that should be used\n    # when dumping network traffic from this machine with tcpdump. If specified,\n    # overrides the default interface specified in auxiliary.conf\n    # Example (vboxnet0 is the interface name):\n    # interface = vboxnet0\n\n    # (Optional) Specify the IP of the Result Server, as your virtual machine sees it.\n    # The Result Server will always bind to the address and port specified in cuckoo.conf,\n    # however you could set up your virtual network to use NAT/PAT, so you can specify here\n    # the IP address for the Result Server as your machine sees it. If you don't specify an\n    # address here, the machine will use the default value from cuckoo.conf.\n    # NOTE: if you set this option you have to set result server IP to 0.0.0.0 in cuckoo.conf.\n    # Example:\n    # resultserver_ip = 192.168.56.1\n\n    # (Optional) Specify the port for the Result Server, as your virtual machine sees it.\n    # The Result Server will always bind to the address and port specified in cuckoo.conf,\n    # however you could set up your virtual network to use NAT/PAT, so you can specify here\n    # the port for the Result Server as your machine sees it. If you don't specify a port\n    # here, the machine will use the default value from cuckoo.conf.\n    # Example:\n    # resultserver_port = 2042\n\n    # (Optional) Set your own tags. These are comma separated and help to identify\n    # specific VMs. You can run samples on VMs with tag you require.\n    # tags = windows_xp_sp3,32_bit,acrobat_reader_6\n\n    [honeyd]\n    # For more information on this VM please refer to the \"services\" section of\n    # the conf/auxiliary.conf configuration file. This machine is a bit special\n    # in the way that its used as an additional VM for an analysis.\n    # *NOTE* that if this functionality is used, the VM should be registered in\n    # the \"machines\" list in the beginning of this file.\n    label = honeyd\n    platform = linux\n    ip = 192.168.56.102\n    # The tags should at least contain \"service\" and the name of this service.\n    # This way the services auxiliary module knows how to find this particular VM.\n    tags = service, honeyd\n    # Not all services actually have a Cuckoo Agent running in the VM, for those\n    # services one can specify the \"noagent\" option so Cuckoo will just wait until\n    # the end of the analysis instead of trying to connect to the non-existing\n    # Cuckoo Agent. We can't really intercept any inter-VM communication from the\n    # host / gateway so in order to dump traffic between VMs we have to use a\n    # different network dumping approach. For this machine we use the \"nictrace\"\n    # functionality from VirtualBox (which is basically their internal tcpdump)\n    # and thus properly dumps inter-VM traffic.\n    options = nictrace noagent\n\nYou can use this same configuration structure for any other machinery module, although\nexisting ones might have some variations or additional configuration options.\n\nThe comments for the options are self-explainatory.\n\nFollowing is the default *conf/kvm.conf* file::\n\n    [kvm]\n    # Specify a comma-separated list of available machines to be used. For each\n    # specified ID you have to define a dedicated section containing the details\n    # on the respective machine. (E.g. cuckoo1,cuckoo2,cuckoo3)\n    machines = cuckoo1\n\n    # Specify the name of the default network interface that will be used\n    # when dumping network traffic with tcpdump.\n    # Example (virbr0 is the interface name):\n    interface = virbr0\n\n    [cuckoo1]\n    # Specify the label name of the current machine as specified in your\n    # libvirt configuration.\n    label = cuckoo1\n\n    # Specify the operating system platform used by current machine\n    # [windows/darwin/linux].\n    platform = windows\n\n    # Specify the IP address of the current virtual machine. Make sure that the\n    # IP address is valid and that the host machine is able to reach it. If not,\n    # the analysis will fail. You may want to configure your network settings in\n    # /etc/libvirt/<hypervisor>/networks/\n    ip = 192.168.122.105\n\n    # (Optional) Specify the snapshot name to use. If you do not specify a snapshot\n    # name, the KVM MachineManager will use the current snapshot.\n    # Example (Snapshot1 is the snapshot name):\n    # snapshot = Snapshot1\n\n    # (Optional) Specify the name of the network interface that should be used\n    # when dumping network traffic from this machine with tcpdump.\n    # Example (virbr0 is the interface name):\n    # interface = virbr0\n\n    # (Optional) Specify the IP of the Result Server, as your virtual machine sees it.\n    # The Result Server will always bind to the address and port specified in cuckoo.conf,\n    # however you could set up your virtual network to use NAT/PAT, so you can specify here\n    # the IP address for the Result Server as your machine sees it. If you don't specify an\n    # address here, the machine will use the default value from cuckoo.conf.\n    # NOTE: if you set this option you have to set result server IP to 0.0.0.0 in cuckoo.conf.\n    # Example:\n    # resultserver_ip = 192.168.122.101\n\n    # (Optional) Specify the port for the Result Server, as your virtual machine sees it.\n    # The Result Server will always bind to the address and port specified in cuckoo.conf,\n    # however you could set up your virtual network to use NAT/PAT, so you can specify here\n    # the port for the Result Server as your machine sees it. If you don't specify a port\n    # here, the machine will use the default value from cuckoo.conf.\n    # Example:\n    # resultserver_port = 2042\n\n    # (Optional) Set your own tags. These are comma separated and help to identify\n    # specific VMs. You can run samples on VMs with tag you require.\n    # tags = windows_xp_sp3,32_bit,acrobat_reader_6\n\n.. _memory_conf:\n\nmemory.conf\n===========\n\nThe Volatility tool offers a large set of plugins for memory dump analysis. Some of them are quite slow.\nIn volatility.conf lets you to enable or disable the plugins of your choice.\nTo use Volatility you have to follow two steps:\n\n * Enable it before in processing.conf\n * Enable memory_dump in cuckoo.conf\n\nIn the memory.conf's basic section you can configure the Volatility profile and\nthe deletion of memory dumps after processing::\n\n    # Basic settings\n    [basic]\n    # Profile to avoid wasting time identifying it\n    guest_profile = WinXPSP2x86\n    # Delete memory dump after volatility processing.\n    delete_memdump = no\n\nAfter that every plugin has an own section for configuration::\n\n    # Scans for hidden/injected code and dlls\n    # http://code.google.com/p/volatility/wiki/CommandReference#malfind\n    [malfind]\n    enabled = on\n    filter = on\n\n    # Lists hooked api in user mode and kernel space\n    # Expect it to be very slow when enabled\n    # http://code.google.com/p/volatility/wiki/CommandReference#apihooks\n    [apihooks]\n    enabled = off\n    filter = on\n\nThe filter configuration helps you to remove known clean data from the resulting\nreport. It can be configured separately for every plugin.\n\nThe filter itself is configured in the [mask] section.\nYou can enter a list of pids in pid_generic to filter out processes::\n\n    # Masks. Data that should not be logged\n    # Just get this information from your plain VM Snapshot (without running malware)\n    # This will filter out unwanted information in the logs\n    [mask]\n    # pid_generic: a list of process ids that already existed on the machine before the malware was started.\n    pid_generic = 4, 680, 752, 776, 828, 840, 1000, 1052, 1168, 1364, 1428, 1476, 1808, 452, 580, 652, 248, 1992, 1696, 1260, 1656, 1156\n\n.. _processing_conf:\n\nprocessing.conf\n===============\n\nThis file allows you to enable, disable and configure all processing modules.\nThese modules are located under `modules/processing/` and define how to digest\nthe raw data collected during the analysis.\n\nYou will find a section for each processing module::\n\n    # Enable or disable the available processing modules [on/off].\n    # If you add a custom processing module to your Cuckoo setup, you have to add\n    # a dedicated entry in this file, or it won't be executed.\n    # You can also add additional options under the section of your module and\n    # they will be available in your Python class.\n\n    [analysisinfo]\n    enabled = yes\n\n    [apkinfo]\n    enabled = no\n    # Decompiling dex files with androguard in a heavy operation. For large dex\n    # files it can really take quite a while - it is recommended to limit to a\n    # certain filesize.\n    # decompilation_threshold=5000000\n\n    [baseline]\n    enabled = no\n\n    [behavior]\n    enabled = yes\n\n    [buffer]\n    enabled = yes\n\n    [debug]\n    enabled = yes\n\n    [droidmon]\n    enabled = no\n\n    [dropped]\n    enabled = yes\n\n    [dumptls]\n    enabled = yes\n\n    [googleplay]\n    enabled = no\n    android_id =\n    google_login =\n    google_password =\n\n    [memory]\n    # Create a memory dump of the entire Virtual Machine. This memory dump will\n    # then be analyzed using Volatility to locate interesting events that can be\n    # extracted from memory.\n    enabled = no\n\n    [network]\n    enabled = yes\n\n    [procmemory]\n    # Enables the creation of process memory dumps for each analyzed process right\n    # before they terminate themselves or right before the analysis finishes.\n    enabled = yes\n    # It is possible to load these process memory dumps in IDA Pro through the\n    # generation of IDA Python-based script files. Although currently symbols and\n    # such are not properly recovered, it is still nice to get a quick look at\n    # specific memory addresses of a process.\n    idapro = no\n\n    [screenshots]\n    enabled = no\n    tesseract = /usr/bin/tesseract\n\n    [snort]\n    enabled = no\n    # Following are various configurable settings. When in use of a recent 2.9.x.y\n    # version of Snort there is no need to change any of the following settings as\n    # they represent the defaults.\n    #\n    # snort = /usr/local/bin/snort\n    # conf = /etc/snort/snort.conf\n\n    [static]\n    enabled = yes\n\n    [strings]\n    enabled = yes\n\n    [suricata]\n    enabled = no\n    # Following are various configurable settings. When in use of a recent version\n    # of Suricata there is no need to change any of the following settings as they\n    # represent the defaults.\n    #\n    # suricata = /usr/bin/suricata\n    # conf = /etc/suricata/suricata.yaml\n    # eve_log = eve.json\n    # files_log = files-json.log\n    # files_dir = files\n    #\n    # Uncommenting the following line makes our processing module use the socket\n    # mode in Suricata. This is quite the performance improvement as instead of\n    # having to load all the Suricata rules for each time the processing module is\n    # ran (i.e., for every task), the rules are only loaded once and then we talk\n    # to its API. This does require running Suricata as follows or similar;\n    # \"suricata --unix-socket -D\".\n    # (Please find more information in utils/suricata.sh for now).\n    # socket = /var/run/suricata/cuckoo.socket\n\n    [targetinfo]\n    enabled = yes\n\n    [virustotal]\n    enabled = yes\n    # How much time we can wait to establish VirusTotal connection and get the\n    # report.\n    timeout = 60\n    # Enable this option if you want to submit files to VirusTotal not yet available\n    # in their database.\n    # NOTE: if you are dealing with sensitive stuff, enabling this option you could\n    # leak some files to VirusTotal.\n    scan = 0\n    # Add your VirusTotal API key here. The default API key, kindly provided\n    # by the VirusTotal team, should enable you with a sufficient throughput\n    # and while being shared with all our users, it shouldn't affect your use.\n    key = a0283a2c3d55728300d064874239b5346fb991317e8449fe43c902879d758088\n\nYou might want to configure the `VirusTotal`_ key if you have an account of your own.\n\n.. _`VirusTotal`: http://www.virustotal.com\n\n.. _reporting_conf:\n\nreporting.conf\n==============\n\nThe *conf/reporting.conf* file contains information on the automated reports\ngeneration.\n\nIt contains the following sections::\n\n    # Enable or disable the available reporting modules [on/off].\n    # If you add a custom reporting module to your Cuckoo setup, you have to add\n    # a dedicated entry in this file, or it won't be executed.\n    # You can also add additional options under the section of your module and\n    # they will be available in your Python class.\n\n    [jsondump]\n    enabled = yes\n    indent = 4\n    encoding = latin-1\n    calls = yes\n\n    [reporthtml]\n    enabled = no\n\n    [mongodb]\n    enabled = no\n    host = 127.0.0.1\n    port = 27017\n    db = cuckoo\n    store_memdump = yes\n    paginate = 100\n\n    [elasticsearch]\n    enabled = no\n    # Comma-separated list of ElasticSearch hosts.\n    hosts = 127.0.0.1\n    # Set to yes if we want to be able to search every API call instead of just\n    # through the behavioral summary.\n    calls = no\n    # Index of this Cuckoo instance. If multiple Cuckoo instances connect to the\n    # same ElasticSearch host then this index (in Moloch called \"instance\") should\n    # be unique for each Cuckoo instance.\n    #\n    # index = cuckoo\n    #\n    # Just in case we will have report updates in Cuckoo one will be able to\n    # update to a new scheme by modifying the ElasticSearch document type.\n    #\n    # type = cuckoo\n\n    [moloch]\n    enabled = no\n    # If the Moloch web interface is hosted on a different IP address than the\n    # Cuckoo Web Interface then you'll want to override the IP address here.\n    # host = 127.0.0.1\n    #\n    # Following are various configurable settings. When in use of a recent version\n    # of Moloch there is no need to change any of the following settings as they\n    # represent the defaults.\n    #\n    # moloch_capture = /data/moloch/bin/moloch-capture\n    # conf = /data/moloch/etc/config.ini\n    # instance = cuckoo\n\nBy setting those option to *on* or *off* you enable or disable the generation\nof such reports.\n"
  },
  {
    "path": "docs-old/book/src/installation/host/configuration_android.rst",
    "content": "================================\nConfiguration (Android Analysis)\n================================\n\nTo get Cuckoo running Android analysis you should download the `Android SDK <https://developer.android.com>`_\nand extract it in a folder Cuckoo can access.\nYou should also configure :ref:`avd_conf` with the settings of your setup.\n\n.. _avd_conf:\n\navd.conf\n========\n\nThe main file for Android environment settings is *conf/avd.conf*, it contains\nall the generic configuration used to launch the Android emulator and run the\nanalysis.\n\nThe file is largely commented and self-explaining, but some of the options you\nmight want to pay more attention to are:\n\n    * ``emulator_path``: this defines the Android emulator path (it is located inside Android SDK)\n    * ``adb_path``: this defines the ADB path (it is located inside Android SDK)\n    * ``avd_path``: this defines where AVD images are located\n"
  },
  {
    "path": "docs-old/book/src/installation/host/index.rst",
    "content": "==================\nPreparing the Host\n==================\n\nEven though it's reported to run on other operating systems too, Cuckoo is\noriginally supposed to run on a *GNU/Linux* native system.\nFor the purpose of this documentation, we chose **latest Ubuntu LTS** as\nreference system for the commands examples.\n\n.. toctree::\n\n    requirements\n    installation\n    configuration\n    configuration_android\n"
  },
  {
    "path": "docs-old/book/src/installation/host/installation.rst",
    "content": "=================\nInstalling Cuckoo\n=================\n\nProceed with download and installation. Read :doc:`../../introduction/what` to\nlearn where you can obtain a copy of the sandbox.\n\nCreate a user\n=============\n\nYou either can run Cuckoo from your own user or create a new one dedicated just\nto your sandbox setup.\nMake sure that the user that runs Cuckoo is the same user that you will\nuse to create and run the virtual machines, otherwise Cuckoo won't be able to\nidentify and launch them.\n\nCreate a new user::\n\n    $ sudo adduser cuckoo\n\nIf you're using VirtualBox, make sure the new user belongs to the \"vboxusers\"\ngroup (or the group you used to run VirtualBox)::\n\n    $ sudo usermod -a -G vboxusers cuckoo\n\nIf you're using KVM or any other libvirt based module, make sure the new user\nbelongs to the \"libvirtd\" group (or the group your Linux distribution uses to\nrun libvirt)::\n\n    $ sudo usermod -a -G libvirtd cuckoo\n\nInstall Cuckoo\n==============\n\nExtract or checkout your copy of Cuckoo to a path of your choice and you're\nready to go ;-).\n\n"
  },
  {
    "path": "docs-old/book/src/installation/host/requirements.rst",
    "content": "============\nRequirements\n============\n\nBefore proceeding on configuring Cuckoo, you'll need to install some required\nsoftware and libraries.\n\nInstalling Python libraries\n===========================\n\nCuckoo host components are completely written in Python, therefore make sure to\nhave an appropriate version installed. For the current release **Python 2.7** is\npreferred.\n\nInstall the basic dependencies::\n\n    $ sudo apt-get install python python-pip python-dev libffi-dev libssl-dev\n\nIf you want to use the Django-based web interface, you'll have to install\nMongoDB too::\n\n    $ sudo apt-get install mongodb\n\nIn order to properly function, Cuckoo requires some dependencies. They can all\nbe installed through PyPI like this::\n\n    $ sudo pip install -r requirements.txt\n\n`Yara`_ and `Pydeep`_ are *optional* plugins but will have to be installed\nmanually, so please refer to their websites.\n\nIf you want to use KVM it's packaged too and you can install it with the\nfollowing command::\n\n    $ sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils python-libvirt\n\nIf you want to use XenServer you'll have to install the *XenAPI* Python package::\n\n    $ sudo pip install XenAPI\n\nIf you want to use the *mitm* auxiliary module (to intercept SSL/TLS generated\ntraffic), you need to install `mitmproxy`_. Please refer to its website for\ninstallation instructions.\n\n.. _Yara: http://code.google.com/p/yara-project/\n.. _Pydeep: https://github.com/kbandla/pydeep\n.. _mitmproxy: https://mitmproxy.org/\n\nVirtualization Software\n=======================\n\nDespite heavily relying on `VirtualBox`_ in the past, Cuckoo has moved on being\narchitecturally independent from the virtualization software.\nAs you will see throughout this documentation, you'll be able to define and\nwrite modules to support any software of your choice.\n\nFor the sake of this guide we will assume that you have VirtualBox installed\n(which still is the default option), but this does **not** affect anyhow the\nexecution and general configuration of the sandbox.\n\nYou are completely responsible for the choice, configuration and execution of\nyour virtualization software, therefore please refrain from asking for help on\nit in our channels and lists: refer to the software's official documentation\nand support.\n\nAssuming you decide to go for VirtualBox, you can get the proper package for\nyour distribution at the `official download page`_.\nThe installation of VirtualBox is outside the scope of this documentation, if\nyou are not familiar with it please refer to the `official documentation`_.\n\n.. _VirtualBox: http://www.virtualbox.org\n.. _official download page: https://www.virtualbox.org/wiki/Linux_Downloads\n.. _official documentation: https://www.virtualbox.org/wiki/Documentation\n\nInstalling Tcpdump\n==================\n\nIn order to dump the network activity performed by the malware during\nexecution, you'll need a network sniffer properly configured to capture\nthe traffic and dump it to a file.\n\nBy default Cuckoo adopts `tcpdump`_, the prominent open source solution.\n\nInstall it on Ubuntu::\n\n    $ sudo apt-get install tcpdump\n\nTcpdump requires root privileges, but since you don't want Cuckoo to run as root\nyou'll have to set specific Linux capabilities to the binary::\n\n    $ sudo setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump\n\nYou can verify the results of last command with::\n\n    $ getcap /usr/sbin/tcpdump\n    /usr/sbin/tcpdump = cap_net_admin,cap_net_raw+eip\n\nIf you don't have `setcap` installed you can get it with::\n\n    $ sudo apt-get install libcap2-bin\n\nOr otherwise (**not recommended**) do::\n\n    $ sudo chmod +s /usr/sbin/tcpdump\n\nPlease keep in mind that even the `setcap` method is definitely not perfectly\nsafe if the system has other users which are potentially untrusted. We recommend\nto run Cuckoo on a dedicated system or a trusted environment where the\nprivileged tcpdump execution is contained otherwise.\n\n.. _tcpdump: http://www.tcpdump.org\n\nInstalling Volatility\n=====================\n\nVolatility is an optional tool to do forensic analysis on memory dumps.\nIn combination with Cuckoo, it can automatically provide additional visibility\ninto deep modifications in the operating system as well as detect the presence\nof rootkit technology that escaped the monitoring domain of Cuckoo's analyzer.\n\nIn order to function properly, Cuckoo requires at least version 2.3 of\nVolatility.\nYou can get it from the `official repository`_.\n\nSee the volatility documentation for detailed instructions on how to install it.\n\n.. _official repository: https://github.com/volatilityfoundation\n"
  },
  {
    "path": "docs-old/book/src/installation/index.rst",
    "content": ".. Installation chapter frontpage\n\nInstallation\n============\n\nThis chapter explains how to install Cuckoo.\n\nAlthough the recommended setup is *GNU/Linux* (Debian or Ubuntu preferably)\nCuckoo has proved to work smoothly also on *Mac OS X* as host; the recommended\nand tested setup for guests are *Windows 7* for Windows analysis, *Mac OS X\nYosemite* for Mac OS X analysis and Debian for Linux Analysis, although Cuckoo\nshould work with other releases of guest os.\n\n.. note::\n\n    This documentation refers to *Host* as the underlying operating systems on\n    which you are running Cuckoo (generally being a GNU/Linux distribution) and\n    to *Guest* as the Windows virtual machine used to run the isolated analysis.\n\n.. toctree::\n\n    host/index\n    guest/index\n    guest_physical/index\n    upgrade\n\n"
  },
  {
    "path": "docs-old/book/src/installation/upgrade.rst",
    "content": "===============================\nUpgrade from a previous release\n===============================\n\nCuckoo Sandbox grows really fast and in every release new features are added and\nsome others are fixed or removed.\nThere are two ways to upgrade your Cuckoo: start from scratch or migrate your\n\"old\" setup (migration is supported only starting from Cuckoo 0.6).\nThe suggested way to upgrade Cuckoo is to start from a fresh setup because it's\neasier and faster than migrate your old setup.\n\nUpgrade starting from scratch\n=============================\n\nTo start from scratch you have to perform a fresh setup as described in :doc:`index`.\nThe following steps are suggested:\n\n1. Backup your installation.\n2. Read the documentation shipped with the new release.\n3. Make sure to have installed all required dependencies, otherwise install them.\n4. Do a Cuckoo fresh installation of the Host components.\n5. Reconfigure Cuckoo as explained in this book (copying old configuration files\n   is not safe because options can change between releases).\n6. If you are using an external database instead of the default or you are using\n   the MongoDb reporting module is suggested to start all databases from scratch,\n   due to possible schema changes between Cuckoo releases.\n7. Test it!\n\nIf something goes wrong you probably failed to do some steps during the fresh\ninstallation or reconfiguration. Check again the procedure explained in this\nbook.\n\nIt's not recommended to rewrite an old Cuckoo installation with the latest\nrelease files, as it might raise some problems because:\n\n* You are overwriting Python source files (.py) but Python bytecode files (.pyc)\n  are still in place.\n* There are configuration files changes across the two versions, check our\n  CHANGELOG file for added or removed configuration options.\n* The part of Cuckoo which runs inside guests (agent.py) may change.\n* If you are using an external database like the reporting module for MongoDb a\n  change in the data schema may corrupt your database.\n\nMigrate your Cuckoo\n===================\n\nData migration is shipped starting from Cuckoo 1.1 and supports migration\nstarting from Cuckoo 0.6.\nIf your Cuckoo release is older than 0.6 you can't migrate your data.\n\nThe following steps are suggested as requirement to migrate your data:\n\n1. Backup your installation.\n2. Read the documentation shipped with the new release.\n3. Make sure to have installed all required dependencies, otherwise install them.\n4. Download and extract the latest Cuckoo.\n5. Reconfigure Cuckoo as explained in this book (copying old configuration files\n   is not safe because options can change between releases), and update agent in\n   your virtual machines.\n6. Copy from your backup \"storage\" and \"db\" folders. (Reports and analyses\n   already present in \"storage\" folder will keep the old format.)\n\nNow setup Alembic (the framework used for migrations) and dateutil with::\n\n    pip install alembic\n    pip install python-dateutil\n\nEnter the alembic migration directory in \"utils/db_migration\" with::\n\n    cd utils/db_migration\n\nBefore starting the migration script you must set your database connection in \"cuckoo.conf\"\nif you are using a custom one. Alembic migration script will use the database\nconnection parameters configured in cuckoo.conf.\n\nAgain, please remember to backup before launching migration tool! A wrong\nconfiguration may corrupt your data, backup should save kittens!\n\nRun the database migrations with::\n\n    alembic upgrade head\n"
  },
  {
    "path": "docs-old/book/src/introduction/index.rst",
    "content": ".. Introduction chapter frontpage\n\nIntroduction\n============\n\nThis is an introductory chapter to Cuckoo Sandbox.\nIt explains some basic malware analysis concepts, what's Cuckoo and how it can fit\nin malware analysis.\n\n.. toctree::\n\n    sandboxing\n    what\n    license\n\n"
  },
  {
    "path": "docs-old/book/src/introduction/license.rst",
    "content": "=======\nLicense\n=======\n\nCuckoo Sandbox license is shipped with Cuckoo and contained in the \"LICENSE\"\nfile inside the \"docs\" folder.\n\n==========\nDisclaimer\n==========\n\nCuckoo is distributed as it is, in the hope that it will be useful, but without\nany warranty neither the implied merchantability or fitness for a particular\npurpose.\n\nWhatever you do with this tool is uniquely your own responsibility.\n\n=================\nCuckoo Foundation\n=================\n\nThe `Cuckoo Foundation`_ is a non-profit organization incorporated as a\nStichting in the Netherlands and it's mainly dedicated to support of the\ndevelopment and growth of Cuckoo Sandbox, an open source malware analysis\nsystem, and the surrounding projects and initiatives.\n\nThe Foundation operates to secure financial and infrastructure support to our\nsoftware projects and coordinates the development and contributions from the\ncommunity.\n\n.. _`Cuckoo Foundation`: http://www.cuckoofoundation.org\n"
  },
  {
    "path": "docs-old/book/src/introduction/sandboxing.rst",
    "content": "==========\nSandboxing\n==========\n\nAs defined by `Wikipedia`_, \"*in computer security, a sandbox is a security\nmechanism for separating running programs. It is often used to execute untested\ncode, or untrusted programs from unverified third-parties, suppliers, untrusted\nusers and untrusted websites.*\".\n\nThis concept applies to malware analysis' sandboxing too: our goal is to run an\nunknown and untrusted application or file inside an isolated environment and get\ninformation on what it does.\n\nMalware sandboxing is a practical application of the dynamical analysis\napproach: instead of statically analyzing the binary file, it gets executed and\nmonitored in real-time.\n\nThis approach obviously has pros and cons, but it's a valuable technique to\nobtain additional details on the malware, such as its network behavior.\nTherefore it's a good practice to perform both static and dynamic analysis while\ninspecting a malware, in order to gain a deeper understanding of it.\n\nSimple as it is, Cuckoo is a tool that allows you to perform sandboxed malware\nanalysis.\n\n.. _`Wikipedia`: http://en.wikipedia.org/wiki/Sandbox_%28computer_security%29\n\nUsing a Sandbox\n===============\n\nBefore starting to install, configure and use Cuckoo, you should take some\ntime to think on what you want to achieve with it and how.\n\nSome questions you should ask yourself:\n\n    * What kind of files do I want to analyze?\n    * What volume of analyses do I want to be able to handle?\n    * Which platform do I want to use to run my analysis on?\n    * What kind of information I want about the file?\n\nThe creation of the isolated environment (for example a virtual machine) is\nprobably the most critical and important part of a sandbox deployment: it should\nbe done carefully and with proper planning.\n\nBefore getting hands on the virtualization product of your choice, you should\nalready have a design plan that defines:\n\n    * Which operating system, language and patching level to use.\n    * Which software to install and which versions (particularly important when analyzing exploits).\n\nConsider that automated malware analysis is not deterministic and its success\nmight depend on a trillion of factors: you are trying to make a malware run\nin a virtualized system as it would do on a native one, which could be tricky to\nachieve and may not always succeed.\nYour goal should be both to create a system able to handle all the requirements\nyou need as well as try to make it as realistic as possible.\n\nFor example you could consider leaving some intentional traces of normal usage,\nsuch as browsing history, cookies, documents, images etc. If a malware is\ndesigned to operate, manipulate or steal such files you'll be able to notice it.\n\nVirtualized operating systems usually carry a lot of traces with them that makes\nthem very easily detectable. Even if you shouldn't overestimate this problem,\nyou might want to take care of this and try to hide as many virtualization\ntraces as possible.\nThere is a lot of literature on Internet regarding virtualization detection\ntechniques and countermeasures.\n\nOnce you finished designing and preparing the prototype of system you want, you\ncan proceed creating it and deploying it. You will be always in time to\nchange things or slightly fix them, but remember that good planning at the\nbeginning always means less troubles in the long run.\n"
  },
  {
    "path": "docs-old/book/src/introduction/what.rst",
    "content": "===============\nWhat is Cuckoo?\n===============\n\nCuckoo is an open source automated malware analysis system.\n\nIt's used to automatically run and analyze files and collect comprehensive\nanalysis results that outline what the malware does while running inside an\nisolated operating system.\n\nIt can retrieve the following type of results:\n\n    * Traces of calls performed by all processes spawned by the malware.\n    * Files being created, deleted and downloaded by the malware during its execution.\n    * Memory dumps of the malware processes.\n    * Network traffic trace in PCAP format.\n    * Screenshots taken during the execution of the malware.\n    * Full memory dumps of the machines.\n\nSome History\n============\n\nCuckoo Sandbox started as a `Google Summer of Code`_ project in 2010 within\n`The Honeynet Project`_.\nIt was originally designed and developed by *Claudio “nex” Guarnieri*, who is\nstill the main developer and coordinates all efforts from joined developers and\ncontributors.\n\nAfter initial work during the summer 2010, the first beta release was published\non Feb. 5th 2011, when Cuckoo was publicly announced and distributed for the\nfirst time.\n\nIn March 2011, Cuckoo has been selected again as a supported project during\nGoogle Summer of Code 2011 with The Honeynet Project, during which\n*Dario Fernandes* joined the project and extended its functionality.\n\nOn November 2nd 2011 Cuckoo the release of its 0.2 version to the public as the\nfirst real stable release.\nOn late November 2011 *Alessandro \"jekil\" Tanasi* joined the team expanding\nCuckoo's processing and reporting functionality.\n\nOn December 2011 Cuckoo v0.3 gets released and quickly hits release 0.3.2 in\nearly February.\n\nIn late January 2012 we opened `Malwr.com`_, a free and public running Cuckoo\nSandbox instance provided with a full fledged interface through which people\ncan submit files to be analysed and get results back.\n\nIn March 2012 Cuckoo Sandbox wins the first round of the `Magnificent7`_ program\norganized by `Rapid7`_.\n\nDuring the Summer of 2012 *Jurriaan \"skier\" Bremer* joined the development team,\nrefactoring the Windows analysis component sensibly improving the analysis'\nquality.\n\nOn 24th July 2012, Cuckoo Sandbox 0.4 is released.\n\nOn 20th December 2012, Cuckoo Sandbox 0.5 \"To The End Of The World\" is released.\n\nOn 15th April 2013 we released Cuckoo Sandbox 0.6, shortly after having launched\nthe second version of `Malwr.com`_.\n\nOn 1st August 2013 *Claudio “nex” Guarnieri*, *Jurriaan \"skier\" Bremer* and\n*Mark \"rep\" Schloesser* presented `Mo' Malware Mo' Problems - Cuckoo Sandbox to the rescue`_\nat Black Hat Las Vegas.\n\nOn 9th January 2014, Cuckoo Sandbox 1.0 is released.\n\nIn March 2014 `Cuckoo Foundation`_ born as non-profit organization dedicated to growth of Cuckoo Sandbox and the\nsurrounding projects and initiatives.\n\nOn 7th April 2014, Cuckoo Sandbox 1.1 is released.\n\nDuring summer 2015 Cuckoo Sandbox started the development of Mac OS X malware\nanalysis as a `Google Summer of Code`_ project within `The Honeynet Project`_.\n*Dmitry Rodionov* qualified for the project and developed a working analyzer\nfor Mac OS X.\n\n.. _`Google Summer of Code`: http://www.google-melange.com\n.. _`The Honeynet Project`: http://www.honeynet.org\n.. _`Malwr.com`: http://malwr.com\n.. _`Magnificent7`: http://community.rapid7.com/community/open_source/magnificent7\n.. _`Mo' Malware Mo' Problems - Cuckoo Sandbox to the rescue`: https://media.blackhat.com/us-13/US-13-Bremer-Mo-Malware-Mo-Problems-Cuckoo-Sandbox-Slides.pdf\n.. _`Rapid7`: http://www.rapid7.com\n.. _`Cuckoo Foundation`: http://cuckoofoundation.org/\n\nUse Cases\n=========\n\nCuckoo is designed to be used both as a standalone application as well as to be\nintegrated in larger frameworks, thanks to its extremely modular design.\n\nIt can be used to analyze:\n\n    * Generic Windows executables\n    * DLL files\n    * PDF documents\n    * Microsoft Office documents\n    * URLs and HTML files\n    * PHP scripts\n    * CPL files\n    * Visual Basic (VB) scripts\n    * ZIP files\n    * Java JAR\n    * Python files\n    * *Almost anything else*\n\nThanks to its modularity and powerful scripting capabilities, there's no limit\nto what you can achieve with Cuckoo.\n\nFor more information on customizing Cuckoo, see the :doc:`../customization/index`\nchapter.\n\nArchitecture\n============\n\nCuckoo Sandbox consists of a central management software which handles sample\nexecution and analysis.\n\nEach analysis is launched in a fresh and isolated virtual or physical machine.\nThe main components of Cuckoo's infrastructure are an Host machine (the\nmanagement software) and a number of Guest machines (virtual or physical\nmachines for analysis).\n\nThe Host runs the core component of the sandbox that manages the whole\nanalysis process, while the Guests are the isolated environments\nwhere the malware samples get actually safely executed and analyzed.\n\nThe following picture explains Cuckoo's main architecture:\n\n    .. image:: ../_images/schemas/architecture-main.png\n        :align: center\n\nObtaining Cuckoo\n================\n\nCuckoo can be downloaded from the `official website`_, where the stable and\npackaged releases are distributed, or can be cloned from our `official git\nrepository`_.\n\n    .. warning::\n\n        While being more updated, including new features and bugfixes, the\n        version available in the git repository should be considered an\n        *under development* stage. Therefore its stability is not guaranteed\n        and it most likely lacks updated documentation.\n\n.. _`official website`: http://www.cuckoosandbox.org\n.. _`official git repository`: http://github.com/cuckoosandbox/cuckoo\n\n"
  },
  {
    "path": "docs-old/book/src/usage/api.rst",
    "content": "========\nREST API\n========\n\nAs mentioned in :doc:`submit`, Cuckoo provides a simple and lightweight REST\nAPI server implemented in `Flask`_, therefore in order to make the service\nwork you'll need it installed.\n\nOn Debian/Ubuntu with pip::\n\n    $ pip install flask\n\n.. _`Flask`: http://flask.pocoo.org/\n\nStarting the API server\n=======================\n\nIn order to start the API server you can simply do::\n\n    $ ./utils/api.py\n\nBy default it will bind the service on **localhost:8090**. If you want to change\nthose values, you can for example do this::\n\n    $ ./utils/api.py --host 0.0.0.0 --port 1337\n\nWeb deployment\n--------------\n\nWhile the default method of starting the API server works fine for many cases,\nsome users may wish to deploy the server in a robust manner. This can be done\nby exposing the API as a WSGI application through a web server. This section shows\na simple example of deploying the API via `uWSGI`_ and `Nginx`_. These\ninstructions are written with Ubuntu GNU/Linux in mind, but may be adapted for\nother platforms.\n\nThis solution requires uWSGI, the uWSGI Python plugin, and Nginx. All are\navailable as packages::\n\n    $ sudo apt-get install uwsgi uwsgi-plugin-python nginx\n\nuWSGI setup\n^^^^^^^^^^^\nFirst, use uWSGI to run the API server as an application.\n\nTo begin, create a uWSGI configuration file at ``/etc/uwsgi/apps-available/cuckoo-api.ini``::\n\n    [uwsgi]\n    plugins = python\n    chdir = /home/cuckoo/cuckoo\n    file = utils/api.py\n    uid = cuckoo\n    gid = cuckoo\n\nThis configuration inherits a number of settings from the distribution's\ndefault uWSGI configuration, loading ``api.py`` from the Cuckoo installation\ndirectory. In this example we installed Cuckoo in /home/cuckoo/cuckoo, if Cuckoo\nis installed in a different path, adjust the configuration (the *chdir* setting,\nand perhaps the *uid* and *gid* settings) accordingly.\n\nEnable the app configuration and start the server::\n\n    $ sudo ln -s /etc/uwsgi/apps-available/cuckoo-api.ini /etc/uwsgi/apps-enabled/\n    $ sudo service uwsgi start cuckoo-api    # or reload, if already running\n\n.. note::\n\n   Logs for the application may be found in the standard directory for distribution\n   app instances, i.e.:\n\n   ``/var/log/uwsgi/app/cuckoo-api.log``\n\n   The UNIX socket is created in a conventional location as well:\n\n   ``/run/uwsgi/app/cuckoo-api/socket``\n\nNginx setup\n^^^^^^^^^^^\n\nWith the API server running in uWSGI, Nginx can now be set up to run as a web\nserver/reverse proxy, backending HTTP requests to it.\n\nTo begin, create a Nginx configuration file at ``/etc/nginx/sites-available/cuckoo-api``::\n\n    upstream _uwsgi_cuckoo_api {\n        server unix:/run/uwsgi/app/cuckoo-api/socket;\n    }\n\n    # HTTP server\n    #\n    server {\n        listen 8090;\n        listen [::]:8090 ipv6only=on;\n\n        # REST API app\n        location / {\n            uwsgi_pass  _uwsgi_cuckoo_api;\n            include     uwsgi_params;\n        }\n    }\n\nMake sure that Nginx can connect to the uWSGI socket by placing its user in the\n**cuckoo** group::\n\n    $ sudo adduser www-data cuckoo\n\nEnable the server configuration and start the server::\n\n    $ sudo ln -s /etc/nginx/sites-available/cuckoo-api /etc/nginx/sites-enabled/\n    $ sudo service nginx start    # or reload, if already running\n\nAt this point, the API server should be available at port **8090** on the server.\nVarious configurations may be applied to extend this configuration, such as to\ntune server performance, add authentication, or to secure communications using\nHTTPS.\n\n.. _`uWSGI`: http://uwsgi-docs.readthedocs.org/en/latest/\n.. _`Nginx`: http://nginx.org/\n\nResources\n=========\n\nFollowing is a list of currently available resources and a brief description of\neach one. For details click on the resource name.\n\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| Resource                          | Description                                                                                                      |\n+===================================+==================================================================================================================+\n| ``POST`` :ref:`tasks_create_file` | Adds a file to the list of pending tasks to be processed and analyzed.                                           |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``POST`` :ref:`tasks_create_url`  | Adds an URL to the list of pending tasks to be processed and analyzed.                                           |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`tasks_list`         | Returns the list of tasks stored in the internal Cuckoo database.                                                |\n|                                   | You can optionally specify a limit of entries to return.                                                         |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`tasks_view`         | Returns the details on the task assigned to the specified ID.                                                    |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`tasks_reschedule`   | Reschedule a task assigned to the specified ID.                                                                  |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`tasks_delete`       | Removes the given task from the database and deletes the results.                                                |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`tasks_report`       | Returns the report generated out of the analysis of the task associated with the specified ID.                   |\n|                                   | You can optionally specify which report format to return, if none is specified the JSON report will be returned. |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`tasks_shots`        | Retrieves one or all screenshots associated with a given analysis task ID.                                       |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`tasks_rereport`     | Re-run reporting for task associated with a given analysis task ID.                                              |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`memory_list`        | Returns a list of memory dump files associated with a given analysis task ID.                                    |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`memory_get`         | Retrieves one memory dump file associated with a given analysis task ID.                                         |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`files_view`         | Search the analyzed binaries by MD5 hash, SHA256 hash or internal ID (referenced by the tasks details).          |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`files_get`          | Returns the content of the binary with the specified SHA256 hash.                                                |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`pcap_get`           | Returns the content of the PCAP associated with the given task.                                                  |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`machines_list`      | Returns the list of analysis machines available to Cuckoo.                                                       |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`machines_view`      | Returns details on the analysis machine associated with the specified name.                                      |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`cuckoo_status`      | Returns the basic cuckoo status, including version and tasks overview.                                           |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n| ``GET`` :ref:`vpn_status`         | Returns VPN status.                                                                                              |\n+-----------------------------------+------------------------------------------------------------------------------------------------------------------+\n\n.. highlight:: javascript\n\n.. _tasks_create_file:\n\n/tasks/create/file\n------------------\n\n    **POST /tasks/create/file**\n\n        Adds a file to the list of pending tasks. Returns the ID of the newly created task.\n\n        **Example request**::\n\n            curl -F file=@/path/to/file http://localhost:8090/tasks/create/file\n\n        **Example request using Python**::\n\n            import requests\n            import json\n\n            REST_URL = \"http://localhost:8090/tasks/create/file\"\n            SAMPLE_FILE = \"/path/to/malwr.exe\"\n\n            with open(SAMPLE_FILE, \"rb\") as sample:\n                multipart_file = {\"file\": (\"temp_file_name\", sample)}\n                request = requests.post(REST_URL, files=multipart_file)\n\n            # Add your code to error checking for request.status_code.\n\n            json_decoder = json.JSONDecoder()\n            task_id = json_decoder.decode(request.text)[\"task_id\"]\n\n            # Add your code for error checking if task_id is None.\n\n        **Example response**::\n\n            {\n                \"task_id\" : 1\n            }\n\n        **Form parameters**:\n            * ``file`` *(required)* - sample file (multipart encoded file content)\n            * ``package`` *(optional)* - analysis package to be used for the analysis\n            * ``timeout`` *(optional)* *(int)* - analysis timeout (in seconds)\n            * ``priority`` *(optional)* *(int)* - priority to assign to the task (1-3)\n            * ``options`` *(optional)* - options to pass to the analysis package\n            * ``machine`` *(optional)* - ID of the analysis machine to use for the analysis\n            * ``platform`` *(optional)* - name of the platform to select the analysis machine from (e.g. \"windows\")\n            * ``tags`` *(optional)* - define machine to start by tags. Platform must be set to use that. Tags are comma separated\n            * ``custom`` *(optional)* - custom string to pass over the analysis and the processing/reporting modules\n            * ``owner`` *(optional)* - task owner in case multiple users can submit files to the same cuckoo instance\n            * ``memory`` *(optional)* - enable the creation of a full memory dump of the analysis machine\n            * ``enforce_timeout`` *(optional)* - enable to enforce the execution for the full timeout value\n            * ``clock`` *(optional)* - set virtual machine clock (format %m-%d-%Y %H:%M:%S)\n\n        **Status codes**:\n            * ``200`` - no error\n\n.. _tasks_create_url:\n\n/tasks/create/url\n-----------------\n\n    **POST /tasks/create/url**\n\n        Adds a file to the list of pending tasks. Returns the ID of the newly created task.\n\n        **Example request**::\n\n            curl -F url=\"http://www.malicious.site\" http://localhost:8090/tasks/create/url\n\n        **Example request using Python**::\n\n            import requests\n            import json\n\n            REST_URL = \"http://localhost:8090/tasks/create/url\"\n            SAMPLE_URL = \"http://example.org/malwr.exe\"\n\n            multipart_url = {\"url\": (\"\", SAMPLE_URL)}\n            request = requests.post(REST_URL, files=multipart_url)\n\n            # Add your code to error checking for request.status_code.\n\n            json_decoder = json.JSONDecoder()\n            task_id = json_decoder.decode(request.text)[\"task_id\"]\n\n            # Add your code toerror checking if task_id is None.\n\n        **Example response**::\n\n            {\n                \"task_id\" : 1\n            }\n\n        **Form parameters**:\n            * ``url`` *(required)* - URL to analyze (multipart encoded content)\n            * ``package`` *(optional)* - analysis package to be used for the analysis\n            * ``timeout`` *(optional)* *(int)* - analysis timeout (in seconds)\n            * ``priority`` *(optional)* *(int)* - priority to assign to the task (1-3)\n            * ``options`` *(optional)* - options to pass to the analysis package\n            * ``machine`` *(optional)* - ID of the analysis machine to use for the analysis\n            * ``platform`` *(optional)* - name of the platform to select the analysis machine from (e.g. \"windows\")\n            * ``tags`` *(optional)* - define machine to start by tags. Platform must be set to use that. Tags are comma separated\n            * ``custom`` *(optional)* - custom string to pass over the analysis and the processing/reporting modules\n            * ``owner`` *(optional)* - task owner in case multiple users can submit files to the same cuckoo instance\n            * ``memory`` *(optional)* - enable the creation of a full memory dump of the analysis machine\n            * ``enforce_timeout`` *(optional)* - enable to enforce the execution for the full timeout value\n            * ``clock`` *(optional)* - set virtual machine clock (format %m-%d-%Y %H:%M:%S)\n\n        **Status codes**:\n            * ``200`` - no error\n\n.. _tasks_list:\n\n/tasks/list\n-----------\n\n    **GET /tasks/list/** *(int: limit)* **/** *(int: offset)*\n\n        Returns list of tasks.\n\n        **Example request**::\n\n            curl http://localhost:8090/tasks/list\n\n        **Example response**::\n\n            {\n                \"tasks\": [\n                    {\n                        \"category\": \"url\",\n                        \"machine\": null,\n                        \"errors\": [],\n                        \"target\": \"http://www.malicious.site\",\n                        \"package\": null,\n                        \"sample_id\": null,\n                        \"guest\": {},\n                        \"custom\": null,\n                        \"owner\": \"\",\n                        \"priority\": 1,\n                        \"platform\": null,\n                        \"options\": null,\n                        \"status\": \"pending\",\n                        \"enforce_timeout\": false,\n                        \"timeout\": 0,\n                        \"memory\": false,\n                        \"tags\": []\n                        \"id\": 1,\n                        \"added_on\": \"2012-12-19 14:18:25\",\n                        \"completed_on\": null\n                    },\n                    {\n                        \"category\": \"file\",\n                        \"machine\": null,\n                        \"errors\": [],\n                        \"target\": \"/tmp/malware.exe\",\n                        \"package\": null,\n                        \"sample_id\": 1,\n                        \"guest\": {},\n                        \"custom\": null,\n                        \"owner\": \"\",\n                        \"priority\": 1,\n                        \"platform\": null,\n                        \"options\": null,\n                        \"status\": \"pending\",\n                        \"enforce_timeout\": false,\n                        \"timeout\": 0,\n                        \"memory\": false,\n                        \"tags\": [\n                                    \"32bit\",\n                                    \"acrobat_6\",\n                                ],\n                        \"id\": 2,\n                        \"added_on\": \"2012-12-19 14:18:25\",\n                        \"completed_on\": null\n                    }\n                ]\n            }\n\n        **Parameters**:\n            * ``limit`` *(optional)* *(int)* - maximum number of returned tasks\n            * ``offset`` *(optional)* *(int)* - data offset\n\n        **Status codes**:\n            * ``200`` - no error\n\n.. _tasks_view:\n\n/tasks/view\n-----------\n\n    **GET /tasks/view/** *(int: id)*\n\n        Returns details on the task associated with the specified ID.\n\n        **Example request**::\n\n            curl http://localhost:8090/tasks/view/1\n\n        **Example response**::\n\n            {\n                \"task\": {\n                    \"category\": \"url\",\n                    \"machine\": null,\n                    \"errors\": [],\n                    \"target\": \"http://www.malicious.site\",\n                    \"package\": null,\n                    \"sample_id\": null,\n                    \"guest\": {},\n                    \"custom\": null,\n                    \"owner\": \"\",\n                    \"priority\": 1,\n                    \"platform\": null,\n                    \"options\": null,\n                    \"status\": \"pending\",\n                    \"enforce_timeout\": false,\n                    \"timeout\": 0,\n                    \"memory\": false,\n                    \"tags\": [\n                                \"32bit\",\n                                \"acrobat_6\",\n                            ],\n                    \"id\": 1,\n                    \"added_on\": \"2012-12-19 14:18:25\",\n                    \"completed_on\": null\n                }\n            }\n\n        Note: possible value for key ``status``:\n            * ``pending``\n            * ``running``\n            * ``completed``\n            * ``reported``\n\n        **Parameters**:\n            * ``id`` *(required)* *(int)* - ID of the task to lookup\n\n        **Status codes**:\n            * ``200`` - no error\n            * ``404`` - task not found\n\n.. _tasks_reschedule:\n\n/tasks/reschedule\n-----------------\n\n    **GET /tasks/reschedule/** *(int: id)* **/** *(int: priority)*\n\n        Reschedule a task with the specified ID and priority (default priority\n        is 1).\n\n        **Example request**::\n\n            curl http://localhost:8090/tasks/reschedule/1\n\n        **Example response**::\n\n            {\n                \"status\": \"OK\"\n            }\n\n        **Parameters**:\n            * ``id`` *(required)* *(int)* - ID of the task to reschedule\n            * ``priority`` *(optional)* *(int)* - Task priority\n\n        **Status codes**:\n            * ``200`` - no error\n            * ``404`` - task not found\n\n.. _tasks_delete:\n\n/tasks/delete\n-------------\n\n    **GET /tasks/delete/** *(int: id)*\n\n        Removes the given task from the database and deletes the results.\n\n        **Example request**::\n\n            curl http://localhost:8090/tasks/delete/1\n\n        **Parameters**:\n            * ``id`` *(required)* *(int)* - ID of the task to delete\n\n        **Status codes**:\n            * ``200`` - no error\n            * ``404`` - task not found\n            * ``500`` - unable to delete the task\n\n.. _tasks_report:\n\n/tasks/report\n-------------\n\n    **GET /tasks/report/** *(int: id)* **/** *(str: format)*\n\n        Returns the report associated with the specified task ID.\n\n        **Example request**::\n\n            curl http://localhost:8090/tasks/report/1\n\n        **Parameters**:\n            * ``id`` *(required)* *(int)* - ID of the task to get the report for\n            * ``format`` *(optional)* - format of the report to retrieve [json/html/all/dropped/package_files]. If none is specified the JSON report will be returned. ``all`` returns all the result files as tar.bz2, ``dropped`` the dropped files as tar.bz2, ``package_files`` files uploaded to host by analysis packages.\n\n        **Status codes**:\n            * ``200`` - no error\n            * ``400`` - invalid report format\n            * ``404`` - report not found\n\n.. _tasks_shots:\n\n/tasks/screenshots\n------------------\n\n    **GET /tasks/screenshots/** *(int: id)* **/** *(str: number)*\n\n        Returns one or all screenshots associated with the specified task ID.\n\n        **Example request**::\n\n            wget http://localhost:8090/tasks/screenshots/1\n\n        **Parameters**:\n            * ``id`` *(required)* *(int)* - ID of the task to get the report for\n            * ``screenshot`` *(optional)* - numerical identifier of a single screenshot (e.g. 0001, 0002)\n\n        **Status codes**:\n            * ``404`` - file or folder not found\n\n.. _tasks_rereport:\n\n/tasks/rereport\n---------------\n\n    **GET /tasks/rereport/** *(int: id)*\n\n        Re-run reporting for task associated with the specified task ID.\n\n        **Example request**::\n\n            curl http://localhost:8090/tasks/rereport/1\n\n        **Example response**::\n\n            {\n                \"success\": true\n            }\n\n        **Parameters**:\n            * ``id`` *(required)* *(int)* - ID of the task to re-run report\n\n        **Status codes**:\n            * ``200`` - no error\n            * ``404`` - task not found\n\n.. _memory_list:\n\n/memory/list\n------------------\n\n    **GET /memory/list/** *(int: id)*\n\n        Returns a list of memory dump files or one memory dump file associated with the specified task ID.\n\n        **Example request**::\n\n            wget http://localhost:8090/memory/list/1\n\n        **Parameters**:\n            * ``id`` *(required)* *(int)* - ID of the task to get the report for\n\n        **Status codes**:\n            * ``404`` - file or folder not found\n\n.. _memory_get:\n\n/memory/get\n------------------\n\n    **GET /memory/get/** *(int: id)* **/** *(str: number)*\n\n        Returns one memory dump file associated with the specified task ID.\n\n        **Example request**::\n\n            wget http://localhost:8090/memory/get/1/1908\n\n        **Parameters**:\n            * ``id`` *(required)* *(int)* - ID of the task to get the report for\n            * ``pid`` *(required)* - numerical identifier (pid) of a single memory dump file (e.g. 205, 1908)\n\n        **Status codes**:\n            * ``404`` - file or folder not found\n\n.. _files_view:\n\n/files/view\n-----------\n\n    **GET /files/view/md5/** *(str: md5)*\n\n    **GET /files/view/sha256/** *(str: sha256)*\n\n    **GET /files/view/id/** *(int: id)*\n\n        Returns details on the file matching either the specified MD5 hash, SHA256 hash or ID.\n\n        **Example request**::\n\n            curl http://localhost:8090/files/view/id/1\n\n        **Example response**::\n\n            {\n                \"sample\": {\n                    \"sha1\": \"da39a3ee5e6b4b0d3255bfef95601890afd80709\",\n                    \"file_type\": \"empty\",\n                    \"file_size\": 0,\n                    \"crc32\": \"00000000\",\n                    \"ssdeep\": \"3::\",\n                    \"sha256\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\",\n                    \"sha512\": \"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e\",\n                    \"id\": 1,\n                    \"md5\": \"d41d8cd98f00b204e9800998ecf8427e\"\n                }\n            }\n\n        **Parameters**:\n            * ``md5`` *(optional)* - MD5 hash of the file to lookup\n            * ``sha256`` *(optional)* - SHA256 hash of the file to lookup\n            * ``id`` *(optional)* *(int)* - ID of the file to lookup\n\n        **Status codes**:\n            * ``200`` - no error\n            * ``400`` - invalid lookup term\n            * ``404`` - file not found\n\n.. _files_get:\n\n/files/get\n----------\n\n    **GET /files/get/** *(str: sha256)*\n\n         Returns the binary content of the file matching the specified SHA256 hash.\n\n        **Example request**::\n\n            curl http://localhost:8090/files/get/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 > sample.exe\n\n        **Status codes**:\n            * ``200`` - no error\n            * ``404`` - file not found\n\n.. _pcap_get:\n\n/pcap/get\n---------\n\n    **GET /pcap/get/** *(int: task)*\n\n        Returns the content of the PCAP associated with the given task.\n\n        **Example request**::\n\n            curl http://localhost:8090/pcap/get/1 > dump.pcap\n\n        **Status codes**:\n            * ``200`` - no error\n            * ``404`` - file not found\n\n\n.. _machines_list:\n\n/machines/list\n--------------\n\n    **GET /machines/list**\n\n        Returns a list with details on the analysis machines available to Cuckoo.\n\n        **Example request**::\n\n            curl http://localhost:8090/machines/list\n\n        **Example response**::\n\n            {\n                \"machines\": [\n                    {\n                        \"status\": null,\n                        \"locked\": false,\n                        \"name\": \"cuckoo1\",\n                        \"resultserver_ip\": \"192.168.56.1\",\n                        \"ip\": \"192.168.56.101\",\n                        \"tags\": [\n                                    \"32bit\",\n                                    \"acrobat_6\",\n                                ],\n                        \"label\": \"cuckoo1\",\n                        \"locked_changed_on\": null,\n                        \"platform\": \"windows\",\n                        \"snapshot\": null,\n                        \"interface\": null,\n                        \"status_changed_on\": null,\n                        \"id\": 1,\n                        \"resultserver_port\": \"2042\"\n                    }\n                ]\n            }\n\n        **Status codes**:\n            * ``200`` - no error\n\n.. _machines_view:\n\n/machines/view\n--------------\n\n    **GET /machines/view/** *(str: name)*\n\n        Returns details on the analysis machine associated with the given name.\n\n        **Example request**::\n\n            curl http://localhost:8090/machines/view/cuckoo1\n\n        **Example response**::\n\n            {\n                \"machine\": {\n                    \"status\": null,\n                    \"locked\": false,\n                    \"name\": \"cuckoo1\",\n                    \"resultserver_ip\": \"192.168.56.1\",\n                    \"ip\": \"192.168.56.101\",\n                    \"tags\": [\n                                \"32bit\",\n                                \"acrobat_6\",\n                            ],\n                    \"label\": \"cuckoo1\",\n                    \"locked_changed_on\": null,\n                    \"platform\": \"windows\",\n                    \"snapshot\": null,\n                    \"interface\": null,\n                    \"status_changed_on\": null,\n                    \"id\": 1,\n                    \"resultserver_port\": \"2042\"\n                }\n            }\n\n        **Status codes**:\n            * ``200`` - no error\n            * ``404`` - machine not found\n\n.. _cuckoo_status:\n\n/cuckoo/status\n--------------\n\n    **GET /cuckoo/status/**\n\n        Returns status of the cuckoo server. In version 1.3 the diskspace\n        entry was added. The diskspace entry shows the used, free, and total\n        diskspace at the disk where the respective directories can be found.\n        The diskspace entry allows monitoring of a Cuckoo node through the\n        Cuckoo API. Note that each directory is checked separately as one\n        may create a symlink for $CUCKOO/storage/analyses to a separate\n        harddisk, but keep $CUCKOO/storage/binaries as-is. (This feature is\n        only available under Unix!)\n\n        In version 1.3 the cpuload entry was also added - the cpuload entry\n        shows the CPU load for the past minute, the past 5 minutes, and the\n        past 15 minutes, respectively. (This feature is only available under\n        Unix!)\n\n        **Diskspace directories**:\n            * ``analyses`` - $CUCKOO/storage/analyses/\n            * ``binaries`` - $CUCKOO/storage/binaries/\n            * ``temporary`` - ``tmppath`` as specified in ``conf/cuckoo.conf``\n\n        **Example request**::\n\n            curl http://localhost:8090/cuckoo/status\n\n        **Example response**::\n\n            {\n                \"tasks\": {\n                    \"reported\": 165,\n                    \"running\": 2,\n                    \"total\": 167,\n                    \"completed\": 0,\n                    \"pending\": 0\n                },\n                \"diskspace\": {\n                    \"analyses\": {\n                        \"total\": 491271233536,\n                        \"free\": 71403470848,\n                        \"used\": 419867762688\n                    },\n                    \"binaries\": {\n                        \"total\": 491271233536,\n                        \"free\": 71403470848,\n                        \"used\": 419867762688\n                    },\n                    \"temporary\": {\n                        \"total\": 491271233536,\n                        \"free\": 71403470848,\n                        \"used\": 419867762688\n                    }\n                },\n                \"version\": \"1.0\",\n                \"protocol_version\": 1,\n                \"hostname\": \"Patient0\",\n                \"machines\": {\n                    \"available\": 4,\n                    \"total\": 5\n                }\n            }\n\n        **Status codes**:\n            * ``200`` - no error\n            * ``404`` - machine not found\n\n.. _vpn_status:\n\n/vpn/status\n-----------\n\n    **GET /vpn/status**\n\n        Returns VPN status.\n\n        **Example request**::\n\n            curl http://localhost:8090/vpn/status\n\n        **Status codes**:\n            * ``200`` - show status\n            * ``500`` - not available\n"
  },
  {
    "path": "docs-old/book/src/usage/clean.rst",
    "content": ".. _cuckoo-clean:\n\n===========================\nClean all Tasks and Samples\n===========================\n\nSince Cuckoo 1.2 a built-in **--clean** feature has been added, it\ndrops all associated information of the tasks and samples in the\ndatabase. If you submit a task after running\n**--clean** then you'll start with ``Task #1`` again.\n\nTo clean your setup, run::\n\n    $ ./cuckoo.py --clean\n\nTo sum up, this command does the following:\n\n* Delete analysis results.\n* Delete submitted binaries.\n* Delete all associated information of the tasks and samples in the configured database.\n* Delete all data in the configured MongoDB (if configured and enabled in reporting.conf).\n\n.. warning::\n   If you use this command you will delete permanently all data stored by Cuckoo in all\n   storages: file system, SQL database and MongoDB database. Use it only if you are sure\n   you would clean up all the data.\n"
  },
  {
    "path": "docs-old/book/src/usage/dist.rst",
    "content": "==================\nDistributed Cuckoo\n==================\n\nAs mentioned in :doc:`submit`, Cuckoo provides a REST API for Distributed\nCuckoo usage. The distributed script allows one to setup a single REST API\npoint to which samples and URLs can be submitted which will then, in turn, be\nsubmitted to one of the configured Cuckoo nodes.\n\nA typical setup thus includes a machine on which the distributed script is run\nand one or more machines running an instance of the Cuckoo daemon\n(``./cuckoo.py``) and the :doc:`Cuckoo REST API <api>`.\n\nA few notes;\n\n* Using the distributed script makes more sense when running at least two\n  cuckoo nodes.\n* The distributed script can be run on a machine that also runs a Cuckoo\n  daemon and REST API, however, make sure it has enough disk space if the\n  intention is to submit a lot of samples.\n\nDependencies\n============\n\nThe distributed script uses a few Python libraries which can be installed\nthrough the following command (on Debian/Ubuntu)::\n\n    $ sudo pip install flask flask-sqlalchemy requests\n\nStarting the Distributed REST API\n=================================\n\nThe Distributed REST API requires a few commandline options in order to run.\nFollowing is a listing of all available commandline options::\n\n    $ ./distributed/app.py -h\n\n    usage: app.py [-h] [-s SETTINGS] [-v] [host] [port]\n\n    positional arguments:\n        host                  Host to listen on.\n        port                  Port to listen on.\n\n    optional arguments:\n        -h, --help            show this help message and exit\n        -s SETTINGS, --settings SETTINGS\n                              Settings file.\n        -v, --verbose         Enable verbose logging.\n\nThe various configuration options are described in the configuration file, but following we have more in-depth\ndescriptions as well.\n\nReport Formats\n--------------\n\nThe reporting formats denote which reports you'd like to retrieve later on.\nNote that all task-related data will be removed from the Cuckoo nodes once the\nrelated reports have been fetches so that the machines are not running out of\ndisk space. This does, however, force you to specify all the report formats\nthat you're interested in, because otherwise that information will be lost.\n\nReporting formats include, but are not limited to and may also include your\nown reporting formats, ``json``, ``html``, etc.\n\nSamples Directory\n-----------------\n\nThe samples directory denotes the directory where the submitted samples will\nbe stored temporarily, until they're passed on to a Cuckoo node and processed.\n\nReports Directory\n-----------------\n\nMuch like the ``Samples Directory`` the Reports Directory defines the\ndirectory where reports will be stored until they're fetched and deleted from\nthe Distributed REST API.\n\nRESTful resources\n=================\n\nFollowing are all RESTful resources. Also make sure to check out the\n:ref:`quick-usage` section which documents the most commonly used commands.\n\n+-----------------------------------+---------------------------------------------------------------+\n| Resource                          | Description                                                   |\n+===================================+===============================================================+\n| ``GET`` :ref:`node_root_get`      | Get a list of all enabled Cuckoo nodes.                       |\n+-----------------------------------+---------------------------------------------------------------+\n| ``POST`` :ref:`node_root_post`    | Register a new Cuckoo node.                                   |\n+-----------------------------------+---------------------------------------------------------------+\n| ``GET`` :ref:`node_get`           | Get basic information about a node.                           |\n+-----------------------------------+---------------------------------------------------------------+\n| ``PUT`` :ref:`node_put`           | Update basic information of a node.                           |\n+-----------------------------------+---------------------------------------------------------------+\n| ``DELETE`` :ref:`node_delete`     | Disable (not completely remove!) a node.                      |\n+-----------------------------------+---------------------------------------------------------------+\n| ``GET`` :ref:`task_root_get`      | Get a list of all (or a part) of the tasks in the database.   |\n+-----------------------------------+---------------------------------------------------------------+\n| ``POST`` :ref:`task_root_post`    | Create a new analysis task.                                   |\n+-----------------------------------+---------------------------------------------------------------+\n| ``GET`` :ref:`task_get`           | Get basic information about a task.                           |\n+-----------------------------------+---------------------------------------------------------------+\n| ``DELETE`` :ref:`task_delete`     | Delete all associated information of a task.                  |\n+-----------------------------------+---------------------------------------------------------------+\n| ``GET`` :ref:`report_get`         + Fetch an analysis report.                                     |\n+-----------------------------------+---------------------------------------------------------------+\n\n.. _node_root_get:\n\nGET /api/node\n-------------\n\nReturns all enabled nodes. For each node its associated name, API url, and\nmachines are returned::\n\n    $ curl http://localhost:9003/api/node\n    {\n        \"success\": true,\n        \"nodes\": {\n            \"localhost\": {\n                \"machines\": [\n                    {\n                        \"name\": \"cuckoo1\",\n                        \"platform\": \"windows\",\n                        \"tags\": []\n                    }\n                ],\n                \"name\": \"localhost\",\n                \"url\": \"http://localhost:8090/\"\n            }\n        }\n    }\n\n.. _node_root_post:\n\nPOST /api/node\n--------------\n\nRegister a new Cuckoo node by providing the name and the URL::\n\n    $ curl http://localhost:9003/api/node -F name=localhost \\\n        -F url=http://localhost:8090/\n    {\n        \"success\": true\n    }\n\n.. _node_get:\n\nGET /api/node/<name>\n--------------------\n\nGet basic information about a particular Cuckoo node::\n\n    $ curl http://localhost:9003/api/node/localhost\n    {\n        \"success\": true,\n        \"nodes\": [\n            {\n                \"name\": \"localhost\",\n                \"url\": \"http://localhost:8090/\"\n                \"machines\": [\n                    {\n                        \"name\": \"cuckoo1\",\n                        \"platform\": \"windows\",\n                        \"tags\": []\n                    }\n                ]\n            }\n        ]\n    }\n\n.. _node_put:\n\nPUT /api/node/<name>\n--------------------\n\nUpdate basic information of a Cuckoo node::\n\n    $ curl -XPUT http://localhost:9003/api/node/localhost -F name=newhost \\\n        -F url=http://1.2.3.4:8090/\n    {\n        \"success\": true\n    }\n\n.. _node_delete:\n\nDELETE /api/node/<name>\n-----------------------\n\nDisable a Cuckoo node, therefore not having it process any new tasks, but\nkeeping its history in the Distributed's database::\n\n    $ curl -XDELETE http://localhost:9003/node/localhost\n    {\n        \"success\": true\n    }\n\n.. _task_root_get:\n\nGET /api/task\n-------------\n\nGet a list of all tasks in the database. In order to limit the amount of\nresults, there's an ``offset``, ``limit``, ``finished``, and ``owner`` field\navailable::\n\n    $ curl http://localhost:9003/api/task?limit=1\n    {\n        \"success\": true,\n        \"tasks\": {\n            \"1\": {\n                \"clock\": null,\n                \"custom\": null,\n                \"owner\": \"\",\n                \"enforce_timeout\": null,\n                \"machine\": null,\n                \"memory\": null,\n                \"options\": null,\n                \"package\": null,\n                \"path\": \"/tmp/dist-samples/tmphal8mS\",\n                \"platform\": \"windows\",\n                \"priority\": 1,\n                \"tags\": null,\n                \"task_id\": 1,\n                \"timeout\": null\n            }\n        }\n    }\n\n.. _task_root_post:\n\nPOST /api/task\n--------------\n\nSubmit a new file or URL to be analyzed::\n\n    $ curl http://localhost:9003/api/task -F file=@sample.exe\n    {\n        \"success\": true,\n        \"task_id\": 2\n    }\n\n.. _task_get:\n\nGET /api/task/<id>\n------------------\n\nGet basic information about a particular task::\n\n    $ curl http://localhost:9003/api/task/2\n    {\n        \"success\": true,\n        \"tasks\": {\n            \"2\": {\n                \"id\": 2,\n                \"clock\": null,\n                \"custom\": null,\n                \"owner\": \"\",\n                \"enforce_timeout\": null,\n                \"machine\": null,\n                \"memory\": null,\n                \"options\": null,\n                \"package\": null,\n                \"path\": \"/tmp/tmpPwUeXm\",\n                \"platform\": \"windows\",\n                \"priority\": 1,\n                \"tags\": null,\n                \"timeout\": null,\n                \"task_id\": 1,\n                \"node_id\": 2,\n                \"finished\": false\n            }\n        }\n    }\n\n.. _task_delete:\n\nDELETE /api/task/<id>\n---------------------\n\nDelete all associated data of a task, namely the binary and the reports::\n\n    $ curl -XDELETE http://localhost:9003/api/task/2\n    {\n        \"success\": true\n    }\n\n.. _report_get:\n\nGET /api/report/<id>/<format>\n-----------------------------\n\nFetch a report for the given task in the specified format::\n\n    # Defaults to the JSON report.\n    $ curl http://localhost:9003/report/2\n    ...\n\n.. _quick-usage:\n\nQuick usage\n===========\n\nFor practical usage the following few commands will be most interesting.\n\nRegister a Cuckoo node - a Cuckoo API running on the same machine in this\ncase::\n\n    $ curl http://localhost:9003/api/node \\\n        -F name=localhost -F url=http://localhost:8090/\n\nDisable a Cuckoo node::\n\n    $ curl -XDELETE http://localhost:9003/api/node/localhost\n\nSubmit a new analysis task without any special requirements (e.g., using\nCuckoo ``tags``, a particular machine, etc)::\n\n    $ curl http://localhost:9003/api/task -F file=@/path/to/sample.exe\n\nGet the report of a task has been finished (if it hasn't finished you'll get\nan error with code 420). Following example will default to the ``JSON``\nreport::\n\n    $ curl http://localhost:9003/api/report/1\n\nProposed setup\n==============\n\nThe following description depicts a Distributed Cuckoo setup with two Cuckoo\nmachines, **cuckoo0** and **cuckoo1**. In this setup the first machine,\ncuckoo0, also hosts the Distributed Cuckoo REST API.\n\nConfiguration settings\n----------------------\n\nOur setup will require a couple of updates with regards to the configuration\nfiles.\n\nconf/cuckoo.conf\n^^^^^^^^^^^^^^^^\n\nUpdate ``process_results`` to ``off`` as we will be running our own results\nprocessing script (for performance reasons).\n\nUpdate ``tmppath`` to something that holds enough storage to store a few\nhundred binaries. On some servers or setups ``/tmp`` may have a limited amount\nof space and thus this wouldn't suffice.\n\nUpdate ``connection`` to use something *not* sqlite3. Preferably PostgreSQL or\nMySQL. SQLite3 doesn't support multi-threaded applications that well and this\nwill give errors at random if used.\n\nYou should create your own empty database for the distributed cuckoo setup. Do not be tempted to use any existing cuckoo database in order to avoid update problems with the DB scripts. In the config use the new database name, the remaining stuff like usernames , servers can be the same as for your cuckoo install.Don´t forget to use one DB per node and another one more for the first machine which run the distributed script (so the say the \"management machine\" ).\n\nconf/processing.conf\n^^^^^^^^^^^^^^^^^^^^\n\nYou may want to disable some processing modules, such as ``virustotal``.\n\nconf/reporting.conf\n^^^^^^^^^^^^^^^^^^^\n\nDepending on which report(s) are required for integration with your system it\nmight make sense to only make those report(s) that you're going to use. Thus\ndisable the other ones.\n\nconf/virtualbox.conf\n^^^^^^^^^^^^^^^^^^^^\n\nAssuming ``VirtualBox`` is the Virtual Machine manager of choice, the ``mode``\nwill have to be changed to ``headless`` or you will have some restless nights.\n\nSetup Cuckoo\n------------\n\nOn each machine the following three scripts should be ran::\n\n    ./cuckoo.py\n    ./utils/api.py -H 1.2.3.4  # IP accessible by the Distributed script.\n    ./utils/process.py auto\n\nOne way to do this is by placing each script in its own ``screen(1)`` session\nas follows, this allows one to check back on each script to ensure it's\n(still) running successfully::\n\n    $ screen -S cuckoo  ./cuckoo.py\n    $ screen -S api     ./utils/api.py\n    $ screen -S process ./utils/process.py auto\n\nSetup Distributed Cuckoo\n------------------------\n\nOn the first machine (so the say the \"management machine\" ) start a few separate ``screen(1)`` sessions for the\nDistributed Cuckoo scripts with all the required parameters (see the rest of\nthe documentation on the parameters for this script)::\n\n    $ screen -S distributed ./distributed/app.py\n    $ SCREEN -S dist_scheduler ./distributed/instance.py dist.scheduler\n    $ SCREEN -S dist_status ./distributed/instance.py dist.status\n    $ SCREEN -S cuckoo0 ./distributed/instance.py -v cuckoo0\n    $ SCREEN -S cuckoo1 ./distributed/instance.py -v cuckoo1\n\nThe -v parameter enables verbose output and the cuckoo1 parameter is the name assigned to the actual cuckoo instance running the virtual machine while registering the node as outlined below.It´s mandatory to register the nodes before run the instance.py due to the script check the DB.\n\nRegister Cuckoo nodes\n---------------------\n\nAs outlined in :ref:`quick-usage` the Cuckoo nodes have to be registered with\nthe Distributed Cuckoo script::\n\n    $ curl http://localhost:9003/api/node -F name=cuckoo0 -F url=http://localhost:8090/\n    $ curl http://localhost:9003/api/node -F name=cuckoo1 -F url=http://1.2.3.4:8090/\n\nHaving registered the Cuckoo nodes all that's left to do now is to submit\ntasks and fetch reports once finished. Documentation on these commands can be\nfound in the :ref:`quick-usage` section. In case you are not using localhost, replace localhost with the IP of the node where there distributed.py is running and the -F url parameter points to the nodes running the actual virtual machines.\n\nIf you want to experiment a real load balancing between the nodes you should use a lower value for the threshold parameter in the distributed/settings.py file, the default value is 500.\n"
  },
  {
    "path": "docs-old/book/src/usage/index.rst",
    "content": ".. Usage chapter frontpage\n\nUsage\n=====\n\nThis chapter explains how to use Cuckoo.\n\n.. toctree::\n\n    start\n    submit\n    web\n    api\n    dist\n    packages\n    results\n    clean\n    utilities\n"
  },
  {
    "path": "docs-old/book/src/usage/packages.rst",
    "content": "=================\nAnalysis Packages\n=================\n\nThe **analysis packages** are a core component of Cuckoo Sandbox.\nThey consist in structured Python classes which, when executed in the guest machines,\ndescribe how Cuckoo's analyzer component should conduct the analysis.\n\nCuckoo provides some default analysis packages that you can use, but you are\nable to create your own or modify the existing ones.\nYou can find them at *analyzer/windows/modules/packages/*.\n\nAs described in :doc:`../usage/submit`, you can specify some options to the\nanalysis packages in the form of ``key1=value1,key2=value2``. The existing analysis\npackages already include some default options that can be enabled.\n\nFollowing is the list of existing packages in alphabetical order:\n\n    * ``applet``: used to analyze **Java applets**.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``class``: specify the name of the class to be executed. This option is mandatory for a correct execution.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``bin``: used to analyze generic binary data, such as **shellcodes**.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``cpl``: used to analyze **Control Panel Applets**.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``dll``: used to run and analyze **Dynamically Linked Libraries**.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``function``: specify the function to be executed. If none is specified, Cuckoo will try to run ``DllMain``.\n            * ``arguments``: specify arguments to pass to the DLL through commandline.\n            * ``loader``: specify a process name to use to fake the DLL launcher name instead of rundll32.exe (this is used to fool possible anti-sandboxing tricks of certain malware)\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``doc``: used to run and analyze **Microsoft Word documents**.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``exe``: default analysis package used to analyze generic **Windows executables**.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``arguments``: specify any command line argument to pass to the initial process of the submitted malware.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``generic``: used to run and analyze **generic samples** via cmd.exe.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``html``: used to analyze **Internet Explorer**'s behavior when opening the given HTML file.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``ie``: used to analyze **Internet Explorer**'s behavior when opening the given URL.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``jar``: used to analyze **Java JAR** containers.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``class``: specify the path of the class to be executed. If none is specified, Cuckoo will try to execute the main function specified in the Jar's MANIFEST file.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``msi``: used to run and analyze **MSI windows installer**.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``pdf``: used to run and analyze **PDF documents**.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``ppt``: used to run and analyze **Microsoft PowerPoint documents**.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``ps1``: used to run and analyze **PowerShell scripts**.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``python``: used to run and analyze **Python scripts**.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``vbs``: used to run and analysis **VBScript files**.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``xls``: used to run and analyze **Microsoft Excel documents**.\n\n        **Options**:\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\n    * ``zip``: used to run and analyze **Zip archives**.\n\n        **Options**:\n            * ``file``: specify the name of the file contained in the archive to execute. If none is specified, Cuckoo will try to execute *sample.exe*.\n            * ``free`` *[yes/no]*: if enabled, no behavioral logs will be produced and the malware will be executed freely.\n            * ``arguments``: specify any command line argument to pass to the initial process of the submitted malware.\n            * ``password``: specify the password of the archive. If none is specified, Cuckoo will try to extract the archive without password or use the password \"*infected*\".\n            * ``procmemdump`` *[yes/no]*: if enabled, take memory dumps of all actively monitored processes.\n\nYou can find more details on how to start creating new analysis packages in the\n:doc:`../customization/packages` customization chapter.\n\nAs you already know, you can select which analysis package to use by specifying\nits name at submission time (see :doc:`submit`) as follows::\n\n    $ ./utils/submit.py --package <package name> /path/to/malware\n\nIf none is specified, Cuckoo will try to detect the file type and select\nthe correct analysis package accordingly. If the file type is not supported by\ndefault the analysis will be aborted, therefore we encourage to\nspecify the package name whenever possible.\n\nFor example, to launch a malware and specify some options you can do::\n\n    $ ./utils/submit.py --package dll --options function=FunctionName,loader=explorer.exe /path/to/malware.dll\n"
  },
  {
    "path": "docs-old/book/src/usage/results.rst",
    "content": "================\nAnalysis Results\n================\n\nOnce an analysis is completed, several files are stored in a dedicated directory.\nAll the analyses are stored under the directory *storage/analyses/* inside a\nsubdirectory named after the incremental numerical ID that represents the analysis\ntask in the database.\n\nFollowing is an example of an analysis directory structure::\n\n    .\n    |-- analysis.conf\n    |-- analysis.log\n    |-- binary\n    |-- dump.pcap\n    |-- memory.dmp\n    |-- files\n    |   |-- 1234567890\n    |       `-- dropped.exe\n    |-- logs\n    |   |-- 1232.raw\n    |   |-- 1540.raw\n    |   `-- 1118.raw\n    |-- reports\n    |   |-- report.html\n    |   |-- report.json\n    `-- shots\n        |-- 0001.jpg\n        |-- 0002.jpg\n        |-- 0003.jpg\n        `-- 0004.jpg\n\nanalysis.conf\n=============\n\nThis is a configuration file automatically generated by Cuckoo to give\nits analyzer some details about the current analysis. It's generally of no\ninterest to the end-user, as it's used internally by the sandbox.\n\nanalysis.log\n============\n\nThis is a log file generated by the analyzer and that contains a trace of\nthe analysis execution inside the guest environment. It will report the\ncreation of processes, files and eventual errors occurred during the\nexecution.\n\ndump.pcap\n=========\n\nThis is the network dump generated by tcpdump or any other corresponding\nnetwork sniffer.\n\nmemory.dmp\n==========\n\nIn case you enabled it, this file contains the full memory dump of the analysis\nmachine.\n\nfiles/\n======\n\nThis directory contains all the files the malware operated on and that Cuckoo\nwas able to dump.\n\nlogs/\n=====\n\nThis directory contains all the raw logs generated by Cuckoo's process monitoring.\n\nreports/\n========\n\nThis directory contains all the reports generated by Cuckoo as explained in the\n:doc:`../installation/host/configuration` chapter.\n\nshots/\n======\n\nThis directory contains all the screenshots of the guest's desktop taken during\nthe malware execution.\n"
  },
  {
    "path": "docs-old/book/src/usage/start.rst",
    "content": "===============\nStarting Cuckoo\n===============\n\nTo start Cuckoo use the command::\n\n    $ python cuckoo.py\n\nMake sure to run it inside Cuckoo's root directory.\n\nYou will get an output similar to this::\n\n      eeee e   e eeee e   e  eeeee eeeee\n      8  8 8   8 8  8 8   8  8  88 8  88\n      8e   8e  8 8e   8eee8e 8   8 8   8\n      88   88  8 88   88   8 8   8 8   8\n      88e8 88ee8 88e8 88   8 8eee8 8eee8\n\n     Cuckoo Sandbox 1.2\n     www.cuckoosandbox.org\n     Copyright (c) 2010-2015\n\n     Checking for updates...\n     Good! You have the latest version available.\n\n    2013-04-07 15:57:17,459 [lib.cuckoo.core.scheduler] INFO: Using \"virtualbox\" machine manager\n    2013-04-07 15:57:17,861 [lib.cuckoo.core.scheduler] INFO: Loaded 1 machine/s\n    2013-04-07 15:57:17,862 [lib.cuckoo.core.scheduler] INFO: Waiting for analysis tasks...\n\nNote that Cuckoo checks for updates on a remote API located at *api.cuckoosandbox.org*.\nYou can avoid this by disabling the ``version_check`` option in the configuration file.\n\nNow Cuckoo is ready to run and it's waiting for submissions.\n\n``cuckoo.py`` accepts some command line options as shown by the help::\n\n    usage: cuckoo.py [-h] [-q] [-d] [-v] [-a] [-t] [-m MAX_ANALYSIS_COUNT]\n                     [-u USER] [--clean]\n\n    optional arguments:\n      -h, --help            show this help message and exit\n      -q, --quiet           Display only error messages\n      -d, --debug           Display debug messages\n      -v, --version         show program's version number and exit\n      -a, --artwork         Show artwork\n      -t, --test            Test startup\n      -m MAX_ANALYSIS_COUNT, --max-analysis-count MAX_ANALYSIS_COUNT\n                            Maximum number of analyses\n      -u USER, --user USER  Drop user privileges to this user\n      --clean               Remove all tasks and samples and their associated data\n\n\nMost importantly ``--debug`` and ``--quiet`` respectively increase and decrease the logging\nverbosity.\n"
  },
  {
    "path": "docs-old/book/src/usage/submit.rst",
    "content": "==================\nSubmit an Analysis\n==================\n\n    * :ref:`submitpy`\n    * :ref:`apipy`\n    * :ref:`distpy`\n    * :ref:`python`\n\n.. _submitpy:\n\nSubmission Utility\n==================\n\nThe easiest way to submit an analysis is to use the provided *submit.py*\ncommand-line utility. It currently has the following options available::\n\n    usage: submit.py [-h] [-d] [--remote REMOTE] [--url] [--package PACKAGE]\n                     [--custom CUSTOM] [--owner OWNER] [--timeout TIMEOUT]\n                     [-o OPTIONS] [--priority PRIORITY] [--machine MACHINE]\n                     [--platform PLATFORM] [--memory] [--enforce-timeout]\n                     [--clock CLOCK] [--tags TAGS] [--max MAX] [--pattern PATTERN]\n                     [--shuffle] [--unique] [--quiet]\n                     target\n\n    positional arguments:\n      target                URL, path to the file or folder to analyze\n\n    optional arguments:\n      -h, --help            show this help message and exit\n      -d, --debug           Enable debug logging\n      --remote REMOTE       Specify IP:port to a Cuckoo API server to submit\n                            remotely\n      --url                 Specify whether the target is an URL\n      --package PACKAGE     Specify an analysis package\n      --custom CUSTOM       Specify any custom value\n      --owner OWNER         Specify the task owner\n      --timeout TIMEOUT     Specify an analysis timeout\n      -o OPTIONS, --options OPTIONS\n                            Specify options for the analysis package (e.g.\n                            \"name=value,name2=value2\")\n      --priority PRIORITY   Specify a priority for the analysis represented by an\n                            integer\n      --machine MACHINE     Specify the identifier of a machine you want to use\n      --platform PLATFORM   Specify the operating system platform you want to use\n                            (windows/darwin/linux)\n      --memory              Enable to take a memory dump of the analysis machine\n      --enforce-timeout     Enable to force the analysis to run for the full\n                            timeout period\n      --clock CLOCK         Set virtual machine clock\n      --tags TAGS           Specify tags identifier of a machine you want to use\n      --max MAX             Maximum samples to add in a row\n      --pattern PATTERN     Pattern of files to submit\n      --shuffle             Shuffle samples before submitting them\n      --unique              Only submit new samples, ignore duplicates\n      --quiet               Only print text on failure\n\nIf you specify a directory as path, all the files contained in it will be\nsubmitted for analysis.\n\nThe concept of analysis packages will be dealt later in this documentation (at\n:doc:`packages`). Following are some usage examples:\n\n*Example*: submit a local binary::\n\n    $ ./utils/submit.py /path/to/binary\n\n*Example*: submit an URL::\n\n    $ ./utils/submit.py --url http://www.example.com\n\n*Example*: submit a local binary and specify an higher priority::\n\n    $ ./utils/submit.py --priority 5 /path/to/binary\n\n*Example*: submit a local binary and specify a custom analysis timeout of\n60 seconds::\n\n    $ ./utils/submit.py --timeout 60 /path/to/binary\n\n*Example*: submit a local binary and specify a custom analysis package::\n\n    $ ./utils/submit.py --package <name of package> /path/to/binary\n\n*Example*: submit a local binary and specify a custom analysis package and\nsome options (in this case a command line argument for the malware)::\n\n    $ ./utils/submit.py --package exe --options arguments=--dosomething /path/to/binary.exe\n\n*Example*: submit a local binary to be run on virtual machine *cuckoo1*::\n\n    $ ./utils/submit.py --machine cuckoo1 /path/to/binary\n\n*Example*: submit a local binary to be run on a Windows machine::\n\n    $ ./utils/submit.py --platform windows /path/to/binary\n\n*Example*: submit a local binary and take a full memory dump of the analysis machine::\n\n    $ ./utils/submit.py --memory /path/to/binary\n\n*Example*: submit a local binary and force the analysis to be executed for the full timeout (disregarding the internal mechanism that Cuckoo uses to decide when to terminate the analysis)::\n\n    $ ./utils/submit.py --enforce-timeout /path/to/binary\n\n*Example*: submit a local binary and set virtual machine clock. Format is %m-%d-%Y %H:%M:%S. If not specified, the current time is used. For example if we want run a sample the 24 january 2001 at 14:41:20::\n\n    $ ./utils/submit.py --clock \"01-24-2001 14:41:20\" /path/to/binary\n\n*Example*: submit a sample for Volatility analysis (to reduce side effects of the cuckoo hooking, switch it off with *options free=True*)::\n\n    $ ./utils/submit.py --memory --options free=True /path/to/binary\n\n.. _apipy:\n\nAPI\n===\n\nDetailed usage of the REST API interface is described in :doc:`api`.\n\n.. _distpy:\n\nDistributed Cuckoo\n==================\n\nDetailed usage of the Distributed Cuckoo API interface is described in\n:doc:`dist`.\n\n.. _python:\n\nPython Functions\n================\n\nIn order to keep track of submissions, samples and overall execution, Cuckoo\nuses a popular Python ORM called `SQLAlchemy`_ that allows you to make the sandbox\nuse SQLite, MySQL, PostgreSQL and several other SQL database systems.\n\nCuckoo is designed to be easily integrated in larger solutions and to be fully\nautomated. In order to automate analysis submission we suggest to use the REST\nAPI interface described in :doc:`api`, but in case you want to write your\nown Python submission script, you can also use the ``add_path()`` and ``add_url()`` functions.\n\n.. function:: add_path(file_path[, timeout=0[, package=None[, options=None[, priority=1[, custom=None[, owner=\"\"[, machine=None[, platform=None[, memory=False[, enforce_timeout=False], clock=None[]]]]]]]]]])\n\n    Add a local file to the list of pending analysis tasks. Returns the ID of the newly generated task.\n\n    :param file_path: path to the file to submit\n    :type file_path: string\n    :param timeout: maximum amount of seconds to run the analysis for\n    :type timeout: integer\n    :param package: analysis package you want to use for the specified file\n    :type package: string or None\n    :param options: list of options to be passed to the analysis package (in the format ``key=value,key=value``)\n    :type options: string or None\n    :param priority: numeric representation of the priority to assign to the specified file (1 being low, 2 medium, 3 high)\n    :type priority: integer\n    :param custom: custom value to be passed over and possibly reused at processing or reporting\n    :type custom: string or None\n    :param owner: task owner\n    :type owner: string or None\n    :param machine: Cuckoo identifier of the virtual machine you want to use, if none is specified one will be selected automatically\n    :type machine: string or None\n    :param platform: operating system platform you want to run the analysis one (currently only Windows)\n    :type platform: string or None\n    :param memory: set to ``True`` to generate a full memory dump of the analysis machine\n    :type memory: True or False\n    :param enforce_timeout: set to ``True`` to force the execution for the full timeout\n    :type enforce_timeout: True or False\n    :param clock: provide a custom clock time to set in the analysis machine\n    :type clock: string or None\n    :rtype: integer\n\n    Example usage:\n\n    .. code-block:: python\n        :linenos:\n\n        >>> from lib.cuckoo.core.database import Database\n        >>> db = Database()\n        >>> db.add_path(\"/tmp/malware.exe\")\n        1\n        >>>\n\n.. function:: add_url(url[, timeout=0[, package=None[, options=None[, priority=1[, custom=None[, owner=\"\"[, machine=None[, platform=None[, memory=False[, enforce_timeout=False], clock=None[]]]]]]]]]])\n\n    Add a local file to the list of pending analysis tasks. Returns the ID of the newly generated task.\n\n    :param url: URL to analyze\n    :type url: string\n    :param timeout: maximum amount of seconds to run the analysis for\n    :type timeout: integer\n    :param package: analysis package you want to use for the specified URL\n    :type package: string or None\n    :param options: list of options to be passed to the analysis package (in the format ``key=value,key=value``)\n    :type options: string or None\n    :param priority: numeric representation of the priority to assign to the specified URL (1 being low, 2 medium, 3 high)\n    :type priority: integer\n    :param custom: custom value to be passed over and possibly reused at processing or reporting\n    :type custom: string or None\n    :param owner: task owner\n    :type owner: string or None\n    :param machine: Cuckoo identifier of the virtual machine you want to use, if none is specified one will be selected automatically\n    :type machine: string or None\n    :param platform: operating system platform you want to run the analysis one (currently only Windows)\n    :type platform: string or None\n    :param memory: set to ``True`` to generate a full memory dump of the analysis machine\n    :type memory: True or False\n    :param enforce_timeout: set to ``True`` to force the execution for the full timeout\n    :type enforce_timeout: True or False\n    :param clock: provide a custom clock time to set in the analysis machine\n    :type clock: string or None\n    :rtype: integer\n\nExample Usage:\n\n.. code-block:: python\n    :linenos:\n\n    >>> from lib.cuckoo.core.database import Database\n    >>> db = Database()\n    >>> db.add_url(\"http://www.cuckoosandbox.org\")\n    2\n    >>>\n\n.. _`SQLAlchemy`: http://www.sqlalchemy.org\n"
  },
  {
    "path": "docs-old/book/src/usage/utilities.rst",
    "content": "=========\nUtilities\n=========\n\nCuckoo comes with a set of pre-built utilities to automate several common\ntasks.\nYou can find them under the \"utils\" folder.\n\nSubmission Utility\n==================\n\nSubmits samples to analysis. This tool is already described in :doc:`submit`.\n\nWeb Utility\n===========\n\nCuckoo's web interface. This tool is already described in :doc:`submit`.\n\nProcessing Utility\n==================\n\nRun the results processing engine and optionally the reporting engine (run\nall reports) on an already available analysis folder, in order to not re-run\nthe analysis if you want to re-generate the reports for it.\nThis is used mainly in debugging and developing Cuckoo.\nFor example if you want run again the report engine for analysis number 1::\n\n    $ ./utils/process.py 1\n\nIf you want to re-generate the reports::\n\n    $ ./utils/process.py --report 1\n\nFollowing are the usage options::\n\n    $ ./utils/process.py -h\n    usage: process.py [-h] [-d] [-r] [-p PARALLEL] [-u USER] [-m MODULES] id\n\n    positional arguments:\n      id                    ID of the analysis to process (auto for continuous\n                            processing of unprocessed tasks).\n\n    optional arguments:\n      -h, --help            show this help message and exit\n      -d, --debug           Display debug messages\n      -r, --report          Re-generate report\n      -p PARALLEL, --parallel PARALLEL\n                            Number of parallel threads to use (auto mode only).\n      -u USER, --user USER  Drop user privileges to this user\n      -m MODULES, --modules MODULES\n                            Path to signature and reporting modules - overrides\n                            default modules path.\n\nAs best practice we suggest to adopt the following configuration if you are\nrunning Cuckoo with many virtual machines:\n\n    * Run a stand alone process.py in auto mode (you choose the number of parallel threads)\n    * Disable Cuckoo reporting in cuckoo.conf (set process_results to off)\n\nThis could increase the performance of your system because the reporting is not\nyet demanded to Cuckoo.\n\nWith Cuckoo 2 a new processing utility was introduced, it is more stable and\nwith better performance. It is dubbed *process2.py*, following are the usage\noptions::\n\n    $ ./utils/process2.py -h\n    usage: process2.py [-h] [-d] [-u USER] [-m MODULES] instance\n\n    positional arguments:\n      instance              Task processing instance.\n\n    optional arguments:\n      -h, --help            show this help message and exit\n      -d, --debug           Display debug messages\n      -u USER, --user USER  Drop user privileges to this user\n      -m MODULES, --modules MODULES\n                            Path to signature and reporting modules - overrides\n                            default modules path.\n\nCommunity Download Utility\n==========================\n\nThis utility downloads signatures from `Cuckoo Community Repository`_ and installs\nspecific additional modules in your local setup and for example update it with\nall the latest available signatures.\nFollowing are the usage options::\n\n    $ ./utils/community.py -h\n\n    usage: community.py [-h] [-a] [-s] [-p] [-m] [-r] [-f] [-w] [-b BRANCH]\n\n    optional arguments:\n      -h, --help            show this help message and exit\n      -a, --all             Download everything\n      -s, --signatures      Download Cuckoo signatures\n      -p, --processing      Download processing modules\n      -m, --machinery       Download machine managers\n      -n, --analyzer        Download analyzer modules\n      -g, --agent           Download agent modules\n      -r, --reporting       Download reporting modules\n      -f, --force           Install files without confirmation\n      -w, --rewrite         Rewrite existing files\n      -b BRANCH, --branch BRANCH\n                            Specify a different branch\n\n*Example*: install all available signatures::\n\n    $ ./utils/community.py --signatures --force\n\n.. _`Cuckoo Community Repository`: https://github.com/cuckoosandbox/community\n\nDatabase migration utility\n==========================\n\nThis utility is developed to migrate your data between Cuckoo's release.\nIt's developed on top of the `Alembic`_ framework and it should provide data\nmigration for both SQL database and Mongo database.\nThis tool is already described in :doc:`../installation/upgrade`.\n\n.. _`Alembic`: http://alembic.readthedocs.org/en/latest/\n\nStats utility\n=============\n\nThis is a really simple utility which prints some statistics about processed\nsamples::\n\n    $ ./utils/stats.py\n\n    1 samples in db\n    1 tasks in db\n    pending 0 tasks\n    running 0 tasks\n    completed 0 tasks\n    recovered 0 tasks\n    reported 1 tasks\n    failed_analysis 0 tasks\n    failed_processing 0 tasks\n    roughly 32 tasks an hour\n    roughly 778 tasks a day\n\nMachine utility\n===============\n\nThe machine.py utility is designed to help you automatize the configuration of\nvirtual machines in Cuckoo.\nIt takes a list of machine details as arguments and write them in the specified\nconfiguration file of the machinery module enabled in *cuckoo.conf*.\nFollowing are the available options::\n\n    $ ./utils/machine.py -h\n    usage: machine.py [-h] [--debug] [--add] [--delete] [--ip IP]\n                      [--platform PLATFORM] [--tags TAGS] [--interface INTERFACE]\n                      [--snapshot SNAPSHOT] [--resultserver RESULTSERVER]\n                      vmname\n\n    positional arguments:\n      vmname                Name of the Virtual Machine.\n\n    optional arguments:\n      -h, --help            show this help message and exit\n      --debug               Debug log in case of errors.\n      --add                 Add a Virtual Machine.\n      --delete              Delete a Virtual Machine.\n      --ip IP               Static IP Address.\n      --platform PLATFORM   Guest Operating System.\n      --tags TAGS           Tags for this Virtual Machine.\n      --interface INTERFACE\n                            Sniffer interface for this machine.\n      --snapshot SNAPSHOT   Specific Virtual Machine Snapshot to use.\n      --resultserver RESULTSERVER\n                            IP:Port of the Result Server.\n\n\nDistributed scripts\n===================\n\nThere are a couple of shell scripts used to automate distributed utility:\n\n * \"start-distributed\" is used to start distributed Cuckoo\n * \"stop-distributed\" is used to stop distributed Cuckoo\n\nMac OS X Bootstrap scripts\n==========================\n\nA couple of bootstrap scripts used for Mac OS X analysis are located in\n*utils/darwin* folder, they are used to bootstrap the guest and host system for\nMac OS X malware analysis.\nSome settings are defined as constants inside them, so it is suggested to have a\nlook at them and configure them for your needs.\n\nSMTP Sinkhole\n=============\n\nThe smtp_sinkhole.py utility is designed to provide an easy to use SMTP sinkhole\nto catch all the emails going out of virtual machines network.\nThis is typically used to dump all emails when you run an analysis of sample\nused for spam purposes. You can use it also to prevent sending spam on\ninternet.\nFollowing are the available options::\n\n    $ ./utils/smtp_sinkhole.py -h\n    usage: smtp_sinkhole.py [host [port]]\n\n    SMTP Sinkhole\n\n    positional arguments:\n      host\n      port\n\n    optional arguments:\n      -h, --help  show this help message and exit\n      --dir DIR   Directory used to dump emails.\n\nBy default, if you run it without arguments, it will listen for incoming mails\non localhost port 1025.\nYoy can bind it on different address and port, as in the following example::\n\n    $ ./utils/smtp_sinkhole.py 192.168.56.1 1025\n\nIf you want to save the dumped emails to disk, just use the *--dir* argument and\nspecify an existent directory where save them, as in the following example::\n\n    $ ./utils/smtp_sinkhole.py --dir /home/dumpmail\n\nYou have to use iptables to route all mails generated from your analysis virtual\nmachine network to the sinkhole script, for example if 192.168.56.0/24 is the\naddress of your virtual network and smtp_sinkhole.py is listening on\n192.168.56.1 port 1025 you can use the following command::\n\n    $ sudo iptables -t nat -A PREROUTING -i vboxnet0 -p tcp -m tcp --dport 25 -j REDIRECT --to-ports 1025\n\nSetup script\n============\n\nCuckoo setup script is a tool to setup a whole Cuckoo environment on a Debian\nbased OS (i.e. Ubuntu or Debian).\nActually it is a working in progress, but it is suggested to give it a try!\nIt is located in *utils/setup.sh* and it is configured by some constants, so\nyou should edit it if you want to customize the behaviour.\n"
  },
  {
    "path": "docs-old/book/src/usage/web.rst",
    "content": "=============\nWeb interface\n=============\n\nCuckoo provides a full-fledged web interface in the form of a Django application.\nThis interface will allow you to submit files, browse through the reports as well\nas search across all the analysis results.\n\nConfiguration\n=============\n\nThe web interface pulls data from a Mongo database, so having the Mongo reporting\nmodule enabled in ``reporting.conf`` is mandatory for this interface.\nIf that's not the case, the application won't start and it will raise an exception.\n\nThe interface can be configured by editing ``local_settings.py`` under ``web/web/``::\n\n    # If you want to customize your cuckoo path set it here.\n    # CUCKOO_PATH = \"/where/cuckoo/is/placed/\"\n\n    # Maximum upload size.\n    MAX_UPLOAD_SIZE = 26214400\n\n    # Override default secret key stored in secret_key.py\n    # Make this unique, and don't share it with anybody.\n    # SECRET_KEY = \"YOUR_RANDOM_KEY\"\n\n    # Language code for this installation. All choices can be found here:\n    # http://www.i18nguy.com/unicode/language-identifiers.html\n    LANGUAGE_CODE = \"en-us\"\n\n    ADMINS = (\n        # (\"Your Name\", \"your_email@example.com\"),\n    )\n\n    MANAGERS = ADMINS\n\n    # Allow verbose debug error message in case of application fault.\n    # It's strongly suggested to set it to False if you are serving the\n    # web application from a web server front-end (i.e. Apache).\n    DEBUG = True\n\n    # A list of strings representing the host/domain names that this Django site\n    # can serve.\n    # Values in this list can be fully qualified names (e.g. 'www.example.com').\n    # When DEBUG is True or when running tests, host validation is disabled; any\n    # host will be accepted. Thus it's usually only necessary to set it in production.\n    ALLOWED_HOSTS = [\"*\"]\n\nIn production deploys it is suggested to disable verbose error reporting setting\n``DEBUG`` to False, it could lead to an information disclosure vulnerability. It\nis also suggested to set at least one administrator email address in the\n``ADMIN`` variable to enable error notification by mail.\n\nIn some cases, if you are submitting large files, it is suggested to increase\nthe maximum file size limit editing ``MAX_UPLOAD_SIZE``.\n\nUsage\n=====\n\nIn order to start the web interface, you can simply run the following command\nfrom the ``web/`` directory::\n\n    $ python manage.py runserver\n\nIf you want to configure the web interface as listening for any IP on a\nspecified port, you can start it with the following command (replace PORT\nwith the desired port number)::\n\n    $ python manage.py runserver 0.0.0.0:PORT\n\nYou can serve Cuckoo's web interface using WSGI interface with common web servers:\nApache, Nginx, Unicorn and so on.\nPlease refer both to the documentation of the web server of your choice as well as `Django documentation`_.\n\n.. _`Django documentation`: https://docs.djangoproject.com/\n"
  },
  {
    "path": "examples/cuckooml.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# cuckooml #\\n\",\n    \"This Jupyter Notebook is intended to showcase possibilities of the current version of *CuckooML* -- Machine Learning for Cuckoo Sandbox.  \\n\",\n    \"Seat back and relax.\\n\",\n    \"\\n\",\n    \"(Caveat: the data -- JSON malware reports -- that you're using have to be generated with the new version of Cuckoo VirusTotal information extraction mechanism. If your samples are not labeled please use the code form section *labelling malware*)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"%load_ext autoreload\\n\",\n    \"%autoreload 2\\n\",\n    \"\\n\",\n    \"%matplotlib inline\\n\",\n    \"\\n\",\n    \"import sys\\n\",\n    \"sys.path.append(\\\"..\\\")\\n\",\n    \"\\n\",\n    \"from modules.processing.cuckooml import Instance\\n\",\n    \"from modules.processing.cuckooml import Loader\\n\",\n    \"from modules.processing.cuckooml import ML\\n\",\n    \"from pprint import pprint\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"If you don't have data for analysis you can get a small sample by executing the code below\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"get_data = True\\n\",\n    \"\\n\",\n    \"if get_data:\\n\",\n    \"    import os\\n\",\n    \"    import tarfile\\n\",\n    \"    import urllib\\n\",\n    \"\\n\",\n    \"    data_root = \\\"../sample_data/\\\"\\n\",\n    \"    if not os.path.exists(data_root):\\n\",\n    \"        os.makedirs(data_root)\\n\",\n    \"\\n\",\n    \"    data_filename = \\\"sample.tar.gz\\\"\\n\",\n    \"    urllib.urlretrieve(\\\"https://gist.github.com/So-Cool/8ca88add639b41d33b13228f18be6baa/raw/07ac42e555e9b49b13b6a3e71cea7502efd4bd88/sample.tar.gz\\\", data_root+data_filename)\\n\",\n    \"\\n\",\n    \"    tar = tarfile.open(data_root+data_filename, \\\"r:gz\\\")\\n\",\n    \"    tar.extractall(path=data_root+data_filename.split('.')[0]+\\\"/\\\")\\n\",\n    \"    tar.close()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"(if your data was not produced with one of the latest cuckoo versions there might be a hance that you're missing *data labels*; in this case you need to run labeling process independently; to do so please follow the guideline below.)  \\n\",\n    \"If you have just got the data from the above code cell you need to execute the code below.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Could not load file; <open file '../sample_data/sample/1', mode 'r' at 0x10dc08270> is not a valid JSON file.\\n\",\n      \"Exception: No JSON object could be decoded\\n\",\n      \"Moving on to the next file...\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"relabelled = True#False\\n\",\n    \"read_from = \\\"../sample_data/sample\\\"\\n\",\n    \"save_in = \\\"../sample_data/dict\\\"\\n\",\n    \"\\n\",\n    \"if relabelled:\\n\",\n    \"    import json\\n\",\n    \"    import os\\n\",\n    \"    import sys\\n\",\n    \"    from lib.cuckoo.common.virustotal import VirusTotalAPI\\n\",\n    \"    \\n\",\n    \"    if not os.path.exists(save_in):\\n\",\n    \"        os.makedirs(save_in)\\n\",\n    \"    vt = VirusTotalAPI(\\\"\\\", 0, 0)\\n\",\n    \"\\n\",\n    \"    for f in os.listdir(read_from):\\n\",\n    \"        with open(read_from+\\\"/\\\"+f, \\\"r\\\") as malware_report:\\n\",\n    \"            try:\\n\",\n    \"                report = json.load(malware_report)\\n\",\n    \"            except ValueError, error:\\n\",\n    \"                print >> sys.stderr, \\\"Could not load file;\\\", \\\\\\n\",\n    \"                    malware_report, \\\"is not a valid JSON file.\\\"\\n\",\n    \"                print >> sys.stderr, \\\"Exception: %s\\\" % str(error)\\n\",\n    \"                print >> sys.stderr, \\\"Moving on to the next file...\\\"\\n\",\n    \"                continue\\n\",\n    \"\\n\",\n    \"            if report[\\\"virustotal\\\"].get(\\\"scans\\\") is not None:\\n\",\n    \"                report[\\\"virustotal\\\"][\\\"normalized\\\"] = {\\n\",\n    \"                    \\\"cve\\\": \\\"\\\",\\n\",\n    \"                    \\\"platform\\\": \\\"\\\",\\n\",\n    \"                    \\\"metatype\\\": \\\"\\\",\\n\",\n    \"                    \\\"type\\\": \\\"\\\",\\n\",\n    \"                    \\\"family\\\": \\\"\\\"\\n\",\n    \"                }\\n\",\n    \"\\n\",\n    \"                norm_lower = {\\n\",\n    \"                    \\\"cve\\\": [],\\n\",\n    \"                    \\\"platform\\\": [],\\n\",\n    \"                    \\\"metatype\\\": [],\\n\",\n    \"                    \\\"type\\\": [],\\n\",\n    \"                    \\\"family\\\": [],\\n\",\n    \"                }\\n\",\n    \"\\n\",\n    \"                for vendor in report[\\\"virustotal\\\"][\\\"scans\\\"]:\\n\",\n    \"                    report[\\\"virustotal\\\"][\\\"scans\\\"][vendor][\\\"normalized\\\"] = \\\\\\n\",\n    \"                        vt.normalize(report[\\\"virustotal\\\"][\\\"scans\\\"][vendor][\\\"result\\\"])\\n\",\n    \"\\n\",\n    \"                    for label_type in report[\\\"virustotal\\\"][\\\"scans\\\"][vendor][\\\"normalized\\\"]:\\n\",\n    \"                        norm_lower[label_type] += \\\\\\n\",\n    \"                            report[\\\"virustotal\\\"][\\\"scans\\\"][vendor][\\\"normalized\\\"][label_type]\\n\",\n    \"\\n\",\n    \"                labeller = Instance()\\n\",\n    \"                for label_type in norm_lower:\\n\",\n    \"                    labeller.label_sample(norm_lower[label_type])\\n\",\n    \"                    report[\\\"virustotal\\\"][\\\"normalized\\\"][label_type] = labeller.label\\n\",\n    \"                \\n\",\n    \"            with open(save_in+\\\"/\\\"+f, \\\"w\\\") as malware_report_updated:\\n\",\n    \"                json.dump(report, malware_report_updated)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The first stage is to load the data from the directory holding all the JSONs\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"loader = Loader()\\n\",\n    \"loader.load_binaries(\\\"../sample_data/dict\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Then we extract all the relevant information from the loaded samples.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {\n    \"collapsed\": true\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"simple_features_dict = loader.get_simple_features()\\n\",\n    \"features_dict = loader.get_features()\\n\",\n    \"labels_dict = loader.get_labels()\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"All of these data are in Python `dictionary` format hence they are easy to manipulate and display.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'10': 'xe8tjzjo',\\n\",\n       \" '100': 'generickd',\\n\",\n       \" '101': 'fsysna',\\n\",\n       \" '102': 'fsysna',\\n\",\n       \" '103': 'none',\\n\",\n       \" '104': 'none',\\n\",\n       \" '105': 'generickd',\\n\",\n       \" '106': 'symmi',\\n\",\n       \" '107': 'potao',\\n\",\n       \" '108': 'kazy',\\n\",\n       \" '109': 'none',\\n\",\n       \" '11': 'kazy',\\n\",\n       \" '110': 'fsysna',\\n\",\n       \" '111': 'none',\\n\",\n       \" '112': 'poison',\\n\",\n       \" '113': 'none',\\n\",\n       \" '114': 'aa6mfpm',\\n\",\n       \" '115': 'generickd',\\n\",\n       \" '116': 'none',\\n\",\n       \" '117': 'none',\\n\",\n       \" '118': 'none',\\n\",\n       \" '119': 'none',\\n\",\n       \" '12': 'none',\\n\",\n       \" '120': 'symmi',\\n\",\n       \" '121': 'none',\\n\",\n       \" '122': 'zbot',\\n\",\n       \" '123': 'foreign',\\n\",\n       \" '124': 'potao',\\n\",\n       \" '125': 'zusy',\\n\",\n       \" '126': 'none',\\n\",\n       \" '127': 'none',\\n\",\n       \" '128': 'zusy',\\n\",\n       \" '129': 'graftor',\\n\",\n       \" '13': 'none',\\n\",\n       \" '130': 'generickd',\\n\",\n       \" '131': 'odef',\\n\",\n       \" '132': 'generickd',\\n\",\n       \" '133': 'none',\\n\",\n       \" '134': 'androm',\\n\",\n       \" '135': 'none',\\n\",\n       \" '136': 'kazy',\\n\",\n       \" '137': 'symmi',\\n\",\n       \" '138': 'neurevt',\\n\",\n       \" '139': 'generickd',\\n\",\n       \" '14': 'symmi',\\n\",\n       \" '140': 'none',\\n\",\n       \" '141': 'none',\\n\",\n       \" '142': 'none',\\n\",\n       \" '143': 'none',\\n\",\n       \" '144': 'zusy',\\n\",\n       \" '145': 'fsysna',\\n\",\n       \" '146': 'yakes',\\n\",\n       \" '147': 'none',\\n\",\n       \" '148': 'symmi',\\n\",\n       \" '149': 'none',\\n\",\n       \" '15': 'none',\\n\",\n       \" '150': 'generickd',\\n\",\n       \" '151': 'odef',\\n\",\n       \" '152': 'aeymcmjc',\\n\",\n       \" '153': 'generickd',\\n\",\n       \" '154': 'xtrat',\\n\",\n       \" '155': 'fsysna',\\n\",\n       \" '156': 'kazy',\\n\",\n       \" '157': 'strictor',\\n\",\n       \" '158': 'zusy',\\n\",\n       \" '159': 'kazy',\\n\",\n       \" '16': 'kazy',\\n\",\n       \" '160': 'fsysna',\\n\",\n       \" '161': 'none',\\n\",\n       \" '162': 'generickd',\\n\",\n       \" '163': 'none',\\n\",\n       \" '164': 'fsysna',\\n\",\n       \" '165': 'generickd',\\n\",\n       \" '166': 'rakhni',\\n\",\n       \" '167': 'zusy',\\n\",\n       \" '168': 'vehidis',\\n\",\n       \" '169': 'neurevt',\\n\",\n       \" '17': 'none',\\n\",\n       \" '170': 'generickd',\\n\",\n       \" '171': 'none',\\n\",\n       \" '172': 'ardamax',\\n\",\n       \" '173': 'kazy',\\n\",\n       \" '174': 'kovter',\\n\",\n       \" '175': 'none',\\n\",\n       \" '176': 'fsysna',\\n\",\n       \" '177': 'strictor',\\n\",\n       \" '178': 'none',\\n\",\n       \" '179': 'none',\\n\",\n       \" '18': 'yakes',\\n\",\n       \" '180': 'reconyc',\\n\",\n       \" '181': 'none',\\n\",\n       \" '182': 'kazy',\\n\",\n       \" '183': 'none',\\n\",\n       \" '184': 'none',\\n\",\n       \" '185': 'fsysna',\\n\",\n       \" '186': 'fsysna',\\n\",\n       \" '187': 'y56osqlif',\\n\",\n       \" '188': 'graftor',\\n\",\n       \" '189': 'kasidet',\\n\",\n       \" '19': 'none',\\n\",\n       \" '190': 'none',\\n\",\n       \" '191': 'neurevt',\\n\",\n       \" '192': 'none',\\n\",\n       \" '193': 'kazy',\\n\",\n       \" '194': 'generickd',\\n\",\n       \" '195': 'zusy',\\n\",\n       \" '196': 'symmi',\\n\",\n       \" '197': 'patc',\\n\",\n       \" '198': 'none',\\n\",\n       \" '199': 'none',\\n\",\n       \" '2': 'neurevt',\\n\",\n       \" '20': 'mikey',\\n\",\n       \" '200': 'kazy',\\n\",\n       \" '21': 'fsysna',\\n\",\n       \" '22': 'zusy',\\n\",\n       \" '23': 'fsysna',\\n\",\n       \" '24': 'graftor',\\n\",\n       \" '25': 'poison',\\n\",\n       \" '26': 'xtrat',\\n\",\n       \" '27': 'generickd',\\n\",\n       \" '28': 'zusy',\\n\",\n       \" '29': 'generickd',\\n\",\n       \" '3': 'none',\\n\",\n       \" '30': 'fsysna',\\n\",\n       \" '31': 'strictor',\\n\",\n       \" '32': 'zusy',\\n\",\n       \" '33': 'fsysna',\\n\",\n       \" '34': 'none',\\n\",\n       \" '35': 'fsysna',\\n\",\n       \" '36': 'zusy',\\n\",\n       \" '37': 'none',\\n\",\n       \" '38': 'neurevt',\\n\",\n       \" '39': 'generickd',\\n\",\n       \" '4': 'none',\\n\",\n       \" '40': 'none',\\n\",\n       \" '41': 'none',\\n\",\n       \" '42': 'avkiller',\\n\",\n       \" '43': 'generickd',\\n\",\n       \" '44': 'fsysna',\\n\",\n       \" '45': 'dapato',\\n\",\n       \" '46': 'selfdel',\\n\",\n       \" '47': 'upatre',\\n\",\n       \" '48': 'zbot',\\n\",\n       \" '49': 'cabby',\\n\",\n       \" '5': 'odef',\\n\",\n       \" '50': 'none',\\n\",\n       \" '51': 'none',\\n\",\n       \" '52': 'none',\\n\",\n       \" '53': 'androm',\\n\",\n       \" '54': 'none',\\n\",\n       \" '55': 'zusy',\\n\",\n       \" '56': 'none',\\n\",\n       \" '57': 'zbot',\\n\",\n       \" '58': 'kazy',\\n\",\n       \" '59': 'none',\\n\",\n       \" '6': 'odef',\\n\",\n       \" '60': 'mikey',\\n\",\n       \" '61': 'none',\\n\",\n       \" '62': 'symmi',\\n\",\n       \" '63': 'fsysna',\\n\",\n       \" '64': 'none',\\n\",\n       \" '65': 'taopap',\\n\",\n       \" '66': 'ware',\\n\",\n       \" '67': 'none',\\n\",\n       \" '68': 'zusy',\\n\",\n       \" '69': 'slugin',\\n\",\n       \" '7': 'none',\\n\",\n       \" '70': 'zbot',\\n\",\n       \" '71': 'xqrvh4ii',\\n\",\n       \" '72': 'ramnit',\\n\",\n       \" '73': 'none',\\n\",\n       \" '74': 'fsysna',\\n\",\n       \" '75': 'generickd',\\n\",\n       \" '76': 'dridex',\\n\",\n       \" '77': 'kazy',\\n\",\n       \" '78': 'zusy',\\n\",\n       \" '79': 'neurevt',\\n\",\n       \" '8': 'kazy',\\n\",\n       \" '80': 'lethic',\\n\",\n       \" '81': 'kazy',\\n\",\n       \" '82': 'vernet',\\n\",\n       \" '83': 'none',\\n\",\n       \" '84': 'none',\\n\",\n       \" '85': 'acqkhvck',\\n\",\n       \" '86': 'generickd',\\n\",\n       \" '87': 'none',\\n\",\n       \" '88': 'none',\\n\",\n       \" '89': 'none',\\n\",\n       \" '9': 'none',\\n\",\n       \" '90': 'arik',\\n\",\n       \" '91': 'none',\\n\",\n       \" '92': 'scarsi',\\n\",\n       \" '93': 'none',\\n\",\n       \" '94': 'none',\\n\",\n       \" '95': 'odef',\\n\",\n       \" '96': 'generickd',\\n\",\n       \" '97': 'strictor',\\n\",\n       \" '98': 'none',\\n\",\n       \" '99': 'graftor'}\"\n      ]\n     },\n     \"execution_count\": 6,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"labels_dict\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Now that all the needed information are at hand we create a *cuckooml* Machine Learning instance and inject therein all these information.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {\n    \"collapsed\": true\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"ml = ML(context=\\\"notebook\\\")\\n\",\n    \"\\n\",\n    \"ml.load_simple_features(simple_features_dict)\\n\",\n    \"ml.load_features(features_dict)\\n\",\n    \"ml.load_labels(labels_dict)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Once loaded into `ML` class the data is reformated into Pandas DataFrame object therefore it is easy to manipulate and use it with variety of machine learning algorithms.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>allocates_rwx</th>\\n\",\n       \"      <th>antidbg_windows</th>\\n\",\n       \"      <th>antisandbox_foregroundwindows</th>\\n\",\n       \"      <th>antisandbox_idletime</th>\\n\",\n       \"      <th>antisandbox_mouse_hook</th>\\n\",\n       \"      <th>antisandbox_productid</th>\\n\",\n       \"      <th>antisandbox_sleep</th>\\n\",\n       \"      <th>antisandbox_unhook</th>\\n\",\n       \"      <th>antivirus_virustotal</th>\\n\",\n       \"      <th>antivm_generic_bios</th>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <th>ransomware_bcdedit</th>\\n\",\n       \"      <th>ransomware_files</th>\\n\",\n       \"      <th>rat_xtreme</th>\\n\",\n       \"      <th>rat_xtreme_mutexes</th>\\n\",\n       \"      <th>recon_checkip</th>\\n\",\n       \"      <th>recon_fingerprint</th>\\n\",\n       \"      <th>sniffer_winpcap</th>\\n\",\n       \"      <th>suspicious_process</th>\\n\",\n       \"      <th>trojan_redosru</th>\\n\",\n       \"      <th>worm_renocide</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>10</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>100</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>101</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>102</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>103</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>104</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>105</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>106</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>107</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>108</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>109</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>11</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>110</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>111</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>112</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>113</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>114</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>115</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>116</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>117</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>118</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>119</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>12</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>120</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>121</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>122</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>123</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>124</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>125</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>126</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>...</th>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>72</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>73</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>74</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>75</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>76</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>77</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>78</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>79</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>8</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>80</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>81</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>82</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>83</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>84</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>85</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>86</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>87</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>88</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>89</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>9</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>90</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>91</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>92</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>93</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>94</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>95</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>96</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>97</th>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>98</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>99</th>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>1</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>...</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"      <td>0</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"<p>199 rows × 61 columns</p>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"     allocates_rwx  antidbg_windows  antisandbox_foregroundwindows  \\\\\\n\",\n       \"10               0                0                              0   \\n\",\n       \"100              0                0                              0   \\n\",\n       \"101              0                0                              0   \\n\",\n       \"102              0                0                              0   \\n\",\n       \"103              0                0                              0   \\n\",\n       \"104              1                0                              0   \\n\",\n       \"105              1                0                              0   \\n\",\n       \"106              1                0                              0   \\n\",\n       \"107              0                0                              0   \\n\",\n       \"108              0                0                              0   \\n\",\n       \"109              1                0                              0   \\n\",\n       \"11               1                1                              0   \\n\",\n       \"110              0                0                              0   \\n\",\n       \"111              1                0                              0   \\n\",\n       \"112              0                0                              0   \\n\",\n       \"113              0                0                              0   \\n\",\n       \"114              0                0                              0   \\n\",\n       \"115              1                0                              0   \\n\",\n       \"116              1                0                              0   \\n\",\n       \"117              1                0                              0   \\n\",\n       \"118              1                0                              0   \\n\",\n       \"119              1                0                              0   \\n\",\n       \"12               1                0                              0   \\n\",\n       \"120              1                0                              0   \\n\",\n       \"121              1                0                              0   \\n\",\n       \"122              0                0                              0   \\n\",\n       \"123              1                0                              0   \\n\",\n       \"124              0                0                              1   \\n\",\n       \"125              1                0                              0   \\n\",\n       \"126              0                0                              0   \\n\",\n       \"..             ...              ...                            ...   \\n\",\n       \"72               1                0                              0   \\n\",\n       \"73               0                0                              0   \\n\",\n       \"74               0                0                              0   \\n\",\n       \"75               1                0                              0   \\n\",\n       \"76               1                0                              0   \\n\",\n       \"77               0                0                              0   \\n\",\n       \"78               1                0                              0   \\n\",\n       \"79               1                0                              0   \\n\",\n       \"8                1                0                              0   \\n\",\n       \"80               1                0                              0   \\n\",\n       \"81               0                0                              0   \\n\",\n       \"82               0                0                              0   \\n\",\n       \"83               0                0                              0   \\n\",\n       \"84               1                0                              0   \\n\",\n       \"85               1                0                              0   \\n\",\n       \"86               1                0                              0   \\n\",\n       \"87               0                0                              0   \\n\",\n       \"88               1                0                              0   \\n\",\n       \"89               1                0                              0   \\n\",\n       \"9                1                0                              0   \\n\",\n       \"90               1                0                              0   \\n\",\n       \"91               0                0                              0   \\n\",\n       \"92               0                0                              0   \\n\",\n       \"93               1                0                              0   \\n\",\n       \"94               1                0                              0   \\n\",\n       \"95               1                0                              0   \\n\",\n       \"96               1                0                              0   \\n\",\n       \"97               1                0                              0   \\n\",\n       \"98               0                0                              0   \\n\",\n       \"99               0                0                              0   \\n\",\n       \"\\n\",\n       \"     antisandbox_idletime  antisandbox_mouse_hook  antisandbox_productid  \\\\\\n\",\n       \"10                      0                       0                      0   \\n\",\n       \"100                     0                       0                      0   \\n\",\n       \"101                     0                       0                      0   \\n\",\n       \"102                     0                       0                      0   \\n\",\n       \"103                     0                       0                      0   \\n\",\n       \"104                     0                       0                      0   \\n\",\n       \"105                     0                       0                      0   \\n\",\n       \"106                     0                       0                      1   \\n\",\n       \"107                     0                       0                      0   \\n\",\n       \"108                     0                       0                      0   \\n\",\n       \"109                     0                       0                      1   \\n\",\n       \"11                      0                       0                      0   \\n\",\n       \"110                     0                       0                      0   \\n\",\n       \"111                     0                       0                      0   \\n\",\n       \"112                     0                       0                      0   \\n\",\n       \"113                     0                       0                      0   \\n\",\n       \"114                     0                       0                      0   \\n\",\n       \"115                     0                       0                      1   \\n\",\n       \"116                     0                       0                      0   \\n\",\n       \"117                     0                       0                      0   \\n\",\n       \"118                     0                       0                      0   \\n\",\n       \"119                     0                       0                      0   \\n\",\n       \"12                      0                       0                      0   \\n\",\n       \"120                     0                       0                      0   \\n\",\n       \"121                     0                       0                      1   \\n\",\n       \"122                     0                       0                      0   \\n\",\n       \"123                     0                       0                      0   \\n\",\n       \"124                     0                       0                      0   \\n\",\n       \"125                     0                       0                      0   \\n\",\n       \"126                     0                       0                      0   \\n\",\n       \"..                    ...                     ...                    ...   \\n\",\n       \"72                      0                       0                      0   \\n\",\n       \"73                      0                       0                      0   \\n\",\n       \"74                      0                       0                      0   \\n\",\n       \"75                      0                       0                      0   \\n\",\n       \"76                      0                       0                      0   \\n\",\n       \"77                      0                       0                      0   \\n\",\n       \"78                      0                       0                      0   \\n\",\n       \"79                      0                       0                      1   \\n\",\n       \"8                       0                       0                      0   \\n\",\n       \"80                      0                       0                      0   \\n\",\n       \"81                      0                       0                      0   \\n\",\n       \"82                      0                       0                      0   \\n\",\n       \"83                      0                       0                      0   \\n\",\n       \"84                      0                       0                      1   \\n\",\n       \"85                      0                       0                      0   \\n\",\n       \"86                      0                       0                      0   \\n\",\n       \"87                      0                       0                      0   \\n\",\n       \"88                      0                       0                      0   \\n\",\n       \"89                      0                       0                      1   \\n\",\n       \"9                       0                       0                      1   \\n\",\n       \"90                      0                       0                      0   \\n\",\n       \"91                      0                       0                      0   \\n\",\n       \"92                      0                       0                      0   \\n\",\n       \"93                      0                       0                      0   \\n\",\n       \"94                      0                       0                      1   \\n\",\n       \"95                      0                       0                      0   \\n\",\n       \"96                      0                       0                      0   \\n\",\n       \"97                      0                       0                      0   \\n\",\n       \"98                      0                       0                      0   \\n\",\n       \"99                      0                       0                      0   \\n\",\n       \"\\n\",\n       \"     antisandbox_sleep  antisandbox_unhook  antivirus_virustotal  \\\\\\n\",\n       \"10                   1                   0                     1   \\n\",\n       \"100                  0                   0                     1   \\n\",\n       \"101                  0                   0                     1   \\n\",\n       \"102                  0                   0                     1   \\n\",\n       \"103                  0                   0                     1   \\n\",\n       \"104                  0                   0                     0   \\n\",\n       \"105                  1                   0                     1   \\n\",\n       \"106                  0                   0                     1   \\n\",\n       \"107                  0                   0                     1   \\n\",\n       \"108                  0                   0                     1   \\n\",\n       \"109                  0                   0                     1   \\n\",\n       \"11                   0                   0                     1   \\n\",\n       \"110                  1                   0                     1   \\n\",\n       \"111                  0                   0                     1   \\n\",\n       \"112                  0                   0                     1   \\n\",\n       \"113                  0                   0                     1   \\n\",\n       \"114                  0                   0                     1   \\n\",\n       \"115                  0                   0                     1   \\n\",\n       \"116                  0                   0                     1   \\n\",\n       \"117                  0                   0                     0   \\n\",\n       \"118                  0                   0                     1   \\n\",\n       \"119                  0                   0                     1   \\n\",\n       \"12                   0                   0                     0   \\n\",\n       \"120                  0                   0                     1   \\n\",\n       \"121                  0                   0                     0   \\n\",\n       \"122                  0                   0                     1   \\n\",\n       \"123                  0                   0                     1   \\n\",\n       \"124                  1                   0                     1   \\n\",\n       \"125                  0                   0                     1   \\n\",\n       \"126                  0                   0                     0   \\n\",\n       \"..                 ...                 ...                   ...   \\n\",\n       \"72                   0                   0                     1   \\n\",\n       \"73                   0                   0                     0   \\n\",\n       \"74                   0                   0                     1   \\n\",\n       \"75                   1                   0                     1   \\n\",\n       \"76                   0                   0                     1   \\n\",\n       \"77                   0                   0                     1   \\n\",\n       \"78                   0                   0                     1   \\n\",\n       \"79                   0                   0                     1   \\n\",\n       \"8                    0                   0                     1   \\n\",\n       \"80                   0                   0                     1   \\n\",\n       \"81                   0                   0                     1   \\n\",\n       \"82                   0                   0                     1   \\n\",\n       \"83                   0                   0                     1   \\n\",\n       \"84                   0                   0                     1   \\n\",\n       \"85                   0                   0                     1   \\n\",\n       \"86                   0                   1                     1   \\n\",\n       \"87                   0                   0                     0   \\n\",\n       \"88                   0                   0                     0   \\n\",\n       \"89                   0                   0                     0   \\n\",\n       \"9                    1                   0                     1   \\n\",\n       \"90                   0                   0                     1   \\n\",\n       \"91                   0                   0                     0   \\n\",\n       \"92                   0                   0                     1   \\n\",\n       \"93                   1                   0                     1   \\n\",\n       \"94                   0                   0                     1   \\n\",\n       \"95                   0                   0                     1   \\n\",\n       \"96                   0                   0                     1   \\n\",\n       \"97                   0                   0                     1   \\n\",\n       \"98                   0                   0                     0   \\n\",\n       \"99                   0                   0                     1   \\n\",\n       \"\\n\",\n       \"     antivm_generic_bios      ...        ransomware_bcdedit  ransomware_files  \\\\\\n\",\n       \"10                     0      ...                         0                 0   \\n\",\n       \"100                    0      ...                         0                 0   \\n\",\n       \"101                    0      ...                         0                 0   \\n\",\n       \"102                    0      ...                         0                 0   \\n\",\n       \"103                    0      ...                         0                 0   \\n\",\n       \"104                    0      ...                         0                 0   \\n\",\n       \"105                    0      ...                         1                 1   \\n\",\n       \"106                    0      ...                         0                 0   \\n\",\n       \"107                    0      ...                         0                 0   \\n\",\n       \"108                    0      ...                         0                 0   \\n\",\n       \"109                    0      ...                         0                 0   \\n\",\n       \"11                     0      ...                         0                 0   \\n\",\n       \"110                    0      ...                         0                 0   \\n\",\n       \"111                    0      ...                         0                 0   \\n\",\n       \"112                    0      ...                         0                 0   \\n\",\n       \"113                    0      ...                         0                 0   \\n\",\n       \"114                    0      ...                         0                 0   \\n\",\n       \"115                    0      ...                         0                 0   \\n\",\n       \"116                    0      ...                         0                 0   \\n\",\n       \"117                    0      ...                         0                 0   \\n\",\n       \"118                    0      ...                         0                 0   \\n\",\n       \"119                    0      ...                         0                 0   \\n\",\n       \"12                     0      ...                         0                 0   \\n\",\n       \"120                    0      ...                         0                 0   \\n\",\n       \"121                    0      ...                         0                 0   \\n\",\n       \"122                    0      ...                         0                 0   \\n\",\n       \"123                    0      ...                         0                 0   \\n\",\n       \"124                    0      ...                         0                 0   \\n\",\n       \"125                    0      ...                         0                 0   \\n\",\n       \"126                    0      ...                         0                 0   \\n\",\n       \"..                   ...      ...                       ...               ...   \\n\",\n       \"72                     0      ...                         0                 0   \\n\",\n       \"73                     0      ...                         0                 0   \\n\",\n       \"74                     0      ...                         0                 0   \\n\",\n       \"75                     0      ...                         1                 1   \\n\",\n       \"76                     0      ...                         0                 0   \\n\",\n       \"77                     0      ...                         0                 0   \\n\",\n       \"78                     0      ...                         0                 0   \\n\",\n       \"79                     0      ...                         0                 0   \\n\",\n       \"8                      0      ...                         0                 0   \\n\",\n       \"80                     0      ...                         0                 0   \\n\",\n       \"81                     0      ...                         0                 0   \\n\",\n       \"82                     0      ...                         0                 0   \\n\",\n       \"83                     0      ...                         0                 0   \\n\",\n       \"84                     0      ...                         0                 0   \\n\",\n       \"85                     0      ...                         0                 0   \\n\",\n       \"86                     1      ...                         0                 0   \\n\",\n       \"87                     0      ...                         0                 0   \\n\",\n       \"88                     0      ...                         0                 0   \\n\",\n       \"89                     0      ...                         0                 0   \\n\",\n       \"9                      0      ...                         0                 0   \\n\",\n       \"90                     0      ...                         0                 0   \\n\",\n       \"91                     0      ...                         0                 0   \\n\",\n       \"92                     0      ...                         0                 0   \\n\",\n       \"93                     0      ...                         1                 1   \\n\",\n       \"94                     0      ...                         0                 0   \\n\",\n       \"95                     0      ...                         0                 0   \\n\",\n       \"96                     0      ...                         0                 0   \\n\",\n       \"97                     0      ...                         0                 0   \\n\",\n       \"98                     0      ...                         0                 0   \\n\",\n       \"99                     0      ...                         0                 0   \\n\",\n       \"\\n\",\n       \"     rat_xtreme  rat_xtreme_mutexes  recon_checkip  recon_fingerprint  \\\\\\n\",\n       \"10            0                   0              0                  0   \\n\",\n       \"100           0                   0              0                  0   \\n\",\n       \"101           0                   0              0                  0   \\n\",\n       \"102           0                   0              0                  0   \\n\",\n       \"103           0                   0              0                  0   \\n\",\n       \"104           0                   0              0                  0   \\n\",\n       \"105           0                   0              1                  0   \\n\",\n       \"106           0                   0              0                  1   \\n\",\n       \"107           0                   0              0                  0   \\n\",\n       \"108           0                   0              0                  0   \\n\",\n       \"109           0                   0              0                  1   \\n\",\n       \"11            1                   1              0                  0   \\n\",\n       \"110           0                   0              0                  0   \\n\",\n       \"111           0                   0              0                  0   \\n\",\n       \"112           0                   0              0                  0   \\n\",\n       \"113           0                   0              0                  0   \\n\",\n       \"114           0                   0              0                  0   \\n\",\n       \"115           0                   0              0                  0   \\n\",\n       \"116           0                   0              0                  0   \\n\",\n       \"117           0                   0              0                  0   \\n\",\n       \"118           0                   0              0                  0   \\n\",\n       \"119           0                   0              0                  0   \\n\",\n       \"12            0                   0              0                  0   \\n\",\n       \"120           0                   0              0                  0   \\n\",\n       \"121           0                   0              0                  1   \\n\",\n       \"122           0                   0              0                  0   \\n\",\n       \"123           0                   0              0                  0   \\n\",\n       \"124           0                   0              0                  0   \\n\",\n       \"125           0                   0              0                  0   \\n\",\n       \"126           0                   0              0                  0   \\n\",\n       \"..          ...                 ...            ...                ...   \\n\",\n       \"72            0                   0              0                  0   \\n\",\n       \"73            0                   0              0                  0   \\n\",\n       \"74            0                   0              0                  0   \\n\",\n       \"75            0                   0              1                  0   \\n\",\n       \"76            0                   0              0                  1   \\n\",\n       \"77            0                   0              0                  0   \\n\",\n       \"78            0                   0              0                  0   \\n\",\n       \"79            0                   0              0                  0   \\n\",\n       \"8             0                   0              0                  0   \\n\",\n       \"80            0                   0              0                  0   \\n\",\n       \"81            0                   0              0                  0   \\n\",\n       \"82            0                   0              0                  0   \\n\",\n       \"83            0                   0              0                  0   \\n\",\n       \"84            0                   0              0                  1   \\n\",\n       \"85            0                   0              0                  0   \\n\",\n       \"86            0                   0              0                  1   \\n\",\n       \"87            0                   0              0                  0   \\n\",\n       \"88            0                   0              0                  0   \\n\",\n       \"89            0                   0              0                  0   \\n\",\n       \"9             0                   0              0                  1   \\n\",\n       \"90            0                   0              0                  0   \\n\",\n       \"91            0                   0              0                  0   \\n\",\n       \"92            0                   0              0                  0   \\n\",\n       \"93            0                   0              1                  0   \\n\",\n       \"94            0                   0              0                  1   \\n\",\n       \"95            0                   0              0                  0   \\n\",\n       \"96            0                   0              0                  0   \\n\",\n       \"97            0                   0              0                  0   \\n\",\n       \"98            0                   0              0                  0   \\n\",\n       \"99            0                   0              0                  0   \\n\",\n       \"\\n\",\n       \"     sniffer_winpcap  suspicious_process  trojan_redosru  worm_renocide  \\n\",\n       \"10                 0                   1               0              0  \\n\",\n       \"100                0                   0               0              0  \\n\",\n       \"101                0                   0               0              0  \\n\",\n       \"102                0                   0               0              0  \\n\",\n       \"103                0                   0               0              0  \\n\",\n       \"104                0                   0               0              0  \\n\",\n       \"105                0                   1               1              0  \\n\",\n       \"106                0                   0               0              0  \\n\",\n       \"107                0                   0               0              0  \\n\",\n       \"108                0                   0               0              0  \\n\",\n       \"109                0                   0               0              0  \\n\",\n       \"11                 0                   0               0              0  \\n\",\n       \"110                0                   1               0              0  \\n\",\n       \"111                0                   0               0              0  \\n\",\n       \"112                0                   0               0              0  \\n\",\n       \"113                0                   0               0              0  \\n\",\n       \"114                0                   0               0              0  \\n\",\n       \"115                0                   0               0              0  \\n\",\n       \"116                0                   0               0              0  \\n\",\n       \"117                0                   0               0              0  \\n\",\n       \"118                0                   0               0              0  \\n\",\n       \"119                0                   0               0              0  \\n\",\n       \"12                 0                   0               0              0  \\n\",\n       \"120                0                   1               0              0  \\n\",\n       \"121                0                   0               0              0  \\n\",\n       \"122                0                   0               0              0  \\n\",\n       \"123                0                   0               0              0  \\n\",\n       \"124                0                   0               0              0  \\n\",\n       \"125                0                   0               0              0  \\n\",\n       \"126                0                   1               0              0  \\n\",\n       \"..               ...                 ...             ...            ...  \\n\",\n       \"72                 0                   0               0              0  \\n\",\n       \"73                 0                   0               0              0  \\n\",\n       \"74                 0                   1               0              0  \\n\",\n       \"75                 0                   1               1              0  \\n\",\n       \"76                 0                   0               0              0  \\n\",\n       \"77                 0                   0               0              0  \\n\",\n       \"78                 0                   0               0              0  \\n\",\n       \"79                 0                   0               0              0  \\n\",\n       \"8                  0                   0               0              0  \\n\",\n       \"80                 0                   1               0              0  \\n\",\n       \"81                 0                   0               0              0  \\n\",\n       \"82                 0                   0               0              0  \\n\",\n       \"83                 0                   0               0              0  \\n\",\n       \"84                 0                   0               0              0  \\n\",\n       \"85                 0                   0               0              0  \\n\",\n       \"86                 0                   0               0              0  \\n\",\n       \"87                 0                   0               0              0  \\n\",\n       \"88                 0                   0               0              0  \\n\",\n       \"89                 0                   0               0              0  \\n\",\n       \"9                  0                   0               0              0  \\n\",\n       \"90                 0                   0               0              0  \\n\",\n       \"91                 0                   0               0              0  \\n\",\n       \"92                 0                   0               0              0  \\n\",\n       \"93                 0                   1               1              0  \\n\",\n       \"94                 0                   0               0              0  \\n\",\n       \"95                 0                   0               0              0  \\n\",\n       \"96                 0                   0               0              0  \\n\",\n       \"97                 0                   0               0              0  \\n\",\n       \"98                 0                   0               0              0  \\n\",\n       \"99                 0                   0               0              0  \\n\",\n       \"\\n\",\n       \"[199 rows x 61 columns]\"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"simple_features = ml.simple_features\\n\",\n    \"features = ml.features\\n\",\n    \"labels = ml.labels\\n\",\n    \"\\n\",\n    \"simple_features\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The full set of features can be divided into two major components:\\n\",\n    \"* count features: quantified behaviour e.g. number of internet connections opened;\\n\",\n    \"* binary features: discretised begaviour e.g. all the hosts that the binary connected with.\\n\",\n    \"\\n\",\n    \"The first one can be used for abnormal behaviour detection while the latter for malware clustering.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"features_nominal = ml.feature_category(\\\":count:\\\", complement=True)\\n\",\n    \"features_numerical = ml.feature_category(\\\":count:\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"As you can see all the data is high-dimmensional hence difficult to visalise. On the other hand without 2D visualisation machine learning feels somehow incomplete.  \\n\",\n    \"We use *t-Distributed Stochastic Neighbour Embedding* to give you some feeling of the data.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/usr/local/lib/python2.7/site-packages/matplotlib/collections.py:571: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\\n\",\n      \"  if self._edgecolors == str('face'):\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n/Rc4Gs3LM2JzbAAAAABJRU5ErkJggg==\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x10890be90>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"ml.visualise_data(data=simple_features, labels=ml.labels, learning_rate=350)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\nrFmzcHZ2xsvLi7i4OFasWMG8efPo06cP48ePL+tLLDcSVEIIYQMZZ3dz5Je5pd5XO6ArIS0GlGn/\\nv//+O3FxcXTt2pU//viDDz74gIsXL9KnTx++//57OnfuzKpVq/D19WXZsmWcP3+ekSNH0q5dO3bs\\n2FGm5y5vco1K3FPS0tJ44403KvQ5Vq5cyZo1azh79ixhYWF3tM327dt59tlnefrpp+nZs2eJP+gL\\nFizgiSeeoEuXLsyd+9dfTJcuXeKll16iW7dudO/encTERAAKCgp4+eWXS22qFv8cRuPt2tNv/vqP\\nu5GUlMSECROYNWsWnp6etG7dGihuVnd3dyc3Nxd3d3d8fX2B4ub0U6dOlek5K5IElbinnDt3jjNn\\nzlTY/tPT0/n666/p06fPHW+Tl5fH8OHDmT59Ol9//TVTpkzh7bffpqCggISEBDZv3sy6dev45ptv\\n2Lt3L99++y0AEydOpE2bNmzcuJEZM2bw5ptvotPpcHNzo1u3bnz88ccV9TKFHajuc+v29Oo1W1q9\\n3/T0dIYNG8YHH3xgaUo/ePAgABkZGRQVFVG9enXy8/PJysoCYN++fQQEBAB3f02rMkhQiUqxdu1a\\nIiIi6NGjBwMHDuTChQvs3buX7t27Wx5z/c9JSUk899xz9OzZk549e7Jy5UrMZjPjxo0jNTWVl156\\nCYCtW7fyzDPP0KNHD/r168dvv/0GwJw5c3j33Xd57rnneOyxx3j77bdZu3Ytzz//PI8++igbN24s\\ndc5PP/2Up5566qbb58yZw+DBg+nRowcjRowgMzOTp59+mqysLIxGIzExMQQFBQEQFBRUXDaak8P3\\n339P9+7dqVKlCk5OTvTs2ZP169djMplISEigd+/eADRu3Jj69evz888/A/DEE0+wYcMGLl68WE7/\\nB4S9cXGrSb2G3W+63atGM3z9rW9PnzRpEjqdjokTJxIVFcWcOXO4fPkyAwcOJDo6mtjYWABiY2OJ\\njo4mMjKSPXv28PrrrwPFv39HjBhh9fNXCFWICnb06FH1oYceUi9cuKCqqqouWbJEHT9+vLp37141\\nIiLC8rg9e/ZYfh49erT66aefqqqqqllZWeqwYcNUs9lcYptTp06p4eHhalpamqqqqrp79241PDxc\\nzcvLU2fPnq0+9thjal5enlpUVKS2adNGnTp1qqqqqrp161a1S5cuN81pNpvVhx56SE1PT1dVVVXT\\n0tLU0NBQVVVVdfbs2eoTTzyhmkymv329M2fOVHv16qWqqqoOHjxY3bhxo+W+nTt3qs8884yalZWl\\n3nfffSVURHHCAAAgAElEQVS2Gz58uLps2TLLz2+88Yb63//+92+fT9y7zGazmnXhV/WPA3PV3/bO\\nVNOTf1CNRp2tx7I7sjxdVLjdu3fzyCOPULNmTQAGDhwIFB9B3UqXLl0YOXIkv//+O23btmXs2LEo\\nilLitMSePXto27YtderUAeChhx7C29ubw4cPoygK4eHhuLu7A+Dr60v79u0BqFu3LpcvX77pOXNy\\ncsjLy6NWrVqlztSyZUs0mlufhDAajUydOpXt27ezdOlSoPTTKBqNBrPZXOo+tFqt5df16tWr0NOc\\nwvYURaFGzTBq1Lyza6H/VnLqT1Q4B4eS/x7S6/WcOXPmpuAxGAyWXz/66KNs3ryZJ554gqNHj9K9\\ne3fLV1xf78YgMJvNGI1GABwdHW87x400Gs1tz8+7urre8r7Lly8zePBgTp06xZo1a/Dz8wPA39+f\\nzMxMy+MyMjLw9/e3fP33lStXStx3bTsAk8l022AU4t9C/hSICvfggw+ya9cuy4XblStXMn36dLy9\\nvTl37hyXLl1CVVW2bt1q2eadd95h06ZNPPnkk4wfPx53d3cuXLiAVqu1BNqDDz7Izp07LQG2e/du\\nMjIyaNmypVUXhL28vPDw8ODs2bN3tZ1er+fFF1+kbt26LFq0CE9PT8t9jz/+OBs2bODq1avo9XrW\\nrVvH448/jlar5dFHH+Wrr74C4NixYyQlJdGmTRvLtmlpaZbrXkL8m8mpP1HhQkJCGDFihGUBhK+v\\nL3Fxcfj4+NC3b1+effZZfHx8ePTRRy3bvP7664wbN47Vq1ej1Wrp3LkzrVu35sqVK2i1Wvr06cOa\\nNWuYMGEC0dHRmEwmXFxcmD9/Pu7u7n/7hW63uq9Lly5s376dyMjIEo+7cX8ZGRkMGTKEzz77jD17\\n9nD48GEMBgPPPvus5TEzZsygY8eOnDhxgt69e2MwGHj88cd5+umnAZgwYQJjx461LCCZMWOG5VSl\\nXq/n4MGDTJky5W7fbiH+ceQDv0Jc5+zZs7zxxhvEx8fbdI74+HiSkpJ49913bTqHEPag0oPKYDAw\\nZswYzp07h16v57XXXiMoKIhRo0ah0Who2LAhEyZMqJSvNxaiNMuXL8fR0ZHnnnvOJs+fn5/Pm2++\\nybx586hSpYpNZhDCnlR6UMXHx3P8+HFGjx7N5cuXeeqpp2jSpAkvvvgirVu3ZsKECTzyyCN06tSp\\nMscSQgibMJl0XMw+gsmkw9u7KU7OHmXcn4lBgwZhNBr57LPPqFq16l3vIzo6mjlz5pRpjvJU6deo\\n/vOf/9C1a1egeIWWg4MDR44csVR8tG/fnp07d0pQCSH+8S5ePMrBX+ag1xd/XEKjcaJxk0jqB1jf\\nnp6RkUFBQUGZTl/bU0iBDYLq2hLfa6c33nrrLaZNm1bi/ry8vMoeSwghKpXRWETigY8xXNfrZzbr\\nOfzHUjyrBeLlZV17+oQJE0hJSWH8+PFkZmaSn5+P0Wjkrbfe4qGHHiIiIoKAgACcnJyYOHEiY8aM\\nITc3F4Bx48YREhJCeHg4O3fu5LfffmPSpEm4ubnh7e2Ns7MzQ4cOZdiwYfj7+5OamkqLFi2IiYkp\\nj7fklmyyPP38+fMMHDiQp59+moiIiBKfFSkoKMDD4/aHvrL+Qwhxr8vMSCwRUtcoCpw7u8vq/cbE\\nxBAcHIybmxvh4eGsWLGCWbNmMXbsWAAKCwv5v//7P2bOnMn8+fNp27Yty5YtY9KkSZbAubZGYMKE\\nCUybNo2lS5dSt25dy3MkJycTFxfH2rVr+fnnnyu86qvSj6iys7N58cUXmTBhAg899BAATZo0Yd++\\nfbRp04aff/6Ztm3b3nYfiqKQlWX/R10+PlVlznJ0r8wJ986sMmf58vG58+tBt2tPLy3A7tS1f8if\\nPn2aHj16AFCzZk3c3d0tgXKtgPbEiRPs3bvX8v1V138AHSArK8vyWb5WrVpZHle/fn3L2TEfH58K\\nb/qv9KBasGABeXl5zJs3j3nz5gEwduxYJk+ejMFgICgoiP/85z+VPZYQQlSqGjWag6qAcvMZIh8f\\n69vTrwkKCuLAgQM0adKEjIwM8vLy8PLyAv46YgoKCqJ58+ZERESQkZHBN998U2Iffn5+JCUlERQU\\nZGlgv377ylLpQTVu3DjGjRt30+3Lly+v7FGEEMJmXN1qEhjcndNJ60vcXt27GTXL0J4OxUEyZMgQ\\nxowZw+bNmykqKmLSpElotdoSIfPqq68yduxYVq9eTUFBAdHR0SX2M2HCBMaMGYOrqyuOjo6Wiq/K\\nDqp79gO/98ppAJmz/Nwrc8K9M6vMWb7u5tQfFJ+my8o8yLn0XZhMOnx9w6hVJxyt1qmCJrw7X375\\nJU888QTVq1fn448/xsnJyfJ1IJVJKpSEEMJGFEXBt2YYvnbanl6jRg0GDx6Mq6srVatWLbFCuzJJ\\nUAkhhChV165dLZ97tSVpTxdCCGHXJKiEEELYNQkqIYQQdk2CSgghhF2TxRRCCGFDJpOOrItHMJp0\\n+FRvinMZ29P/iSSohBDCRrIvHmVf4hx017WnN28cSVAD69vT/4nk1J8QQtiA0VjEnl8/toQUFLen\\nHzq8lJzcU1bvd9WqVURFRREVFUX79u1p3LgxM2fOBECn0/HYY48BxR/m7dOnD8899xyxsbGoqkqX\\nLl0sfX8rV67k888/L8MrLD8SVEIIYQMXMm/dnp6abn17emRkJMuXL2fEiBHUqlWL0aNHl/q4devW\\nMX78eL766iuCgoIwm810797d0ve3YcMGevbsafUc5UmCSgghbMBQQe3pAElJSUyYMIHZs2eX+Nqk\\n6xvzpkyZwpdffklUVBTnzp1DVVWeffZZ1q9fz8mTJ6lRowbVq1cv0xzlRa5RCSGEDfh6NwcU4Oa6\\n1ZplaE9PT09n2LBhfPTRR/j6+uLk5ERWVhYAhw8ftjxuzZo1TJw4EScnJwYPHszBgwdp1aoVVatW\\nZcGCBfTq1cvqGcqbBJUQQtiAm1tNQoK6c+KG9nQf72bU8rO+PX3SpEnodDomTpyI2WzG3d2d/Px8\\n+vXrR7Nmzahatbg4NyQkhH79+uHm5oafnx8tWrQAoE+fPsTGxvLBBx9Y/+LKmQSVEELYSNOQPnhX\\nCyHtXHF7up9PGHVrh6PVWv9X86effnpHj+vduze9e/e+6XaTyUSvXr0q/as8bkeCSgghbERRFPx8\\nw/DztY/29A8//JB9+/bdcdhVFgkqIYQQAAwbNszWI5RKVv0JIYSwaxJUQggh7JoElRBCCLsmQSWE\\nEMKuSVAJIYQNGU06zmYmknJ+D0X6Kzab49ChQ3Tp0oWPPvqIAwcOcPz4cZvNciNZ9SeEEDZy4dJR\\ndh6cQ5GhuJhWqzgR1iiSRvUrvz19+/btDBw4kP79+zNq1Ci6detGo0aNKn2O0khQCSGEDRiMRWxP\\n/Bi98a9eP5Oq58DRpXh7BVLDM9iq/RYVFTFixAiysrLw9/dn3759BAQE4O3tzZUrV5g9ezZjx44l\\nPz+fzMxMS2NFfHw8jo6O6PV6duzYwdGjRwkODmb//v0sW7YMJycn6tevz/vvv8/69ev573//i6qq\\nREdH07Zt2/J6W0olQSWEEDaQnpVYIqQsFEhO32V1UK1evZp69eoxe/ZsTp8+TUREBIGBgURERNCp\\nUyeOHDlCREQEnTt3JiMjgwEDBrB582Z69uyJj48Pffv25cSJE3Tr1o0qVaowd+5cvv76a1xdXZky\\nZQqrV6/G1dUVT09PPvnkkzK+C3dGgkoIIWzgdu3ppQbYHTp9+jSPPPIIAIGBgVSrVg2AgIAAALy9\\nvVm6dClbtmzB3d0do9Fo2fb6dnVVVTl79izBwcG4uroC0Lp1a3bs2EHLli0t+6sMsphCCCFswM+7\\nOail9+nVqmF9e3pISAgHDx4EIDU1ldzcXFRVtXT3ffHFF4SGhjJjxgy6du1qCafrQ0pRFMxmM7Vr\\n1yYpKYmrV68CsHfvXktAaTSVFx8SVEIIYQNVXWvSLLD7Tbf7VW9G3ZrWt6f36tWL9PR0nn/+eebO\\nnYuTkxOKoliCqmPHjqxcuZLBgwfz448/4ubmhl6vL/GYli1bMnPmTHJycoiOjmbAgAH07duXy5cv\\nExkZCVCppbWKen2M3kOysvJsPcLf8vGpKnOWo3tlTrh3ZpU5y5ePT9W7eryqqqRnHyTl3C6MJh21\\nfcJoUCscB62T1TMkJiZSWFhIeHg4ycnJvPLKK2zZssXq/dkDuUYlhBA2oigKdXzCqONTfu3pdevW\\nZdiwYcydOxej0cj48ePLbd+2IkElhBD/IDVq1GDZsmW2HqNcyTUqIYQQdk2CSgghhF2ToBJCCGHX\\nbBZUhw4dIioqCoAjR47Qvn17oqKiiIqKYtOmTbYaSwghhJ2xyWKKhQsXsn79etzc3AA4fPgwL7zw\\nAi+88IItxhFCCJsxmnSkXzpSvDy9elOqOHlU6PN99913nDp1iqFDh5Z6f1paGi+//DJhYWFMmTKl\\nQme5UzYJqvr16zN37lxGjBgBwB9//EFycjLbtm2jfv36jBkzxhJiQgjxT3Xu0lG2/T6Hq/o/29M1\\nTjzUMJJm9Sq/Pf2aX375hY4dOzJy5EibzXAjmwRVly5dOHv2rOXnli1b0rdvX5o2bcqCBQuYO3eu\\nXb1JQghR3gzGIr4/9DG669vTzXp2HluKj2cgvlaW0hoMBkaPHs3Zs2cxm80MGjQIPz8/4uLi8PDw\\nwMnJiebNmwOwfPlyNm7cCEC3bt3o1KkTCxYsQKfTUa9ePUsLha3ZxeeoOnfuTNWqxZ/o7tSpE7Gx\\nsTaeSAghKlZKdmKJkLJQ4OT5XVYH1erVq6lRowYffPABBQUFPPPMMzg5OTF37lwaNGjARx99BMCp\\nU6f49ttvWbVqFWazmRdffJF27doxZMgQzpw5YzchBXYSVC+99BJjx46lRYsW7N6925L2t3O3VSW2\\nInOWr3tlTrh3ZpU5bUN/u/Z0Q9na0x9++GEA3NzcCAoK4scff6RBgwYAtGrVikOHDnHy5EnOnTvH\\ngAEDAMjLyyMlJQUoWVBrD2waVNdKDSdOnMjEiRNxcHDA19eXSZMm/e2290rvl8xZfu6VOeHemVXm\\nLF93E6Z1qjcHFODmUKhbhvb0oKAgDhw4QKdOncjPz+fkyZPUqVOHkydP0rBhQw4ePIiiKAQEBBAc\\nHMznn38OFLeqN2rUiD179lj93BXFZkFVp04dvvrqKwAaN27MqlWrbDWKEEJUOg/XmoQ26M7B5PUl\\nbq9VrRkBvta3p/fp04f33nuPfv36UVRUxNChQ2nYsCFjx47F1dUVLy8vgoODady4MW3btiUyMhKd\\nTkdoaCg1a9YEKrcZ/U5Ie3oFupf+FShzlq97ZVaZs3xZ056emn2QpAvF7en1aoQR7F+29vR/Iru4\\nRiWEEP9GiqJQ3yeM+uXYnv5PJEElRCVJSvmFxJQjqMD99ZsSVP8BW48kxD1BgkqISvDf7SvYdrU6\\nCt6owLYTF3jk1CyefbAXVdxr23o8IeyalNIKUcGSUn75M6TArKiYleLLwj+bg9m7K47sFOm2FOJ2\\nJKiEqGCJKUcsi5CvX7mkAKfMvmSeXkdRfrpthhPiHiBBJUQlUZXSF9gqikJeVmIlTyPEvUOCSogK\\nFla/aSkf6Sw+umqozazscYSdMZh0nMpO5FjGHgr0V2w2x6uvvkp6un0e2ctiCiEqWFD9B3g8dQVb\\nr1aHP4+qVOAh0z58qhhQVZWqsjz5Xyk15ygb/phDoaG4Pd1B40T74EgeqGOb9nR7+6DvNRJUQlSC\\nZx95nrCUX9l9agdF+ks0dMiyhJRv4DO46GqgPXYRAFOAO6q3s40nFhVNZyzif79/TNF1xbRGs54f\\nji+llkcg/h7WldLm5+czbtw48vLyyMzMJDIykm+//ZYmTZpw8uRJ8vPzmTVrFrVq1WL27Nn89NNP\\n+Pr6cv78eVRVZc6cOSQmJlJYWMjkyZNJSEhg06ZNODg40KpVK4YPH86cOXNITU0lJyeH3Nxc+vfv\\nz+bNm0lOTmbatGm0bGl9BVRpJKiEqCQ1a9SkvRKIocgLR3MgVZyrUdXnftyPu+C4MRWKrqBczQUV\\nDC0dMXRvb+uRRQU6fTGxREhZKHDkwi6rgyo1NZVu3brRuXNnMjMzef7556lZsyYtW7ZkzJgxfPTR\\nR3zzzTeEh4ezd+9e4uPj0el0REREFD+9ohAcHMyYMWM4fvw43333HatXr0ar1RIdHc1PP/2Eoii4\\nuLgwY8YMPvvsMxISEliwYAHx8fFs3LhRgkqIe9HZtI2kJX9tObWiqip1GzyDr64GjntTUXJSUQxF\\nlsc7HShCyRmNfoB9fMOqKH+627SnF5WhPd3b25ulS5eyZcsW3N3dMRqNADRp0gQAf39/srOzOXPm\\nDM2aNQPA2dmZ++67z7KPgIAAoLiJvWXLlmi1WgAeeOABTp48CUDTpk0B8PDwIDg42PJrnU5n9ey3\\nIosphKhgBQXpJUIKiv/Vmpa8DtOxs8VHUteFVPEDQJuuojmypZKnFZWlfrVr7ek3C/C2/ojkiy++\\nIDQ0lBkzZtC1a9dbPi44OJjffvsNs9mMXq/nyJEjlvuu/V4NCgrit99+w2QyoaoqBw4csITYNZVR\\nFytHVEJUsEsXE0u9SK0oCvn5abhfNd1iSwWHQ+vQN7Xd15KLilPNtSYP1u/O3pSS7en1qjWjURna\\n0zt27EhsbCxbt24lODgYV1dXDAbDTb8HGzduzGOPPUavXr3w9vamWrVqlvuuPTYkJIQnnniCyMhI\\nzGYzrVq1olOnThw7dszymBv3WxELMqQ9vQLdS43PMmf5un7WtNRvSE9dX+rjGnj0JHC9I4rxryMq\\no+KIXnHldI2D+FbLwC3y/UqZ057dS3PeDVVVOX3xIEczitvTA73DaOon7ek3kiMqISpYde8wzqb8\\n76Z/aaqqikfQfRhaJuF0oAgUuKr1pEDx5Gh1LaeqdcHs4U+LZGjawCajiwqmKApBNcIIqiEfT7gd\\nCSohKpibW23qNniGQ6cTSDMXn9+vqzlDy8AOuLrVxtC9NkrOaIrOe3LIvQcX3DTkOWvA0QXFxYPf\\nkqBWDRUvdxu/ECFsRIJKiEpwVPMo3zvej8lUvNLrmNYVZ40Hdf68Xz9gCkd3Hubk+eJTR6qrF1Tx\\nAEBR4GwWElTiX0uCSogKdr7QyLdphWi1jmi1npbbN6UV0qyaE/6uxX8M1VrNUHX22QwghC3J8nQh\\nKtjvl/S3XPX3+yW95efaPlDa0iZVhTo+FTmhEPZNgkoIO1HNHVoEqSXCSlWLb5PTfuLfTE79CVEB\\n0vLzSDiXigr4uXihqmqpq/7uq15yGXLTBsULJ85mFf9cx0euTf3T6U06TuUeQW/SEezVFHcnD1uP\\nZJUTJ05w5coVWrVqVe77lqASopxtOZ/G5sw0TCYzAKqaQpBHIMlXnEtUKD1Z19Vyfep6Xu4STv8W\\nSblHWXFkDnnXtadHBEbSrva99yHvzZs34+PjI0ElhL07V1jAxnPJODr+9UdLURSSrp5mcEhLLhQ6\\noAItqjuVGlLi30NnLGLp4Y8pvKE9/etTS6lXNZB6VpbSxsfHk5CQgE6nIzU1lZdffpmmTZsyefJk\\nVFWlWrVqxMXFcfjwYVavXs2HH34IQLt27dixYwejRo0iNzeXy5cv8+mnn7Jw4UJ++eUXzGYzgwYN\\nok2bNjz//PNs2rQJgEmTJhEWFsa6detwdHSkWbNmJXoDy4P8SakgmpRfKPxxG446A6a6D6CYjYCK\\nuc79qNVq23o8UUF+z714y4UT54ty6Vqnng2mEvboyKXEEiF1vV8zdlkdVFD8VR+LFi0iJSWFIUOG\\n4OnpSVxcHEFBQaxdu5aFCxcSHh5e6raKotC2bVsGDhxIQkIC6enprFy5Ep1OR9++fQkPD6dRo0Yc\\nOHCAFi1asG/fPsaNG0dKSgo+Pj7lHlIgQVUhHDdPRXviB8waDVqTEe2x71Gd3MGrFvy2HmPoM5ia\\nPWnrMYUQNlR0m/b0WwXYnVAUxdKU7ufnh16vJykpiZiYGACMRiMNGjS4abvr2/SuFc+eOHGCw4cP\\nExUVBYDJZCI9PZ0+ffqwbt06srKyePzxx9FoNDftozxJUJUzTcovaE/8UPwpTVUFswlQUPT5qEX5\\nUMUdh4PrMNcqbkfWnE1EjrT+Oe7z8mbT+ZSbbldVlRbVvG0wkbBXDS3t6Tf/5d6ketm+z+nGo/rA\\nwECmT5+Ov78/+/fvJzc3F2dnZ7KyilftpKenc/ny5Zu2DwoK4sEHH2TSpEkYjUYWLFhAvXr1aNy4\\nMTNmzCAjI4MJEyZYtjGbzWWa+1YkqMqZ9ujm4pACUK//n6ZA0RWo4g6KgsPeZWgunv7rsXKk9Y9Q\\ny9WNiFoN+C4zzXKbqqpE1GqAv4ubDScT9qaGS00eq9udH9JKFhYHezXjPh/r29OBm75SJiYmhhEj\\nRmAymVAUhbi4OOrUqUPVqlXp06cPQUFB1KlT56btH3vsMfbt20f//v0pLCykc+fOuLq6AtC1a1d2\\n795N3bp1AWjevDnTp08nODiYNm3alGn+m16PtKeXL8fv4tCeSgBAUc2oJqPlPtXJrfj0n1EP+kJw\\n9Sq5saqifzKm0o+s7qVm6nthToAiF4WEpBRUoGU1b7sNqXvlPb2X5rwbqqpy9NJBEjN3YTDpaOId\\nxv2+4ThKe3oJckRVzkxNuqI9+VPxkZJy/eepVUt3G7qC4iOrGykKmrOJmOQU4D2vrrs7XWvJwglx\\ne4qi0NQ7jKbe0p5+OxJU5cxc/wFMjR5He3wbaDSg0YLZWLyYooo7qCrmevejuXjmjvanSfml+HQi\\nKqYm/8Fc/4GKfQFCCGFnJKgqgKHLSEyNO+OStBW9zoCpXmsUk55riyYAnDbF/HV96hpVxVznr39Z\\nOW6eivbYVq5dbNUe/xFTk84YuoysnBcihBB2QIKqgpjr3Y/rAx0o+PO8upKTjuZsIpqzv2Kucz/G\\n0GdwOLjuuoUXKsbQZyzXp4qPpLYAZopXBgGoaI9sxtS4M+Z691f6axJCCFuQoCqDa+Hzd8vLtX9s\\nxOHQ1zet8NM/GXPL7bUH4ykZUvz5azPaxHgJKiHEv4YElZVuFT7mWi3RnvgRJSeVojpBaKoGl3wc\\nFC9PP7gOfa2WmO6LKHX/SuElSobUX4szlUup5f+ChBDCTtnsaz4OHTpk+bRzSkoKkZGR9O/fn5iY\\nmAr7dHN5UXLSSw+f3UtwWhONw/7laE8lYPxpMY4bJxR/fuqmnSh/Hk2Vzuzf/LqfSr4fmstpOG6Z\\nVsZXIYSwBzqTnsSLh9mTlcgVvfWNFHcrKiqK06dPV9rzlYVNjqgWLlzI+vXrcXMr/mzJlClTGDZs\\nGK1bt2bChAls27aNTp062WK0O6I5m3jzQgiTAeVqbnEThfbPt1VRUPSFYNKjOrmC1vGOn8PU8mkc\\njn4HulI+O6JxQHt8m1yrEuIedzT3FHOPLeWyofjPuaPiSGRAd7rUbl8pz19aL6U9sskRVf369Zk7\\nd67lyOnIkSO0bt0agPbt27Nr1y5bjHXHlMJcuHq5+D+TofhGfeENTRR/0miLw0t/Q6/XDSv8bqRW\\nq42h/Wvg4HLDk2uLl70rCtoj35XxlQghbKXIqGPW0cWWkAIwqAaWJcVzKu/mGq479c4775CQUFw6\\nkJSURFRUFG+99RaDBw+me/furFq1yvJYVVX54YcfGDBgAHl5eRw/fpwBAwYQFRXFG2+8QX5+Ppcu\\nXbLc1rdvX44dO2b9i7aSTY6ounTpwtmzZy0/X3+qz9XVlbw8+/0EuvaPjWiPfY9SmFN8VHU1F9Xl\\nz4YJVb3hQ76ARoOqcebGr229foXfrZiaPYnm1C60ybuLb1A0xSElhLjnJV46TH5pxbQK7Mo4QHDV\\n+lbtt0+fPqxatYoOHTqwdu1aHn/8cWrXrk3nzp3JyMhgwIABREZGAvD999+zb98+PvvsM6pUqcJ7\\n773HlClTSrSs33///VSrVo3p06dz6tQpCgtvXaZbUexiMYXmur98CwoK8PD4+2+4vNuqkvJgyk6l\\n6PAGFBdXzObqUFAcVkrRZajqA27VQFfyHLMCKB4+OHUfATnpgIo2sDVa77p39Jz6Dv3Qp+0v9TNX\\nrm2fwamc3gdbvJ/WuFfmhHtnVpnTNgpNV295X8FtmtX/Tps2bYiNjeXSpUvs2rWL+fPnM2vWLLZs\\n2YK7uztG41+1brt376agoACtVgvA6dOnb2pZb9++PcnJybz++us4ODjw2muvWT2btewiqJo0acK+\\nffto06YNP//8M23btv3bbWzR+6X9fScOf35rK84eoK1iOaVnbNQF3L1x2L2kOLj4czF5FU+MYb25\\n6tkExexRXJG0Zz1GrQZcPdH434/G6zZHVl5NcQx5rLjp4rrPXJkaPc5VzyZQDu/DvdSjdi/MCffO\\nrDJn+bqbMG3u1QhFBbWUy0QtqjexegZFUejRowexsbGEh4ezbNkyQkNDiYyMZM+ePZbTggATJkzg\\nf//7H7Nnz+add94hICCAGTNm4OfnZ2lZ37t3Lz4+PixatIjExEQ+/PBDli1bZvV81rBpUF27kDdq\\n1Cjee+89DAYDQUFB/Oc//7HlWHfOwan4PwDXapiaPVlieXqVOkHk126HWq22ZTm7znAZvTG3+LW7\\neGE4uh5ts2dwaHTr1vRrTRfF16RUTE2fkEUUQtzjarrUIKJuJzac3Vri9maeITxYI7RM++7Zsycd\\nOnRgw4YNZGZmEhsby9atWwkODsbNzQ29Xm957P/93//Ru3dvOnbsSExMDO+++26JlnVPT0+GDRvG\\nqlWrMJlMDB06tEyzWUPa0++CkpN+y+qjG1vPz184zons3ygqMtDSqx719y7FZDZQqDuHoigUaE1k\\n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\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12b1e1590>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"ml.visualise_data(data=features_nominal, labels=ml.labels)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"As we gathered numerical features in separate dataset it might be worth looking into them. One approach is to seek for *abnormal behaviour* based on distinctively large number of operations of given type.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAdwAAAFtCAYAAACtNdslAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd8FGUeP/DPzGxv6YWQEEoIhA4iwUiNgIqocP6swHF4\\n/rCXs5zlfnreiR6eiv08vaLeKWIBC5ZTFBWkilTpJUBCSN/N9jbz/P7YZJLZ3QQ2ZZPg9/16+cKZ\\nzDzzPJvNfneeeZ7vwzHGGAghhBDSqfiurgAhhBDyS0ABlxBCCIkDCriEEEJIHFDAJYQQQuKAAi4h\\nhBASBxRwCSGEkDiggPsLEAgEMGHCBNxwww3yvs2bN+Piiy/uwlqd3vz58/Hll19G3f/555/HVNbK\\nlStx0003dUi9Kisrcc0113RIWWdi1qxZ2LJlS6vHOBwO/PrXv27Xda6//nrYbDYAwKJFi3DkyJF2\\nldfo1KlTmDVrFmbPno2dO3d2SJnx8v7772PZsmWnPW737t0oLi4GACxfvhyvvfZaZ1eN9ECqrq4A\\n6XyrV6/G4MGDsXfvXhw5cgQDBgzo6iqdMY7juroKETIyMrB8+fK4XY/juNO+DvX19di9e3e7rrNh\\nwwY0TsvvyICxefNmpKWl4fXXX++wMuPlp59+Qn5+fkznxPPLGOlZKOD+ArzzzjuYNWsWcnNz8eab\\nb+LPf/4zAMDj8eDOO+/E8ePHYTab8dhjj6Fv37544IEHYDKZcPDgQVRUVKB///5YunQpDAYDtm7d\\niqeeegoejwdqtRp33XUXJk6ciJUrV+KDDz6A1+uFyWTCnDlz8OWXX8Ln8+HkyZPo1asX5s6di7fe\\negvHjh3DwoULsXDhQrjdbjz66KM4fvw4bDYbjEYjnnnmGfTr16/VNn3zzTf417/+Ba/Xi0svvVS+\\ne922bRueeeYZeDwecByH22+/HVOmTAEAVFVV4cYbb0R5eTlUKhWefvppDBgwADt27MDTTz8Nv9+P\\n6upqFBUV4fHHH8fSpUvhcrnw8MMPAwDWrl2Ll156Cc8++yxmzZqF7du3IxAIYMmSJdi0aRN4nsfI\\nkSPx4IMPwmg0ori4GC+88AKGDRsGACguLsaLL76IhIQEzJ07F3l5eSgrK8Pbb7+N1NRUuW2HDx/G\\nQw89BK/Xi379+sHlcsk/a6l9Dz74IHw+H+bMmYMVK1agpKQETzzxBKxWKyRJwvz583HFFVcAAD74\\n4AO88cYb4HkeSUlJePLJJ/H8888DABYsWIDXXnsN1113HV588UUMHToU7777Lt566y3wPI/U1FQ8\\n/PDDp32fNNq0aROef/55OBwOLFiwAG+++War5dlsNpSVlWHq1Km45557FL/zRYsW4dprr8XUqVNR\\nUlKCRx55BFarFRzH4eabb8bMmTNx6NAh/PnPf0Z9fT04jsPChQsxe/ZsbN68GYsXL8aqVasAQLH9\\n4osv4uTJk6iurkZ5eTmSk5Px7LPPYufOnfj222+xYcMG6HQ6TJs2DYsWLcI//vEPpKWlYdmyZXjz\\nzTdhNpsxcOBAuZ4vvvgibDYbHn74YRQXF+PSSy/Fd999B5vNhttvvx3btm3Dnj17oFKp8MorryA9\\nPR3FxcWYNm0afvrpJzgcDixcuBDXXnvtGf6Fkx6DkbPaoUOH2PDhw1l9fT3btWsXGzlyJLNarWzT\\npk2soKCAbd++nTHG2LvvvsuuvPJKxhhj999/P7v22muZ3+9ngUCAzZkzh61YsYLV1dWxoqIitnPn\\nTrnswsJCVlpaylasWMHGjRvHnE4nY4yxFStWsLFjx7KKigomSRK75JJL2J133skYY2zfvn1sxIgR\\njDHG/ve//7HFixfL9X3kkUfYY489xhhjbN68eezLL7+MaNO8efPYTTfdxERRZA6Hg1188cXs+++/\\nZzabjc2YMYOdPHmSMcZYRUUFmzx5MisvL2crVqxg5557Ljtx4gRjjLHFixezhx56iDHG2N133822\\nbNnCGGPM6XSy8ePHsz179rATJ06w8ePHs0AgwBhj7M4772Tvv/8+Ky0tZaNGjWKMMfb888+z22+/\\nnQWDQSZJEnvwwQfZI488whhjbOrUqeznn3+W6924XVpaygYNGsS2bt0a9Xd2+eWXsw8++IAxxtiO\\nHTtYQUEB27JlS6vtKysrk+sUCATYzJkz2Z49exhjjNntdnbxxRezHTt2sH379rHx48eziooKxhhj\\nb7zxBvvjH//IGGNs0KBBzGq1Kuq6YcMGNn36dFZXV8cYY2zlypVs5syZrb5Pwq1cuZLdeOONjDF2\\n2vIWLlwY9TUJN3v2bLZs2TLGGGOnTp1i06dPZw6Hg11wwQVs9erVjDHGKisr2aRJk9j27dvZpk2b\\n2KxZs+Tzm2+/8MILbNq0afJ796abbmIvvPACY4yxBx54gP373/+OuP7evXtZUVERq6mpYYwx9qc/\\n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\\n4xe/+IVhGIbx85//3Pjmm28MwzCMsWPHGp999lm4m44Z7733njFjxgzDMAwjPz/fmDBhgsUVRd/r\\nr79uzJ8/3zAMwzhx4oQxcOBAY/z48cbHH39sGIZhPPzww8b7779vZYlRVVlZadxzzz3G9ddfb3z5\\n5ZfG3XfffcGMfePGjcbdd99tGIZhlJSUGEuWLLmgnvuPPvrImDp1qmEYhrF+/Xpj0qRJTX78K1eu\\nNIYNG2aMGjXKMAyj3td7UVGRMWzYMKOystLw+XzGsGHDjIqKCivLbjBnjv/WW281duzYYRiGYbz0\\n0kvGggULjOLi4rDHH/Yh5TFjxmjUqFGSpOrqasXFxcnv96uqqkrZ2dmSpH79+mnDhg1hv6OIFZs3\\nb1b//v0lSd27d9f27dstrij6Bg8erClTpkiqfcfvdDr12WefqWfPnpKkAQMGNOnnfOHChfrVr36l\\n9PR0Sbqgxr5+/Xrl5OTonnvu0fjx4zVo0CAVFhZeMOOPj4+Xz+eTYRjy+XxyuVxNfvzt27fX73//\\nexnfzotU3+t927Zt8nq9crlc8ng8at++vXbu3Gll2Q3mzPEvXrxYnTt3lvRd7m3dujXs8X9v4L76\\n6qsaPnx4yJ89e/YoLi5OxcXFmj59uqZNmya/3y+PxxO8X1JSknw+X6RjbrTOHK/D4VAgELCwouhL\\nTExUUlKS/H6/pk6dqnvvvTdkzImJiU32OX/jjTfUokUL9evXT5JkGEbwP6LUtMcuSceOHdP27du1\\ndOlSPfroo5o2bdoFNX6v16vKykoNHjxYDz/8sG677bYmP/7rrrtODocjuHz6eOt+v/v9fiUnJ4es\\n9/v9ptYZLWeOv+6N9ubNm7V69WqNGTPmvMb/vd/hjhw5UiNHjjxr/c6dOzVt2jT99re/VY8ePeT3\\n+1VSUhK83e/3KyUl5ceNLAZ5PJ6Q8QYCAdntTf/8s4MHD2rSpEkaPXq0hg0bpkWLFgVvKykpabLP\\n+RtvvCGbzaYNGzbo888/14wZM3T8+PHg7U157JKUmpqqDh06yOl06qKLLlJcXJyKioqCtzf18a9a\\ntUper1f33XefDh06pNtvv13V1dXB25v6+CWF/H6r+/1+5u/Bpv44vPPOO1qxYoVWrlyp1NTU8xp/\\n2Cmxe/duTZ06VU8++WTwsKrH45HL5dLevXtlGIbWr1+vHj16hLvpmOH1erV27VpJUn5+vnJyciyu\\nKPqOHDmiO++8Uw888IBuuOEGSdLFF1+sjz/+WJK0du3aJvucv/jii8rNzVVubq46d+6sxx9/XP36\\n9bsgxi5Jl19+udatWydJOnz4sMrLy9W7d+8LZvxlZWVKSkqSJKWkpKi6ulpdunS5YMYv1f9/vVu3\\nbvr0009VWVkpn8+nL7/8Uh07drS40uh48803tXr1auXm5iorK0uSzmv8YZ+lvHjxYlVVVWnu3LmS\\nal+Ay5cv16OPPqr7779fNTU16tevn7p163Yew4oN1157rdavX6+bb75ZkrRgwQKLK4q+FStWyOfz\\nafny5Vq+fLkkadasWZo3b56qqqrUoUMHDR482OIqzWGz2TRjxgw99NBDF8TYr7rqKn3yySe68cYb\\nFQgENHv2bGVmZl4w47/rrrv04IMP6pZbblF1dbWmTZumrl27XhDjrzvzur7Xu81m0+23365bbrlF\\ngUBAv/nNb+R2uy2uuGHZbDYFAgHNnz9fGRkZwatvevXqpUmTJoU9froFAQBggqb/xSMAAI0AgQsA\\ngAkIXAAATEDgAgBgAgIXAAATELgAAJiAwAViiM/n08SJE3/w5/72t7/pwQcflCSNGzdOxcXF0S4N\\nwA8Ie+ILANY5efKkduzYEdZ9Vq5cGaVqAISDwAUawIgRI/SHP/xB6enpev755/XSSy/J4XDo6quv\\n1v33368jR45o1qxZOnjwoJxOp+677z71799fy5Ytk81mC85gM2jQIOXm5mrTpk1at26dTp06pb17\\n96pv376aPXu25s6dq6KiIk2ePFnLli3TuHHjNHXqVHXt2lV5eXl6+umnlZiYqPbt2ysuLu6sbX74\\n4YcqKirS4cOHdccdd+jAgQPauHGjmjdvrlWrVgW33aZNG+3du1cZGRlatGiRmjVrZuXDCzQJHFIG\\nGsBf/vIXpaena+vWrfrzn/+s1157TXl5eSosLFRhYaHmzJmjPn36KC8vT0uWLNHMmTN19OjRepuW\\n163Lz8/XsmXLlJeXpzVr1uiLL77QQw89pFatWmnZsmWSaj+9du3aVYcPH9bChQuVm5urV199VeXl\\n5fVuc/v27Xr22We1evVqPfbYYxo4cKDy8vIkKThf8ueff66xY8fqrbfeUocOHYL7AhAZAhdoQJ98\\n8okGDRokj8cjh8Oh5557Tl27dtWmTZt04403SpKys7PVvXt3FRQU1LuNutlWL7vsMiUmJio+Pl7Z\\n2dk6efKkzjUT65YtW+T1epWWlia73R5sMFHfNpOSkpSRkSFJ6tOnjyQpMzNTPp9PNptNnTp1ktfr\\nlVT7yX3Tpk0RPioAJA4pAw3K5XKFhGJRUZHi4+PPCkrDMFRTUxP8d53T277VHRI+/T7nYrfbQ/oT\\nn6td5JmTq9f3c6f3AQ0EAiHLAM4fn3CBBtSjRw+tXbtWpaWlwc4yhYWF6tWrl1577TVJ0t69e7V5\\n82ZddtllSk1N1e7duyVJW7duVXFxcb2Hmes4nc5gUJ/O6/UqPz9fhw4dkmEYevvtt8Ou3TAMGYah\\nXbt2adeuXZKk119/XQMHDgx7WwDORuACDWDEiBEqLi5Wly5dNHr0aI0aNUojRoxQz5491adPH/3u\\nd7/Txo0bNXz4cE2cOFHz5s1TWlqahg4dqhMnTmjo0KF68cUX1aVLFxmGcc7QTUtLU9u2bXXHHXdI\\nqr3kp7CwUGlpaXrkkUd055136pe//OVZn2RtNttZ26xv2WazqUWLFlq8eLGGDh2q48ePa8KECQ34\\nSAEXLtrzAQjat2+fxo4dq3fffdfqUoAmh0+4AEJ83yFtAOePT7gAAJiAT7gAAJiAwAUAwAQELgAA\\nJiBwAQAwAYELAIAJCFwAAEzw/yYr5YkXcb3vAAAAAElFTkSuQmCC\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x114b0bdd0>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:dimp\\n\",\n      \"Outliers:  \\n\",\n      \"Suspected outliers:  \\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12acdb590>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:dns\\n\",\n      \"Outliers:  105, 131, 146, 154, 170, 189, 192, 26, 27, 29, 43, 62, 75, 93, 95\\n\",\n      \"Suspected outliers:  117, 14, 151, 18, 46, 5\\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAeUAAAFtCAYAAAA503LXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd8FGX+B/DPzGxNI4EkdBFCR0AQAaUoHKIUacopTawI\\nNiyowJ2IHiAqeIfgeWLDA+kgp6dSLD/gREBEqkgTJIUQICF168zz+yNmyLABImRnFvi8Xy9fMk9m\\nZ787u8lnZ+aZ55GEEAJERERkOdnqAoiIiKgYQ5mIiChCMJSJiIgiBEOZiIgoQjCUiYiIIgRDmYiI\\nKEIwlK8wgUAAHTt2xIMPPqi3bdq0CT169LCwqvMbNmwYVq1aVWb7F1988Ye2tXz5cowcObJC6jp2\\n7BjuvvvuCtlWefTu3RubN28+5zr5+fm45557Lup57r//fpw6dQoAMGLECBw8ePCitlfi6NGj6N27\\nN/r164ft27dXyDbNsmTJEsyfP7/Mn7399tvo0qULxo0bh7/+9a/4/vvvkZaWhlatWlXY85f8DlT0\\ndimy2KwugMy1Zs0aNG7cGD///DMOHjyIlJQUq0sqN0mSrC4hRNWqVbFw4ULTnk+SpPPuh9zcXOzc\\nufOinmfDhg0oGcJg9uzZF7Wt0jZt2oSkpCR8+OGHFbZNs/z4449o2LBhmT9btmwZpk+fjtatW+tt\\naWlpFV5DJP4OUMViKF9hFixYgN69e6NOnTr46KOP8PLLLwMAPB4PRo8ejd9++w2xsbH429/+hquv\\nvhpjx45FTEwM9u3bh8zMTNSrVw9vvPEGoqKisGXLFrz++uvweDyw2+148skn0alTJyxfvhxLly6F\\n1+tFTEwM+vfvj1WrVsHn8yE9PR3Vq1fHkCFDMG/ePBw+fBj33Xcf7rvvPhQVFWHixIn47bffcOrU\\nKURHR2P69OmoW7fuOV/T119/jffffx9erxe33367fhS8detWTJ8+HR6PB5Ik4fHHH8fNN98MAMjK\\nysLDDz+MjIwM2Gw2TJs2DSkpKdi2bRumTZsGv9+P48eP48Ybb8TkyZPxxhtvoLCwEC+88AIAYN26\\ndZg1axb+/ve/o3fv3vjpp58QCAQwdepUbNy4EbIso2XLlhg3bhyio6PRtWtXvPnmm7jmmmsAAF27\\ndsXMmTNRqVIlDBkyBPXr10daWho+/vhjJCYm6q/twIEDGD9+PLxeL+rWrYvCwkL9Z2d7fePGjYPP\\n50P//v2xbNkyHDp0CFOmTEFOTg40TcOwYcNwxx13AACWLl2KOXPmQJZlJCQk4NVXX8WMGTMAAMOH\\nD8fs2bMxePBgzJw5E82aNcOiRYswb948yLKMxMREvPDCC+f9nJTYuHEjZsyYgfz8fAwfPhwfffTR\\nObd36tQppKWloUuXLnjmmWcM7/mIESMwaNAgdOnSBYcOHcKECROQk5MDSZIwatQo9OzZE/v378fL\\nL7+M3NxcSJKE++67D/369cOmTZswadIkfPbZZwBgWJ45cybS09Nx/PhxZGRkoHLlyvj73/+O7du3\\n49tvv8WGDRvgcrnQrVs3jBgxArNnz8aUKVOQmZmJ8ePH44knnsCCBQswdOhQNGvWzFDz22+/jTVr\\n1kDTNNSsWRMvvvgikpOT8fXXX2PRokWYPXv2Bf8O0GVE0BVj//79onnz5iI3N1fs2LFDtGzZUuTk\\n5IiNGzeKJk2aiJ9++kkIIcSiRYvEwIEDhRBCPP/882LQoEHC7/eLQCAg+vfvL5YtWyays7PFjTfe\\nKLZv365vu127diI1NVUsW7ZMtG3bVhQUFAghhFi2bJlo06aNyMzMFJqmiV69eonRo0cLIYTYs2eP\\naNGihRBCiJUrV4pJkybp9U6YMEH87W9/E0IIMXToULFq1aqQ1zR06FAxcuRIoaqqyM/PFz169BBr\\n164Vp06dEt27dxfp6elCCCEyMzPFTTfdJDIyMsSyZcvE9ddfL44cOSKEEGLSpEli/PjxQgghnn76\\nabF582YhhBAFBQWiffv2Yvfu3eLIkSOiffv2IhAICCGEGD16tFiyZIlITU0V1157rRBCiBkzZojH\\nH39cBINBoWmaGDdunJgwYYIQQoguXbqIXbt26XWXLKempopGjRqJLVu2lPme9e3bVyxdulQIIcS2\\nbdtEkyZNxObNm8/5+tLS0vSaAoGA6Nmzp9i9e7cQQoi8vDzRo0cPsW3bNrFnzx7Rvn17kZmZKYQQ\\nYs6cOeLFF18UQgjRqFEjkZOTY6h1w4YN4pZbbhHZ2dlCCCGWL18uevbsec7PyZmWL18uHn74YSGE\\nOO/27rvvvjL3yZn69esn5s+fL4QQ4ujRo+KWW24R+fn54k9/+pNYs2aNEEKIY8eOic6dO4uffvpJ\\nbNy4UfTu3Vt/fOnlN998U3Tr1k3/7I4cOVK8+eabQgghxo4dKz744IMyayj9/pZ8Vkt/Nj755BPx\\n1FNPiWAwKIQQYuHCheKhhx4K2U55fgdKb5cuPzxSvoIsWLAAN998M+Li4tC8eXPUqlULixYtQqtW\\nrdCoUSNce+21AIB+/fph4sSJKCgogCRJ6NSpE+x2OwCgYcOGyM3NxY4dO3DVVVehRYsWAID69euj\\ndevW2Lx5MyRJQsOGDREdHa0/d/PmzVG1alUAQK1atdChQwcAQO3ateHz+eDxeHDrrbeiVq1amDt3\\nLn777Tds3ry5XNfOBg4cCFmWERMTg1tvvVU/9XrixAk88sgj+nqyLGPfvn2QJAnNmzdH7dq1AQBN\\nmjTB6tWrAQBTp07F2rVr8c477+DgwYPwer0oKipC06ZN0bhxY3z99ddo3749Nm7ciFdeeQUnT57U\\nt79+/Xo8/fTTUBQFQPE1wEcfffS89dtstjJfZ05ODvbt24d+/foBAFq2bInGjRsDALZt23bW11f6\\nksThw4eRmpqK8ePH621+vx979uyB1+tFp06d9Pdl+PDhZ61RCIH169ejZ8+eSEhIAAD0798fkydP\\nRlpa2lk/J2Vtp8T5tlf6VPDZnDp1Cnv37sXAgQMBANWqVcPq1atx4MAB+P1+dOvWDQCQnJyM7t27\\nY/369WjXrt05t9muXTv9s9u0aVPD6xAXOCrxt99+i507d+pnKFRVhc/nC1nvQn8H6PLBUL5CFBUV\\nYcWKFXC73ejatSsAoLCwEB9//DGaN28OWTb2+ZMkCTZb8cfD6XQa2oUQZf5x0jQNqqrCZrMZAhkA\\nHA6HYblk26XNnz8fS5YswdChQ9GnTx/Ex8cjPT39vK+tdO2apsFms0HTNKSkpGDx4sX6z44dO4Yq\\nVarg008/1cPjTIMHD0aTJk3QuXNn9OjRAzt27NBf68CBA7FixQqcOHEC3bt3h9vtDnn9pfeLqqoI\\nBAIATu+3EiXtAGC320P2f8ljSrZbEvQl/z/X68vMzDTUEBcXhxUrVuhtx48fR1xcnOGxQHFYZ2Rk\\n4Oqrry5z35T1vgshEAwGAZT9OTmX822v9Knvsyn5HJW+1nr48GGoqhqyrqZpCAaD53wvynodpV3o\\nNV0hBEaMGKF3CvT7/XpHutIu9HeALh/sfX2F+Oyzz1ClShWsX78e33zzDb755ht89dVXKCoqwokT\\nJ7B3717s2bMHALBo0SJcd911cLlcZf5hlSQJLVu2xKFDh7Bjxw4AwP79+7Flyxa0bdv2go4mhBD4\\n7rvv0L9/f9xxxx24+uqr8c0330DTtPM+tiRwcnNzsXLlStx0001o2bIlfvvtN/zwww8AgF9++QW3\\n3XYbjh8/ftbt5OXlYffu3RgzZgy6deuGzMxMHDlyRP8D361bN+zatQtLlizRj8xK69ixIxYuXIhg\\nMAhN0/Dxxx+jY8eOAIDKlSvrna+2bdt2zjpKxMfHo1mzZliyZAkAYM+ePfp7dK7XV/KlBADq1q0L\\nh8OBTz/9FEBx7+e+ffvi559/Rrt27bBhwwa9lvnz5+O1114DUBz+pcOq5Ej4yy+/RHZ2NoDizk0J\\nCQmoU6fOBb3nFbG9mJgYNGvWDMuXL9df3913341KlSrBbrdjzZo1AIq/sKxevRodOnRAQkICMjIy\\nkJ2dDSEEvvrqq7Nuv/QXhzP3yR/RsWNHLF68GAUFBQCAWbNmYezYsSHrXejvAF0+eKR8hVi4cCHu\\nvfdewzf92NhYDBs2DP/+97+RkpKCWbNmITU1FUlJSXj11VcBnL23b0JCAmbMmIFJkybB4/FAlmVM\\nnToVderUwdatWw3rlvX40m0lz3H//fdjwoQJWLFiBRISEtCtWzesW7fuvK8tLi4OAwYMgNfrxbBh\\nw3D99dcDAN588028/vrr8Pl80DQNr7/+OqpXr37Wo5+4uDiMGDEC/fv3R3JyMurXr4/OnTvjyJEj\\naN++PRwOB3r16oXvv/8ezZs3D3n8I488gldffRX9+vVDMBhEy5Yt9Y5hY8aMwcSJE7Fo0SI0a9ZM\\n7/B1tv1T4o033sC4ceOwYMEC1KlTRz81Xbly5bO+Pk3T0LRpU/Ts2RMLFizAP//5T0yePBnvvfce\\ngsEgRo8erZ8Sfe655/Tb45KTkzFlyhQAwC233IIhQ4bgrbfe0mu58cYbMXz4cAwfPhxCCFSuXBnv\\nvPOO/v6V56iydNsf3V5ppTt6TZ8+HS+99BLmzZsHSZIwefJkVKtWDW+99RYmT56MmTNnQlVVPPbY\\nY2jbti0A4K677sIdd9yBpKQkvfNfSX1lfTYBoHPnznrHyH79+mHEiBF49913kZSUdNY6Sx47cOBA\\nHDt2DHfddRckSUKNGjUwdepUADB09Crv7wB7YV++JHGhF0mIiIioQvH0NRERUYRgKBMREUUIhjIR\\nEVGEYCgTERFFiLD0vg4GVeTkFIVj05eVhIQo7qdy4r4qH+6n8uF+Kj/uq/JJSoqtkO2E5UjZZlPC\\nsdnLDvdT+XFflQ/3U/lwP5Uf95W5ePqaiIgoQjCUiYiIIgRDmYiIKEIwlImIiCIEQ5mIiChCMJSJ\\niIgiBEOZiIgoQjCUiYiIIgRDmYiIKEIwlImIiCIEQ5mIiChCMJSJiIgiBEOZiIgoQjCUiYiIIgRD\\nmYiIKEIwlImIiCIEQ5mIiChCMJSJiIgiBEOZiIgoQjCUiYiIIgRDmYiIKEIwlImIiCIEQ5mIiChC\\nMJSJiIgiBEOZiIgoQjCUiYiIIoTN6gKuRCtXfoEPPvhXSLssy3jwwVHo1u1WC6oiIiKr8UjZAmUF\\nMgBomobZs9/CL7/8bHJFREQUCRjKEeitt/5hdQlERGQBhnIE0jTV6hKIiMgCDGUL1K/f8Kw/szlc\\ncLujTKyGiIgiBUPZAr179wtpi2/UB9Va3wt3dBwkSbKgKiIishp7X5tM0zTMmfOuoU1WbHDHJVtU\\nERERRQoeKZtMVVXk5uYa2gSvIRMRERjKprPb7Wjf/kZDm83hsqgaIiKKJAxlC4wa9QTc7ihIsgyb\\nwwWnO8bqkoiIKALwmrIFlixZAI+nCAAQ9HsRUPg2EBERj5RNFwwGsXLl54Y2v6/IomqIiCiSMJRN\\nJkkSbDblzFZLaiEiosjCUDaZoijo1+9OQ5vTxcFCiIiIoWyJbt1uhdvthiTJsNmd7H1NREQAGMqW\\nmDnzDXg8HgihIRjwwVeUb3VJREQUARjKJgsEAti2bauhLRjwWVQNERFFEoayyWw2G5KSjENqSjJv\\niSIiIoay6SRJwsMPPwpZln9fluGK4uAhRETEULaEy+U2zgTFWaGIiAgMZUv8858zoKrFk1AIobGj\\nFxERAWAom87v9yMjI93QpqpBi6ohIqJIwlA2mcPhQJMmTQ1tNpvDomqIiCiSMJQt8MQTY+ByuQBJ\\ngs3uhCsq1uqSiIgoAvBeHAv8+ONmeL1eAMX3KAeDTosrIiKiSMAjZZNpmoqFCz82tPk9hRZVQ0RE\\nkYShbDJN0+DxeAxtQgiLqiEiokjCUDaZzWZHly5/MrTZnW6LqiEiokjCULbA8OEPIioqCpKswO5w\\nwcGpG4mICOzoZYkPPngHRUVFAICAX4Uk87sRERHxSNl0wWAA69b9n6Et4PNaUwwREUUUhrLJZFlB\\nVJTxGrLEsa+JiAgMZdPJsoxBg+4xtDndnCWKiIgYypZo0qQZHA4HgOIRvRS73eqSiIgoAjCUTSaE\\nwLRpU+D3+wEIBAM++Io4eAgRETGUTZeTk4309DRDWzDot6gaIiKKJAxlk1WqFI+EhMqGNkXhnWlE\\nRMRQNp2iKHj88aehKAoAQFZscEaxoxcRETGULZGbewqqqgIAhNA49jUREQFgKJsuEAjg/fff0ZeF\\npsHnKbCwIiIiihQMZZMVFOSjoCDf0CZ+P2omIqIrG0PZZAkJldGgQSNDm83htKgaIiKKJAxlC4wZ\\nMw4ulwuSJMPudMPhira6JCIiigC8F8cC//nPMni9xZNQBHweKDaO6EVERDxSNl1RUSFWrfrC0Ob3\\nFllUDRERRRKGssk0TfAWKCIiKhND2WQxMTHo0qWboc3hjLKoGiIiiiQMZQvcccddpTp6RcHudFld\\nEhERRQB29DKZEAJTp75cqqNXEWSZ342IiIhHyqZLT0/FkSO/GdqCfp9F1RARUSRhKJusUqV42GzG\\nExQSj5SJiAgMZdPFxsZh0KBh+rIky3C6OXgIERExlC1Rp07d01M3yjYeKRMREQCGsun8fh/+8Y/X\\n9akb1aAfPk+hxVUREVEkYCibLCMjI2SWKDUYsKgaIiKKJAxlk9WsWQtxcZUMbYrNYVE1REQUSRjK\\nJrPb7RgzZhxsv09CYbM72dGLiIgAMJQtsWvXDgR/P2WtBv3QNNXiioiIKBIwlE2Wm3sKy5Yt0peF\\nEPCzoxcREYGhbLr8/Hy953UJIbSQ9Q4f/hX/939fIyvrmFmlERGRxTj2tclq1aqNlJT6OHjwgN5m\\ncxgnpMjNzcVzzz0JAFAUBc88Mw5t2rQ1tU4iIjIfj5QtMGbM+OJZomQZdlcUHE63/jMhBHJzT+nL\\nqqpiyZIFVpRJREQm45GyBWbPfuv0LFHeIiiKvdRPBYQQhvW9Xo+J1RERkVV4pGyyzMyj+OmnHw1t\\nAV+R/m9JkhEdbbxFKikpGYsXf2xKfUREZB2GssnsdjskSTI2nrFcqVI8mje/FtWr18TAgYOQm3sK\\nP/ywycQqiYjICgxlk1WpkoiuXW8xtDlcUfq/hRDIyjqGnTu34ejRdCxduhAeD09fExFdCRjKFujd\\nuy9kWYYkSbA7XYZrymowgGAwqC8LIVBYWGBFmUREZDJ29DKZpql45ZWXoWnF9yYHfF5IkqL/POTU\\nNgBZVkLaiIjo8sMjZZOlpaWGDAgSDPj0fys2u6GjV2JiEuLi4kyrj4iIrMNQNlliYhKcTqehTVGM\\nJyycThcSEiojNjYOt93WCzYbT2gQEV0JGMomi4qKxkMPPaIvy4oNjlKzRKnBALKzTyInJxv5+XmY\\nN28OO3oREV0hGMoWUJSzXyNWf589qrSSgUaIiOjyxlA2mcdThH/9a5a+rKlBwyxRshJ6qvrM091E\\nRHR5YiibLCvrGHw+45GvqhbfAiW0IDRNhcPhhNNZ/F/fvncgKiqqrE0REdFlhqFsslq1rkJSUrKh\\nzWYvPhLOOfgNfEX58Pt98Pl8GDHiUQwZMtyKMomIyAIMZZMpioKxYyeUGjzEDYcrCqqvAL5TRwzr\\nrl79pUVVEhGRFRjKFli9+gtomgYhBAI+DzQ1CMgKAOPAIS6Xq+wNEBHRZYmhbLLs7JNYvXqloc3v\\nLYRidyMquaneZrfb0b//QLPLIyIiC3FUCpP5/T4IoRnahBAQahAQGgAJNpuC55+fgKZNr7GmSCIi\\nsgSPlE1WrVoNNG/e0tBmd7qRn74FRcf3ABAIBoN4771/6uNjExHRlYGhbIFHHnkSiqIUd/RyRcHu\\ncMGXl25YJzPzaMgY2UREdHljKFvgjTemQlXV4o5e3iIEfB7Yo6oY1omNjUOVKokWVUhERFZgKJss\\nPT0N+/fvNbQF/F7E1moLe0xVAMW3TT3++FOw2+1lbYKIiC5TDGWTRUdHh4x9LUkyhBaAFiieeEJV\\nVeTl5VlRHhERWYihbLL4+AT07XuHvixJEhyuKOSn/QDVdzqI33//Hfh8vrI2QURElymGsgWaNWsO\\nSSoeKESxOyErNgS9xiNjj6cIubk5VpRHREQWYSibrKioENOmTYEQAgAQ9HsR8HngSqhjWK9OnbpI\\nTq5mRYlERGQRhrLJfv31IDwej6EtGPAjpkYrRCU3hSTJcLlceO65v1hUIRERWYWhbLKrrro6pFe1\\nYrPBl5uOouN7IIQGr9eL//xnuUUVEhGRVRjKJouLi8Ojjz6lX1O22Z1wuKJRmLkd+P2UNgB89dXK\\nsPfALioqxMGD+xEIBML6PEREVD4c+9oCGRlp+jVlTQ1CCA1CM84QJYSApqlhq2HDhv/h7bdnwOfz\\nIT4+AWPHvoB69eqH7fmIiOj8eKRssqysY1iyZKG+rGkq/N4iRFczTj7RoUNnxMcnhKUGVVXxwQen\\nb7k6dSoHc+d+GJbnIiKi8mMom+zEieMhs0RpmgpXQl1EVWv+e0cvN4YNuz9sNXi9HuTl5RraOM42\\nEZH1GMoma9iwUciY1na7E4WZO1CUufP3jl4eTJ/+SthqiI6OCZmpqn37DmF7PiIiKh+GsslsNjvG\\nj38Rsiz/PppXNOxONzzZvxrW27fvFxw/nhW2OkaPfgatWl2HpKRk3HprTwwaNCxsz0VEROXDULbA\\nnDnvQdM0CCHg9xZCDQag2KMM6zidTsTExISthrlz5+Cnn37E8eNZWLNmJbZt2xq25yIiovJhKJvs\\n118PYufO7YY2v68IsbXaQLa59bYhQ4bD7Y468+EV4tSpHKxb962+rGkaPvvsk7A8FxERlR9DOUIo\\njmjYopMAADabDXXrplhcERERmY2hbLJ69VJCOlk5nFHIS/sB/twjAIBgMIg33ngVqhqe+5Tj4xPQ\\nuXMXfVmWZdx+e/+wPBcREZUfQ9kC9977EBRF0Tt6KTY7AgXGTl05Odlh7eh1991D0aLFtUhKSkav\\nXn3QunWbsD0XERGVD0f0MlkwGMCUKRP1o2C/txCyLMMRUxNBz+mpGqtUSURSUnLY6njttUk4dKi4\\nx/dnn61AbGwc+vW7M2zPR0RE58cjZZPt27cXJ0+eMLQFAj7E1roezkq1AQB2ux1PP/08FEUJSw2Z\\nmUf1QC7x/fffheW5iIio/BjKJktMTIIkGXe7LCvwnNgPX24agOJhMM9cpyJVqlQJTqfL0JacXDVs\\nz0dEROXDUDZZcnJVDBx4t74sywrsTjfy07cA+H2SCk3DokXzwlaD2x2F4cPv16eQTEpKxt13Dw3b\\n8xERUfkwlC1Qo0Yt/d+SXHyKWmhBwzqnTuUgnKpWrY5KleIBANWr10BsbFxYn4+IiM6PoWyyvLw8\\nvPXW3/VlNehH0O+FI7aGYb1Onbqc+dAKEwwGMGPGNJw4cRwAsGPHNsyf/1HYno+IiMqHoWyyI0cO\\nIxAIGNrUYBAxtdrAHp0MSVaQkJCAPn3Cd99wVlZWyCxRBw8eCNvzERFR+TCUTVavXgrcbrehTVZs\\nyNn7BQKFWRCairy8PHg8RWGroVq1aiEzVTVrds1Z1iYiIrMwlE0WFRWNZ58dD1ku3vV2pxuAMFxT\\nVlUVP/74Q9hqkGUFzz77F9StWw8ulxudOt3Ejl5EV7iCgnz8+OMP+mUtsgYHD7HAxo0boGkaACDo\\n98HmcIas43QWtxUU5CMvLxeaJpCVdazCbl3atu1H/V7lrVu3ID09DSkpDSpk20R0adm1aztefXUS\\nfD4fZFnGgw+ORLdut1ld1hWJR8omy8hIx+rVX+rLQmgQmgbFcXqaRqfTiVat2sDr9WLcuGeQk5OD\\n3NxTeO65J5GZefSiaygoKMDSpQv15cLCQixZsuCit0tEl6b58+fC5/MBKL4l8+OPP0IwGDzPoygc\\nGMomO7ODFQAIIeCIqwXJ5oas2FC5chXYbDb8+ONmHDuWqa9XVFSI//u/ry+6Bo+nKOQXLjc3tC4i\\nujLk5p4yLBcVeRAI+C2q5srGUDZZw4aNULNmrZB2z4lfIIIeaGpQH4ZTUUKvLlTE0JtJSclo1qy5\\noa1Llz9d9HaJ6NJ0001dDcvt2rUP23zudG4MZZOVdLIqmSXK6Y6BdsbAIX6/H9u3/4Rffz2AxMQk\\nvT0+PgF/+lP3CqnjsceeQsuWrVC9eg0MHDgI3bv3rJDtEtGlp/hvQA9Uq1Yd7drdgFGjnrC6pCsW\\nO3qZTAiBN9+crs8S5fMUQFZsEND0dWRZxpQpL0GI4ja73Y7Y2DhMm/YmYmJiK6SOf/zjNezd+wsA\\nYOnShUhJqY/Wra+vkG0T0aXliy8+1fu6ZGYeRXR0LEaOfMziqq5MPFI22YED+/Drr8aBOiRJhs1d\\n+fS/bTY9kAEgEAjA5XJVWCAfPnxID2Sg+IvC6tUrK2TbRHTpWbXqC8Py2rVfw+v1WlTNlY2hbLIz\\nZ2cCAEiAEMVHzqXD2LCKJFVYDS5XaA1ltRHRleHMv0s2mz1sU8fSuTGUTXbVVXVw442dTjdIEoQQ\\nUL2nez8HAgHYbKevLERHRxuWL1a1atVx882nO3a53VHo23dAhW2fiC4tAwferQ9oBAADBgzUZ5Ej\\nc/GasgV69eqLjRu/g6YJ2B1uBAPG00RCCPzpT7fixx83Izm5KnJysgEUzxy1ePECpKcfQatWbdCn\\nT3/I8oV9m+3Z83akph7ByZMn0KnTTahT5+qLfVlEZCFVVbF+/f/h8OFDaNHiWrRu3QZA8dgIa9d+\\nA6fTia5db0F8fELIY1u0uBYdOnTCjh3bUafO1SG9sSNddvZJ/PvfH+DQoYNo3rwlhg69Fy6X+/wP\\njECSEEKEY8PHj+eHY7OXPJ/Ph0ceuR/5+af3j6LYoaqBUsuK3hEMAGw2G2rUqAmn04n9+/fp7Xfe\\neTf+/OfBf7iGQCCARx55wHBv4rBh9+H228M3CcbFSkqK5WeqHLifyudy3E//+tdMfPPNGn35/vtH\\noEWLVhg79ml4vR4AQGJiEt54Y1ZIYL3zzix8/fVqfblhw8aYNOk1AJfGvnrhheexd+8efblr11sw\\ncuTjptbuoZbtAAAgAElEQVSQlFQxfX54+tpkBw7sMwQyAGgQcFSqBdkeBZvdGXItJxgMwuv1GgIZ\\nADZt2nBBNRw6dDBksIBt27YaloUQuNDvaxfz2HBui4y4by8fXq8Ha9d+Y2hbufJzfPvtV3ogA8CJ\\nE8exZcvmkMf/9NOPhuV9+35BYWFBeIqtYEVFRYZABkJfz6WEoWyyGjVqhnag0FT4c9OgBYqgBv0h\\n148lSYLdbtPHwy6RlHRh42BXr14j5HpR7dpXGZb37NmNPXt2X9D2L+ax4dwWGXHfXj5kWTFcEwaK\\nh+s9cuRwyLqOMsbar1WrtmG5SpXES2bwEJfLhaSkZEPbma/nUsJQNllCQmXcf//D+rIsK4ajFSEE\\nFEVB9eo1AQAOhwMJCZWhKDbDZBRVqiRiyJDhF1RDbGwchg69T19u2LAxBgy4y1DDsmWLsHz54j98\\nJKVpGpYsWYAVK5Ze9FHYxdRB51aR7xNZz263IyHh9LViWZYxYMCfcfjwr4Y7N+rXb6hfay7t3nsf\\n0r/0S5KEESMeCQn5SCXLMh5++DH9ddaoUQv33TfC4qou3KWx1y8zqnp6BK+y/hx6vV4cPZoOSZLQ\\nseNNiImJQWFhAdLSUvV12rfvEHJ0+0fMn/+R/u8DB/bpt2KpqopJk17Ezp3bsWPHNkyf/kq5t5mR\\nkY5HH30Qu3fvxLZtW7FixbILru/MOl588UWGRwXJzMzAY489pL9Pn3yyxOqS6CJ4vR785S/PIisr\\nC0Bxn5RHH30KP/64BTk5ORBCQJIkOBwODBo0rMw7Odau/UafkAIAli27tD4Tq1Z9of99UNWg4QvK\\npYahbLLs7JOYM+c9fVloKnDGPciBQHGnLyEEvvlmDY4fz0J2drYhlFat+lyf/vGPSk9PM/wCapqG\\nBQvmAQC++24ddu7cpv9s8+aN2L79p3Jt99//fl8ftxsAliyZf8EzzZxZx/r167Fjx7ZzPILKa+7c\\nDw1z5i5dupCTD1zCvvzyvzhw4HR/E1VVsWrVf7F27enJa4QQ0DQNn3/+n5AvtwUF+fj00+WGdX/9\\ndb/+dyjSZWYexQ8/bNSXjx3LxKeffmJhRReHoWyyo0czQsJUkmQozjjI9mjIZdywr6pqyC9S6d7Z\\nf1TJN2pjXekAYDgaL5GeHtpWlvT0NMNyMBhEQcGF9dos6znLWwedW1nvU15enkXV0MUq63e2sLAw\\n5G/G2b7EZ2VllXvdSHT0aEZI26X8t4KhbLIGDRoiLq6SoU1oKlRfHrRAIbQzwlZRFCQmJoZ08qpb\\nt94FX/Np3rx5yAhhbdu2B4CQ602yLOPaa68r13bPHDu7Ro1aZd4TWf5tna6xuI7WF7QtMjrzfapW\\nrTqqVEm0qBq6WNdd1zakbciQe0N+9xRFQZ8+A0J+9+vUuRqVKsUb2hITky+ZwUOaNGka0nmtrH1y\\nqVAmTpw4MRwbLiri6bCyKIoNzZo1x7ffflW8bHMUn8IuxeVyoWbNWnA4HOjW7TYcO5YJt9sNRVHg\\n8/lgt9vx6qv/CAnq8pJlBc2aNce6dd8CAHr06I077xwESZKQmJiE6tVrYOfOHXA6nXjqqefQsGHj\\ncm23WbNr4PcHcOTIYcTGxmHixMmIjo6+oBrPrOPFF19EnTr1L2hbV5LoaOd5f/eaNr0GgUDJ+xSL\\niROnIDo6xqQKI0N59tOlonbtqxAbG4dfftkDSSruzDVkyHC0bdsea9ashBACVaokon79hujff2BI\\nKMuyjFatrsOGDev00QT/+c/39GvPkb6vbDY7mje/FuvXfwtJkjB06H249VbzZ72Ljr6wv8dn4ohe\\nFlixYpl+ekgNhn7Y7XY70tLSoKpBrFixFFFRUahUqRKKiopPSQUCAbz77j/xzDNjL7iGr75apdfw\\nzTdfoXPnLkhJaQAA6NjxJlSuXAVA8R/w8nI4nLjnnvvRpk3xt9Qzb1P4o0rXccMNN0T8AAaXCrvd\\njmHD7sN11xUfMZfu1U+Xpttu64WrrqqDw4cP4eqr60KSJKxe/aXep+PUqRz06HH7WcfQT0s7op/y\\nDgaD+OyzFbjzzrvNfAkXpUGDhhgy5F4AxaMVXsoYyiY7cuRwyKAfkqzoR8uKzY5AIGDooV1UVAQh\\nBPz+0wG+adMGpKYeuaAe2EePZuB//1urL/t8Xnz66Sd46qnn9LYmTZr94e1WxGPDuS0y4r69vDRp\\n0gyNGzeFJEkoKMjHl19+pv9MVVVs3foD+vQpe9S+ZcsWGa4r/+c/y9C37x2XzClsoPiLyeWAoWyy\\n0sFaQpZlwB5dfF1ZDUIt49tsWbcD+f2+kLby1RD6uDPruphZqSpyRquK3BYZcd9eXiRJ0t/TYDAY\\n0lmrrL89Jc7saR0MqpdUZy8Al8x91edzebyKS0hKSgM0aNDQ0CaEgOrL0/8dDAYMo35FRUUhLq6S\\noa1Royb66eY/qk6duoajJEmSceutPS5oW0QUeeLjE9C+fQdD27mOJHv06G1Y7tq12wX3WaGLw45e\\nJpMkCY0bN8VXX60EADhc0cWTUZxxJNyjR2/k5eWhbt16EELA6XTi+ecnICYmBjfe2Bn33HP/RU3n\\n2LTpNUhN/Q2KoqB3777o0qXbRb2ucIv0ziaRgvupfK6E/XT99W2RlJSMatWq4+67h+H669ufdd16\\n9eojNzcXhYUFaNbsGjzwwEj91PWVsK8qAjt6XaJUVcVrr03S7zP2ewuh2BxQtdMfekVR8MUXxdeD\\njh3LhN1uR/XqNVCvXgrq1Uu56Bo0TcNrr01CauoRAMCCBXORlJSMjh1vuuhtE1FksNns6Nq1e7nW\\nXbx4Ptas+RJA8d8cIf6BZ58dH87y6Cx4+tpk+/fvLeNmdwF3lQaQbW4oij1kwopAIFCho+scPvyr\\nHsglzpxhhoiuHOvX/59hecuWTfB4iqwp5grHUDZZfHx8Ga0SPNkHoAU9UNVAmZ26QmaWughxcZUg\\nSca3PiGhcoVtn4guLWcONBIdHQO73WFRNVc2hrLJqlWrgZ49++jLkiRDaJrhmnIgENDv8ZVlBQkJ\\nCRUayomJSejb9/StEQkJldG//8AK2z4RXVqGDBkOt9sNoPgA4GL7rNCF4163wLXXtsaXX35WPE2j\\n3QEtGHpqunXrNr+PxqPB5/NV+AxJbdvegB9//AHHjmWiSZOmIcPsEdGVo2nTa/D22x/iwIG9qF27\\nDs+cWYihbLLCwgJMnz5VD9mg3wvF7gBKDbXpcrmwatUX+nJRUREKCgoqrAZVVTFt2ivIzj4JANiw\\n4X+Ii6tkmOeZiK4sUVFRaNGildVlXPF4+tpkhw4dhM/nNTYKoFLdzrC5EyDLChQl9LtSRXb0OnYs\\nUw/kEnv2/Fxh2yciogvDUDZZnTp1QzpQyIoNBelbEfTkQNNUFBYWhFxDLrneUxGSk5NDTlefOaAJ\\nERGZj6FsstjYOIwe/Yy+rNidUGx2qH7j6ekGDRqhadNrkJLSAFWqJFZoKNtsdjz11HOoWrUaAAmt\\nW7fB4MH3VNj2iYjowvCasgV+/fWg/m9NDZY5BnG9eim4996HAADPPvtEhddw5MhvOHHiBACBQ4d+\\nRU5ODmJiYiv8eYiIqPx4pGyyrKxMfPLJEn1ZaCqCAR+iqzXX22w2G/r0GRC2GoqKijBv3of6TFQ5\\nOdlYtGhe2J6PiIjKh6FsspMnT4bc3iQ0Fc64mlAcxRPNOxwOREVFha2G/Py8kBljio+aiYjISgxl\\nkzVo0EgfGKSEYnci5+A3+nXloqIiLFmyMGw1VK1aLWSGqRtv7BS25yMiovJhKJvMZrNh/PgXoSgK\\nJEmCwxUNRbFBqMYj1337fglrHc8+Ox4tW7ZG1arV0KfPANx+e7+wPh8REZ0fQ9kC7777NlRVhRAC\\nfm8hhBCQFOO0X40bNw1rDfPmzcH27Vtx7FgmPvtsBX74YWNYn4+IiM6PoWyyX389gJ9/3mVoC/g8\\nSKj/JyiuSgCKR9a58867w1ZDTk42vvtunb4shIbPP/9P2J6PiIjKh6FssrJuf4IEqP5CqL58AIDH\\n48H+/XvDXIOxDlmuuAkviIjowjCUTVa3bgpatbrO0GZ3uJGfugkQGgBACIGPP54Tthri4xPQpUs3\\nfVlRlLDegkVEROXDULbA4MHDjR29bHZoQZ9hnZycnLDWMGjQUFx7bWskJiaha9fuuOaaFmF9PiIi\\nOj+O6GWyQCCAKVMmQlWLZ4XyewshyzJcCVfDm3NIX69Tp5vDWsc//vE6du/eCQBYs+ZL2O123Hvv\\ng2F9TiIiOjceKZts//69yMnJNrQFAj7E170JrioNIMkyoqKiMXDgXWGroaCgQA/kEps3fx+25yMi\\novJhKJssObkqJMm422VZgffUYXhP7ofQNBQVFWLWrBlhq8HtdofMElWtWvWwPR8REZUPQ9lkiYlJ\\nGDRoqL4sKzY4XNEoPLbbsN6mTRtCjqgriqIoeOihUfrMU1WqJOKeex4Iy3MREVH58ZqyBSpXrqL/\\nW5ZlSBIgyca3QpZl2Gzhe3vatr0BLVpci6ysY6hZs3bI/M1ERGQ+HimbLDf3FP71r5n6cjDgh99b\\nhJjqLYFSp7VvvbUXYmPjwlqLy+XGVVddzUAmIooQDGWTpaYeQTAYNLSpahCO2OqISmoESZLhdLrQ\\ns2dviyokIiKrMJRNlpJSH1FR0YY2m82B/IytKMraAyE0+HxevPrqJIsqJCIiqzCUTeZ2R+G55/4C\\nWS7e9XaHG3anG75TRwzrpaYewbFjmVaUSEREFmEoW2Dr1i3QtOIhNQMBLzQ1CJvLeItSdHQ0EhIS\\nrCiPiIgswlA22alTOfjvf1ecbhACfm8RYmu3hc1dHMKSJGHEiEfhcDjPshUiIrocMZRNVlRUqB8l\\nlxBCgwQJklTcC1qSpLDeDkVERJGJoWyyGjVqoXHjpoY2u8ONvLQfECg6AQDQNA1vvz0Tfr/fihKJ\\niMgiDGULjB495vQsUc4o2J0uBD3G0bsKCvLDNqIXERFFJoayBWbN+jtUVYUQAn5fEQJ+L5yVahnW\\nqVGjJpKTq1pUIRERWYGhbLKMjPSQGZoCPg9ia14Hd2IjQJLgdDrx3HN/hSRJFlVJRERWYCibzO12\\nh8wSJUkS/AVZ8Jw8AAgBn8+Hb7/9yqIKiYjIKgxlkyUkVEbPnreXapHgcEWjIGMbIFS99b///Q8K\\nCvLNL5CIiCzDULbATTd1/X1ELwk2hxOyYoPQAoZ1VDXI3tdERFcYhrLJVFXFq6/+7fd7lQWCfi/8\\n3kJEJTUxrNemTTvDFI9ERHT54wgVJktLO4KTJ08Y2oIBP6KSGkJSbMg7vA6KLKFly1YWVUhERFbh\\nkbLJqlatBrfbbWhTlOLvRoWZO6GpQQQCAbz//r/wxRefWVEiERFZhKFsMpfLjVGjRuvLsmKDwx2D\\noDcPgcLjhnX/97+1ZpdHREQWYihboKio4PSCEAAEZJsT+H3s6xIJCZXNLYyIiCzFUDZZYWEBPvhg\\ntr6saSp8nkLINidia7XR22Nj43DXXYOtKJGIiCzCUDbZyZMnQm510tQgACCmWnM43TGQJAn5+Xl4\\n//1/ITf3lBVlEhGRBRjKJqtV6ypUq1bd0Gb7fd5kTfXD5ymEEAIAsGfPz1i8eL7pNRIRkTUYyiaT\\nZRnjxk2ALMuQJAl2hxsOZxQAQPXlAxCG9X/77bD5RRIRkSUYyhb45JOl0DQNQggE/B6oweLRvGyu\\nhJBxsa+9trUVJRIRkQUYyiY7ceI41q79xtDm9xYBACRZhjsmHk6nE5UqVUKTJs3Qrt2NVpRJREQW\\n4IheJiuZR9no9LJis0EEZeTm5iI3NxfPP/8kqlRJhMvlMrdQIiIyHY+UTVa1ajVcd11bQ1vJNWWg\\neCIKj8ejLweDQeTl5ZlWHxERWYehbIEHHngYiqJAkiQ4XFF672siIrqyMZQt8Prrk/XT2H5vEfy+\\n00fGimIzjI2tKDbExcVZUSYREZmM15RNlpZ2BIcO/WpoC/q9huWkpGT063cnjh/PwvXXt8eMGa+b\\nWSIREVmEoWyyuLh4KIoN6u+jeAEIuQ1KkiR07HiTvnz99e1Mq4+IiKzD09cmi4szjmktSTIc7uhz\\nPubPfx6CP/95SLhLIyIiizGULdCgQSPYbMUnKRSbHbLMt4GIiBjKpvP7/XjjjakIBotPXwcDPvg8\\nhRZXRUREkYChbLKjR9ORn59vaCsZZpOIiK5sDGWTVa9eE7GxsYY2xWa3qBoiIookDGWTORwOPP30\\n2FLXlB1wnqejFxERXRkYyhbYv3+vfk1ZU4PQNM3iioiIKBIwlE2Wl5eLRYvm68tCaPCzoxcREYGh\\nbLq8vFzDwCFAcTATERExlE1Wq9ZVqFu3nqHN5uC0jERExFC2xPPPvwCXywVJluFwuuFwus//ICIi\\nuuxx7GsLLFw4D15v8SQUfp8HssK3gYiIeKRsuoKCfKxd+62hrfTUjUREdOViKJtMlmWOdU1ERGVi\\nOpgsKioaPXvebmhzujh4CBERMZQt0atXn+KOXpIMu8MFxe6wuiQiIooA7GFkgddfn6x39Ar4vYAk\\nI/Y8jyEiossfj5RNlp19EgcPHjC0BQM+i6ohIqJIwlA2WWxsXMgsUbKiWFQNERFFEoayyex2Ox56\\n6FF9WZIVuNwxFlZERESRgqFsgagoN5Tfj44lSQIkyeKKiIgoEjCUTRYMBjFr1j+gqiqA4qkbfUUF\\nFldFRESRgKFssry8XJw6lWNoO3PWKCIiujIxlE1WuXIV1K59laHNxvuUiYgIDGVLjBkzHk6nE5Ak\\n2OwuONnRi4iIwFC2xIYN6+Hz+QAhEAx4oQYDVpdEREQRgKFsMq/Xg+XLlxja/N5Ci6ohIqJIwlA2\\nmd8fQPCMI2MhNIuqISKiSMJQNllcXBzatr3B0GZ3uC2qhoiIIglD2QKjRj0BtzsKkizD5nDD7mQo\\nExERZ4myxEcfvQePpwgAEPR74Jc5ohcREfFI2XTBYADr1n1raAv4vBZVQ0REkYShbDJZVhAVFWVo\\nkzj2NRERgaFsOlmWMXjwcEMbBw8hIiKAoWyJFi2u1Uf0UuwOyDa71SUREVEEYEcvC7z55rTiEb0A\\nqAE/fEX5FldERESRgEfKJvP7/di79xdDWzDot6gaIiKKJAxlkzkcDtSsWdvQpig8YUFERAxlSzz2\\n2JNQFAUAIMkKXFGxFldERESRgKFsgdzcXGja7+NdCwEhhLUFERFRRGAom0wIgffee1sPYiE0eNnR\\ni4iIwFA2XTAYxMmTJwxtQlMtqoaIiCIJQ9lkdrsdrVpdZ2iz2Z0WVUNERJGEoWyBxx57Gm63G5Ik\\nw+ZwwsmOXkREBA4eYomVK/8Lj8cDAAj6fQjYOCEFERHxSNl0qqri008/MbT5vYUWVUNERJGEoWwB\\nITSrSyAiogjEUDaZoijo0aO3oc3hjDrL2kREdCVhKFugf/+BcLujIMkybA4X7E631SUREVEEYEcv\\nC7z11gx4PEUAgKDfC58kgf2viYiIR8omCwQC+OGHTYa2oJ+9r4mIiKFsOpvNhvj4eEObJCsWVUNE\\nRJGEoWwySZJw//0jIElSSQOc7hhriyIioojAULZAnTp1YbfbAQCyrECS+TYQERFD2RLvvDMLfr8f\\nAKCpQXgL8yyuiIiIIgFD2QL79+81LGtqkHMqExERQ9kKTZo0MywrNvvpa8xERHTFYihbYOTIxw3L\\najCAzJ8+ht/D09hERFcyhrIFRo26P6RNBD04uWsxAn6fBRUREVEkYChHGG9hrtUlEBGRRRjKEUaS\\nJCQkVLa6DCIisgDHvo4ww4c/gJ49+1hdBhERWYBHyhZYtOg/ZbYPGPBnBjIR0RWMR8oWkCQJixd/\\niqSkWBw/nm91OUREFCF4pExERBQhGMpEREQRgqFMREQUIRjKREREEYKhTEREFCEYykRERBGCoUxE\\nRBQhGMpEREQRgqFMREQUIRjKREREEYKhTEREFCEYykRERBGCoUxERBQhGMpEREQRgqFMREQUIRjK\\nREREEYKhTEREFCEYykRERBGCoUxERBQhGMpEREQRgqFMREQUIRjKREREEYKhTEREFCEYykRERBGC\\noUxERBQhGMpEREQRgqFMREQUISQhhLC6CCIiIuKRMhERUcRgKBMREUUIhjIREVGEYCgTERFFCIYy\\nERFRhGAoExERRQjbhT5wzZo1WLlyJaZPnw4A2LZtG6ZMmQJFUdChQwc89thjAIBZs2Zh7dq1UBQF\\n48ePR4sWLZCdnY0xY8bA5/MhOTkZr7zyClwuV8W8okuApmmYOHEi9u3bB7vdjsmTJ+Oqq66yuixL\\nbN++HdOmTcPcuXPx22+/YezYsZBlGQ0aNMCLL74ISZKwePFiLFq0CDabDaNGjcLNN98Mr9eLZ599\\nFtnZ2YiOjsbUqVNRuXJlq19OWAQCAYwfPx4ZGRnw+/0YNWoUUlJSuK/KoKoq/vrXv+Lw4cOQJAkv\\nvfQSHA4H99VZnDx5EgMGDMCcOXMgyzL3Uxn69++PmJgYAEDt2rXx8MMPh3c/iQvwt7/9Tdx2223i\\n6aef1tv69u0rjhw5IoQQ4qGHHhI///yz2LVrl7jnnnuEEEJkZGSIO+64Q3/8J598IoQQ4p133hEf\\nfvjhhZRxyVq1apUYO3asEEKIbdu2iVGjRllckTVmz54tevfuLe666y4hhBAPP/yw2Lx5sxBCiAkT\\nJog1a9aIrKws0bt3b+H3+0V+fr7o3bu38Pl84oMPPhAzZ84UQgjx+eefi0mTJln2OsJt2bJlYsqU\\nKUIIIU6dOiVuuukmMXLkSO6rMqxZs0aMHz9eCCHEpk2bxMiRI7mvzsLv94tHHnlE3HrrreLgwYP8\\n/SuD1+sV/fr1M7SFez9d0Onr1q1bY+LEiRC/jztSUFAAv9+P2rVrAwA6duyIDRs2YOvWrejQoQMA\\noHr16lBVFdnZ2di6dSs6deoEAOjcuTO+//77CynjklX69bds2RK7du2yuCJr1KlTB7NmzdI/Rz//\\n/DOuv/56AMWfiw0bNmDnzp1o3bo17HY7YmJiUKdOHezduxdbt25F586dAQCdOnW6rD9Dt912G554\\n4gkAxWdZbDYb99VZdOvWDS+//DIAID09HZUqVcLu3bu5r8rw2muvYdCgQUhKSgLA37+y/PLLL/B4\\nPHjggQcwfPhwbNu2Lez76ZyhvGTJEtx+++2G/3bt2oWePXsa1isoKNAP7wEgOjoa+fn5KCgoQGxs\\nrKG9oKDA0F6y7pXkzP2lKAo0TbOwImt0794diqLoy6LU4HLl+QxFR0cb1r1cRUVF6a979OjRePLJ\\nJw2fF+4rI0VRMHbsWEyePBm33347P1dlWL58OSpXroyOHTsCKP7d434K5Xa78cADD+D999/HSy+9\\nhDFjxhh+Ho79dM5rygMHDsTAgQPPu5GYmBgUFhbqywUFBYiLi4Pdbje0FxYWIjY2FjExMSgoKEDl\\nypVRWFiIuLi48z7H5eTM/aVpGmSZfe5K74OSz9CZ+6r0Z6ik/Ur4DB09ehSPPfYYhgwZgt69e+P1\\n11/Xf8Z9FWrq1Kk4ceIEBg4cCL/fr7dzXxVbvnw5JEnChg0b8Msvv2Ds2LHIycnRf879VOzqq69G\\nnTp19H/Hx8djz549+s/DsZ8qJAliYmJgt9uRmpoKIQS+++47tGnTBq1bt8b//vc/CCGQkZEBIQQS\\nEhLQunVrrF27FgCwbt06tGnTpiLKuGS0bt0a69atA1DcQa5Ro0YWVxQZmjRpgs2bNwM4/blo0aIF\\ntmzZAr/fj/z8fBw8eBANGzY07MPL/TN04sQJ3H///Xj22WcxYMAAANxXZ7NixQq88847AACXywVZ\\nlnHNNddwX51h3rx5mDt3LubOnYvGjRvj1VdfRceOHbmfzrB8+XJMnToVAHDs2DEUFhaiQ4cOYd1P\\nFzwhxebNm7Fo0SK99/X27dsxZcoUqKqKjh074sknnwRQ3Pt63bp10DQN48ePR+vWrXHy5Ek8//zz\\nKCwsROXKlTF9+vQrqve1EAITJ07E3r17AQCvvPIK6tata3FV1khLS8OYMWOwcOFCHD58GC+88AIC\\ngQBSUlIwadIkSJKEJUuWYNGiRdA0DaNGjcItt9wCr9eL559/HsePH4fD4cD06dNRpUoVq19OWEya\\nNAkrV640fEb+8pe/YPLkydxXZ/B6vRg7dixOnDiBYDCIESNGoF69evxcncOwYcPw8ssvQ5Ik7qcz\\nBINBjBs3DhkZGQCAZ599FvHx8WHdT5wlioiIKELwQiYREVGEYCgTERFFCIYyERFRhGAoExERRQiG\\nMhERUYRgKBMREUUIhjLRJSw/Px+PPvpomT9bvHgxunbtitdeew0jRoxAVlYWli9fjnHjxl30886c\\nOROzZs0CADRu3Piit0dExS546kYisl5ubq5h2L/S/vvf/2LSpEm48cYb9TZJkirkeStqO0RkxCNl\\nojDo168fjh8/DgCYM2cObrvtNvTq1QvTpk0DUDx05sMPP4w+ffpgwIABWL9+PQDjESgAdO3aFenp\\n6Vi+fDmeeuopPPDAA+jevTteeuklAMWjfWVlZeHxxx8HAIwYMQK7du3CrFmzsHPnTrz00ktYu3at\\nvp3SYwXt2LEDgwcPxoABA/DAAw8gLS0NALBw4UK8+eabAIB9+/bhnnvuwZ133omuXbti7ty5Yd5z\\nRFc2HikThcGKFSsAFAffggULsGzZMrjdbjz44IPYvXs3Zs+ejRtuuAH33nsvUlNTMXjwYKxYsaLM\\nI9CStm3btuHzzz+HLMu47bbbMHjwYLzwwgsYNmwYZs6cCQCYPXs2AOCaa67Bpk2b8MQTT+jTzJUW\\nCATw17/+FbNnz0a1atWwfv16vPDCC/jwww9x99136+stXboUjzzyCNq3b4/U1FT07dsXw4YNgxCC\\nR8tEYcBQJgqjH374AV27dtWn6vzwww8BAJs2bcLkyZMBALVr10bLli2xffv2MrdRcnTbqlUrREVF\\n6ZYxKO0AAAHeSURBVI/Jzc2F2+2+oLoOHz6M1NRUjBw5Um8rPctNibFjx2LdunWYPXu2PrcsEYUP\\nQ5kojOx2u+GUcVZWFlwuF84ccl4IAVVV9X+XCAaD+r+dTmfIY/6okqNbVVVRu3Zt/Yhe0zT9dHtp\\no0ePRnx8PLp06YKePXviiy+++MPPSUTlx2vKRGHUpk0brFu3DkVFRQgGg3jmmWewe/dutGvXDkuX\\nLgUApKamYuvWrWjVqhUSEhJw4MABAMWnvo8fP37O08Q2m00P8/IoCfJ69eohNzcXW7ZsAQAsW7Ys\\nZAJ3ANiwYQMef/xxdO3aVZ+uTtO0cj8fEf0xPFImCoN+/frh3XffRdOmTTFkyBDcddddEEKge/fu\\nuOGGG5CSkoIJEyZg2bJlkCQJkydPRmJiInr16oXVq1ejV69eaNasGZo2bXrO67eJiYmoXr06hg8f\\njo8++ggjRozA6NGj0axZM8N6kiTp/wGAw+HAjBkzMHnyZPh8PsTGxurzxi5cuBBZWVl44okn8Pjj\\nj2Pw4MFITExEmzZtkJKSgrS0NEM9vLZMVHE4dSMREVGE4OlrIiKiCMFQJiIiihAMZSIiogjBUCYi\\nIooQDGUiIqIIwVAmIiKKEAxlIiKiCMFQJiIiihD/D1Sk+rewDuCKAAAAAElFTkSuQmCC\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12b4d76d0>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:file:all\\n\",\n      \"Outliers:  105, 106, 109, 128, 137, 144, 146, 147, 152, 153, 157, 158, 163, 170, 173, 18, 192, 195, 20, 24, 27, 32, 48, 55, 57, 60, 70, 75, 78, 93, 94\\n\",\n      \"Suspected outliers:  187, 40, 65\\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12a9cf0d0>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:file:copied\\n\",\n      \"Outliers:  \\n\",\n      \"Suspected outliers:  49, 69\\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\nRU5ErkJggg==\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12b35f7d0>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:file:deleted\\n\",\n      \"Outliers:  152, 18, 78\\n\",\n      \"Suspected outliers:  116, 125, 132, 133, 143, 166, 59, 85, 96\\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12a8d9950>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:file:exists\\n\",\n      \"Outliers:  105, 106, 109, 128, 137, 144, 146, 147, 153, 157, 158, 163, 170, 187, 192, 195, 20, 24, 27, 32, 40, 55, 60, 65, 75, 93, 94\\n\",\n      \"Suspected outliers:  121, 135, 141, 19, 49, 56, 64, 84, 9\\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\nmZ577jlJUseOHeXz+dSvXz9m1cIf//hHLVmyREuWLNFVV12lJ554QhkZGcyphZKSEs2bN0+SVF1d\\nrfr6eo0YMeKs5nTOdxc7jhN3R9XxS+lIJKKMjAxde+2153roNmP06NFau3atbr31VknS448/7nFH\\nF6bj51FBQYFmz56tpqYmpaenKysry+POLgy/+93vdOTIET377LN69tlnJUkPPvigCgsLmVULWVlZ\\nKigo0O23365wOKwHH3xQvXv35rw6Dcdx+Ptrxc0336z7779feXl5kprfw7t27XpWc2IXHgAALOEL\\nQgAALCFkAQCwhJAFAMASQhYAAEsIWQAALCFkAQCwhJAFLhBHjhzRj370o1afW7p0qYLBoJ588klN\\nnz5dNTU1Kikp0f3333/Gx6+qqlJWVpa++93vxq1EdqJVq1Zp/vz5kqRgMKiqqqozPv4jjzyiN954\\n44x/H2gPznkxCgDnV21tbdySbSd688039eijj2r48OGxx852G7KNGzeqb9++se0pWxMMBhUMBs/q\\nuOfaD9AecCULnMaECRO0f/9+SVJRUZGysrI0duxYPf3005Kalz2cMWOGbrrpJuXk5OiDDz6QJM2f\\nP18LFiyIHScYDGrv3r0qKSnRT3/6U+Xn52vMmDGaO3euJOnRRx9VTU2NfvzjH0uSpk+frrKyMi1Y\\nsEAffvih5s6dq/fffz92nBPXkdm2bZtyc3OVk5Oj/Px87dmzR5L0yiuv6De/+Y3Ky8v1zDPPaM2a\\nNZozZ46qq6uVn5+vyZMnKxgMxoK3tavjSCSixx9/XDk5ORo/fryKiookNS8q/8QTTygzM1N5eXna\\nvXv3+R498JXHlSxwGsuWLZPUHGQvv/yyiouL1alTJ91xxx3avn27Fi5cqGHDhmnq1KmqrKxUbm6u\\nli1b1uqV3fHHtmzZorfeeks+n09ZWVnKzc3V7Nmz9b3vfS/2ce3ChQslSf369VNpaalmzZoV22Lr\\nRE1NTXrooYe0cOFC9ezZUx988IFmz56txYsXx5b0lKRZs2Zp48aNmjNnjhYtWqTs7GxNmDBBR44c\\n0Q033KBp06addGxjjJYuXSrHcVRSUqJQKKT8/Hz169dPBw8eVFlZmZYvX666ujpNnDiRq1mgBUIW\\nOEObNm1SMBiMbV+4ePFiSVJpaakKCwslSWlpaerfv7+2bt3a6jGOX30OGDBASUlJsdfU1taqU6dO\\n59RXRUWFKisrNXPmzNhjrX3neuKV77Rp07RhwwYtWrRIO3fuVDgcVkNDQ6vHX79+vcrLy7VhwwZJ\\nUkNDg3bu3Kndu3crMzNTfr9fXbp00ciRI8UqrUA8QhY4QwkJCXEhUlNTo44dO54ULMYYRSKR2M/H\\nhcPh2M8dOnQ46TVn6/hVYyQSUVpaWuyKOxqNxj7ePpV58+Zpz549ys7O1qhRo7R+/fpT9hCNRnXf\\nffdp1KhRkqRDhw4pOTlZTz31VNy+tifuDQygGd/JAmdo0KBBWr16tY4ePapwOKyf/exn2r59u4YM\\nGaLXX39dklRZWanNmzdrwIABSk1N1a5duyQ1f9S8f//+L/04NRAIxML5TBwPxd69e6u2tlZ///vf\\nJUnFxcUnbS7d0rp165Sfn6/MzExVVVWpuro6LjBPNHToUL366qsKh8Oqq6tTbm6utm3bpuHDh2v5\\n8uUKhUKqq6vTe++9x8fFQAtcyQKnMWHCBD3//PO65pprlJeXp8mTJ8sYozFjxmjYsGFKT0/Xww8/\\nrOLiYjmOo8LCQvXo0UNjx47V22+/rbFjx6pv37665pprZIw5ZRD16NFDX//61zVlyhS9+OKLmj59\\nuu655x717ds37veObzN5/DiJiYl65plnVFhYqGPHjqlz586xPTBfeeUV1dTUaNasWXH/7owZM3Tf\\nffepe/fu6tOnj4YOHao9e/ac1JvjOLr11ltVUVGhiRMnKhwO6+abb459N1xWVqbs7Gylpqaqd+/e\\n523mQFvBVncAAFjCx8UAAFhCyAIAYAkhCwCAJYQsAACWELIAAFhCyAIAYAkhCwCAJYQsAACW/D9F\\nsU5LMlqBMAAAAABJRU5ErkJggg==\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12b22cad0>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:file:failed\\n\",\n      \"Outliers:  173, 18, 48, 57, 70\\n\",\n      \"Suspected outliers:  20, 60\\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\nOYwbNw6Aw4cPk5qaSrNmzVixYgUAS5Ys4aabbuLGG29k1apVuN1ukpOT2bFjB9dff72dpedSo0aN\\nC6q7atWqfscp57GFxf3338+6desAWLZsGTfccEOh349jx45x7733MnLkSHr06AFcnscjr/243I7H\\n3LlzeffddwEICwvD4XBwww03XHbH4sz9sCyLRx999LI6FgCffPIJU6ZMYcqUKVSvXp1XXnmF5s2b\\nF9jxuOhFH5KTk30fR7tcLp599lkqVarE2rVreemll/B4PDRv3pzHH38cyB41vWTJErxeL6NHj6Z+\\n/fqX8roUKGMMzz33nO/+6csvv0ylSpVsrurssrKyePrppzlw4AAAI0eOpESJEvz9738nMzOT2NhY\\nxowZg2VZzJo1ixkzZuD1ehk2bBjt27e3uXrYt28fI0aMYPr06ezateuC6z516hRPPfUUR48eJTQ0\\nlNdff52rrrqqUOzHli1beP7553G5XJQpU4YXXniB8PDwQr0fY8aM4ZtvvvE71//2t78xduzYy+p4\\n5LUfI0aMYNy4cZfN8Th16hSjRo3i2LFjZGVlMWTIECpXrnzZ/W3ktR/XXHPNZfe3cbpBgwbxwgsv\\nYFlWgR0Prb4kIiJio8J7I1RERCQIKIhFRERspCAWERGxkYJYRETERgpiERERGymIRUREbKQgFrFR\\ncnIyDz/8cJ4/mzlzJm3btuXVV19lyJAhHDlyhDlz5vD0008HuMo/75tvvrks6xYJhIteBlFE8k9S\\nUpLf9KSn+9///seYMWNo2rSpb5tlWYEqTUQCRFfEInno1q0bR48eBeCjjz6iU6dO3HrrrYwfPx7I\\nnlZx6NCh3H777fTo0YOlS5cCMHHiRCZNmuR7nrZt27J//37mzJnDE088wX333UeHDh14/vnngexZ\\noY4cOcKjjz4KwJAhQ9iwYQOTJk1i/fr1PP/88yxevNj3PKfPv7Nu3Tr69+9Pjx49uO+++9i3bx8A\\n06dPZ8KECeetc+TIkfTp04f27dvz/vvvA9nryb788sv06NGDO+64g48++giA5cuXc++99/Lwww/7\\nVjvKzMwEsqc17NGjB926deNvf/ubb47kzz//nM6dO9OzZ0/mzZuXz0dI5ApSAMs4ilwx1q5dazp0\\n6GCSk5NNVlaWufvuu82GDRvMY489Zj788ENjjDF79uwxzZs3N8eOHTMTJ070rUNqjDFt2rQx+/fv\\nN3FxcaZ169YmNTXVpKenm1atWpmtW7eaffv2mTZt2uTZ98CBA33rn7Zp08bs27fPxMXFmVGjRhm3\\n221uu+02c/DgQWOMMUuWLDF33313ruc4W50TJkww3bt3N+np6ebkyZOmffv2ZuPGjWbq1Knm5Zdf\\nNsYYk5GRYQYOHGhWrlxp4uPjTd26dc2hQ4eM1+s1vXr1MgsXLjRbt241/fv3961zPX78ePOvf/3L\\nHDp0yDRr1swcPXrUeDweM2zYMN+a3yLiTx9Ni5zDypUradu2rW+ZzA8//BDIvkIcO3YsABUqVKBO\\nnTqsXbs2z+cwv1/F1qtXj2LFivl+JykpiaJFi15SXbt27WLv3r08+OCDvm2nrwKT42x1WpbFHXfc\\nQVhYGGFhYbRt25b4+HgSEhLYsmUL8fHxAKSnp7Nt2zZiY2OpWrWqbxWd2NhYkpKS2L9/P7t376ZP\\nnz4AZGZmUqtWLRISEqhXrx6lSpUCoEePHnz33XeXtK8iVzoFscg5hISE+H0cfOTIEcLCwvy2QXbY\\nejwe33/nyMrK8v13kSJFcv3Oxcq5R+zxeKhQoQJz584FspfuzPko/Vx9nF7n6espezwe3zrcf/3r\\nX2nXrh0AiYmJhIeHk5CQQGhoqF8dxhi8Xi+dOnXimWeeAbL/MeDxeIiPj/fruzAvKypiN/11iJzD\\nTTfdxJIlS0hLSyMrK4snn3ySjRs30rhxY2bPng3A3r17Wb16NfXq1SM6Oprt27cD2fdwjx49es4B\\nVi6XyxeMFyIn3CpXrkxSUhKrVq0CIC4ujhEjRuR6/NnqNMbwzTffkJmZSVJSEt9//z3NmzenSZMm\\nzJgxg6ysLFJSUujfv79vCbu8NGrUiAULFpCYmOhbxezjjz+mQYMGJCQkcOjQIYwxfPnllxe8jyLB\\nRlfEInno1q0b//73v6lZsyYDBgygb9++GGPo0KEDN998M7GxsTz77LPExcVhWRZjx46lVKlS3Hrr\\nrcybN49bb72VWrVqUbNmTYwxZw3jUqVKUa5cOQYPHszkyZMZMmQIw4cPp1atWn6PsyzL9z+A0NBQ\\n3nrrLcaOHUtGRgbFixf3rVE9ffp0jhw5wmOPPcYzzzyTZ52WZVGkSBH69etHamoqQ4cOJTY2lpiY\\nGHbt2kX37t3JysqiV69eNGzYkBUrVuTaB8uyqF69Og8//DCDBw/G6/VSs2ZNhgwZQmhoKM899xz3\\n3nsvYWFhhX6NbxE7aRlEkSA0adIkQkNDGTJkiN2liAQ9fTQtEqT0nWSRwkFXxCIiIjbSFbGIiIiN\\nFM/1hYgAAAAkSURBVMQiIiI2UhCLiIjYSEEsIiJiIwWxiIiIjRTEIiIiNvp/de91Fsmr2jwAAAAA\\nSUVORK5CYII=\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12abaad10>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:file:opened\\n\",\n      \"Outliers:  105, 106, 109, 128, 137, 144, 146, 147, 152, 153, 157, 158, 163, 170, 173, 18, 192, 195, 20, 24, 27, 32, 48, 55, 57, 60, 70, 75, 78, 93, 94\\n\",\n      \"Suspected outliers:  \\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAeIAAAFtCAYAAADbD2muAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd4VGX6xvHvmUklhd5UpClVQBABJVTpRdoiIk3Fpbgq\\nugu/BVwRFBQV3FXYomuhSk2WRQUEG0VKYDGhCFKkhY5ASC8z7++PmJGhq2ROkrk/17XX+h4yk+ed\\nM8mdc84757GMMQYRERGxhcPuAkRERPyZglhERMRGCmIREREbKYhFRERspCAWERGxkYJYRETERgri\\nQiQrK4uoqCieeOIJz7ZNmzbRsWNHG6u6vgEDBvDZZ59dcfuyZct+0XPFxMQwbNiwm1LXyZMnefjh\\nh2/Kc92ILl26EBsbe82vSUpKYuDAgb/p+zz++OOcP38egCFDhrB///7f9Hy5jh8/TpcuXejevTvx\\n8fE35Tl9ZdGiRXz00UdX/Ld//vOftGrVijFjxvCXv/yFDRs2kJCQQP369X1c5eXOnj1LjRo17C5D\\nfqMAuwuQm2fVqlXUqFGD7777jv3791O1alW7S7phlmXZXcJlypYty/z58332/SzLuu7rkJiYyPbt\\n23/T91m/fj25tw949913f9NzXWzTpk2ULl2aDz/88KY9p6/873//o1q1alf8t+joaKZOnUqDBg08\\n2xISEnxVmvgBBXEhMm/ePLp06ULFihWZOXMmL730EgBpaWmMGDGCQ4cOERERwcsvv0ylSpUYPXo0\\n4eHh7NmzhxMnTlClShXefPNNihQpwpYtW3jjjTdIS0sjMDCQZ599lmbNmhETE8PixYtJT08nPDyc\\nHj168Nlnn5GRkcHRo0cpX748/fr1Y86cORw8eJDHHnuMxx57jNTUVMaPH8+hQ4c4f/48YWFhTJ06\\nlcqVK19zTl988QXvv/8+6enpdO3a1XO0u3XrVqZOnUpaWhqWZfH000/TsmVLAE6dOsXQoUM5duwY\\nAQEBTJkyhapVqxIXF8eUKVPIzMzk9OnT3H///UyaNIk333yTlJQUXnjhBQDWrFnD9OnT+etf/0qX\\nLl349ttvycrKYvLkyWzcuBGHw0G9evUYM2YMYWFhtG7dmrfffpu77roLgNatWzNt2jSKFi1Kv379\\nuOOOO0hISGDu3LmUKlXKM7d9+/YxduxY0tPTqVy5MikpKZ5/u9r8xowZQ0ZGBj169CA6OpoDBw7w\\nyiuvcO7cOdxuNwMGDKBXr14ALF68mBkzZuBwOChevDivvfYab731FgCDBg3i3Xff5ZFHHmHatGnU\\nrl2bBQsWMGfOHBwOB6VKleKFF1647vsk18aNG3nrrbdISkpi0KBBzJw585rPd/78eRISEmjVqhV/\\n+tOfvPb5kCFD6Nu3L61ateLAgQOMGzeOc+fOYVkWw4cPp1OnTuzdu5eXXnqJxMRELMviscceo3v3\\n7mzatImJEyfy8ccfA3iNp02bxtGjRzl9+jTHjh2jRIkS/PWvfyU+Pp6vvvqK9evXExISQps2bRgy\\nZAjvvvsur7zyCidOnGDs2LE888wzzJs3j/79+1O7dm2vmv/5z3+yatUq3G43t956Ky+++CJlypTh\\niy++YMGCBbz77rtePzsRERHMnDmTRYsWMW/ePIwxFCtWjBdeeIEqVapw4MABXnrpJdLS0jh16hQ1\\natTgb3/7G0FBQaxcuZK//e1vhISEeN5zUsAZKRT27t1r6tSpYxITE822bdtMvXr1zLlz58zGjRtN\\nzZo1zbfffmuMMWbBggWmd+/exhhj/vznP5u+ffuazMxMk5WVZXr06GGio6PN2bNnzf3332/i4+M9\\nz924cWNz5MgREx0dbRo1amSSk5ONMcZER0ebhg0bmhMnThi32206d+5sRowYYYwxZteuXaZu3brG\\nGGNWrFhhJk6c6Kl33Lhx5uWXXzbGGNO/f3/z2WefXTan/v37m2HDhhmXy2WSkpJMx44dzerVq835\\n8+dNu3btzNGjR40xxpw4ccK0aNHCHDt2zERHR5t7773XHD582BhjzMSJE83YsWONMcb88Y9/NLGx\\nscYYY5KTk02TJk3Mzp07zeHDh02TJk1MVlaWMcaYESNGmEWLFpkjR46Yu+++2xhjzFtvvWWefvpp\\nk52dbdxutxkzZowZN26cMcaYVq1amR07dnjqzh0fOXLEVK9e3WzZsuWK+6xbt25m8eLFxhhj4uLi\\nTM2aNU1sbOw155eQkOCpKSsry3Tq1Mns3LnTGGPMhQsXTMeOHU1cXJzZtWuXadKkiTlx4oQxxpgZ\\nM2aYF1980RhjTPXq1c25c+e8al2/fr1p27atOXv2rDHGmJiYGNOpU6drvk8uFRMTY4YOHWqMMdd9\\nvscee+yKr8mlunfvbj766CNjjDHHjx83bdu2NUlJSeaBBx4wq1atMsYYc/LkSdO8eXPz7bffmo0b\\n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\\nERv9PyrJ6yCJdXruAAAAAElFTkSuQmCC\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12a542650>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:file:read\\n\",\n      \"Outliers:  105, 146, 152, 170, 173, 192, 20, 27, 48, 57, 60, 70, 75, 78, 93\\n\",\n      \"Suspected outliers:  \\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12b559410>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:file:renamed\\n\",\n      \"Outliers:  105, 115, 130, 138, 139, 140, 146, 148, 162, 165, 168, 169, 170, 187, 191, 192, 194, 196, 2, 20, 27, 38, 42, 60, 65, 75, 79, 89, 90, 93\\n\",\n      \"Suspected outliers:  \\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\nMjISLpcLzZo1Uw/umjBhAl555RWsXbsWjRo1Ug/autz+Kfb2229j8uTJSEhIQM2aNdW3ncPCwi67\\nfR6PBw0bNkSfPn2QkJCAJUuWID4+Hu+//z5cLhfGjRunvhX+/PPPq7/KVqVKFcyYMQNA0VukQ4YM\\nweLFi9Us7du3R3R0NKKjoyGEQFhYGN5991318buWV48lZ9d7eyWVPFhrzpw5ePXVV7Fq1SooioL4\\n+HhUrVoVixcvRnx8PBYuXAi3240xY8agTZs2AICBAwfikUceQeXKldUD+IrzlfbcBIBOnTqpBzdG\\nRkYiJiYG7733HipXrnzZnMXfO2DAAJw7dw4DBw6EoiioXr06Zs6cCQDqwVrFR6f36NEDW7ZsQbt2\\n7eDj44MGDRogJCRE867S5fbN/fffj7i4OMTHx+O+++7DmDFj4O3tjRdffBFPPfUUhg8fDkVREBQU\\npD621/rYkTEpgj9KERERScO3pomIiCRiERMREUnEIiYiIpKIRUxERCTRDTtq2uVyIzs7/0bdXJkV\\nGurP/XSNuK+uDffTteO+ujbcT9emcuWgG3I7N+wVsdlsulE3VaZxP1077qtrw/107bivrg33k774\\n1jQREZFELGIiIiKJWMREREQSsYiJiIgkYhETERFJxCImIiKSiEVMREQkEYuYiIhIIhYxERGRRCxi\\nIiIiiVjEREREErGIiYiIJGIRExERScQiJiIikohFTEREJBGLmIiISCIWMRERkUQsYiIiIolYxERE\\nRBKxiImIiCRiERMREUnEIiYiIpKIRUxERCQRi5iIiEgiFjEREZFELGIiIiKJzLIDlBejRg3HX3/9\\nWerXFixYgqpV79A5ERERGQFfEevkciUMAGPHPqNjEiIiMhIWsQ6++OI/siMQEZFBsYh10KFDZ9kR\\niIjIoFjEOggJCbni16OihuoThIiIDIcHa+lk9OjxWLx4nnr50UcHwmKxoF+/xySmIiIi2fiKWAcu\\nlwsrVnygmR06dIAlTERELGI9OBwO2GxWzSwrK0tSGiIiMhIWsQ78/f3RokVrzSw8nAdwERERi1g3\\nY8bEwc/PH4qiwGKxYODAwbIjERGRAbCIdZKQsBJ2ez6EEHA6ndi69RvZkYiIyABYxDooLCzEt99q\\ni/fLLz+VlIaIiIyERawDRVFgMml3tdnM3xwjIiIWsS68vb3x0EP9NbP+/fmrS0RExCLWTc+eveHr\\n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\\nREREErGIiYiIJGIRExERScQiJiIikohFTEREJBGLmIiISCIWMRERkUQsYiIiIolYxERERBKxiImI\\niCRiERMREUnEIiYiIpKIRUxERCQRi5iIiEgiFjEREZFELGIiIiKJWMREREQSKUIIITsEERFRecVX\\nxERERBKxiImIiCRiERMREUnEIiYiIpKIRUxERCQRi5iIiEgi8/V+gxACnTp1Qq1atQAALVq0QFxc\\nHJKTkzFjxgyYTCZ06NABY8aMAQAsWrQI27dvh8lkwpQpU9C0adMbugG3Co/Hg1deeQVHjx6FxWJB\\nfHw87rzzTtmxpOvXrx8CAwMBADVq1EBsbCwmTZoELy8v1K1bFy+//DIURcG6deuwdu1amM1mjBo1\\nCl26dJEbXCcHDhzA7NmzsXLlSpw8efKa901BQQEmTpyIrKwsBAQEYObMmQgLC5O9OTdNyf10+PBh\\njBw5EjVr1gQADB48GL179y73+8npdGLKlCk4c+YMHA4HRo0ahTp16vA5VYrS9lXVqlURGxurdt8N\\nfV6J63TixAkRGxt7yfzhhx8Wp06dEkII8fTTT4vDhw+LlJQU8eSTTwohhDhz5ox45JFHrvfuyozN\\nmzeLSZMmCSGESE5OFqNGjZKcSL6CggIRGRmpmcXGxoo9e/YIIYSYNm2a2LJlizh//ryIiIgQDodD\\n5OXliYiICFFYWCgjsq6WLl0qIiIixMCBA4UQ17dvli1bJhYuXCiEEOKLL74Q06dPl7YdN9vF+2nd\\nunVi2bJlmutwPwmxYcMGMWPGDCGEEDk5OaJz585i5MiRfE6VorR9dTOfV9f91nRqairOnz+PJ598\\nEjExMTh+/DisViscDgdq1KgBAAgPD0dSUhL27duHDh06AACqVasGt9uN7Ozs6//xpAzYt28fOnbs\\nCABo1qwZUlJSJCeS79dff4XdbseIESMQHR2N5ORkHD58GK1btwYAdOrUCUlJSTh06BBatGgBi8WC\\nwMBA1KxZE7/99pvk9DdfzZo1sWjRIoj/P+fO9eybffv2oVOnTgCAjh074qeffpK2HTfbxfspJSUF\\n33//PaKiojB16lTYbDYcPHiw3O+nXr16YezYsQCK3qEzm818Tl1GafsqNTX1pj2vrvjWdGJiIj76\\n6CPN7OWXX0ZsbCweeOAB/PLLL5g4cSIWL16svr0IAAEBAUhLS4OPjw9CQkI0c6vVitDQ0OvbK2WA\\n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\\nAABJRU5ErkJggg==\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x10dfc0d50>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:file:written\\n\",\n      \"Outliers:  105, 146, 152, 153, 170, 18, 192, 20, 27, 60, 75, 78, 93\\n\",\n      \"Suspected outliers:  106, 109, 128, 137, 144, 147, 157, 158, 163, 187, 195, 24, 32, 40, 49, 55, 65, 9, 94\\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x10ee20a90>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:http\\n\",\n      \"Outliers:  10, 105, 11, 110, 117, 118, 127, 131, 135, 141, 145, 146, 151, 154, 155, 160, 161, 168, 170, 174, 175, 176, 179, 18, 185, 190, 192, 20, 26, 27, 29, 36, 43, 47, 5, 51, 54, 60, 62, 68, 75, 9, 93, 95\\n\",\n      \"Suspected outliers:  \\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAdMAAAFtCAYAAABcPoCoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8VOW9P/DPObOvSSYbCYEAAQSRRRREVBSK+1LQ2qpI\\nqfZWrba1VbkKfWmtihuKF6n+rrVX27pSxKu2vXXfqMgmsu9b9j2ZfT/n+f0xySRnEqSTWJ48nO/7\\nn3KeZuLnnDlnvpk5zzxfiTHGQAghhJA+k3kHIIQQQkRHxZQQQgjpJyqmhBBCSD9RMSWEEEL6iYop\\nIYQQ0k9UTAkhhJB+omJ6AkskEjj77LPxH//xH+mx9evX4+KLL+aY6tjmz5+P9957r9fx//u//8vq\\nd7355pu45ZZbvpVcjY2NuOaaa76V3/WvuOyyy7Bhw4Zv/JlAIIAf/vCH/frv3HjjjfB6vQCAm266\\nCQcPHuzX7+tUX1+Pyy67DHPmzMHWrVu/ld95vKxatQqvvvpqj/GamhqceuqpHBKRgY6K6Qnsgw8+\\nwJgxY7Br165v7QXyeJEkiXeEHoqLi/H6668ft/+eJEnHPA4+nw/bt2/v139n7dq16Py6+e9//3tU\\nVFT06/d1Wr9+PQoLC/HWW29h4sSJ38rvPF6++uorRKNR3jGIQIy8A5B/n9deew2XXXYZysvL8ac/\\n/QkPPPAAACASieD2229HZWUlXC4XHnzwQQwbNgz33HMPnE4n9u3bh4aGBowYMQLLli2D3W7Hpk2b\\nsHTpUkQiEZhMJvzyl7/EOeecgzfffBNvvPEGotEonE4n5s6di/feew+xWAy1tbUoKSnBvHnz8PLL\\nL+PIkSO44YYbcMMNNyAcDuP+++9HZWUlvF4vHA4HnnzySQwfPvwb9+mjjz7C//zP/yAajeLyyy9P\\nv+vcvHkznnzySUQiEUiShJ///Oc477zzAABNTU24+eabUVdXB6PRiCeeeAIVFRXYsmULnnjiCcTj\\ncTQ3N2P69OlYsmQJli1bhlAohHvvvRcA8Pnnn+N3v/sdnnrqKVx22WX4+uuvkUgk8Oijj2LdunWQ\\nZRkTJ07EokWL4HA4MGvWLDz99NM45ZRTAACzZs3CihUrkJOTg3nz5mHkyJGoqanBK6+8goKCgvS+\\nHThwAIsXL0Y0GsXw4cMRCoXS/9/R9m/RokWIxWKYO3cuVq9ejcOHD+Phhx9Ge3s7VFXF/PnzcdVV\\nVwEA3njjDfzxj3+ELMvIy8vDY489huXLlwMAFixYgN///ve47rrrsGLFCowbNw4rV67Eyy+/DFmW\\nUVBQgHvvvfeY50mndevWYfny5QgEAliwYAH+9Kc/fePv83q9qKmpwcyZM3HnnXdqnvObbroJ1157\\nLWbOnInDhw/jvvvuQ3t7OyRJwk9/+lNccskl2L9/Px544AH4fD5IkoQbbrgBc+bMwfr16/HQQw/h\\nr3/9KwBotlesWIHa2lo0Nzejrq4OHo8HTz31FLZu3YpPPvkEa9euhdVqxezZs3HTTTfh+eef1+Rq\\naWnBfffdh7a2NjQ3N6O0tBTLly+Hx+PBrFmzcOWVV+LLL79EfX09Lr74YixcuBBA6g+W1atXw+Fw\\n4LTTTsNHH32Ejz/++FiXMxnoGDkh7d+/n40fP575fD62bds2NnHiRNbe3s7WrVvHxo4dy77++mvG\\nGGMrV65kV199NWOMsbvvvptde+21LB6Ps0QiwebOnctWr17N2tra2PTp09nWrVvTv/uMM85g1dXV\\nbPXq1Wzq1KksGAwyxhhbvXo1O/3001lDQwNTVZVdeuml7Pbbb2eMMbZ79242YcIExhhj7777Lnvo\\noYfSee+77z724IMPMsYYu/7669l7773XY5+uv/56dssttzBFUVggEGAXX3wx++yzz5jX62UXXHAB\\nq62tZYwx1tDQwM4991xWV1fHVq9ezaZMmcKqqqoYY4w99NBDbPHixYwxxu644w62YcMGxhhjwWCQ\\nTZs2je3cuZNVVVWxadOmsUQiwRhj7Pbbb2erVq1i1dXVbNKkSYwxxpYvX85+/vOfs2QyyVRVZYsW\\nLWL33XcfY4yxmTNnsh07dqRzd25XV1ezk046iW3atKnX5+y73/0ue+ONNxhjjG3ZsoWNHTuWbdiw\\n4Rv3r6amJp0pkUiwSy65hO3cuZMxxpjf72cXX3wx27JlC9u9ezebNm0aa2hoYIwx9sc//pH95je/\\nYYwxdtJJJ7H29nZN1rVr17Lzzz+ftbW1McYYe/PNN9kll1zyjedJpjfffJPdfPPNjDF2zN93ww03\\n9HpMMs2ZM4e9+uqrjDHG6uvr2fnnn88CgQD7zne+wz744APGGGONjY1sxowZ7Ouvv2br1q1jl112\\nWfrx3beffvppNnv27PS5e8stt7Cnn36aMcbYPffcw1544YUe//3u58Cf/vQn9vzzz6f/v5/85Cfp\\n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\\nAABJRU5ErkJggg==\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x110419a50>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:lang\\n\",\n      \"Outliers:  \\n\",\n      \"Suspected outliers:  \\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\ncKHi4uJ6mrlPCw8PV1tbW2CbUu3e8ePH9frrrysrK0spKSlOxwlKlZWVcrlcqq2t1S+//KJFixbp\\n008/VVRUlNPRgk5ERIRGjhyp0NBQPfTQQxo4cKDOnj2ryMhIp6MFldLSUsXGxio/P18nTpzQzJkz\\nVV1drQEDBjgdLShd+zO8ra1NQ4YM6f7v9/QNDh8+rLlz5+rDDz8M3PLEVbGxsaqpqZEk7d+/X9HR\\n0Q4nCl6nT5/WrFmzNH/+fKWlpTkdJ2ht2rRJZWVlKisr0yOPPKL333+fUv0fxo4dq2+//VaSdPLk\\nSbW3tysiIsLhVMGnvb1dgwcPliQNGTJEPp9Pfr/f4VTBa9SoUdq7d68kqaam5pYDym5HrDfz0Ucf\\nyefzacWKFZI6/1HWrl3bi6h907PPPqs9e/YoMzNTUuetc9zcunXr5PV6tXbt2sDXUGlpKc/t0WsT\\nJ05UXV2dnn/+efn9fr399ttyuVxOxwo6ubm5Wrx4sV544QV1dHSooKBAYWFhTscKOle+dhYtWqSl\\nS5fK5/Np5MiRSk5O7v44VrcBAMAeHv4BAGARxQoAgEUUKwAAFlGsAABYRLECAGARxQoAgEUUKxCE\\nvF6v8vLyrJ93165d2rBhg/XzAriqxxNEALj9WltbdeDAAevnbWxsZMIE4DZjxAr0QGpqqjwej6TO\\nJRSTk5OVkpKi1atXS+qcpvGVV17R1KlTlZaWFpher7i4WGvWrAmcJzExUceOHVNlZaXy8/OVm5ur\\npKQkLV++XJK0YsUKnTp1Sm+88YYk6eWXX1ZjY6Mk6amnntLSpUs1adIkvfjii9q+fbuysrL0zDPP\\nqK6uTpKUnZ0dmIKtpaVFiYmJOnLkiCoqKlRRUaGqqiq1tbVp4cKFSktLU2pqqrZt2yapc7awBQsW\\nSOpc2i8zM5OJ/4GeMAB6rL6+3iQlJRmv12s6OjpMTk6OaWhoMHPmzDHr1683xhjT1NRkxo0bZ06f\\nPm2Ki4tNcXFx4PiEhARz7Ngxs3XrVjNx4kTT1tZm2tvbzYQJE8yhQ4dMS0uLSUhIuOl7R0dHm507\\ndxpjjMnOzjYFBQXGGGOqqqpMXl6eMcaYGTNmmL179xpjjGlubg6c69ocH3zwgdm4caMxxhiv12sm\\nT55smpqazMWLF82kSZNMdXW1SUhIME1NTZavHtC3cSsY6IW6ujolJiYGlghcv369pM6FtleuXClJ\\ncrvdGj16tOrr6296DvPfUeCYMWMCS+i53W61trbeckHz8ePHS5JGjBihsWPHSpKGDx+u1tbWbo8z\\nxgRuBdfW1urSpUvaunWrpM6J2Y8cOSK3262ioiJlZGSosLBQbre7+4sBoAuKFeiF/v37d7k9eurU\\nKYWFhd1wy9QYo8uXLwdeX9HR0RF4ff2iA9ef42ZCQ69+695sgXiXyxU4z7Xvdf37rF69WqNGjZIk\\neTwe3XfffZKko0ePaujQoWpoaLhlFgBd8YwV6IW4uDjV1NTowoULgdVBGhsb9dhjj+mrr76SJDU3\\nN2vfvn0aM2aMIiIidPjwYUnSTz/9JI/H0+2HiEJDQwOF3BsRERH69ddfJUk7duzoct4rRfv4449r\\n8+bNkjp/MZg2bZpOnDihkydP6pNPPtGWLVt04MAB7d69u9c5gLsRxQr0wJUPL8XExCgrK0sZGRlK\\nTU1VfHy8nnjiCS1ZskTff/+9pkyZory8PK1cuVJRUVFKSUnRuXPnlJKSok2bNikmJqbLbdnrRUVF\\nafjw4Zo5c6akrh9euv6YK9sulyvw+qWXXtLmzZuVlpamS5cuBfbHx8erurpa5eXlysvL08WLFzVl\\nyhTl5ORo3rx5crvdKiws1KxZs3T//fdr+fLlWrZsmc6fP39brifQF7FsHAAAFjFiBQDAIooVAACL\\nKFYAACyiWAEAsIhiBQDAIooVAACLKFYAACyiWAEAsOg/XlpkDSRwy2YAAAAASUVORK5CYII=\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x1105933d0>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:mutex\\n\",\n      \"Outliers:  \\n\",\n      \"Suspected outliers:  18\\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\ngLGwkq65c3+ImpozNjtvPoXK4xsTNyAiog6M69KRrtra6qi+UPU+uELR/d9mIuAB4Ej0MIiog2Nh\\npX9ZutOW6CFIZkNGRkaiB0FEHRwLK+kymUwIBCI3Nh84cDAee+ypBI0ocbKyklFV1aR/QyK6YPEc\\nK+l6992lMJlM4XZ6euYFWVSJiL4JfmOlb+Tdd5cC4Dc2IiI9/MZKREQURyysREREccTCSkREFEcs\\nrERERHHEwkpERBRHLKxERERxxMJKREQURyysREREccTCSkREFEcsrERERHHEwkpERBRHLKxERERx\\nxMJKREQURyysREREccTCSkREFEcsrERERHHEwkpERBRHLKxERERxxMJKREQURyysREREccTCSkRE\\nFEcsrERERHHEwkpERBRHLKxERERxxMJKREQURyysREREccTCSkREFEeKEEIkehBERETfFvzGSkRE\\nFEcsrERERHHEwkpERBRHLKxERERxxMJKREQURyysREREcRRzYW1qasLcuXMxa9Ys3Hzzzdi1a9f5\\nGFeHo2kaHn30Udx8882YNWsWiouLEz0kqQKBAB588EHceuutuOmmm7B69epED0m6mpoaTJ48GceP\\nH0/0UKR79dVXcfPNN+PGG2/E3/72t0QPRypN0/DQQw/hlltuwa233opjx44lekhS7N69G7NmzQIA\\nFBUVhY//8ccfx4VwleaZx79///7/3979hjTVt3EA/3o7b5cOQ7GiSCJ8MbNSXGolZmo4FmsipplZ\\nKA3M0rRlpqIWln8ySgI1tASjOZLKhRjRC/OFpWiCqWhZ+CoVTU0cUwdt7Xe/8HFPVrc91dx5bNfn\\nldvOOfue3+au/c4Z50JcXByOHTsGuVyOjx8/LrnuTxfWO3fuICAgAEqlEsXFxbh06dKvpV5hmpqa\\noNfrUVdXh3PnzuHKlStcR7KoxsZGuLi4QKVSobq6GpcvX+Y6kkXp9XpcuHABq1at4jqKxXV0dODV\\nq1eoq6uDUqnE0NAQ15Es6sWLF9DpdLh37x6Sk5Nx48YNriMtu9u3byM3Nxd6vR4AUFxcjLNnz0Kl\\nUoExhmfPnnGccHl9vf9FRUXIy8uDUqmEWCzG7du3l1z/pwtrQkICYmJiAAAGgwH29va/EHvl6erq\\nwp49ewAA3t7e6Ovr4ziRZUkkEqSmpgKY/wZva2vLcSLLunr1KmJjY7FmzRquo1hca2srhEIhTp06\\n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\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x110708b10>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:proc\\n\",\n      \"Outliers:  \\n\",\n      \"Suspected outliers:  105, 146, 170, 27, 75, 93\\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\nTkSuQmCC\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x11097bd90>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:reg:del\\n\",\n      \"Outliers:  105, 106, 109, 121, 128, 13, 135, 137, 141, 142, 144, 146, 147, 149, 152, 153, 157, 158, 163, 170, 171, 175, 179, 187, 19, 195, 24, 27, 32, 40, 49, 55, 56, 64, 65, 75, 84, 9, 93, 94\\n\",\n      \"Suspected outliers:  192\\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\nazxvtk/7/NpnLx7u3bvH1NQUHo8HgC9fvjAyMqLwFVmAwlfkB0RHR8+Z6zk2NkZMTAzzW6XPzMwQ\\nCoWMx7OCwaDxeNmyZX97zbfMNm2fnp6mvLyciooKIHyvOCoqCo/HY2whL3TM7du309/fj8lkwmKx\\ncO7cOUwmEzU1NcZzYmJiFqxlZmaGlpYWkpOTAfD7/X/U9DKRn0H3fEV+QEZGBoODg3z+/JlgMMiR\\nI0fw+Xxs27bN2AIeHR3l0aNHpKenYzabGR4eBsJb1n6/f8EvLEVFRRmhvZDs7Gxu3Lhh1HHw4EFu\\n3bpFTk4Od+7cIRAI8PXrVyNg58vNzeXixYtkZGSQnJzM8PAwr169MoJ0ofpmLyCys7Pp6uoCwhch\\nhYWFvHnz5pu1iyxmWvmKfAeHw8GlS5dISUmhrKyMPXv2MDMzQ35+Pjk5OSQlJXHq1Ck8Hg8mk4nm\\n5mbi4+Ox2+309/djt9tJTU0lJSVlztbtfPHx8axdu5by8nIuX76M2+2mpqaG1NTUOa/Jy8vj+fPn\\nFBcXEwqF2LFjBw6HAwCXy8XevXuJi4vDbDYbK9jGxkasVitWq5WsrCzevXtHVlYWAKmpqQuuWmff\\nOzMzk/r6elavXk11dTVNTU0UFBQQCoU4evSotpxFvkEjBUX+QC9fvuT27dvGdvSBAwcoLi7GYrH8\\n0rpEJEwrX5E/0Lp163j69CkFBQVA+N6uglfk96GVr4iISITpC1ciIiIRpvAVERGJMIWviIhIhCl8\\nRUREIkzhKyIiEmEKXxERkQj7C9hBa6fLD+OIAAAAAElFTkSuQmCC\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x1146b5f90>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:reg:write\\n\",\n      \"Outliers:  105, 106, 109, 121, 128, 13, 135, 137, 141, 142, 144, 146, 147, 149, 153, 157, 158, 163, 170, 171, 175, 179, 187, 19, 195, 24, 27, 32, 40, 49, 55, 56, 64, 65, 75, 84, 9, 93, 94\\n\",\n      \"Suspected outliers:  152, 174, 192\\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAdcAAAFtCAYAAABV1SDSAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlgE2X+P/D3TO40TZselEKhLS33UUAF5BIRQRC0qKwX\\nqLi7iLveut9Vvt91cb3XVX+C7lfd/bq7HogHiOKF3BSRSy45e0Dvu2nS5s7MPL8/QtOmSScB00P4\\nvP6ROT6Z58nEfpKZZz4PxxhjIIQQQkjU8N3dAEIIIeRCQ8mVEEIIiTJKroQQQkiUUXIlhBBCooyS\\nKyGEEBJllFwJIYSQKKPkeoHyer2YPHkyfvOb3/jX7dmzB7Nnz+7GVoW3aNEibNiwIeT6r7/++pxe\\na+3atVi6dGlU2lVTU4NbbrklKq8Viblz52Lv3r2y+zQ3N+OOO+74Wce5++67YbFYAABLlixBUVHR\\nz3q9FlVVVZg7dy5yc3Nx+PDhqLxmV/nkk0+watWqiPfv6s8G+WWg5HqB2rhxI4YMGYLjx49H7Q9m\\nV+E4rrubECQlJQWrV6/usuNxHBf2fbBarfjpp59+1nF27dqFlkfd3377bWRlZf2s12uxZ88eJCcn\\nY926dcjJyYnKa3aVH3/8ES6XK+L9u/qzQX4ZlN3dANI5PvzwQ8ydOxfp6en4z3/+g7/85S8AAKfT\\niQcffBAlJSWIjY3F008/jYyMDDz++OMwGAzIz89HdXU1BgwYgFdeeQV6vR779+/HSy+9BKfTCZVK\\nhYceeghTpkzB2rVr8emnn8LlcsFgMGD+/PnYsGED3G43KioqkJqaittvvx3vv/8+iouLsXjxYixe\\nvBgOhwPLly9HSUkJLBYLYmJi8PLLLyMzM1O2T5s3b8b//d//weVyYd68ef5fpQcOHMDLL78Mp9MJ\\njuNw//33Y9q0aQCA2tpa3HPPPaisrIRSqcTf/vY3ZGVl4dChQ/jb3/4Gj8eDuro6TJw4Ec8++yxe\\neeUV2O12/OlPfwIA7NixA6+//jpeffVVzJ07FwcPHoTX68ULL7yA3bt3g+d55OTk4IknnkBMTAym\\nT5+OFStWYMSIEQCA6dOnY+XKlYiLi8Ptt9+O7OxslJeX44MPPkBSUpK/b4WFhVi2bBlcLhcyMzNh\\nt9v92zrq3xNPPAG324358+djzZo1OHPmDJ577jk0NjZCkiQsWrQIN954IwDg008/xb///W/wPA+T\\nyYQXX3wRr732GgDgzjvvxNtvv43bbrsNK1euxPDhw/HRRx/h/fffB8/zSEpKwp/+9Kewn5MWu3fv\\nxmuvvYbm5mbceeed+M9//iP7ehaLBeXl5bjyyivx6KOPBpzzJUuW4NZbb8WVV16JM2fO4Mknn0Rj\\nYyM4jsO9996LOXPmoKCgAH/5y19gtVrBcRwWL16M3Nxc7NmzB8888wzWr18PAAHLK1euREVFBerq\\n6lBZWYmEhAS8+uqrOHz4MLZu3Ypdu3ZBq9VixowZWLJkCf7xj3/AZDLh6aefxoEDB6BSqdCvXz88\\n//zzMJvNmDdvHg4ePIiVK1eitLQUZWVlqK2tRU5ODiZNmoR169ahvLwcf/jDH3Dttddi5cqVKCgo\\ngNlsRl1dHYYMGYJnn30WBoPh3P5HJz0XIxecgoICNnLkSGa1WtmRI0dYTk4Oa2xsZLt372ZDhw5l\\nBw8eZIwx9tFHH7EFCxYwxhj74x//yG699Vbm8XiY1+tl8+fPZ2vWrGFms5lNnDiRHT582P/a48eP\\nZ2VlZWzNmjVs3LhxzGazMcYYW7NmDbv00ktZdXU1kySJXXvttezBBx9kjDF24sQJNmrUKMYYY99+\\n+y175pln/O198skn2dNPP80YY2zhwoVsw4YNQX1auHAhW7p0KRNFkTU3N7PZs2ez7du3M4vFwmbO\\nnMkqKioYY4xVV1ezK664glVWVrI1a9awyy67jJWWljLGGHvmmWfYsmXLGGOMPfLII2zv3r2MMcZs\\nNhubMGECO3bsGCstLWUTJkxgXq+XMcbYgw8+yD755BNWVlbGRo8ezRhj7LXXXmP3338/EwSBSZLE\\nnnjiCfbkk08yxhi78sor2dGjR/3tblkuKytjgwcPZvv37w95zq6//nr26aefMsYYO3ToEBs6dCjb\\nu3evbP/Ky8v9bfJ6vWzOnDns2LFjjDHGmpqa2OzZs9mhQ4fYiRMn2IQJE1h1dTVjjLF///vf7M9/\\n/jNjjLHBgwezxsbGgLbu2rWLXX311cxsNjPGGFu7di2bM2eO7OekvbVr17J77rmHMcbCvt7ixYtD\\nvift5ebmslWrVjHGGKuqqmJXX301a25uZldddRXbuHEjY4yxmpoaNnXqVHbw4EG2e/duNnfuXH98\\n2+UVK1awGTNm+D+7S5cuZStWrGCMMfb444+zd955J+j4+/btY7Nnz/Yvv/TSS+zgwYMBn40VK1aw\\n6dOns+bmZuZyudi4cePYCy+8wBhjbNOmTWzmzJn+/SZPnszq6+uZJEnskUce8e9HLgz0y/UC9OGH\\nH2LatGkwGo0YOXIk0tLS8NFHH2HMmDEYPHgwRo8eDQDIzc3F8uXLYbPZwHEcpkyZApVKBQAYNGgQ\\nrFYrjhw5gv79+2PUqFEAgOzsbIwdOxZ79+4Fx3EYNGgQYmJi/MceOXIkUlJSAABpaWmYNGkSAKBf\\nv35wu91wOp2YNWsW0tLS8N5776GkpAR79+7FmDFjwvZrwYIF4HkeBoMBs2bN8l/SrK+vx+9+9zv/\\nfjzPIz8/HxzHYeTIkejXrx8AYOjQofjuu+8AAC+88AK2b9+Ot956C0VFRXC5XHA4HBg2bBiGDBmC\\nzZs3Y8KECdi9ezeef/55NDQ0+F8/Ly8PjzzyCBQKBQDf/eDf//73YduvVCpD9rOxsRH5+fnIzc0F\\nAOTk5GDIkCEAgEOHDnXYv7aXcIuLi1FWVoZly5b513k8Hpw4cQIulwtTpkzxn5c777yzwzYyxpCX\\nl4c5c+bAZDIBAObPn49nn30W5eXlHX5OQr1Oi3CvN3bs2DDvHGCxWHDq1CksWLAAANC7d2989913\\nKCwshMfjwYwZMwAAvXr1wsyZM5GXl4fx48fLvub48eP9n91hw4YF9IOFqAo7ePBgKBQKLFiwAJMn\\nT8bMmTMxatQolJeXB+w3adIk/y/QXr16YerUqQB8/w+0PcY111yDxMREAMBNN92E5557Dn/84x/D\\nvhfkl4GS6wXG4XBg3bp10Ol0mD59OgDAbrfjgw8+wMiRI8HzgbfZOY6DUun7GGg0moD1jLGQf2Qk\\nSYIoilAqlQGJFQDUanXAcstrt7Vq1Sp88sknWLhwIa677jrEx8ejoqIibN/atl2SJCiVSkiShKys\\nLHz88cf+bTU1NUhMTMQXX3zhTwLt3XbbbRg6dCimTp2K2bNn48iRI/6+LliwAOvWrUN9fT1mzpwJ\\nnU4X1P+274soivB6vQBa37cWLesBQKVSBb3/LTEtr9uSsFv+K9e/6urqgDYYjUasW7fOv66urg5G\\nozEgFvAl3crKSmRkZIR8b0Kdd8YYBEEAEPpzIifc67W9pNyRls9R2/vQxcXFEEUxaF9JkiAIguy5\\nCNWPtkLd746NjcXnn3+OAwcOYPfu3Xj44YexaNEif2Jv0f4zF+r/AaD1HLe0ue0y+eWjAU0XmPXr\\n1yMxMRF5eXnYsmULtmzZgk2bNsHhcKC+vh6nTp3CiRMnAAAfffQRLrnkEmi12pB/IDmOQ05ODs6c\\nOYMjR44AAAoKCrB//36MGzcu7B/VUBhj+P777zF//nzceOONyMjIwJYtWyBJUtjYlsRhtVrx7bff\\n4oorrkBOTg5KSkqwb98+AMDJkydxzTXXoK6ursPXaWpqwrFjx/DYY49hxowZqK6uRmlpqf8P9YwZ\\nM3D06FF88skn/l9KbU2ePBmrV6+GIAiQJAkffPABJk+eDABISEjwDzI6dOiQbDtaxMfHY/jw4fjk\\nk08AACdOnPCfI7n+tXy5AIDMzEyo1Wp88cUXAHyjda+//nocP34c48ePx65du/xtWbVqFf76178C\\n8P2Bb5t0Wn6ZfvPNNzCbzQCANWvWwGQyIT09/bzOeTRez2AwYPjw4Vi7dq2/f7fccgvi4uKgUqmw\\nceNGAL4vHt999x0mTZoEk8mEyspKmM1mMMawadOmDl+/7ReA9u9Ji61bt+LOO+/EmDFjcN999yE3\\nNxenTp067wF4W7ZsQXNzMyRJwscff+z/MkwuDPTL9QKzevVq3HXXXQH/w8fGxmLRokV49913kZWV\\nhddffx1lZWVITk7Giy++CKDj0akmkwmvvfYannnmGTidTvA8jxdeeAHp6ek4cOBAwL6h4tuuaznG\\n3XffjSeffBLr1q2DyWTCjBkzsGPHjrB9MxqNuOGGG+ByubBo0SJcdtllAIAVK1bgpZdegtvthiRJ\\neOmll5CamtrhrxGj0YglS5Zg/vz56NWrF7KzszF16lSUlpZiwoQJUKvVuPbaa/HDDz9g5MiRQfG/\\n+93v8OKLLyI3NxeCICAnJ8c/AOqxxx7D8uXL8dFHH2H48OH+gU0dvT8tXnnlFTzxxBP48MMPkZ6e\\n7r/km5CQ0GH/JEnCsGHDMGfOHHz44Yf4+9//jmeffRb//Oc/IQgCHnzwQf9l6P/6r//yP5bVq1cv\\nPPfccwCAq6++GrfffjveeOMNf1smTpyIO++8E3feeScYY0hISMBbb73lP3+R/Mpru+5cX6+ttgOa\\nXn75ZTz11FN4//33wXEcnn32WfTu3RtvvPEGnn32WaxcuRKiKOK+++7DuHHjAAA333wzbrzxRiQn\\nJ/sHubW0L9RnEwCmTp3qHwCYm5vrH9B0xRVXIC8vD3PnzoVer0d8fDyefvppSJLkjw3Xn7bbkpKS\\nsGTJEpjNZlx22WVRe2yM9AwcO5+vooQQQs7bypUrUV9fj6eeeqq7m0I6CV0WJoSQLhbJc8zkl41+\\nuRJCCCFRRr9cCSGEkCij5EoIIYRE2TmPFhYEEY2Njs5oyy+CyaSn/lP/u7sZ3eZi7v/F3HeA+p+c\\nHHtO+5/zL1el8uJ+0Jn6T/2/mF3M/b+Y+w5Q/88VXRYmhBBCooySKyGEEBJllFwJIYSQKKPkSggh\\nhEQZJVdCCCEkyii5EkIIIVFGyZUQQgiJMkquhBBCSJRRciWEEEKijJIrIYQQEmWUXAkhhJAoo+RK\\nCCGERBklV0IIISTKKLkSQgghUUbJlRBCCIkySq6EEEJIlFFyJYQQQqKMkishhBASZZRcCSGEkCij\\n5EoIIYREGSVXQgghJMoouRJCCCFRRsmVEEIIiTJKroQQQkiUUXIlhBBCooySKyGEEBJllFwJIYSQ\\nKKPkSgghhESZsrsbcKF77rnlaGw0d+ox7HY7ACAmJqZTjwMACgUPUZQ6/TjnymRKwLJly7u7GYQQ\\nAoCSa6drbDSjoaEBnErXacdgXhcAwC1ynXaMnox5nd3dBEIICUDJtQtwKh0M2dd12uvbCr8AgE49\\nRk/W0n9CCOkp6J4rIYQQEmWUXAkhhJAoo+RKCCGERBklV0IIISTKKLkSQgghUUbJlRBCCIkySq6E\\nEEJIlFFyJYQQQqKMkishhBASZZRcCSGEkCij5EoIIYREGSVXQgghJMoouRJCCCFRRsmVEEIIiTJK\\nroQQQkiUUXIlhBBCooySKyGEEBJllFwJIYSQKKPkSgghhEQZJVdCCCEkyii5EkIIIVFGyZUQQgiJ\\nMkquhBBCSJQpu7sBvxRmcwPWr18Hu92KceMm4dJLx3d3kwghhPRQlFwjIIoili9fhurqKgDAtm3b\\n8NhjT2DcuMu7uWWEEEJ6IrosHIH8/JP+xNpix46t3dQaQgghPR0l1wjExcUHrYuPN3VDSwghhPwS\\nUHKNQJ8+fTF79jz/cmJiEq677oZubBEhhJCejJJrhMaMuQQpKb2h1WoxduylSEhIDBuzfv1nKC8v\\ng81SD3vt8S5oJSGEkJ6AkmsE7HYbXn75BdTUVMPlcmHjxm/x1Vefy8YcOXII7733L4iiCMYkNJXs\\ngsdW20UtJoQQ0p0ouUbg9OkiuN2ugHUnThyTjQm13dNcHdV2EUII6ZkouUYgIyMTKpU6YF129iDZ\\nmIEDBwetUxmSo9ouQgghPRMl1wjExhrxwAOPwGRKAM/zmDJlWtgBTWPHXoqbbroFHMcB4BCbdhk0\\nsald02BCCCHdipJrhM6cOQ2LxQJJknD6dCFstmbZ/b1eLwoKToExBoDBY6sFY1LXNJYQQki3ouQa\\ngZqaanz22Sf+5FhRUY7PP18rG/P99ztw+PBB/7LbUgJXY0mntpMQQkjPQMk1Ag0N9Wd/gbaqq5Mf\\n+VtfXxe0TvTYotouQgghPRMl1wgMGjQYSUmBg5EmTZoiGzN+/EQoFG1KN3MKaOPTO6N5hBBCehhK\\nrhFQKlVYtmw5hgwZhr59++L22+/EpElTZWP69euPhx56DCqVCjyvgCl7BpRaYxe1mBBCSHei5Bqh\\nf/7zf3Hy5HFUVFTg449XIT//pOz+Fksj/vnPN+H1eiFJIqwlOyEJ7i5qLSGEkO5EyTUCRUUFOH78\\nqH/Z6/Xim2++lI3Jy9sGq9XiX5Y8djjNpzutjYQQQnoOSq4R4Ljgt4nn5d+6UDG+Z14JIYRc6Ci5\\nRmDAgCzk5IzxL2s0GsyZM08mApg69UokJib5lxUaI7QJAzqtjYQQQnoOSq4RWrhwMQYNGoLU1FTM\\nn/8rZGUNlN3faDRi0aK7oVQqwfEKGPuNB69Qy8YQQgi5MFByjYDX68Vzzy1Hfv5JVFVVYfXq97Bt\\n22bZmOLi01ix4m8QBAFMEtFYtBmCy9pFLSaEENKdKLlGID//JBobzQHr9u79QTZm3749kKQ25Q6Z\\nBJeltDOaRwghpIeh5BqBXr1SggYopaTIF+FPSekdtE6poedcCSHkYkDJNQLJyb1wyy23+ysuZWYO\\nQG7ujbIxEydOwbhxE/zL2oQsaOL7d2o7CSGE9AyUXCOUmJgEnU4HAEhOToFGo5XdX6FQoFev1l+v\\nSq2RHsUhhJCLBCXXCFitFrz55kr/NHN79/6Azz9fIxuzf/8efPnlOv+yrfIg3E0VndpOQgghPQMl\\n1wiUlZVAEISAdWfOFMnGnDkTXI3Ja2+IarsIIYT0TJRcIzBgwEDodPqAdSNH5sjGjBgxKmidxtgn\\nqu0ihBDSM1FyjYBer8cf//g/SEvrD6PRiGuvvQ6zZ8+VjRk2bATuvvseKBQKcByPuIypUMUkycYQ\\nQgi5MFByjdCOHVtRXl6KpqYm7Ny5AzU1NbL7u1xObN26EaIogjEJjrqTYJIgG0MIIeTCQMk1AuXl\\nZdiyZaN/2Wq1YP36z2Rj8vK2B9x39dpr4Wos7qwmEkII6UEouUagZZRwW83NwesCtzcFraP5XAkh\\n5OJAyTUCgwYNRlpaP/8yx3G48soZsjGTJk0NeBaWU6ihNWV0VhMJIYT0IJRcI8DzCjz22DIMGzYC\\n/fv3xx13/Bpjx14qG5OS0hsPPfQYVCoVeIUS8VnToVDHdFGLCSGEdCdKrhGQJAmvvvpXHD9+FKWl\\npXj33Xdw+PBB2Zi6ulqsWPEyvF4vJFGApWgrRK+ji1pMCCGkO1FyjUBBwSmUlJzxLzMmYfPmDbIx\\nO3duh9PpbI0R3XCZz8hEEELOx8cff4CPP/6gu5tBSABKrhHQ64Mv54ZaF247R5OlExJ1+/btwb59\\ne7q7GYQEoOQagX79+mPKlGn+5djYWMybN182ZsqUaejXr3UWHJU+CbqEzM5qIiGEkB6EkmuEZs6c\\n7RucxPOYPv1qpKbKlzLU6/WYM+c6X4Umnoc+ZTg4XtlFrSWEENKdKLlGwOVy4oUX/uIbnCRJ+Pzz\\ntdiw4WvZmJMnj+Ott173VWiSJFjPbIfXQYX7CSHkYkDJNQKFhfmw2+0B68KNFj5y5FDQOreVppwj\\nhJCLASXXCKSl9YdCEXhJNz09QzYm1HaVPiGKrSKEENJTUXKNQHy8Cb/97b3gOA4AMGbMpbj++htl\\nY8aNuxyzZs3xL8f0HglNXFqntpMQQkjPQMk1Qg6HHYwxAL5aw+0nT29PkiTYbLbWZcHtjyeEEHJh\\no+Qagfr6Orz33r/9ywUFp/D552tkY374YSe+/36Hf9lZnw+3tayzmkgIIaQHoeQagerqKjAmBayr\\nrJQfnBRqu+CyRLVdhBBCeiZKrhEYNGgw4uLiAtZddtk42ZhLLx0Hjmvz9nIcNHH9Og4ghBBywaDk\\nGgG1WoNly5ZDrVZDqVRiwYJbMX36TNmYAQOycf/9D0OpVILnFYgfMB0qnamLWhx9kuiFo74AjvoC\\nSKK3u5vjxxiD4HWjubkJ9fV13d0cQggBQMk1Yh9//CE8Hg8EQcD69etQXHxadn+brRmrV78PQRAg\\nSSKaK/ZDEj1d1NrokgQ36o99BuuZ7bCe2Y76Y5/1mL5YirbAabPCbDbj4Yd/h8LC/O5uEiGEUHKN\\nRHHxafz4417/ssvlxJdffi4bs2PHVtTW1viXRZf1FzsrjtNcBNHd5F8W3U1wNch/uegKgtMCV2Pr\\ne+p2u7F+/bpubBEhhPhQco1AqMduwj2KE2p7+0FRvxRMEoPXseB1XS1UG7zennPJmhBy8aLkGoGs\\nrIEYPHiIf1mhUAYUiAhl8uQrEBtr9C/zKv0vdlYcXWIWeKXWv8yrdNAmDOjGFvmo9IlQx6b6l3me\\nxzXXXNuNLSKEEB9KrhHgOA5Llz4AjUYDpVKJ225bhKFDh8vGJCQkYunS+3wz6SgUiM+cGpCgfkkU\\nKj3iMqZCqUuAUpeAuPSpUKh03d0sAEBcxmQolCoolUr86le3YdSo0d3dJEIIoeQaCUEQ8MILf4Hb\\n7YYgCHjvvX9h9+7vZWMqKsrx6qt/9c2kI4poLNwEwd3cRS2OLsFlRWPRZghOMwSnGY1FmyC4msIH\\ndjLGGMwF30EUvBAEAatXv48dO7Z2d7MIIYSSayTy80+ipqY6YF1e3nbZmB9+2Blw35VJAtyNJZ3S\\nvs7maiwG2t7fZKJvXTfz2ushuqwB63bulD8vhBDSFSi5RiAhIXg2m1DrArcnBq3j1fqotakr8arg\\ndit6QF98l6a5gHUmE808RAjpfpRcI9C7dx/Mmzffv5yS0jvsrDiTJ1+BYcNG+Jc1cWnQxmd0VhM7\\nlS5hANSxffzLamNfaE3dPzhLoTHAkJrjX05KSsYNN/yqG1tECCE+lFwjNGzYCCgUCv+/4+LiZfdX\\nq9XIyRnjn6ZOY0wDx0f/7RZcVjiaG9HcWIuGk19FdF/XZSlD7ZGPUfXjv2A5swNMkn+siOMV0MT1\\nBadQg1Ooff/mFdHqws+iju3tLzM5dOhwmEy/3CpYhJALByXXCNhszXj11Rchir77jlu3bsKXX8oX\\nKzh06AA+/PA9/zRzTWW74WmukY05H5Yz2yEKvmc7Pc1VsBbnye4vCR5Yijb7ikJIIpz1+bBV/yQb\\n426qRHP5PjDRAyZ60Fy2F+7mqqj14XxJogeNhZv9zw/n5W3DunXysxURQkhXoOQageLi0/B4Asv9\\nnTp1QjYmP/9k0DqPLfrJ1WurDTxGmATudTYE/VL1hokJ1e5wMV1BcDSCSYFFI8KdF0II6QqUXCOQ\\nkTEAarU6YN2gQUM62Ltl++CgdWpDr6i2CwBUMYGvqTakyO+vSwTHKwPXhWlXqHarwhynKyj1JnC8\\nKmBduPNCCCFdgZJrBAyGWDz00H/577leeeWMgAFOoYwefQluuWWh754rxyG233ioY3tHvW3xA64A\\nr/AlS5UhBXGZU2T355VqxGddBYXaAHA8dIkDYUgdJRujMfZFbNpl4BQqcAo1YtPGQWNMlY3pCrxC\\njfjs6f572VOmTMP8+Td1c6sIIYSSa8ROnjzmv+d6/PhRWK3yE597PB789NNh3z1XxuBpqgCTol9b\\nWHBaIIm+y7yCowGCM/yE7B5bNUSPDWCS799ep+z+TBLhbqoAE71gosf37xD1hruD11brf19PnDiG\\nxsbGbm4RIYRQco1IdXVlwGwrNTXV+OKLtbIxO3dux7FjrQOF3NZyuCzRLyLRVPqD/99MEtBUtlt2\\nf8HdDHvVYf+y2G45FKf5NDxNlf5lT1NFjygiIXrssFUe8i/X19fhs88+6cYWEUKIDyXXCJjNZv+o\\n3xYNDQ1hYoK3Sx57VNvFGIPodbQ7hqODvc9u9wZvF8O063xiuoLocQBof17qu6cxhBDSBiXXCAwa\\nNAS9egUO4Jk8eapszIQJk6BUthk4xCugMaVHtV0cx0GXkBWwTpeY1cHePqqYZCg0xoB1usRs2Rit\\nKQPg2jzXyil867qZKiYJCm1cwLopU6Z1T2MIIaQNSq4RUCqVeOKJP/tnxVm0aDEuv3yybExaWj88\\n/PB/+WfFMWXPgFITG/W2xWVMglKlAcfz0CZmw9j/ctn9OY5HwqBZUMX2hkJjRGzaZWETslIbB1PW\\ndP+sOKbsq6DUGmVjugLHcUgYOBP82VlxbrllIaZOvbK7m0UIIZRcI/Xmmyv9s+KsWvUeTp48Lrt/\\nY6MZb731hn9WHOuZPEiCK+rtslUdhuB1g0kSXA2FsIcpCAEA1uI8eJurIbqb0FyxH+4m+YIQotcB\\na3Gef1Yca3EeJG/0+3I+rMXfQzo7K87HH6/CTz/J3z8mhJCuQMk1AoWF+QHFCURRwLfffiUbk5e3\\nDU1NrTO2SF4HnOYzUW+bvfpo4HLN0Q729PHa6+FpbjPDD2Nw1Mp/UXA1nA74YiB5nXCai869sVHm\\ndZjhaW4daCVJUtjzQgghXYGSawQC7p3KrAu3vaUGblS1r1cc7hihagKHjQneznHdX1s41PsZ7rwQ\\nQkhXoOQagYyMARg79jL/slarw9y518vGTJ16JZKTWysbKbRx0CZEfyaZ2NQxAcuGPmM62NNHpTNB\\nE986sIrjlYjpPUImAtAlZEHR5n6xQmOENnHAebQ2upS6+IDZedRqddjzQgghXYGSa4Ruvvk2qNVq\\nKJVKXHfdDcjIkE8uBkMsbrvtDiiVSnC8Asa0y8Ar1LIx50OXNBAKlQYcx0NrGhB2cBIAGPpeAlVM\\nL/BqA2J1SFyiAAAgAElEQVRSRkKlT5Ldn1dqEJt2GRTaOCi0cYjtpL6cD0OfseAVSigUCsydez2y\\nswd1d5MAAE6nA//61z/wxz8+hH/+803Y7bbubhIhpAtRco2Ax+PGc889BY/Hc3bgzAfYsmWjbMzp\\n04VYseIVCIIAJoloLNocUfWkc2U5swOi1w3GJLgaT8Na/L3s/kwS0Zj/Lbz2WkgeG2xVB+GoC55k\\noC2vowGWoq0QXVaILissRVvgdZij2Y3zwiQJ5vxvIYkCRFHE2rWfYMOGr7u7WQCAf/zjf/HNN+tx\\n5sxpfPfd1/jf/13R3U0ihHQhSq4RyM8/FVTucN++PbIx+/fv9U+FBgBgDC5raVTbxRiD2xL4mu4w\\nVaC89rqgohDhYlyWUgQWa2BwW8vOpamdwuuoh+QNLGaxf7/8eekq+/YFVsryfR5YB3sTQi40lFwj\\n0Lt3atDgmT59+srGhNqu1MpPsH6uOI6Dot3zpu2LKrSn0MQCZydwjzRGGWJ7qHVdTaExBA3GSk3t\\n002tCdT+/Kem9vFN4kAIuShQco1AUlIybr/9Tv9ydvYgXH/9jbIxl18+GRMnts5Qo0saBE1cv6i3\\nLS59sv+PNq/SIS59ouz+CnUMjGnj/RWXVPokGFJHy8ZoTRnQtqkEpUscGDAoqrsoVHoY+433L2dm\\nDsCNN97cacez220QBCH8jgB+/euliI83AQCMxjj89re/67R2EUJ6HnpuIUKxsbHgOA6MMRiNRqhU\\n8m8dz/MwGlt/VfJKbaf8cuEVKjBwABjAq4LmNw2FU2p8yZWJ4FXaCB6r4aBQ6QCcTeKd1JfzwSs1\\n/n8bjXFQqcL3/1w5HHa89trfcPDgjzAajVi06G5cccV02RitVgu9PgYWSyP0ej20Wl3U20UI6bno\\nl2sELJZGvP323/33zA4c2I/PP5efFWfv3h8CChrYq4/AbS2PftvO7ADO3tuV3E2wFu+U3V/0OmEt\\nzgMkDwDfbD22qkOyMW5r6dniFAwAg73mJ7gs3X/PVRJcsJzJ8y8fPnwQa9Z8HPXjfPbZpzh48EcA\\nQFNTE9566/WAAiGhvPXWG6is9J3v6uoqGtBEyEWGkmsEystLIYqBlwOLi+WrLZWUFAeti/YIW8YY\\nBGfga3od8rP1iC6rPxm3EMK0K1S7hTDH6QqCywqwwHllS0qiXwWr/WsKgoDycvkvF+1jSkuLaUAT\\nIRcRSq4RyM4ehJiYmIB1OTnyxRpGjQq+j6mJkx8Eda44joPaGPia4Y6h0ieBU2gC1qnDxGiMwdvD\\nxXQFlT4RvFIbsC7U+/5zjRrVrlCHIRZZWQPPKWbUqNE95lI6IaTzUXKNgFarw+OPP+mb4Ybncd11\\nN2DWrDmyMUOGDMOSJb+HQqEAx/OIy7wCKn1i2GNJggvOhiJ4bLURtS1+wBVQKNUAx0ET3x9xGVNk\\n9+cUSiQMmgWlLgG8UouYlBGISRkuG6M29EJcxhTwagMUagPiMqdCHZMcUfs6E8crYRo4C7xCCZ7n\\nMWfOdZg7Nzfqx5kzZy7mzs2F0RiHrKwsPP74n6DRaGRjli69D5deOg4GQyxGjx6L3//+oai3ixDS\\nc1FyjdDGjd/6ZriRJGzdugnV1ZWy+zudDnzzzZcQRRFMkuCoOQYmyY809ToaUHvkY1hOb0XDiS9g\\nLZEvCAEAbks5RMEDMAa3pQyepoqwMY66kxCcZkiCC476At/lVRmS6IW95hgkjw2ixwZ7zTEwMbJR\\ns53NWX8KkihAkiRs374ZFRXRvxdcWVmBbds2o6nJiqKiImzatCFszJEjh3DgwH7YbM04fPig/54t\\nIeTiQMk1AmVlpdixY6t/ubm5CV98sU42Ji9vG8rKWoszeB31YWfFsVUdBhM9/mVH7QkI7mbZmOaK\\nfW2WGJrL98vuL7iscNbnt0aIbtirjsjGuMxFAfd2BUcDnObTsjFdQXA1BVSXstvtWLduTdSP88UX\\nn8Fmaz0P27Zt9g9W6sjq1e9Dknz3thlj+PDD96LeLkJIz0XJNQIOhz3EOvlasXZ7cEzbxBkKE4K3\\nM9ErGyO1e832y0H7hzjG+cW4ZWO6Qqj3M9S5+rlCnUuHwxFiz45jHA47DWgi5CJCyTUCAwcORnp6\\nhn+Z4zhMnz5TNmbSpKnQ6VqfbeQUmrCz4uiSBwcsq2J6QaVPkI3RJw+RXW5PFZMEZbt7v/p2xw1q\\nV8IAcG0K9XMKNXQJPWBWHH0iVG3u/XIchxkzZkX9OFddNTNgMFJm5oCwA5quvjqwHVddNYsGNBFy\\nEVEsX758+bkGORzyv3QuNBzHYcSIUdi6dRN4nsfChXdh6tQrZWNiYgzo1y8de/f+AHA8TFkzwg5o\\nUulMAMdD9Nqh0iUifsAVAUUSQlHHpsLdcAKMAbrEbMT2u1z2jzjHcdAY+0BwNgK8AobeOdAny88k\\nwyvVUOpMEJyN4NV6xKVPgjpGfiadrsBxHNSxfeA250PB87jlloVhv/QAQEVFOdas+QgHD/6I5ORk\\nGI3ypRxTU/tAo9Ggvr4O2dnZuPfehxAbGysbM2zYSDQ01MPlcmH06Evw618vgULR/XPg/lwxMZoe\\n9///xo3fAABmzpzdqcfpiX3vStR/+b/F7dEv1whIkoSXX34ebrcbXq8X7777Dg4ckL+3WVNTjdde\\n+5tvEJQooLFoM0SP/KVEp/k0bBX7Ibqs8DRXwlK0JWzbmsv2QvC4wSQRzvoC2ALuwQZjjKGxcDM8\\nzVUQXVY0l++FK0zhfsHdDEvRVghOMwRHAyynt0D0RP/y67lijPneV8ELQRCwatW7vi8zMhoa6rFs\\n2WP45pv1+PbbL/Hf//0H1NXJj8zev38v3n//36isrMDBgwfx8svP+++ndmTVqnexbdtmVFdXYefO\\n7Xj33XfOuX+EkF8uSq4RyM8/ibKy1tlnGGPYunWTbMz33++A2+1qjRE9cDXKD2hy1J0KWPba68IW\\nhWgf0365Pa+9LqjwhKMuv4O9fVzmM2BS671fJnp7xoAmR0NQMYtwUwH+8MP3cDpbv+Q4nU7s2pUn\\nExH8miUlxSgqKggT81275U10z5WQiwgl1wgYDMGXAA0GwznHhLvEG2o7rzi3mPM6hlJ+4vNQ28Md\\npytwIdoQExPuvARvD3Wufn5MbLtlA91zJeQiQsk1Amlp/TBt2lX+5bi4OFx33Q2yMVOnTkNGRusA\\nJlVML2hNGbIxhtTRAdWT9L2G+6ZVkxGbdlnrAscFLoeg1MYFDHrilVoYeufIxmgTsgIGQaliknvG\\ngCZNLPS9hvqXY2NjkZt7k2zMxImTAwYjZWZmYdKkqbIx119/Y8B92auumhl2artbb73Df4+V43jc\\ndtsdsvsTQi4slFwjNG3aVVAqfZWApkyZhpSUFNn9tVodZsyYBZ7nwXE8dMlDwPHyM+kotXH+kblK\\nXQJ0iVmy+wOAxtgHCqUKAAeNMQ3q2N5hY3SJ2VBoTWdHMA8ImhO2PV6hgj55KHiVHrxKD11S+L4w\\nSUJT6R7UHFqF+uNfwGOrCdsu0eNAY+Em1Bz6AOaCjWHvUbf0heN952XixClhk55arcHVV1+DhIRE\\nJCQkYsaMWdBqtbIxvXunYvLkKTAYYpGZmRl2RhwAGDZsOEaNGg29Xo+RI0dh5Ej5LzDna8eOrXj4\\n4d/jwQfvxaZN33bKMc5HUVEB/vznx3HPPXfhnXfehtcr/0jZ+ZAkCatXv4/y8jJUVVXi6FH557UJ\\n6Uo0WjgCTqcDTzzxKDweNxhjyM8/BYMhFgMHdvwIy/HjR/HKKy+evc/G4LaUQBvfHwq1vsMYW9Vh\\n2KuPAEyEJDjhtpQgJmV40ETtbTUWboLg9FVYEt1NEJwW6BKzO9xfEr2oP/45JK8dYCK89jpwvArq\\n2I6/LHhsNbAUbgKTvGCSF25rKTRxaVCoYzqMsVcfga3qIJjkheS1wxVBXyxFm+G2lIJJAkSXFYKr\\nUbYvTBJQf/xzMNELxhiKigqg0WgwZMiwDmMKCwvw4otPw+l0wul04sCBfRg1ajSSkjou5/jVV59j\\nzZqP4fF4YLFYsHfvD7jmmrlQKjv+gvHaay/jwIH98Hq9qKmpRklJcURJ+VycPl2E559/Ck1NVths\\nzfjxx30YPnwkkpN7RfU4bUUyYlQQvFi27DGUl5fB5XKisDAfPM9j+PCRUW3Lhg1fY9Wqd8EYgyiK\\n2LPnB8yaNQcqlfxtjvNFo2Wp/+eCfrlGoKioIGAQDAAcOXJYNibUt2h3k3zJxPalCyXBJTuTDmMM\\nnnavGe4YXkd9UPGF9q/RXqjXDB8T2BcmuOG1yw/Oah/Tfrk9r70BTAgsZvHTT+HOS/D2cDHtt9vt\\ndpw+XRgmJnAav6NHj0R9QFOo1wzXl65QVlYKi6UxYF379yMa2vfV5XIiP19+QB85P4wxGpB3jii5\\nRiAtrX/Qr5TMTPl7jhkZwdtVMWGec9UHPjvK8UootR0/g8lxXFBBiLDP0mpNvonS22j/GsHtCt6u\\nDNuXdtt5BZQ6+edJ2/e//XJQG3TxAB/Yl1Dve7jtmZnyl9/bx6hUKqSl9ZeNaf/5yMjIjPqAplCf\\nwXCfy66QmtonoIAKEP68nI/2fVUoFOjfPz3qxyHAiRPHcOQIXXY/F3RZOAJarQ7Jyb2wf/9eMMZw\\n2WUTcMcdd0OpVHUY06dPXzidThQU+L5JG1JHR1A9KRlehxmiuwm8Uou4jClhizWoDb3gbCgAGINS\\nZ0L8gGlQqHQd7s8plFBqYuFurgIkEZr4/jD2nwCO77jAgVIbByZ5fb88OR4xvUciplfHl159fekF\\nwdmmL+mToTbIX65UxfSCp7kKkuCCUhsfvi+8EkqNEe6zz+mOHXspFi/+rexlwd69U+H1elBUVAie\\n53HttdfjmmuulW1XdvZAlJeXoqqqEnFxcfjNb+6VvSUAAIMGDcbx40fR1GRFnz5puP/+RxAfb5KN\\nAQCbrRm1tTWIjTWGTcYpKb0hiiIKCwvA8xxmz56HOXPmdeqo5EguDSqVKvTt2w/Hjv0Et9uFUaNG\\n4ze/WQq1OrojzLOyBqKysgIVFWXgeR733HMfhg0bEdVjtHWxXhZljOHNN1fi8OFDmDLlyot21Dtd\\nFu4kZnODv3BAfX0d3G752rqiKKK+vq512WMLe1mFSYLvXih89Xwlb/gBPZLg9k9+LnmdQZdJQ7bN\\n4/DXMRY99rCz9TAmQXTbfBOTM9EXw+SLKDDJ6y80IQkeiBH2RRJcZ//t8vUtXF+8Dv/7Wl9fB5fL\\nJbu/JImoq6uD1+srPFFfXwdRFGVj3G436uvrwBiD3W6H2Rx+onibzYamJt+98OZmK2y2prAx33zz\\nJe655y488sh9eOyx+9HQUB+mLxLq6+vg9Xoi7ktXsVjM/vrKDQ0NYc/L+Wg5L4DvvYjkvJBz99JL\\nz+Lo0SM4fPgw/vu//wCP5+L7gnE+OHYeF9Lr6uRnarnQ1NXV4r77lgQklNhYIxISOq77a7PZgv44\\nmrKvhtbU8WUrS3EenG2LQHA8euXcKvvrrfanTyC2mTJOqUtA8oiOHxMSPXbUHl4NoPW063sNQ1z6\\nxA5jnA1FsJzeGrAuPusq6GRqJVuLv4ej7kSbvnBn+9LxgK66nz6F4LK09kUbj+SRHT9aI3odqD38\\nIdDmI2wwxCIxseNL1g6HHXV1dQHrkpKSERPT8eAss7kBzc2Bn/m+fdNkBzRVVlYEjJBVKpXo2zet\\n476IIsrLA6fLMxgMSEzs+MqFw+EIqi6VmJgU9hnsn0Oh4CGK8l+sQvUlJsaApKTolsxsbDSjqan1\\nSwvHcVix4i2kpIQfMX8+kpNjL7q/fT/9dBhPP/2ngHW//vXSsPNZX4iSk+WfbW+PfrlGoLa2JuiX\\nmiDIP1ogCMG/BgW3/K8X0dVuO5MgyZQZZIwFxYjhjuFuRtvEGklMqHafcwxjvl+/5xAT9v1y2wIS\\nKxD+vHi9Ic7L+ZzLEOvktguCIHvlItTrhWprYExwu8P1pSuE+vXcGe1q/54xxlBTUxX141zMamqq\\ng9ZVV9N7HAn5hxUJAN+sOCZTAhobW0fuLl68JKCwRHtnzhThiSceba1By/HQxssPgtGaMuBpbv3g\\nKjSxUMrMisNxHLSmdLgaiwNeQ44qJhm8Sh9wyTlcjDY+HbaKA/AnZY6DJpK+tBntq1Abwg5Q0poy\\n4GpTVjFsX/RJUKgNED2tSXvhwsWyBdzLy8vwhz884E8APM/jf/7nL+jfv+Njbd78Hd5663X/ckJC\\nIl599Q3Ze+4rV76CvLxt/uXx4yfi0Ucf73B/SRLxwANLUVvb+jzwbbfdgdmz53YYU1lZgUcfvR/i\\n2YnreZ7HsmXLww7Q+jki+fUmSRIefvh3qKpqHVF+880LMXfu9VFtS17eNqxc+Yp/OS4uTvYxLHLu\\nxoy5BEqlqs2XIw7jx1/erW36paABTRFQKBQYNSoH27f7Cun/6le3Yc6cebIxJlMC+vTp6xsEBQ6m\\nrOlhCzyoYpIBxiB4bL7BSVnTZS8JA4AmLg2u+hMAY9CaBiAuY7Ls4CSO46Ex9oXX2QCAQ0zKCBh6\\nyz9/qFDpoNDFQ3A2QqHUwZg+ERpjqmyMOiYZAIPgbtMXmWd8fX3pC0giAAZdwgAY+48P0xcO6ri+\\ncDX4BvTccMOvcN1182UHXBiNcejXLx1lZSWIjY3Db36zFMOHj5Jt14ABWQA41NXVIjMzAw888BhM\\nJvmpAHNyRqO2thYOhx2jRo3Gvfc+AJWq42TMcTzGjr0Uzc3N0Gp1mDv3esyeLT84KTbWiMGDh6Cp\\nyYrk5F5YvPi3nTqgB4hsUA/HcRg79lLYbM3QarWYM2ce5s69PuoDYdLTM2AymXD06BFoNBosX/48\\nEhLkR7H/HBfjgCa9Xo9hw0bgwIH90Gg0+P3vH8bo0WO7u1nd4lwHNNE91wg999xyHDp0AACg0Wjw\\n1FPPY8CAjgscNDU14fHHH/YPuFBojEgangte0fFIVk9zNRpOfeMbOARAa8qEKbvjX8cAYKs6guby\\nvf5lY//LEZMyXDbGXPAd3JazExHwCiQOvlZ2JK8kuFB/bJ3/F6JCE4ukYbmy9YU9tho0nPza3xdN\\nfDoSBl4t267zYS7Y6B8trFKp8ec/P4NBgzoelW232/D444/4L3clJ/fCiy++KlsruLCwAMuXP+Ef\\nyDF27GV4/PE/dbg/AHz77Vd45523/MsLFy7GddfNj7hfPVVPvO/4hz88AAB46aUVnXqcntj3rnL8\\n+FHEx+vRp0/3P+rVXeieayc4c6bIn1gB3yjFr79eLxuTl7c1cLSwuwkus/ysOLbqn/zJCABcjWcg\\ntBmsFDKm6rDscnteh7k1sQKAJMJec1Q2xtlQFHDpVXQ3h50Vx159NKAvbksJvM5GmYhz53U2+hMr\\nAHi9Hnz55TrZmF27dgbcR6qrq8XOndtlY7766vOAEZIHDuxDaWmxbMxnn30iu0zIL8nQocMxapT8\\nFR4SiJJrBEKNjgz3yEOomHCPryDU9rAXFtrFhDsGQrxeuGOE2h7uUZzz6ss5CvF6kYxkjWTdz42R\\nJLHdcrjzQkjPxXHcRft86/mi5BqB7OyBGDq09VKrUqkMW3hg6tRpiIuL9y/z6piwM8nEpIwA2nyA\\nNXH9fFWIZGMC75fGhLl/qtInQh3bprg9x4e9jKxNzALf5hEaXqUPO6lATMpwoE0dYbWxL1Qyg7PO\\nh0qfALWxr39ZoVCEvRc+adKUgPtyJlMCJk++QjZm9uy5UChax/4NHz4y7KChuXNz2y1HdzAPIaRn\\nowFNERo4cBC2bdsMjuNw880Lw05TptXq0Lt3b+zbtwfgeMRlTgubXJRao++RFY8DKn0C4tInhZ03\\nVR2TDFf9CTAw6BKyEJt2qWxx/JYYr8MMjuMRkzIC+qSO7x0DvllxFJpYCM5G8Co9jP0nhC2zqNTE\\nQhufDl6lgy5pIIxpl4Vt1/lQG3rBbS6Agudx0023hC2Or9FokJraF+XlpYiLi8Mdd9wte+8c8N2X\\nVSoVqKurxYABA/DrX98Lo1F+JqEBA7JRX18Hp9OJnJyxWLjwLtnnYn8peuKgno0bvwEA2VHi0dAT\\n+96VqP9UoSnqBMGL55//C9xuNwRBwAcf/Bu7duXJxpSVleLVV1+C1+uFJAq+2Wvc8oMhHHUnYas8\\nCNHdBE9zFcwFG8JWdbKW7ITgdYNJEpwNhbCW/CC7P2MSzAUb4LVVQ3Q3wVaxH476AtkYwWmBpWgL\\nBGcjBKcZjYWbw94LBny/LGP7joU+aZDsqN/zxZgEc/4GiIKv2tJHH32Abds2y8ZUV1filVdeQElJ\\nMUpLS/Dqq39FRUW5bExe3jasWvUuqqurcOTIETz//FNhLwv/619vY8eOraitrcGuXXl4++03zrl/\\nhJBfLkquEcjPPxVUCWfnzh2yMXv27PI/fwgAYGLA86ihtB8kJLqsEBzyJd3ax7jCDDTy2urOFpKI\\nPMbVWBx4j5WJcDWWdLh/V/Ha64OKWXz/vfx52bt3T0DlJEEQsGfPLtmY778P/CJVW1vjrxndkfZf\\nvnbt2kmzihByEaHkGoHExKSgm/ly8392tF2hli9LFzQ/KseBD/NsaPsYuTlWW7dz7daFaZcmeHu4\\n43SFUH0Jf16CC1mcawzH8bJlCQEEbU9MTKQBIYRcRCi5RiAlpTdyc1tr3Kam9kVu7o2yMZMmTcWo\\nUaP9y5r4/rJ1hQHAkDoGCk3Ls1QcYvtcIluLF/A919qSYDheBWP/CbL7KzQGGPqM9scoNEYYUnNk\\nY7SmTGjiWuviauL6QWvquK5wV1GoY2Do2/pAe0pKb8yfv0A2Zty4yzF27KX+5ZycMZg4cbJsTG7u\\nTejd21c0g+d53HDDgrATkt9112/8065pNFosXrxEdn9CyIXllz/CootkZWVDoVBAFEUMHDhQtugA\\n4Jvzc9CgIfjpp8NgDFAbUsIO6OFVOqj0SRDdNvDqmLDzrAKAUmMEr1BAEgUodfFQaOQH2gC+soG8\\nSgfJ6zxbDlEruz/HK6AypMDTXA2A8/WF7xnfy1T6RHAcD8YkZGUNhNEoP2esUqnE448/idLSEgBM\\ntuxhC6PRiOzsQaitrUFiYuLZik3yUlJSkZbWHwUFp9C3b1+kpspXtCKEXFh6xl/IHq65uQmvvfay\\nfxDLjh3bsH79Z7IxBw7sx6efrj57n42huXzf2eTUMVvlQbgazwBgkDw2WE5vgSTKFzy3nNkO6ey9\\nXa+9DtZi+XuOkuCG5fTWs7WFGVzmorCFJ9zWctgqfgSTBDDJi+aK/XA3VcrGdAVJ9MBStNX/TO2u\\nXXkRF2vo3z89osQKAOvWrcHOndshSRLq6urw2mt/g80mPwnBm2+u9N+XPX26CG+88f8iOhYh5MJA\\nyTUCxcVn4PUGDkEPN6Al1HaPrTbEnq289sDtTPRCkKlqxBiD1x44fZrHVtfB3meP4TQHzd/qDRPj\\nsQdv94bpS1cQHI1gUuCXj8LC/Kgfp/259Hg8YSs05ecHxhQWFtCAJkIuIpRcI5CZmQWNJvAZpyFD\\n5AsvDB0aPDtHuML9akPgdk6hgUonPyuOypByTsdQ6RPB8YEF5FWxKR3s3dKu4O3hjtMVlPoEcIrA\\nvnTGrChtC4gAvmeYMzLkC4K0P/+DBw+lAU2EXEQouUbAYDDg0Ucfh1KpBMdxmDHjmrAVd0aNGoPb\\nb78LPM8D4GBMnyhbHB8ADH1GQ5c0CByvglJngin7KnAK+dvi8QOmgT+7j8rQG/EZU2T35xVqmLKv\\n8t2b5RXQJQ2Cobd8zVCNsQ9i08aDU2jAKTQw9p/QI5Irr1DBlD3Dfy972rSrcP318gPNzse8efNx\\n1VUzoVZr0KdPHzz66OPQ6+UHmi1dej+GDx8JlUqFIUOG4b77Hop6uwghPRcl1wgdOnTAP+H1oUM/\\nwmyWf/7U43Fj//49Z2vKMrgai8Ek+cIDHK9EfOZU9L7kTiSPuBEaYx/Z/QHfs55t77n6ppKT57ZW\\n+J4PlUTfv2UmZAcAJglwW0vARDeY6IarsSRsX7qK21rhv+d6+PBBmM31UT+G2dyAQ4cOwONxo7Ky\\nEocPHwwbU1JSjPz8U/B6vSgszMfp00VRbxchpOei5BqBqqrKgFlw6uvr8MUXa2Vj8vK249SpE/5l\\nT1Nl2CIS56OpbHfrAhPRVLa3450BCO5m2Gt+8i9LXjts1fIDmpzm0wGDsTzNVWcHXnUv0W2DvfqI\\nf7mx0Yy1a6M/+8y6dZ+ioaE1aX/11ecBM+uE8u677/jv0wuCgP/85/+i3i5CSM9FyTUCFkvwoKJQ\\n68Jtl7zOqLUJ8A1oav+akschGxOqDecTI4aJ6QqiENyucOflfFgsloBlxhisVksHe4duh9VqoQFN\\nhFxEKLlGYNCgIf4iAi2mTr1SNubyyydBpWodbMPxSmhNGVFtF8dx0CUGFp3XJQ2UjVHFJEGhDXwW\\nNFyM1pQJtKkNzPFKaBO6v4iESp8EpTZw1qBw5+V8TJ06LWA5NbUvsrPl37P2MVOmTKMBTYRcRGhW\\nnAjwPI+cnDHYunUTeJ7HwoV34corr5aNiY01Ij09A3v37gY4HvHZM6COkS+Zdz7Uxr5wN5wAYwza\\nhCzEpU+S/SPOcRw0xjTfIz6cAjG9RyGm11DZY/BKDVT6RN+sOGod4tInQ22QLxnYFTiOgyY+Da6G\\nfCh4HjfffDtmzZoT9eP069cf/fungzEJEyaMx913L4VeL1/+cdSo0Who8M2KM2bMJViy5PdQKKI/\\neUFX64kzo9CsOF2D+n9us+JQhaYIMMbw+uv/D263GwDwwQf/QWZmFoYP73juVLO5AX//+wp/kXjr\\n6e1Qj7gxbDWkc2WrPAjB42uXq6EQNo0RsW1KAoZiKd7uf07VVrEfakMSNG3mRW1P9DhgPbMDkuAC\\nAFjPbIdqxI1QqHRR6sX587XLCwnA6tUfYMCAbOTkjIn6ccaPn4jx4yciOTkWdXXysxsBvvu027Zt\\nAWs4MsYAABtCSURBVADU1FQjKSkJt912Z9TbRQjpmeiycAQKC/MDihOIooiNG7+VjcnL2wabrfWP\\nsCQ44WyUn33mfDhqjwcs22uPye7vtde3KwDB4Kg90eH+AOA0F/kTKwBIggsuc/ePfvU6GgIGWjEm\\nYcOGr7qxRa2++ebLgOVvv/26m1pCCOkOlFwjoFarI1oXuD34EgLHR/9CQft5UjkuzDFCzavKyV+u\\nDDUXa2f05VyFakOo9707tP98tL3/Tgi58FFyjUB6eibGjWudbUan0+Paa6+TjZkyZVrAICilztQp\\nM8kY+gReAo7tK39JVNWuHRyvgqF3x5e3AUCXkB0wCEqhjYM2Qb5CUVdQauOgTWgtoq/RaDFvXm43\\ntqjVggW3BNz7XrDglm5sDSGkq3X/z49fiPnzf4VDhw5AFEVce+28sEXfDQYDbrrpVrz55gqIEoOh\\nz1jwiuj/etElDoC9aj8kQYAmPj2iBB6TOhqixwbR44AuaWDY2Xd4pRqxfcaiueJHtEyFxyvkf7l3\\nlZjUUfBYS8CBYfbsa5GZGX7Gmq4wffpMZGcPwsmTxzFw4OAe0y5CSNeg5BoBj8eN555bDo/HN1Lu\\n008/QkJCImbMuKbDmMLCArzxxqv+ZxstRVug1N0Alc4U1bZZzuyAeLZYQUthB1P2VR3uzyQBjfnf\\nQjr7jKi96hAUaj1ienVck9drr4fl9DYAZ/tyeiuUujioIpgSrzMxSURj/gZ/hap169YgPj4Bc+bM\\n69Z2tejfPyPimXcIIRcWuiwcgfz8U2hubgpY9+OP+2VjDhzY165oAIPbWhbVdjHG4LYEvqbLWiob\\n47XX+xNrC7dFPsZlLUNLYj17ZLit5efS1E7hddSfnTqv1Y8/yleoIoSQrkDJNQKpqX3OFuBv1bdv\\nmmxMWlq/oHVKbXR/tXIcB2W7ghDtiyq0p9AagXbPwYaLCbU9XExXUGiMANf+vAS/74QQ0tUouUYg\\nMTEJd9zxa//y0KHDkJsrP/vKhAkTA6oF6ZOHQBMnn5DPR1zGZAC+ZMmp9IhLnyS7v0Klh7H/5f4R\\nwipDLxhSR8vGaE0Z0CUN8i/rkgZDE9//5zU8ChQqna8vZw0cOBg33virbmwRIYT4UHKNkEql8o/+\\nVKnUQb9kg3EBj2N02qMrHA+O97WL5xX+6ddkQ7jW/ThOGfRLNvRhFPAlcS7kozndpbVdvnMU/rwQ\\nQkjno79EETCbG/DOO2/576EeOXII69atkY3Zu/cHbNq0wb9srzkKT1NF1NtmLc4Dk3xTronuZlhL\\nvpfdX/Q6YS35HkzyVY7yNFfCVnVINsZtKTlbaILBV3TieNTvH58PyeuCtfh7tNwPPn78KNas+bh7\\nG0UIIaDkGpHKynKIYuD8paWlJbIxobZ7Heaotosx5qsR3PYYTvljiC4rcHb+0xbtX6M9b4jt4WK6\\nguC2AizwvJSVyZ8XQgjpCpRcI5CdPRgGQ2zAujFjLpGNGT26fX1fLur3XDku+DW1cfIDelQxSeCV\\ngfWNw7VLYwzeLleLuKuo9MF9CXdeCCGkK1ByjYBWq8UTTzwJlUoFhUKB3Nybws7AMWjQENx77wNQ\\nKpXgeB5xA6ZBpU+IetviMq+AQqUCOA6a+PSzA5w6xvFKmAbOglKfCE6lQ0zvUdD3Gi4bozYkIy7z\\nCvBqAxTqWF9fOmGGn3PF8QokDLoGvEIJnucxb15uj3nGlRBycaPkGqGvvvoCXq/XX7S/okL+nqPD\\nYccXX6yFIAhgkgR79RGws8UOosndWALR6wUYg9tSApcl/L1QR+0xCI4GMK8TjrqTYS/xSqIH9uoj\\nkDw2iJ5m2KsOQxK90erCz2KvPQZJFCBJEjZt+i7s5XpCCOkKlFwjUFpagl278vzLdrsN69evk43Z\\nsWMbKipaCy0IjgY4z1ZQiqbmisBiFraKH2X3F5wWOBsK/cvsbOKU42woCkjAgrMRLnP0Z/g5V4LL\\nCmd9gX/Z6XTg88/XdmOLCCHEh5JrBFwuZ9A6pzN4XbgY1gm/9pgU+Gs43C9KSQreHi6GhYjpjL6c\\nq/Z9B8KfF0II6QqUXCOQnT0ooPA6x/G4+uqO6woDwOTJV0Cvj/Ev80ottAnRnxVHnzw0YDmm19AO\\n9vRR6ZOgiklus4YLG6NLyAKnaJ3KjVNoesSsOCp9IlQxvfzLHMdh5kz580IIIV3h/7d359FRVvcf\\nxz+zZZLJnpAg0bAkEWRRCgWBKhQoghJZCyqHKkX8QVtUVJKKIAoWNC22R0U9ba0HUY9iQaDBWleg\\nyIEKFQEJKvsaJAlCNkgy2++PlJGYMEz0mUzMvF/neE7unecm3yfX5MPM3NxLuAbAbDZrxowc2e12\\n2Ww23X77ZF19dXe/Y1q1StHdd99fu+GExar4jIGy2KIMry02/VpFOmJls0cpIWOQYi73v1rWZDIp\\nqdNNir3iWjlSuyr5qpsvuVrYEhGthA4/ldWRLKsjWQmZA2WJcBh5G99ZQuZAWaw2Wa1WTZhwu3r2\\n7B3qkgCAcA2Ex+PWokULVV1dLafTqZdfflH//a//DeK/+qpQTz31BzmdNfK4XTqz/0O5ayoNr81k\\nMslmj1KkI1ZRyZl1zhC9GLMlQjFtrlF8u36KiG19yetd1eU6c2CtXGdPyXX2lM7sWyt3dYUR5X8v\\nXq9Xp/d+ILfLKZfLpddee1mbN28MdVkAQLgGYs+eL+ssTpKk9es/9Dtm06aNviPqpNr3KKuCsKCp\\nKVR9faDO+5tej1PnTjeDBU1nT8n1rU0zLjUvANAUCNcAxMXFNdAX38CV/seYrca/LNwUGqq7OdyL\\nyWqv13epeQGApkC4BiAt7Yo6C5gSE5M0cuQYv2Ouv36gMjOzfO2ImMsUmdg+WCUGVVRyRp1FULbo\\nVEUFYXFWY1ntsYpu3c3Xjo+P1+jR40JYEQDUIlwD1LfvdbJaa3cC6tv3J0pJSfV7fWRkpPr3HySz\\n2SyTyazI5KxmdZpMY5jMViV3HqmkTsOV1ClbyZ1HBO+Un0aKTGz/v9OATOrdu59at770e8gAEGyE\\nawDOnq3UokWPy+Wq3QnoX/96S2+/ne93zK5dO/XSSy/I4/HI6/Wo7PBG1VQUN1HFxjOZTLLHpcke\\n1yagRVNNwet26eu978vjccvr9eqDD95Rfv6qUJcFAIRrIA4c2FdvU4iCgs/8jtm9e1e9vpryE4bW\\nFe6cZ0/J666u03epeQGApkC4BqBt2/ay2Wx1+jIysi5y9cUfbw6b3bck1qiEei9PX2peAKApEK4B\\niIuL129+M0Nmc+23q2/f6zRq1M/9junV61qNHv3NNTFpPWWPSwtqneHGbLUrvsNPZTLVzsu11/bV\\n2LHjQ1wVAEjNY1XKD8CJE4XyeGoPGS8sPKZz587Kbq//pyDnuVxOHTly5Jv2udPyej2+IIAxopI6\\nyHVqp5LiHMrJmR3qcgBAEs9cA1JUdFLLl7/uax85clirV7/pd8ymTRu1bdtWX7vq9EFVnzniZwS+\\nK5PJ1GwWWQGARLgGpKSkWF6vt05fUdFXfscUFZ2s1+eqLje0LgBA80S4BuDKKzspKSm5Tl/fvtf5\\nHdO7dx9ZLBf8XavJrMiEtsEoDwDQzBCuAbDZbJo9e57sdvv/Tl+5QwMGDPI7pl27DpoxY6ZsNpvM\\nZosSsobIGsnWfAAQDgjXAC1d+jdVV1fL5XJpxYpl2rdvj9/ry8pKtWTJ3+R0OuXxuFV+ZLM8rhq/\\nYwAALQPhGoADB/bps892+NpOZ43efnuN3zEbNqzT6dPfnNjiri5XVTM4SQYAEHyEKwAABiNcA5CR\\nkaWrr+7ua9tsERo+fITfMf37D1RiYpKvbYmIUWRi6E+SAQAEH+EaoF/+8i5FRNQuaBo//jZlZXX0\\ne318fIImT/4/34KmuHY/kbmB80cBAC0P4RoAp9Opxx+fr5qa2gVNr732sj76aL3fMYcPH9TTTz/p\\nW9B0et+HclWVNk3BAICQIlwDsHfvlzp1qqRO3+bNG/2O2br1Y7nd7m86vG5VsUMTAIQF9hYOQKtW\\nrWQymers0pSa6v9Q7oYOU7faYw2vDQh3vXv3CXUJQD08cw1AauplGjfuNt/+tenpbS95Ks511/VX\\nz569fO3IxA6ys0MTYLhbbpmoW26ZGOoygDoI1wBdfvkViouLl9lsVnp6Ozkc0X6vt1ptatu2vS+Q\\nrY4kTsQBgDDBb/sAlJWV6rnnnlJp6Rl5PB5t2vSR8vNX+h3zySdbtXr1Ct9LyRXHP1F1WWFTlAsA\\nCDHCNQBHjhyS0+ms07d//16/Yxp63FlZ0sCVAICWhnANQEZGliIjo+r0delytd8xXbp0rdcXEdvG\\n0LoAAM0T4RoAhyNaOTkPqU2byxUdHa1hw7KVnT3S75hu3bpr0qS7ZDabJZNJce2uU0RMShNVDAAI\\nJcI1QFu2bNaJE8dVWVmprVv/o5KSYr/XV1VVaePGf8vj8Uher6q+3i+vx+13DACgZSBcA1BYeEzv\\nvfcvX/vrr0/pH//wv6Bp48b1dd53rSn/SlWnDwWrRABAM0K4BqCsrKyBPv9bGTY0xuM6Z1hNAIDm\\ni3ANQMeOnZSWdnmdvoEDB/sd06/f9YqIiPC1TWYbp+IAQJggXANgNlv0298+rC5duik9PV133DFF\\nvXr533KtTZs03Xdfru9UnITMn8kS4X/jCQBAy0C4BsDr9eqZZ/6o3bt36ejRo3r11SXatWuH3zEl\\nJcV67rmnfKfilB5cL7eTl4UBIBwQrgHYu/dLHTiwz9f2eDx6//13/Y7ZuHGDKisrvxnjqlLV6YNB\\nqxEA0HwQrgGIjIys12e3+z/4PDKy/uMmM4cQAUA4IFwD0LZte/Xrd72vHR0drREjxvgdM2DAoDqL\\noKxRSYpKzAhajQCA5oNwDdDNN49Whw6ZSk5O1rBhw3XFFel+r3c4ojV69DhZrVaZzBbFtOkuk4Vn\\nrgAQDvhtH4Cqqio98cR8VVSUS5JWrlyupKRkDR06/KJj9uz5Qs8//7SvfebAelmjEmVzJAW9XgBA\\naPHMNQD79u3xBet527Z94nfM9u3bvtXjVXXpMYMrAwA0R4RrANLSLpfFYqnT17ZtW79j0tPrP251\\nJBpaFwCgeSJcA5CUlKzJk6f6Vg1ffXV3jRr1c79j+vT5iX72s6G+tiO1q+xxVwS1TgBA80C4Bsjt\\ndsvr9UqSXC6X7+OL88rlcl3Q9ASvOABAs0K4BuDrr09p6dK/qbq6WpL0+ecFWr36Tb9j/vOfTfr3\\nv9f62meLP+c9VwAIE4RrAAoLj9eey3qB48f9B+WxY0fr9bmqThtaFwCgeSJcA3DllZ0UGxtXp69n\\nz15+x/Ts2Usmk+mCHpPs8f7/NhYA0DIQrgGw2+166KFHlZmZpZSUFI0bd6uGDBnmd0xWVkdNnz5D\\nFotVJpNFCRmDZItitTAAhAPCNUCrV6/Q/v37VFxcrH/+c42OHj3s9/rKygqtWPGG3G6XvF63Kk58\\nKo/b2UTVAgBCiXANwOHDB7Vly2Zf+9y5s3rrrX/4HbNhw3p99dUJX9t17jSn4gBAmCBcA1BTUxNQ\\nX93Hq+v1eT2uBq4EALQ0hGsAsrI6Kiuro69tNpt1ww03+h1z/fU/VXR0zDdjrFGcigMAYYKN+wNg\\nMpk0d+5jWrv2fVVVVahHjz7KyMjyOyY5uZX+8IenNHv2TJ2rdimh00iZbfXPhQUAtDyEa4CiohzK\\nzh6llJRYFReXX3qApJSUVCUkJMpTdlaWiOggVwgAaC54WRgAAIMRrgAAGIxwBQDAYIQrAAAGI1wB\\nADAY4QoAgMEIVwAADEa4AgBgMMIVAACDEa4AABiMcAUAwGCEKwAABiNcAQAwGOEKAIDBCFcAAAxG\\nuAIAYDDCFQAAgxGuAAAYjHAFAMBghCsAAAYjXAEAMBjhCgCAwQhXAAAMRrgCAGAwwhUAAIMRrgAA\\nGIxwBQDAYIQrAAAGs4a6gHDgdZ5Txb78oH5+SUH9Gs1Z7f07Ql0GAPgQrkGWmJgU9K9RWemVJEVH\\nBz9gLBaz3G5P0L9O4zia5PsMAIEiXINs9ux5oS7BUCkpsSouLg91GQDQrPGeKwAABiNcAQAwGOEK\\nAIDBCFcAAAxGuAIAYDDCFQAAgxGuAAAYjHAFAMBghCsAAAYjXAEAMBjhCgCAwQhXAAAMRrgCAGAw\\nwhUAAIMRrgAAGIxwBQDAYIQrAAAGI1wBADAY4QoAgMEIVwAADEa4AgBgMMIVAACDEa4AABiMcAUA\\nwGCEKwAABiNcAQAwGOEKAIDBCFcAAAxGuAIAYDCT1+v1hroIAABaEp65AgBgMMIVAACDEa4AABiM\\ncAUAwGCEKwAABiNcAQAwmLWxA7xerwYMGKD27dtLknr06KEHHnjA6LqaHY/Ho3nz5mnPnj2y2Wxa\\nuHCh2rZtG+qymtSYMWMUExMjSUpPT9fjjz8e4oqCb8eOHXryySf1yiuv6PDhw5o1a5bMZrOuvPJK\\nPfroozKZTKEuMaguvP/du3frV7/6ldq1aydJmjBhgoYPHx7iCoPD6XRq9uzZKiwsVE1NjX79618r\\nMzMzbOa/ofu/7LLLNG3aNN/v/pY8/263Ww8//LAOHTokk8mk+fPnKyIiolHz3+hwPXLkiLp27ao/\\n//nP36v4H5oPPvhATqdTy5Yt044dO5SXl6fnn38+1GU1merqaknSK6+8EuJKms4LL7yg/Px8RUdH\\nS5KeeOIJPfDAA+rdu7ceffRRffjhhxoyZEiIqwyeb99/QUGBJk+erMmTJ4e4suBbs2aNkpKStGjR\\nIpWWlmrUqFHq3Llz2Mx/Q/c/ffp03XnnnWEx/+vWrZPZbNbrr7+uLVu26E9/+pMkNWr+G/2ycEFB\\ngYqKinTHHXdo6tSpOnjw4He/gx+Qbdu2qX///pKk7t27a9euXSGuqGl98cUXOnfunKZMmaJJkyZp\\nx44doS4p6Nq1a6dnn31W5/dZ2b17t3r37i1JGjBggDZt2hTK8oLu2/e/a9curV+/Xr/4xS80Z84c\\nVVZWhrjC4Lnxxht17733Sqp91cpqtYbV/Dd0/wUFBWEz/0OGDNFjjz0mSTp+/Lji4+NVUFDQqPn3\\nG67Lly/XiBEj6vyXmpqqadOm6eWXX9a0adOUm5tr0O00bxUVFb6XRCXJYrHI4/GEsKKmFRUVpSlT\\npujFF1/U/PnzlZOT0+Lvf+jQobJYLL72hZuZORwOlZeXh6KsJvPt++/evbsefPBBvfrqq0pPT9ez\\nzz4bwuqCy+FwKDo6WhUVFZoxY4buu+++Ov+/t/T5//b933///brmmmvCZv6l2t/xs2bN0sKFCzVi\\nxIhG//z7fVl4/PjxGj9+fJ2+qqoq3w/cj3/8YxUVFX3X2n9QYmJi6vxLzePxyGwOn/Vg7du3973X\\n1r59eyUkJKi4uFitW7cOcWVN58L5rqysVFxcXAiraXo33HCDYmNjJdX+y37BggUhrii4Tpw4obvv\\nvlsTJ07UzTffrEWLFvkeC4f5v/D+s7OzVV5eHlbzL0l5eXkqKSnR+PHjVVNT4+sPZP4bnQ7PPfec\\nli5dKqn2pcK0tLTGfoofpJ49e2rDhg2SpO3bt6tTp04hrqhprVy5Unl5eZKkkydPqqKiQikpKSGu\\nqml17txZW7ZskSRt2LBBvXr1CnFFTeuuu+7Szp07JUmbN29Wt27dQlxR8JSUlOjOO+9Ubm6uxo4d\\nKym85r+h+w+n+V+9erX+8pe/SJIiIyNlNpvVrVu3Rs1/ozfuLy8vV25uriorK2W1WvXII4+oQ4cO\\n3/EWfji8Xq/mzZunL7/8UlLt4pZwuO/zXC6XHnroIRUWFkqScnNz9aMf/SjEVQXfsWPHlJOTo2XL\\nlunQoUOaO3eunE6nMjMztWDBgha7WvS8C+//iy++0Pz582W1WpWamqrHHnvMt9ippVmwYIHeeeed\\nOj/jc+bM0cKFC8Ni/hu6/5ycHOXl5YXF/FdVVWnWrFkqKSmRy+XS1KlTlZGR0aiff07FAQDAYOHz\\npiEAAE2EcAUAwGCEKwAABiNcAQAwGOEKAIDBCFcAAAxGuAI/AOXl5Zo+fXrA1z/zzDNau3ZtECsC\\n4E+jT8UB0PRKS0v1+eefB3z9+U3XAYQGz1yB72H06NEqLi6WJL300ku68cYblZ2drSeffFJS7TZy\\n06ZN08iRIzV27Fh99NFHkqTFixfX2fh88ODBOn78uFauXKn7779fU6ZM0dChQzV//nxJtTvmFBUV\\n6Z577pEkTZ06VQUFBXI6ncrNzdWYMWM0ZswYLV++XJI0a9YsrVq1SsePH9eoUaN0zz33aNiwYZo5\\nc6beeOMN3Xbbbbrpppu0f/9+39fPy8vzfZ7GBDmA+ghX4HtYvXq1UlJStHPnTr3++utasWKF8vPz\\nVVBQoIKCAv3ud79Tv379lJ+fr6efflqzZ8/WqVOnGtw27Xzf9u3btXjxYuXn52vdunXau3ev5s6d\\nq9TUVC1evFiS9Ne//lVdu3bVp59+qrKyMq1atUpLlizRtm3bfJ/LZDLJ6/Vqz549mj59ut555x19\\n9tlnKiws1LJly5Sdna2///3vvq+flJSkVatW6d5779WDDz7YBN89oOUiXAEDbN26VYMHD1ZMTIws\\nFouWLFmirl276uOPP9a4ceMkSenp6erevftFz8I9vxNpjx495HA4FBkZqfT0dJWWlupiu5R27NhR\\nBw8e1JQpU5Sfn6+cnJx617Rq1UpXXXWVTCaTWrdurb59+0qS0tLSVFZW5rtuwoQJkqRBgwbp5MmT\\nOnPmzHf/hgBhjnAFDGCz2eoEYFFRkcrKyuqFotfrldvt9n18nsvl8n1st9vrjbmYhIQEvfXWW7r9\\n9tt18OBBjRkzpt45kzabrU7bam14qcWFR+p5PJ46Z7kCaBzCFTBAr169tGHDBp09e1Yul0szZ85U\\nQUGB+vTpoxUrVkiSjh49qm3btqlHjx5KTEzUvn37JEk7d+5UcXGx3xM2rFarL5QvtG7dOuXm5mrg\\nwIGaM2eOHA6HTpw4Icl/KDdkzZo1kqT3339fmZmZvrM7ATQeq4WB72H06NF64YUX1KVLF02cOFG3\\n3nqrvF6vhg4dqn79+ikzM1OPPPKI3nzzTZlMJi1cuFCtWrVSdna23nvvPWVnZ6tr167q0qWLvF7v\\nRQO2VatWatOmjSZNmqSlS5dq6tSpmjFjhvr37693331X2dnZstvtGjZsmDp27Cjpm/ddL/Y5v92/\\ndetWLVu2TA6HQ7///e+N/UYBYYYj5wBo8ODBWr58uZKTk0NdCtAi8LIwgBZ76DcQKjxzBQDAYDxz\\nBQDAYIQrAAAGI1wBADAY4QoAgMEIVwAADEa4AgBgsP8Hy07qt111zAMAAAAASUVORK5CYII=\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x1184e6ad0>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:simp\\n\",\n      \"Outliers:  \\n\",\n      \"Suspected outliers:  198\\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x11865ecd0>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:tcp\\n\",\n      \"Outliers:  105, 146, 170, 192, 20, 27, 43, 60, 62, 75, 93\\n\",\n      \"Suspected outliers:  18, 26, 29\\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\nr72G1157Df/5z39kRTRVU8dfUVGB77//HnPnzkVmZiZmzZqFfv36YfDgwbLinnZNHT9wZqx/NpsN\\nDz30EJYvX4758+fr89G+9gEnP/afs/b9rBOfiouL8e6772LFihVYsWIFjh07hk8//fTn3NX/9w4f\\nPozp06dj0qRJGD9+vD6fmJiIuro6fVxXVxfyF080ONmxA8f/up83bx7Wrl2LBQsWSEporpMd/2ef\\nfYaKigrceuut+POf/4xPPvkEy5Ytk5jUHCc7/uTkZGRmZqJr166w2+0YPnw4duzYITGpOU52/GfS\\n+vfss8/is88+wyOPPAKPxwPgzFj7gMjHDjR/7TvliU+ReL1eqKoKp9MJVVWRmpoadX/JAEBZWRlu\\nvvlm/O53vwv7K71r164oKChAVVUVYmNjsXHjRtxyyy2Skp5+TR07AMydOxcxMTF47bXXou6pMqDp\\n4582bRqmTZsGAPjnP/+J/fv3Y9KkSTJimqap4+/YsSPcbjcKCwuRmZmJ7777DldddZWkpOZo6vjP\\nhPVv2bJlKCkpwaxZs+ByuaAoiv7/ebSvfU0dO9D8te+UGwQUFRXhvvvuw6JFi/DJJ5/A7Xbj6quv\\nxsKFC/Hxxx8jJiYGnTp1whNPPAG7/Wd19v+3nnzySXz66afo0qWLPnf11Vejvr4eV199Nb766iu8\\n9tpr0DQNV111Fa677jqJaU+vpo69X79+mDx5Ms477zz9c9OnT8fo0aNlRDXFqX72Df75z38iPz8f\\n99xzj4yYpjnV8a9btw4vvPAChBAYMGAAHn74YYlpT79THX+0r38ejwcPPfQQysrKEAgEMHPmTLjd\\nbn39j+a1r6lj/zlrH3fhISIiMgkvRkFERGQSliwREZFJWLJEREQmYckSERGZhCVLRERkEpYsERGR\\nSViyRBZTU1ODO+6442fffvv27frFNIjIXCxZIoupqqpCXl6e7BhEZABLlug0mTRpEkpLSwEACxcu\\nxNixYzF+/Hg8//zzAI5fqm/WrFn4xS9+gSuvvBIrV64EACxYsACvvvqqfj+jRo3CoUOHsHTpUtx9\\n99245ZZbMGbMGDz22GMAjl+N6OjRo7jrrrsAADNnzkRubi4AoFevXvr9LF26FHPmzAEArF69Gpdf\\nfjmuvPJKvPPOO/rl4KZNm4YnnngCV155JcaPH4/Vq1eb+S0iOuNEz3XAiCRr2CRg27ZteP/997Fk\\nyRLExsbil7/8JXJzc/HGG29gyJAhuOmmm3Dw4EFcd911WLZsWcTrnzbMbdmyBf/+97+hqirGjh2L\\n6667Do888gimTZumX5z8jTfeiJin4T58Ph8efPBBLFy4EN26dcMTTzwR8nWBQABLly5FXl4ebr31\\nVnz99ddRdYlAIpn4SJboNNu4cSNGjRqFhIQE2Gw2/O1vf0Pfvn2xfv16/UL6HTt2RE5ODrZu3Rrx\\nPhqudtq/f3/ExcXB5XKhY8eOqKqqQnOvhLp7926kp6ejW7duAICrrroq5D6mTp0KAOjduzfS09Px\\nww8/NPuYiSgy/rlKdJo5HI6QEjt69ChcLldYOQohEAwG9Y8bBAIB/eOGzaEb38Yov98P4Pgj2sa3\\nU9XQv60bjzVN46NYotOIj2SJTrPzzjsP3377LdxuNwKBAO69917k5uZi0KBB+PDDDwEABw8exObN\\nm9G/f3+kpKRg7969AI4/1VxaWtrkFlp2u10v559KSUnBnj17IITAihUrAAA9e/bEsWPHsHPnTgDA\\nJ598EnKbjz/+GMDxs46rq6vRs2fP/+0bQEQ6/slKdJpMmjQJf/7zn9GnTx9cf/31uOaaayCEwJgx\\nYzBkyBBkZWVh7ty5WLJkCRRFwVNPPYU2bdpg/Pjx+PzzzzF+/Hj07dsXffr0gRDipEXbpk0btGvX\\nDtOnT8dbb72FmTNnYvbs2ejbty/uvfdezJo1C2lpaRgwYAAqKytht9vx0ksvYc6cObDZbOjXr1/I\\nfRcUFODKK68EALz88stRuT8wkSzc6o7oDDZt2jTcf//9OPvss2VHIYpKfLqYiIjIJHwkS0REZBI+\\nkiUiIjIJS5aIiMgkLFkiIiKTsGSJiIhMwpIlIiIyCUuWiIjIJP8Pe07+5TQxgU0AAAAASUVORK5C\\nYII=\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x119d50250>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:udp\\n\",\n      \"Outliers:  \\n\",\n      \"Suspected outliers:  \\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x119fdef10>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \":count:wapi\\n\",\n      \"Outliers:  \\n\",\n      \"Suspected outliers:  \\n\",\n      \"------------------------------------------------------------\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"ml.detect_abnormal_behaviour(features_numerical)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Now, that we have analysed our dataset and know *every single detail* about it we can cluster it. At the moment the clustering algorithm of our choosing is **HDBSCAN**. Let's see what it can do with the malware saples.  \\n\",\n    \"We try it on both *simple* and *full nominal* feature spaeces. Additionally we an try it with sparse features filtered out.\\n\",\n    \"\\n\",\n    \"Additionally we print the clustering quality measures to assess which one is the best.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 13,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\n79q7cp3udgn+Zo+TT84E3kqlzg3/e8hgXJpBVnz4dnX491EF3JKZw7qzxQDcNjBXkomIGpJQIlgk\\nDXKHQqhnq3WnS7CwwsXGM52fr84Nfz3p4qEx4e2/zk/NkCQiolJYEsrHH3/M3/72N/7rv/4LgN27\\nd/OLX/wCTdO4/vrr+f73vx+OsCJSfxkcDvdstb8cNbr0vD0VvRyIEP1YnyeU559/ni1btjB27Fjf\\nY0uWLOHFF18kJyeH7373uxw8eJAxYyJvWmy49PXgcEe0wkPYdu0DwDlxHO780V16XW/NVutOl2BZ\\nQxdP2rMFyUL0WHW5m1PHXehOSM9SyR6mYbEG3w1rGAZPPfUUJ06cQFVV/uM//oPhw1tqPYWy2nCf\\ndxYXFBSwZMkSz2ZOeGrJOJ1OcnI8e4/fcMMNbN26ta/DEhcR99ZfiFuzEe1MOdqZcuLWbCTurRVd\\neu3FuqaC1Z0teQd1ccfcK/ug6oAQHSn5SufztU2UfGVQdtJg/zYXX65z4tK71sIO5LPPPqOhoYE/\\n/elP/Ou//iu//vWvfce81YZ/97vf8fbbb/Puu+9SWVkZ9LV6rYXy/vvv89Zbb/k9tnTpUu644w62\\nbdvme8zhcPhKKYOnOFlJyUX2nxV9Sis8hHb6XPvHT59F23MI95Vda6n0hq52Cd4zXGXvDiPggLxX\\nggYzh3bvTyISqhiI/kF3GhzcodO2mVxTaVLylZu8scG9/4+NjaW2thbTNKmtrcVqbVl1HzXVhufO\\nndulppPdbvcrTuZwOEhKSrro6zIyEi/6nEgR7bE27trb4fPjd+4l9tarOj2ne8Jl6HsOorRppZim\\nSezEy9EGdP/74xdnRiKMyun0+aNjXVxxopYDlQYonkaNdxPMeCsk2eCfx8czfmhcl2PQv9iDe8tO\\n39dl7jmI5YZJWK4Z33GsESxa4oToirWrzp81cLsC97meO+0mb2xw5VcKCgpwOp3MmDGD6upqXn31\\nVd+xfldt2G63Y7VaKSkpYciQIWzZsqVLg/Ll5cF/0X0pIyMx6mONr2vosG/UqGvowtdnxZI/NuBs\\ntVrTAt38/nT3e7rulIu/FhsoikJmLFxwwpBEmJkLuqFiAlemq2TFu7p8XqWqmrhN/2j+elraPe5P\\ntlOdkuJrqUTLzz9a4oToi7WrtE7yhcUa/ODem2++SUFBAY899hhlZWV885vfZNWqVdhstv5RbVhR\\n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\\nAABJRU5ErkJggg==\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x119fd3050>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"{'Adjusted Mutual Information Score': 0.2137627254628825,\\n\",\n      \" 'Adjusted Random Index': 0.11345428545477139,\\n\",\n      \" 'Completeness': 0.51371644070930855,\\n\",\n      \" 'Homogeneity': 0.40615452416624492,\\n\",\n      \" 'Silhouette Coefficient': 0.24021846060914206,\\n\",\n      \" 'V-measure': 0.45364679286489618}\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"nominal_clusters = ml.cluster_hdbscan(features_nominal, dry=True)\\n\",\n    \"ml.visualise_data(data=features_nominal, labels=nominal_clusters[\\\"clustering\\\"])\\n\",\n    \"\\n\",\n    \"pprint(ml.assess_clustering(nominal_clusters[\\\"clustering\\\"], labels, features_nominal))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 14,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAZQAAAFmCAYAAABKn2yyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4nOV18P/vs8yMZka7LNuyLduyY4gBY7zg2EkgmABh\\nMYkdMDGBvHmD27ShhCxN87oNqQkNxT/4vVfzg0BClvZqSBoCqXHAQAkEAgSze8EbBozkRZutXZoZ\\nzTzL/fvjkUYaaSTL0mg/n+viQp7lWbQd3fc597k1pZRCCCGEGCJ9tC9ACCHExCABRQghREZIQBFC\\nCJERElCEEEJkhAQUIYQQGSEBRQghREZIQBHj0rFjx7j11luH9Rz/9V//xSOPPMLx48dZsmTJgN7z\\n8ssvc80117B27Vo+//nP85e//CX53E9/+lOuuOIKLrvsMn784x8nH29oaOCv/uqvuOqqq7j66qvZ\\ntWsXAJFIhL/+678mHo9n9saEGC5KiHHotddeU2vWrBm24x8/flytX79eKaXUsWPH1HnnnXfK97S0\\ntKgVK1aoDz74QCml1LvvvquWL1+u2tra1J///Ge1du1aFYvFVDweVzfeeKN66qmnlFJK3XrrrerB\\nBx9USil18OBBdcEFF6j29nallFKPPfaY2rJly3DcohAZJyMUMaJ+//vfs2bNGj772c/y5S9/mZqa\\nGl5//XWuvvrq5Gu6//vw4cNs2LCBz3/+83z+85/nv/7rv3Bdl9tuu42jR4/yV3/1VwA899xzrFu3\\njs9+9rN88Ytf5J133gHgvvvu4x/+4R/YsGEDF198Md/61rf4/e9/z4033shFF13Ek08+mfY6H3zw\\nQT73uc/1evy+++5j48aNfPazn+W73/0uJ06cYO3atZw8eRLbtrn99tuZP38+APPnz0cpRWNjI88+\\n+yxXX301WVlZ+P1+Pv/5z/P444/jOA4vvvgi69evB+CjH/0oc+bM4aWXXgLgiiuu4IknnqC+vj5D\\nXwEhho8EFDFi3n33Xf7v//2//PKXv+Txxx/n4osv5ic/+QmapvX5nl/+8pdcfPHFbN26lZ/97Ge8\\n/fbbaJrGnXfeyezZs/nFL37B4cOHuf3227nvvvt4/PHHufXWW7n55ptpa2sDYOfOnfziF7/g6aef\\nZseOHRw+fJhf//rXfP/73+fee+/tdU6lFM8++yyrV69Oe03V1dVs27aNu+++m6lTp7Jt2zaKi4sp\\n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\\nUKclhBDiAunRIa9169ZRVFTEN77xDbKzszEMg9zcXDweD0ePHmXUqFFUVFQkNClfWJjXA2d8e86K\\ncAAABaFJREFU4Uk7+o50aANIO0Tv0ZRSqqce7Msvv2TRokW0tLTgOA4LFy7ksssuo7KykpUrV2Lb\\nNnPmzOHBBx/sqVMSQgiRJD0aKEIIIdKXbGwUQgiRFBIoQgghkkICRQghRFJIoAghhEiKHl02fD7S\\npQ5YfX09jzzyCA0NDViWRXl5OZdeemnKtSNk06ZNvPfee6xZswYg5drhOA7Lli3js88+w+Px8NRT\\nTzFmzJjePq2EVVZW8vTTT7NhwwYOHz5MeXk5uq4zadIkli5diqZpvX2KnbIsi8cff5zjx4/j9/u5\\n7777mDBhQkq1xbZtlixZwqFDh9A0jeXLl+P1elOqDUmhUsT69evV2rVrlVJKvfnmm2rFihVKKaVu\\nu+02deTIEaWUUj/+8Y/V7t27e+0cE/H888+rV155RSml1IEDB9Q3v/lNpVTqtUMppZ588klVWlqq\\nHn744fBtX//611OqHX/5y19UeXm5UkqpHTt2qPvuu6+Xzyhxv/nNb9Stt96q7rjjDqWUUvfcc4/a\\ntm2bUkqpn/3sZ2rTpk29eXoJe+ONN9TKlSuVUkrV1dWpr3zlK+ree+9NqbZs2rRJPf7440oppbZu\\n3aruvffelGtDMqTMkNeCBQu49957gc7rgPVld911F3fccQcAgUCAjIyMlGwHQElJCcuWLUMFV577\\nfD78fn9KtWP79u1cd911AMycOZNdu3b18hklbuzYsbzwwgvh///du3cze/ZsAK6//vo+/38fUlpa\\nyk9+8hPA7TGapplybbnxxht54okngNbXp08//TSl2pAMfXLIK13qgHXUjpqaGh599FEWL16csu24\\n+eab2bp1a/i2vt6OeGLP2TAMHMdB1/v+e625c+fy+eefh79WEVvKsrOzqa+v743T6rLs7GzA/V08\\n8MADPPjgg/z85z+POp4KbTEMg/Lyct5//32ee+45KioqwsdSpQ3nq08GSrrUAWuvHXv37qWsrIxF\\nixYxa9YsfD5fSrYjVm5ubp9uRzyx55wqYRJP5Hk3NDT0+f/7SCdOnOD+++/ne9/7Hrfeeiu/+MUv\\nwsdSqS2rV6/m9OnTzJs3D7/fH749ldpwPlLmmbNu3TrefvttgLh1wJRSVFRUMGvWrF4+045VV1fz\\nwAMPsGbNmvBQSyq2I55UbEdJSQmbN28G3AUFkydP7uUz6r7i4mK2bdsGwObNm/v8/33I6dOn+dGP\\nfsQjjzzCt771LSD12vL222+zbt06ADIzM9F1nWnTpqVUG5KhT/ZQ4vn2t7/NokWLeOONN3Ach1Wr\\nVgGwfPlyFi5cGK4DNmPGjF4+044988wzWJbFihUrAMjPz2ft2rUp144QTdOiVq6kWjtuuukmKioq\\nmD9/PkD47yqVhP7/y8vL+elPf4plWUyYMIHS0tJePrPEvPjii9TX17N27VrWrl0LwOLFi3nqqadS\\npi2lpaWUl5fz/e9/n0AgwOLFixk/fnxK/j7Oh9TyEkIIkRQpM+QlhBCib5NAEUIIkRQSKEIIIZJC\\nAkUIIURSSKAIIYRICgkUIYQQSSGBIvq9d955h1tuuYW5c+fy6quv9vbpCJGyUmZjoxAXwqlTp3j2\\n2Wd566238Hg8zJ8/n6uuuooJEyb09qkJkXKkhyL6tS1btnD11VeTn59PVlYWX/3qV3nvvfd6+7SE\\nSEkSKKJfq6mpYciQIeGvCwsLOXXqVC+ekRCpSwJF9GvxKg+l/VX1hLhAJFBEv1ZUVMTp06fDX3/x\\nxRcUFRX14hkJkbokUES/dvXVV/PRRx9RW1tLU1MTmzZtCl9WQAjRNbLKS/RrRUVFPPTQQyxYsAC/\\n3893vvMdpk+f3tunJURKkvL1QgghkkKGvIQQQiSFBIoQQoikkEARQgiRFBIoQgghkkICRQghRFJI\\noAghhEgKCRQhhBBJIYEihBAiKf4PO4TSU9tzr28AAAAASUVORK5CYII=\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x11cc74910>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"{'Adjusted Mutual Information Score': 0.19499599908424164,\\n\",\n      \" 'Adjusted Random Index': 0.0758234587868585,\\n\",\n      \" 'Completeness': 0.4768028269103578,\\n\",\n      \" 'Homogeneity': 0.41388614886716896,\\n\",\n      \" 'Silhouette Coefficient': 0.26281592769236894,\\n\",\n      \" 'V-measure': 0.44312232702024318}\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"simple_clusters = ml.cluster_hdbscan(simple_features, dry=True)\\n\",\n    \"ml.visualise_data(data=simple_features, labels=simple_clusters[\\\"clustering\\\"])\\n\",\n    \"\\n\",\n    \"pprint(ml.assess_clustering(simple_clusters[\\\"clustering\\\"], labels, simple_features))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 15,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x1215caf50>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"{'Adjusted Mutual Information Score': 0.18561121998710151,\\n\",\n      \" 'Adjusted Random Index': 0.09932513487989637,\\n\",\n      \" 'Completeness': 0.49125926993286956,\\n\",\n      \" 'Homogeneity': 0.37455827097943967,\\n\",\n      \" 'Silhouette Coefficient': 0.28439021194487296,\\n\",\n      \" 'V-measure': 0.42504387830902968}\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"features_nominal_filtered = ml.filter_dataset(features_nominal)\\n\",\n    \"\\n\",\n    \"nominal_clusters_filtered = ml.cluster_hdbscan(features_nominal_filtered, dry=True)\\n\",\n    \"ml.visualise_data(data=features_nominal_filtered, labels=nominal_clusters_filtered[\\\"clustering\\\"])\\n\",\n    \"\\n\",\n    \"pprint(ml.assess_clustering(nominal_clusters_filtered[\\\"clustering\\\"], labels, features_nominal_filtered))\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 16,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"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\\nop9wuHQccWiRWEESirCU55oiUk+/E31fSVG3zw32q0RbSjjjWOeTvT9ncJe948ahGrjyipjj7mrB\\nraGf7eZMVi5ev46/zdysJ4Mz2UxyPR0MkJupM22siuhHUcrslJfLXcJuJKEIS/mLJ+CvrEY/WRu5\\nfWRuqP+kuz6PaMOAU/1fkvS3zid752cnzbkkrov/2EeUZAmTpjfj8LbibW4/2xtecKX1fl2W60bB\\n2CGKw4FhwwVDpe9E2JMkFGG5ljv/G33PfpJ2BYYNlxSFkkks67h3HAbsrIh+slfJyWhtbaiOCUUp\\nHONGda5c3AsN/qE0NaeZne9hi4A1n9U4d1KRNbJ3rzskXZKIsD9LEkpZWRlbt25lw4YNofu/+MUv\\nGD7cnLjz/e9/nylTplgRmrCIf9IEWiZFzj2J+zruTh3f8JHo9Q2dOuXTh14GPejU7aokyxnGoOma\\nOUGmw1Df+oPEnFAO1cOu45Cc0sJXcmBcN+X1hbCLhCeUaHVk9u7dy8qVK5kzZ06iwxE21tVlpWAx\\nxq7mgnRXf8sz/dr216b3w4aDJVk6jhjzX3YZXORgo/+zE6prNRwaOBwGHx/RKB6puL0P5tQIEU8J\\nTyglJSXMnj2bP//5z6Fte/fuZd++fbz00ktMmjSJFStWoOvRayuJgSmec0O6OtmHl0jpbmJirMJL\\nsgTjHtqSxefbAuu2hDEMyLnqwq/5ZhXsrTWrORmBtV0cGlSc1EhxKYYNktIrwr76LKFs3ryZl19+\\nOWLb+vXro9aRmT59OrNmzSIvL4/Vq1ezadMmli5d2lehCZvpsp+km5bGhYoxRjvZ98VSvR1nzWcB\\nQ/LaaKhJCiz+pWEoGFJw4f6Ts03wcU3H0oDgD/TFfFyjMSRDSq8I++qzhFJaWkppaWlMj12wYEGo\\nINlNN93EW2+9dcHn9GbCUCLYMS47x+Svb8BbWY3mimyR6pXVuCaPQ/2vKfj+38ehWb1KKZwzriN9\\nfH4MbzIIYnlch5guhvd/9jD5zC4a9KGc8o8FFPnFSeTOu3DzZF+DB4fDG6qc3C6wWqQDnE6z6fPh\\nccW145IZlmlNS97OnylhHctHeSmlmD9/Pq+99hq5ubns2LGDoqLu5x+AzJSPld1jclUcwuUPlgqO\\n1Lr7IN7JhWjZ2Z1bGnH+neJxnLSGL0l97yPQNLKoJ0sPVAD4RHG2IPWCLaTGRnCgdTgSgcVdMP9p\\n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\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x114a43750>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"{'Adjusted Mutual Information Score': 0.24083108560105068,\\n\",\n      \" 'Adjusted Random Index': 0.1368612380343698,\\n\",\n      \" 'Completeness': 0.51831401985476744,\\n\",\n      \" 'Homogeneity': 0.44512204930226917,\\n\",\n      \" 'Silhouette Coefficient': 0.33168057325852018,\\n\",\n      \" 'V-measure': 0.47893784774264192}\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"simple_features_filtered = ml.filter_dataset(simple_features)\\n\",\n    \"\\n\",\n    \"simple_clusters_filtered = ml.cluster_hdbscan(simple_features_filtered, dry=True)\\n\",\n    \"ml.visualise_data(data=simple_features_filtered, labels=simple_clusters_filtered[\\\"clustering\\\"])\\n\",\n    \"\\n\",\n    \"pprint(ml.assess_clustering(simple_clusters_filtered[\\\"clustering\\\"], labels, simple_features_filtered))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Say we really like the clustering with *filtered simple dataset*. Let's see what more we can do with it.\\n\",\n    \"\\n\",\n    \"First of all we can save the clustering results in memory.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 17,\n   \"metadata\": {\n    \"collapsed\": true\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"ml.cluster_hdbscan(simple_features_filtered)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Then we can visualise per cluster ground truth label statistics.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 18,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAgAAAAFeCAYAAADzFKfgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAAFKlJREFUeJzt3X2QlXX9//HXAZQbMVlGvAkkFEeoJCMdmwSyFNQRdVBB\\nUdzWcMibysZGCYibFQUVbypDkkG7kTKYIWC0aVDLBk0t0BTLxsHEOxjaMIRA5H6/fzgyP36ibYac\\nlc/j8dee3etc530+A3ue57rOOVtpbGxsDABQlBbVHgAA2PMEAAAUSAAAQIEEAAAUSAAAQIEEAAAU\\nSABAobZt25af/OQnOffcczNo0KAMHDgwt9xySzZv3pwkGTVqVH784x9/4P0PHz48a9as2V3jJknm\\nzJmT008/Paeeemrq6+uzdevW3bp/KIkAgELV19dnyZIl+dnPfpb58+dnzpw5eemllzJ27NgkSaVS\\nSaVS+cD7f/zxx7M7P2Zk6dKlmTp1an7xi19kwYIFWbduXX7605/utv1DaQQAFOi1117Lr3/960ya\\nNCnt27dPkrRt2zbXXnttTjnllHdt37Nnz52ezb9z+c0338yVV16ZQYMG5Zxzzsm4cePS2NiY0aNH\\nJ0nq6urS0NCQhoaGfOMb38g555yTs846K9OnT0+SLF++PCeeeGIuueSSnHbaaVm1alXGjh2bWbNm\\nvWuG3/3udzn55JNTU1OTSqWS888/P/fdd9+HsTxQhFbVHgDY8/72t7/lyCOPzH777bfT9w888MD0\\n79+/yft56KGHsmHDhsyfPz/bt2/PhAkTsnz58txwww2ZN29e7rnnnnTo0CFf+cpX8tWvfjVf/vKX\\ns2nTpowYMSJdu3ZNr1690tDQkNtuuy3HHntskuT666/f5W394x//SOfOnXdcPvjgg9PQ0PAB7j2Q\\nCAAoUsuWLbN9+/b/eT/HHXdcvv/976e2tjZ9+vRJXV1dDjvssJ222bBhQxYvXpx///vf+cEPfpAk\\neeutt/L888+nV69eadWqVXr37v0fb2tXpxNatHAQEz4oAQAF6tWrV5YtW5Y333xzp6MADQ0NGT9+\\nfG6//fZ3XeedB+B3XiSYJF26dMmDDz6YRYsW5Y9//GMuvvjijBs3LqeeeuqObd4JjdmzZ6d169ZJ\\nktWrV6dNmzZZvXp19tlnnyY9kB966KFZtWrVTrMecsgh/+U9B94hn6FABx98cM4888yMGTMm69ev\\nT5KsX78+9fX1qampSevWrXd6xt2xY8f85S9/SfL2Yf/k7SC49957M3r06PTt2zdXX311+vXrlxde\\neCHJ20cZtmzZkvbt2+eYY47Z8Y6CdevWZdiwYXn44Yf/q5lPOumkPPzww1m9enUaGxsze/bs/+p0\\nBbAzRwCgUBMmTMi0adNywQUXpGXLltm8eXMGDBiQb37zm0my0zsAxo4dm4kTJ+ZjH/tYTjjhhBx0\\n0EGpVCo5++yzs3jx4px++ulp27ZtOnfunLq6uiTJgAEDcuGFF+ZHP/pRbr311lx33XU588wzs2XL\\nlpxxxhk544wzsnz58ne902Ds2LE5+uijM3To0J2+36NHj3z9619PXV1dtmzZks9+9rMZMWLEh7xK\\nsPeq+HPAAFAepwAAoEACAAAKJAAAoEACAAAKVMS7AD5/bn3aHXBQtcdo1jas/Wd+ct356dSpS7VH\\nafZqatrljTc2VHuMjwRr1TTWqemsVdN06rT/f9ymiABod8BBaV/T+T9vWLhWrVpWe4SPBOvUdNaq\\naaxT01mr3ccpAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAo\\nkAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAA\\ngAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJ\\nAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAo\\nkAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAAgAIJAAAokAAA\\ngAJVPQAmT56clStX7vJnP/zhDzNr1qz3vO7q1atTW1v7YY0GAHutVtUeYMyYMe/5s0qlsgcnAYBy\\nvG8AbNy4MSNHjsyqVaty6KGHZvHixbn77rtz/fXXp7GxMTU1NZk8eXKee+65zJgxI/vuu29ee+21\\nDBw4MJdddllWrlyZ8ePHZ+PGjWnTpk2uu+66bN26NZdffnk6dOiQE088MQsXLsy1116bDh065Dvf\\n+U7WrVuXJLnpppt2zPHKK6/k6quvzqRJk9KxY8dcffXV2bZtWzp37vzhrg4A7KXeNwBmz56drl27\\n5vbbb8+yZctyxhlnZNy4cZk8eXK6d++eOXPmZMaMGenTp09WrlyZ+++/P5s2bUq/fv1y2WWX5aab\\nbkptbW2++MUv5oknnsgtt9ySq666Kq+//nrmzZuXVq1aZeHChUmSadOmpX///jn//PPz9NNP59ln\\nn02SLFu2LL/61a9y6623pmvXrrn++uszcODADBkyJI899ljuvPPOD3+VAGAv874BsGzZsvTr1y9J\\ncsQRR6SmpiYvvvhi6uvrkyRbt25Nt27dkiRHHXVUWrRokbZt26ZNmzZJkqVLl2b69OmZMWNGkmSf\\nffZJknTp0iWtWu180y+//HKGDBmSJOndu3d69+6dqVOn5tFHH02rVq12nA546aWXMnjw4CTJcccd\\n97/ef/4/nTrtX+0RPhKsU9NZq6axTk1nrXaP9w2Ao446Ks8880z69++fV199NW+88UaOPvroTJky\\nZccpgTVr1iTZ9fn67t27Z/jw4endu3eWLl2aJUuWJElatHj3aw+7d++eZ599Nj169MjixYvzyCOP\\npHXr1qmrq0vXrl0zatSozJw5M927d89TTz2Vnj175plnntkda8D/Y9WqddUeodnr1Gl/69RE1qpp\\nrFPTWaumaUokvW8ADB48OKNGjcpFF12Uj3/842ndunXq6+szcuTIbNu2LS1atMikSZPS0NCwywAY\\nOXJk6uvrs3nz5mzcuDFjx45N8u5YqFQqufTSSzNmzJjcd999O/Y7f/78VCqVnHDCCVmwYEHuuuuu\\nXHHFFRk5cmQWLFiQww8/3AsFAeADqDQ2Nja+1w+ffvrpbNiwIX369MnLL7+cr33ta3nwwQf35Hy7\\nxZeHT0v7Gi8YfD/r31iR6aP6p6bm0GqP0ux5BtJ01qpprFPTWaum+Z+PABx22GH59re/nalTp2br\\n1q0ZP378bhsOAKie9w2AAw88MPfcc8+emgUA2EOq/kmAAMCeJwAAoEACAAAKJAAAoEACAAAKJAAA\\noEACAAAKJAAAoEACAAAKJAAAoEACAAAKJAAAoEACAAAKJAAAoEACAAAKJAAAoEACAAAKJAAAoEAC\\nAAAKJAAAoEACAAAKJAAAoEACAAAKJAAAoEACAAAKJAAAoEACAAAKJAAAoEACAAAKJAAAoEACAAAK\\nJAAAoEACAAAKJAAAoEACAAAKJAAAoEACAAAKJAAAoEACAAAKJAAAoEACAAAKJAAAoEACAAAKJAAA\\noEACAAAKJAAAoEACAAAKJAAAoEACAAAKJAAAoEACAAAKJAAAoEACAAAKJAAAoEACAAAKJAAAoEAC\\nAAAKJAAAoEACAAAKJAAAoEACAAAK1KraA+wJG9b+s9ojNHvWCKAsRQTAzBsuzOrV66s9RrPXrVu3\\nrF27qdpjALAHFBEARx11VFatWlftMZq9fffdN4kAACiB1wAAQIEEAAAUSAAAQIEEAAAUSAAAQIEE\\nAAAUSAAAQIEEAAAUSAAAQIEEAAAUSAAAQIEEAAAUSAAAQIEEAAAUSAAAQIEEAAAUSAAAQIEEAAAU\\nSAAAQIEEAAAUSAAAQIEEAAAUSAAAQIEEAAAUSAAAQIEEAAAUSAAAQIEEAAAUSAAAQIEEAAAUSAAA\\nQIFaVXuAPWHp0qVZvXp9tcdo9t54o711agLr1HTWqmmsU9NZq6bp1Olz/3GbIgKgdvS9aXfAQdUe\\nAwA+dBvW/jN/+pUASJK0O+CgtK/pXO0xAKDZ8BoAACiQAACAAgkAACiQAACAAgkAACiQAACAAgkA\\nACiQAACAAgkAACiQAACAAgkAACiQAACAAgkAACiQAACAAgkAACiQAACAAgkAACiQAACAAgkAACiQ\\nAACAAgkAACiQAACAAgkAACiQAACAAgkAACiQAACAAgkAACiQAACAAgkAACiQAACAAgkAACiQAACA\\nAgkAACiQAACAAgkAACiQAACAAgkAACiQAACAAgkAACiQAACAAgkAACiQAACAAgkAACiQAACAAgkA\\nACiQAACAAgkAACiQAACAAgkAACiQAACAAgkAACiQAACAAgkAACiQAACAAgkAACiQAACAAgkAACiQ\\nAACAAgkAACiQAACAAgkAACiQAACAAn2kA2Dp0qV58sknqz0GAHzkfKQD4IEHHsjf//73ao8BAB85\\nrXbHTubOnZuFCxdm06ZNefXVVzNixIh86lOfyqRJk9LY2JiamppMnjw5zz33XGbPnp3bbrstSdK3\\nb9/84Q9/yKhRo7JmzZqsXbs206dPz4wZM/LUU09l+/btufjii3P88cfnoosuym9+85skycSJE9O7\\nd+/Mmzcv++yzTz796U+nV69eu+OuAEARdksAJMn69etz991355VXXsmll16aAw44IJMnT0737t0z\\nZ86czJgxI3369NnldSuVSr7whS+krq4uCxcuzIoVK3Lvvfdm06ZNOf/889OnT5/06NEjTz75ZD7z\\nmc9k0aJFGTt2bF555ZV06tTJgz8A/Jd2SwBUKpV88pOfTJIccsgh2bx5c1588cXU19cnSbZu3Zpu\\n3bq963qNjY07vj788MOTvH1e/7nnnkttbW2SZNu2bVmxYkXOO++8zJs3L6tWrcrJJ5+cFi1avGsf\\nAEDT7LYjAJVKZafLRxxxRKZMmZJDDz00ixcvzpo1a9K6deusWrUqSbJixYqsXbv2Xdfv3r17Pv/5\\nz2fixInZunVr7rzzznTt2jU9e/bMzTffnIaGhkyYMGHHdbZv37677gIAFONDCYBKpZL6+vqMHDky\\n27ZtS6VSyeTJk9OlS5fsv//+Oe+889K9e/d06dLlXdc/6aSTsmjRogwbNiwbNmzIgAED0q5duyTJ\\nqaeemieeeCKHHXZYkuToo4/OlClTcuSRR+b444/fXXcFAPZ6lcYCjqF/efi0tK/pXO0xAOBDt/6N\\nFfn9j6/4j9t9pN8GCAB8MAIAAAokAACgQAIAAAokAACgQAIAAAokAACgQAIAAAokAACgQAIAAAok\\nAACgQAIAAAokAACgQAIAAAokAACgQAIAAAokAACgQAIAAAokAACgQAIAAAokAACgQAIAAAokAACg\\nQAIAAAokAACgQAIAAAokAACgQAIAAAokAACgQAIAAAokAACgQAIAAAokAACgQAIAAAokAACgQAIA\\nAAokAACgQAIAAAokAACgQAIAAAokAACgQAIAAAokAACgQAIAAAokAACgQAIAAAokAACgQAIAAAok\\nAACgQAIAAAokAACgQAIAAAokAACgQAIAAAokAACgQAIAAAokAACgQAIAAAokAACgQAIAAAokAACg\\nQAIAAAokAACgQAIAAArUqtoD7Akb1v6z2iMAwB7R1Me8SmNjY+OHPAsA0Mw4BQAABRIAAFAgAQAA\\nBRIAAFAgAQAABRIAAFCgvTYAtm/fnvHjx2fo0KGpra3Nq6++Wu2Rmr0lS5aktra22mM0W1u2bMk1\\n11yTYcOGZciQIXn44YerPVKztG3btowePToXXHBBLrzwwrzwwgvVHqnZ+9e//pUTTzwxL730UrVH\\nabbOPvvs1NbWpra2NmPGjKn2OM3a9OnTM3To0Jx77rmZN2/ee263134Q0G9/+9ts2bIls2bNypIl\\nS3LjjTdm2rRp1R6r2ZoxY0buu+++7LffftUepdm6//7707Fjx9x8881Zu3ZtBg0alJNOOqnaYzU7\\nv//979OiRYv88pe/zKJFi/K9733P/733sWXLlowfPz5t27at9ijN1qZNm5IkM2fOrPIkzd+f/vSn\\nPP3005k1a1Y2bNiQu+666z233WuPAPz5z39Ov379kiTHHHNM/vrXv1Z5oubtE5/4RKZOnRqfC/Xe\\nTjvttFx55ZVJ3j7C1LJlyypP1Dz1798/EydOTJKsWLEiBxxwQJUnat6mTJmSCy64IJ06dar2KM3W\\n888/n7feeiuXXHJJ6urqsmTJkmqP1Gw99thj6dGjR6644opcdtll7/skZa89ArB+/fq0b99+x+WW\\nLVtm+/btadFir22e/8kpp5yS5cuXV3uMZq1du3ZJ3v639a1vfStXXXVVlSdqvlq2bJlRo0bloYce\\nyu23317tcZqtuXPnpmPHjunbt2+mT58uwN9D27Ztc8kll2TIkCF5+eWXM2LEiDzwwAN+n+/C6tWr\\ns3LlykyfPj2vvfZaLr/88ixYsGCX2+61q9e+ffu8+eabOy578Gd3WLlyZerq6jJo0KAMHDiw2uM0\\nazfeeGMeeOCBjBs3Lhs3bqz2OM3S3Llz8/jjj6e2tjbPP/98Ro0alddff73aYzU73bp1y1lnnbXj\\n6w4dOmTVqlVVnqp5qqmpSd++fdOqVascfvjhad26dVavXr3LbffaR8TPfe5zeeSRR5IkzzzzTHr0\\n6FHlifioe/311zN8+PBcc801Oeecc6o9TrM1f/78TJ8+PUnSpk2bVCoV8f0efv7zn2fmzJmZOXNm\\nevbsmZtuuikHHnhgtcdqdubOnZsbb7wxSdLQ0JD169c7ZfIejj322Dz66KNJ3l6rt956KzU1Nbvc\\ndq89BTBgwIA89thjGTp0aJLkhhtuqPJEHw2VSqXaIzRbd955Z9atW5c77rgjd9xxR5LkrrvuSuvW\\nras8WfNy2mmnZdSoUbnooouydevWfPe7382+++5b7bH4CBs8eHBGjx6dYcOGJXn797mo3LUvfelL\\nWbx4cQYPHpzt27dnwoQJ7/l73V8DBIACSSgAKJAAAIACCQAAKJAAAIACCQAAKJAAAIACCQAAKJAA\\nAIAC/R+yge7NYg+BxgAAAABJRU5ErkJggg==\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x119fe7fd0>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAfQAAAFeCAYAAABzUe0CAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAAHDtJREFUeJzt3Wl0lIUZt/H/kGSAMBAGmCilLEEMWGUpYl+tS4sNyClg\\nIRAkEYiCWu0hesAtgcgaDFUQpYBEU6mAASoGFNpTlMqxIpXlKKmtQkSJCLUhGAgJwSQw837gNUde\\nQLKMPJk71+9TCM/M3HfpeD2zZOIKBAIBAQCAkNbE6QEAAED9EXQAAAwg6AAAGEDQAQAwgKADAGAA\\nQQcAwACCDhhy+vRpLVu2TCNGjNCwYcM0ePBgzZs3T5WVlZKk1NRUvfTSS3W+/vHjx+vYsWPBGrda\\nZWWl7r77bm3atCno1w00FgQdMGTGjBnKy8vTyy+/rPXr12vt2rXav3+/0tPTJUkul0sul6vO179t\\n2zYF+6MrPvzwQ40aNUoffPBBvWYDGjuCDhjx5ZdfauPGjZozZ448Ho8kqXnz5po5c6YGDhx4zvE9\\nevQ469H2t38+ceKEHnzwQQ0bNkzx8fF64oknFAgElJaWJklKTk5WYWGhCgsLNXHiRMXHx+v2229X\\nVlaWJOngwYP6xS9+oQkTJmjQoEEqKipSenq6Vq9efd65V65cqUmTJqlXr17B/p8EaFTCnR4AQHB8\\n/PHH6tatm1q0aHHW99u1a6e4uLgaX89bb72l8vJyrV+/Xn6/X9OnT9fBgweVmZmpdevWafny5Wrd\\nurXGjRunu+++W/3791dFRYXuvfdederUST179lRhYaGeeeYZXXvttZKkjIyMC97e/PnzJUnZ2dl1\\n2BrAtwg6YERYWJj8fn+9r6dfv3569tlnNXbsWN14441KTk5Wx44dzzqmvLxcO3fu1PHjx/Xcc89J\\nkk6ePKk9e/aoZ8+eCg8P109/+tN6zwKg5gg6YETPnj31+eef68SJE2c9Si8sLNS0adO0cOHCcy7z\\n7evh375pTpJ+/OMf680339SOHTv0/vvv66677tITTzyh2267rfqYb08c1qxZo6ZNm0qSiouL1axZ\\nMxUXFysiIkJNmvCKHnApcY8DjLjssss0dOhQTZkyRWVlZZKksrIyzZgxQ16vV02bNj3rDW1t2rTR\\nRx99JOnM0+zSmcDn5OQoLS1NN910kx555BHdfPPN+vTTTyWdeRagqqpKHo9HvXv3rn7HfGlpqe68\\n8069/fbbl3JlAN9B0AFDpk+frm7duikxMVHDhg3TqFGjFBsbW/0a9nffRZ6enq5Zs2YpPj5en3zy\\niaKjo+VyuTR8+HD5/X79+te/1ogRI3TixAklJydLkgYMGKCkpCTt27dP8+fPV15enoYOHaqEhAQN\\nHjxYQ4YMOed2vr2tC70pDkBwuPj1qQAAhD4eoQMAYABBBwDAAIIOAIABBB0AAANC7ufQ/8+IGYqM\\ninZ6jHopLzmsZbPvkM/3Y6dHqTevN1JHj5Y7PUa9WNhBsrGHhR0k9mhILOwgST5fy4seE3JBj4yK\\nlsfbwekx6i08PMzpEYLCwh4WdpBs7GFhB4k9GhILO9QUT7kDAGAAQQcAwACCDgCAAQQdAAADCDoA\\nAAYQdAAADCDoAAAYQNABADCAoAMAYABBBwDAAIIOAIABBB0AAAMIOgAABhB0AAAMIOgAABhA0AEA\\nMICgAwBgAEEHAMAAgg4AgAG1DvrKlSvP+/2UlJQLXiY/P1+7du2q7U0BAIAaqnXQly5det7v/+EP\\nf7jgZTZt2qR9+/bV9qYAAEANhX/fX+7fv19paWmKiIiQ3+/XDTfcoGPHjmnWrFnq2bOn1q5dK0ma\\nOHGiHn30UW3dulV5eXnKzMyU3+/XZZddpvT0dK1bt05ut1s/+clPVFpaqueee05NmzZV69at9eST\\nT+rjjz/WvHnz5Ha7NWrUKP3mN7+5JMsDAGDF9wZ927Zt6tOnjx555BHt2rVLbdu21erVqzVt2jTl\\n5uaqdevWWrx48VmXmTZtmhYsWKCuXbvqtdde09dff634+Hj5fD716tVLv/rVr7Rq1SpFR0dr+fLl\\nWrJkifr376/Kykq9+uqrP+iyAABY9b1BT0hI0AsvvKB77rlHrVq10kMPPXTW33fp0uWcy3z99dfq\\n2rWrJGnEiBGSpLfffluSVFxcLI/Ho+joaElSv379tGDBAvXv318xMTH1XibU+HwtnR4hKCzsYWEH\\nycYeFnaQ2KMhsbBDTXxv0Ddv3qx+/fpp4sSJ+stf/qLs7GwFAoHqv2/S5NyX4KOjo/XFF1+oc+fO\\nys7OVpcuXeRyuXT69Gl5vV6VlZWpqKhIPp9PO3bsqA75+a7LuqKiUqdHqDefr2XI72FhB8nGHhZ2\\nkNijIbGwg1Szk5LvDXrPnj31+OOP6/nnn5ff71daWpoOHTqkRx99VD//+c/lcrnOuczMmTM1ZcoU\\nNWnSRNHR0UpOTlZERISeeuopdevWTRkZGUpJSZHL5VJUVJTmzp2r/Pz8814XAACoGVfguw+5Q0D/\\n8Uvk8XZweox6KTt6SFmpcfJ62zs9Sr1ZOPu1sINkYw8LO0js0ZBY2EGq2SP0xvc8NwAABhF0AAAM\\nIOgAABhA0AEAMICgAwBgAEEHAMAAgg4AgAEEHQAAAwg6AAAGEHQAAAwg6AAAGEDQAQAwgKADAGAA\\nQQcAwACCDgCAAQQdAAADCDoAAAYQdAAADCDoAAAYQNABADCAoAMAYEC40wPUVnnJYadHqDcLOwAA\\nGpaQC/qKzCQVF5c5PUa9denSRSUlFU6PAQAwIuSCHhsbq6KiUqfHqDe32y2JoAMAgoPX0AEAMICg\\nAwBgAEEHAMAAgg4AgAEEHQAAAwg6AAAGEHQAAAwg6AAAGEDQAQAwgKADAGBAyH30a35+vonPcj96\\n1MMeDYSFHSQbe1jYQWKPhsTCDpLk8/W96DEhF/SxaTmKjIp2egwAAC6J8pLD2v6awaBHRkXL4+3g\\n9BgAADQovIYOAIABBB0AAAMIOgAABhB0AAAMIOgAABhA0AEAMICgAwBgAEEHAMAAgg4AgAEEHQAA\\nAwg6AAAGEHQAAAwg6AAAGEDQAQAwgKADAGAAQQcAwACCDgCAAQQdAAADCDoAAAYQdAAADCDoAAAY\\nEF7fK8jNzdU777yjiooKHThwQPfee6+6d++ujIwMhYWFye12KyMjQ6dPn9bDDz+s9u3b68CBA+rV\\nq5dmzJih0tJSTZ06VceOHZMkpaenKzY2tt6LAQDQmNQ76JJUVlamP/7xj/riiy/029/+Vi1atNCc\\nOXPUo0cP/f3vf1dmZqYef/xxFRQUaNmyZWrWrJni4uJ05MgRLVu2TDfccIMSExNVUFCgKVOmKCcn\\nJxhjAQDQaNQ76C6XS1dddZUk6fLLL1dlZaXKy8vVo0cPSVK/fv00f/58SVLnzp0VGRkpSfL5fKqo\\nqFB+fr62b9+uv/71r5Kk48eP13ckAAAanaA8Qne5XGf9OTo6Wnv37lX37t21c+dOxcTEnPc4Sbri\\niit0zTXXaMiQISosLNSGDRuCMRIAAI1K0IPucrmUkZGh2bNnKxAIKDw8XHPmzFEgEDgn6C6XS/ff\\nf7+mTp2qNWvW6MSJE0pJSQnGSAAANCquQCAQcHqI2ug/fok83g5OjwEAwCVRdvSQtrz0u4sex4+t\\nAQBgAEEHAMAAgg4AgAEEHQAAAwg6AAAGEHQAAAwg6AAAGEDQAQAwgKADAGAAQQcAwACCDgCAAQQd\\nAAADCDoAAAYQdAAADCDoAAAYQNABADCAoAMAYABBBwDAAIIOAIABBB0AAAMIOgAABoQ7PUBtlZcc\\ndnoEAAAumZp2zxUIBAI/8CxBlZ+fr+LiMqfHqLc2bTzs0UBY2EGysYeFHST2aEgs7CBJ11/f96LH\\nhFzQJamoqNTpEerN52vJHg2EhR0kG3tY2EFij4bEwg7SmT0uhtfQAQAwgKADAGAAQQcAwACCDgCA\\nAQQdAAADCDoAAAYQdAAADCDoAAAYQNABADCAoAMAYEDI/XIWK5/lHhV1jdMjAAAMCbmgj03LUWRU\\ntNNj1Et5yWGtyPTI623v9CgAACNCLuiRUdHyeDs4PQYAAA0Kr6EDAGAAQQcAwACCDgCAAQQdAAAD\\nCDoAAAYQdAAADCDoAAAYQNABADCAoAMAYABBBwDAAIIOAIABBB0AAAMIOgAABhB0AAAMIOgAABhA\\n0AEAMICgAwBgAEEHAMAAgg4AgAE/WNDz8vI0cOBALViwQLt27dLevXt/qJsCAKDR+8GC/u677yo5\\nOVmTJk3S2rVrdfjw4R/qpgAAaPTCL3bAN998o8cee0xFRUVq3769duzYoZiYGLVt21bHjx/XwoUL\\nNXXqVJWVlenw4cNKSkrS1VdfrdzcXEVERKiyslJbt27VJ598om7dumnnzp1avny53G63OnfurNmz\\nZ+uNN97Qa6+9pkAgoJSUFN1www2XYncAAMy4aNDXrFmjTp06aeHChfr88881ZMgQde3aVUOGDFFc\\nXJw+/vhjDRkyRAMGDFBhYaHGjRunTZs2KT4+Xj6fT3fccYfy8/M1ePBgNWvWTIsWLdL69esVGRmp\\nzMxMrVmzRpGRkYqKitKSJUsuxc4AAJhz0aB//vnnuvnmmyVJXbt2ldfrlSTFxMRIktq2bauXX35Z\\nb775pjwej06dOlV92UAgcNbXBw8eVLdu3RQZGSlJuu6667R161b17t27+voaE5+vpdMjBIWFPSzs\\nINnYw8IOEns0JBZ2qImLBj02Nla7d+9WXFycDhw4oGPHjikQCMjlckmSli1bpj59+igxMVHvv/++\\n3nnnHUlnx9zlcsnv96tDhw767LPPdPLkSTVv3lzbt2+vDnmTJo3vDfdFRaVOj1BvPl/LkN/Dwg6S\\njT0s7CCxR0NiYQepZiclF63oyJEjdejQIY0ZM0aLFi2S2+2Wy+WqDnr//v2Vk5OjCRMmaMuWLWrR\\nooUqKyvPOqZ3796aP3++jh49qpSUFI0bN0533HGHSkpKlJiYKEnVxwIAgNpzBb77UPo8PvzwQ5WX\\nl+vGG29UQUGB7rvvPr355puXar5z9B+/RB5vB8duPxjKjh5SVmqcvN72To9SbxbOfi3sINnYw8IO\\nEns0JBZ2kGr2CP2iT7l37NhRkydP1qJFi3Tq1ClNmzYtKMMBAIDguWjQ27Vrp+XLl1+KWQAAQB01\\nvneiAQBgEEEHAMAAgg4AgAEEHQAAAwg6AAAGEHQAAAwg6AAAGEDQAQAwgKADAGAAQQcAwACCDgCA\\nAQQdAAADCDoAAAYQdAAADCDoAAAYQNABADCAoAMAYABBBwDAAIIOAIAB4U4PUFvlJYedHqHeLOwA\\nAGhYQi7oKzKTVFxc5vQY9dalSxeVlFQ4PQYAwIiQC3psbKyKikqdHqPe3G63JIIOAAgOXkMHAMAA\\ngg4AgAEEHQAAAwg6AAAGEHQAAAwg6AAAGEDQAQAwgKADAGAAQQcAwACCDgCAASH30a/5+fkmPsv9\\n6FEPezQQFnaQbOxhYQdJioq6xukR0AiFXNDHpuUoMira6TEA4LzKSw5rRaZHXm97p0dBIxNyQY+M\\nipbH28HpMQAAaFB4DR0AAAMIOgAABhB0AAAMIOgAABhA0AEAMICgAwBgAEEHAMAAgg4AgAEEHQAA\\nAwg6AAAGEHQAAAwg6AAAGEDQAQAwgKADAGAAQQcAwACCDgCAAQQdAAADCDoAAAYQdAAADCDoAAAY\\nQNABADAgKEFftWqVxo4dq7Fjx+qWW25Rjx49NH/+fElSRUWFbr31VknSK6+8olGjRmn06NHKyMhQ\\nIBDQwIEDdfz4cUlSTk6OsrOzgzESAACNSlCCnpiYqBUrVuixxx7Tj370I6WlpZ33uHXr1mnatGla\\nvXq1rrjiCvn9fg0dOlQbN26UJG3YsEHx8fHBGAkAgEYlPFhX9Nlnn2n69OlaunSp3nvvPR05ckSS\\nFAgEqo/JzMzUSy+9pIMHD6pPnz4KBAIaMWKEJk+erOuuu07t2rVTmzZtgjUSADjG52vp9AhBYWEP\\nCzvURFCCfujQIU2ePFkLFixQdHS03G63ioqKJEn/+c9/qo/785//rJkzZ8rtdmvChAnavXu3+vXr\\np5YtW2rp0qUaOXJkMMYBAMcVFZU6PUK9+XwtQ34PCztINTspCUrQZ82apYqKCs2cOVN+v18ej0dl\\nZWVKSkrS1VdfrZYtzwwSGxurpKQktWjRQpdffrl69eolSRo1apQyMjI0b968YIwDAECjE5SgZ2Vl\\n1ei4hIQEJSQknPP906dPa+TIkXK5XMEYBwCARidor6HX1TPPPKMdO3bU+KQAAACcy/GgT5482ekR\\nAAAIeXywDAAABhB0AAAMIOgAABhA0AEAMICgAwBgAEEHAMAAgg4AgAEEHQAAAwg6AAAGEHQAAAwg\\n6AAAGEDQAQAwgKADAGAAQQcAwACCDgCAAQQdAAADCDoAAAYQdAAADCDoAAAYEO70ALVVXnLY6REA\\n4IL4bxScEnJBX5GZpOLiMqfHqLc2bTzs0UBY2EGysYeFHSSpS5cuKimpcHoMNDIhF/TY2FgVFZU6\\nPUa9+Xwt2aOBsLCDZGMPCztIktvtlkTQcWnxGjoAAAYQdAAADCDoAAAYQNABADCAoAMAYABBBwDA\\nAIIOAIABBB0AAAMIOgAABhB0AAAMCLmPfs3PzzfxWc9Hj9r4zOqoqGucHgEAoBAM+ti0HEVGRTs9\\nBnTmt0qtyPTI623v9CgA0OiFXNAjo6Ll8XZwegwAABoUXkMHAMAAgg4AgAEEHQAAAwg6AAAGEHQA\\nAAwg6AAAGEDQAQAwgKADAGAAQQcAwACCDgCAAQQdAAADCDoAAAYQdAAADCDoAAAYQNABADCAoAMA\\nYABBBwDAAIIOAIABBB0AAAMaVNDXrVunt99+2+kxAAAIOeFOD/Bdw4cPd3oEAABCUo2Cvn//fqWl\\npSkiIkJ+v1+dOnXSNddcozvvvFMlJSW6++67lZqaqqysLLndbv3vf//T6NGj9f7772vPnj0aN26c\\nEhMTNXToUF133XXau3evunbtqrZt22rXrl1yu9164YUX9Pzzz8vn82n06NE/9N4AAJhSo6fct23b\\npj59+mjZsmVKSUnRXXfdpddff12StHHjRt1+++2SpMLCQi1atEgzZszQ888/r6efflovvvii1qxZ\\nI0k6ceKEhg4dqldeeUW7du1S3759tXLlSlVVVWnfvn1yuVw/0JoAANhWo0foCQkJeuGFF3TPPfeo\\nVatWeuihh9SiRQt99tln2rBhg5YuXaq9e/fqyiuvVFhYmDwejzp27Kjw8HC1atVKFRUV1dd19dVX\\nS5JatWqlbt26VX/93WMQWny+lk6PUG8WdpBs7GFhB4k9GhILO9REjYK+efNm9evXTxMnTtTGjRuV\\nnZ2thIQELV68WO3bt1fr1q0liUfYjVRRUanTI9SLz9cy5HeQbOxhYQeJPRoSCztINTspqdFT7j17\\n9tTChQuVnJysNWvWaNy4cRowYID++c9/auTIkZLOxPy7Qb/Q1xfDSQEAALXnCgQCgbpc8JtvvtGY\\nMWO0du3aYM/0vfqPXyKPt8MlvU2cX9nRQ8pKjZPX297pUerF0hl8qO9hYQeJPRoSCztIQXyE/v/7\\n4IMPlJCQoPvuu68uFwcAAEFWp59D79u3rzZs2BDsWQAAQB01qE+KAwAAdUPQAQAwgKADAGAAQQcA\\nwACCDgCAAQQdAAADCDoAAAYQdAAADCDoAAAYQNABADCAoAMAYABBBwDAAIIOAIABBB0AAAMIOgAA\\nBhB0AAAMIOgAABhA0AEAMICgAwBgQLjTA9RWeclhp0fA/8O/BQA0HK5AIBBweggAAFA/POUOAIAB\\nBB0AAAMIOgAABhB0AAAMIOgAABhA0AEAMCBkfg7d7/drxowZys/PV0REhObMmaNOnTo5PVad5eXl\\nad68eVqxYoXTo9RaVVWVpkyZov/+97+qrKzUAw88oFtvvdXpsWrt9OnTSk9PV0FBgVwul2bOnKkr\\nr7zS6bHq5Ouvv1Z8fLz+9Kc/KSYmxulx6mT48OHyeDySpI4dO+rJJ590eKK6ycrK0pYtW1RVVaUx\\nY8Zo+PDhTo9UK+vWrVNubq4kqaKiQnv27NG2bduq/21Chd/v19SpU1VQUKAmTZpo9uzZ6tq1q9Nj\\n1UplZaXS09N14MABhYeHKz09XT169Ljg8SET9M2bN6uqqkqrV69WXl6e5s6dqyVLljg9Vp28+OKL\\neuONN9SiRQunR6mTDRs2qE2bNnr66adVUlKiYcOGhWTQt2zZoiZNmmjVqlXasWOHFixYEJL/n6qq\\nqtK0adPUvHlzp0eps4qKCkkKyRPc79q+fbs+/PBDrV69WuXl5crOznZ6pFobPnx49UnIrFmzlJCQ\\nEHIxl6StW7fq5MmTWrVqlbZt26Znn31WCxcudHqsWnn11VfVrFkzrV69Wvv379fDDz9cfbJ1PiHz\\nlPsHH3ygm2++WZLUu3dv/fvf/3Z4orrr3LmzFi1apFD9TJ9BgwbpwQcflHTmLDgsLMzhieomLi5O\\ns2bNkiQdOnRIUVFRDk9UN0899ZQSExPl8/mcHqXO9uzZo5MnT2rChAlKTk5WXl6e0yPVyXvvvafu\\n3bvrd7/7ne6///6QPNH91kcffaRPP/1UCQkJTo9SJ82aNVNpaakCgYBKS0sVERHh9Ei1tm/fPt1y\\nyy2SpJiYGBUWFqqsrOyCx4fMI/SysrKzzhLDwsLk9/vVpEnInJNUGzhwoA4ePOj0GHUWGRkp6cy/\\nyUMPPaRJkyY5PFHdhYWFKTU1VW+99VbInb1LUm5urtq0aaObbrpJWVlZIXuS2Lx5c02YMEEJCQkq\\nKCjQvffeq02bNoXc/bu4uFhfffWVsrKy9OWXX+qBBx7Q3/72N6fHqpOsrCylpKQ4PUad9e3bV5WV\\nlRo0aJCOHTumpUuXOj1SrV111VXasmWL4uLitHv3bhUXF6u8vPyCz5iEzL3F4/HoxIkT1X8O1Zhb\\n8dVXXyk5OVnDhg3T4MGDnR6nXubOnatNmzbpiSee0DfffOP0OLWSm5urbdu2aezYsdqzZ49SU1N1\\n5MgRp8eqtS5duuj222+v/rp169YqKipyeKra83q9uummmxQeHq6YmBg1bdpUxcXFTo9Va8ePH1dB\\nQYF+9rOfOT1KnWVnZ6tv377atGmTXn/9daWmpqqystLpsWplxIgR8ng8SkpK0ubNm6vvGxcSMkXs\\n27ev/vGPf0iSdu/ere7duzs8UeN15MgRjR8/Xo8++qji4+OdHqfO1q9fr6ysLElnnp5zuVwhd5K4\\ncuVKrVixQitWrFCPHj30+9//Xu3atXN6rFrLzc3V3LlzJan6acVQfAnh2muv1bvvvivpzB4nT56U\\n1+t1eKra27lzp66//nqnx6iXkydPVr9PqVWrVqqqqpLf73d4qtr517/+peuvv145OTm67bbb5PP5\\n5Ha7L3h8yDzlPmDAAL333nsaPXq0JCkzM9PhierP5XI5PUKdLF26VKWlpVq8eLEWL14s6czZcNOm\\nTR2erHYGDRqk1NRUjRkzRqdOndLUqVO/986CH87IkSOVlpamO++8U9KZ+3eonVxJ0i9/+Uvt3LlT\\nI0eOlN/v1/Tp00Pyfl5QUBDSP0UkSRMmTFBaWpqSkpJ06tQpPfzww2rWrJnTY9VKTEyMJk2apKys\\nLLndbmVkZHzv8fy2NQAADAi9U2AAAHAOgg4AgAEEHQAAAwg6AAAGEHQAAAwg6AAAGEDQAQAwgKAD\\nAGDA/wX4igrVetCynwAAAABJRU5ErkJggg==\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12a764e90>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n/wUSw0chYRWqugAAAABJRU5ErkJggg==\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12b3927d0>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\n99zT6XJn6j/eaVfO1etee+21TJw4MU1NTRkzZkyeeuqpTpdv85mqVNkdd9xRmTBhQqVSqVSWLFlS\\nOfPMMzsu27RpU2Xo0KGVf//735VNmzZVRo4cWVm9enW1Rq2qre2pUqlUzj///MrSpUurMdpO55pr\\nrqkMGzascsopp3T6vPPU2Zb2VKk4T2928803V2bMmFGpVCqVdevWVT772c92XOZMdba1XVUqztUb\\nFi5cWJk0aVKlUqlU/vrXv/7P3av6I/KHH344Rx99dJLkkEMOyWOPPdZx2TPPPJN99903/fr1S69e\\nvTJ48OAsXry4WqNW1db2lCRLly7N7NmzM2bMmFxzzTXVGHGn8ZGPfCQ/+clPUvmvv3XkPHW2pT0l\\nztObffGLX8y3vvWtJK8/M9azZ8+Oy5ypzra2q8S5esNxxx2XqVOnJkmef/759O/fv+Oy7pypqoe8\\ntbU1dXV1HR/37Nkz7e3tHZf169ev47K+fftm/fr1O3zGncHW9pQkjY2NmTp1aubMmZO//e1v+dOf\\n/lSFKXcOxx9//Ft+gCTO03/b0p4S5+nN+vTpk759+6a1tTXnnHNOzj333I7LnKnOtrarxLl6s549\\ne2bChAmZPn16hg0b1vH57pypqoe8rq4uGzZs6Pi4vb09PXq8Pla/fv06XbZhw4ZOv7nsSra2pyQZ\\nN25cBgwYkF69euWYY47JsmXLqjHmTs156jrnqbMXX3wx48aNy4knnpjGxsaOzztTb7WlXSXO1X+b\\nOXNm7rjjjnzve9/Lxo0bk3TvTFU95Icddljuu+++JMmSJUtywAEHdFz2sY99LMuXL89LL72UTZs2\\nZfHixTn00EOrNWpVbW1P69evz/Dhw9PW1pZKpZJFixbloIMOqtaoOy3nqWucp85Wr16d008/PRdc\\ncEG+8pWvdLrMmepsa7tyrv5jwYIF+dnPfpYked/73peamprU1NQk6d6Zqvo/mlKpVDJlypQ88cQT\\nSZJLL700S5cuTVtbW0aNGpU//vGP+elPf5r29vacdNJJGTNmTDXHrZp32tNtt92W6667Lr17985R\\nRx2Vs846q8oTV9eKFSty/vnn59e//nVuu+0252kLtrQn5+k/pk+fnttvvz377bdfx+dGjRqVl19+\\n2Zn6L++0K+fqdRs3bsyECROyevXqvPrqqznjjDPS1tbW7Z9TVQ85ANB9VX9qHQDoPiEHgIIJOQAU\\nTMgBoGBCDgAFE3IAKJiQA0DBhBwACvb/AUML2FcfUJc9AAAAAElFTkSuQmCC\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12b482210>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\nJFzeHa4AAAAASUVORK5CYII=\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12b229090>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAgUAAAFeCAYAAAAVPWykAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt4lIWZuP97IAQI4ZBA8IBIIRhwUUAW/XmAsqzgei2R\\na6WgHIx0YSvoghbKISBCgAAFSz0hiBG5JKKiiAfYLtJqFxWLQBXbrhVakOMixAYwCacc5veHY75N\\nsTpowjsy9+evhMy888xzibnzzsskFA6Hw0iSpLhXK+gBJElSbDAKJEkSYBRIkqQIo0CSJAFGgSRJ\\nijAKJEkSAAlBDyApeOXl5Sxbtow1a9ZQXl5OaWkpPXv25O677yYxMZHs7GwyMjIYNmzYNzr+sGHD\\n+PnPf06TJk2qbebRo0ezbds2kpKSALj66qvJzs6utuNL8cgokEROTg5FRUU89dRTJCcnc/z4ccaN\\nG8eUKVOYN28eoVCIUCj0jY//zjvvUN1vibJ161ZWrVpFWlpatR5XimdGgRTn9u7dy5o1a3j77bdp\\n0KABAPXr12f69Ols3br1tNu3b9+ejRs3Vv7U/8XnderUYdKkSezZs4datWrRoUMHZsyYweTJkwEY\\nOnQoeXl5AMycOZP/+7//o6ysjD59+jBixAj27dvHkCFDaNu2Lfv37yc/P5+HHnqIyy67jIEDB542\\nc0lJCVOnTmX//v106NCB7OxsGjduXJOrks55XlMgxbkPP/yQtm3bVgbBF5o1a0avXr2iPs4vf/lL\\njh07xssvv8zKlSsB2LdvH3PmzAFg2bJlnHfeeYwfP54f/OAHrFq1ihdeeIENGzbw3//93wAcPHiQ\\nu+66i7Vr15KWlkZubu5pQQBw+PBhrrvuOmbOnMnLL79MgwYNKuND0jfnmQIpztWuXZuKiopvfZyu\\nXbvy4IMPkpWVxXXXXcfQoUNp2bJlldscO3aMzZs389lnn/HQQw8BcPz4cT766CMuv/xyEhISuOKK\\nK772sTp27MgjjzxS+fmoUaPo1q0bZWVlJCT4vzXpm/JvjxTnLr/8cnbu3ElJSUmVswUHDx5k6tSp\\nPPzww6fd54vrA06dOlX5ZxdddBHr1q1j06ZNbNy4kR/+8Ifcd999/Mu//Evlbb6IjxUrVlC3bl0A\\nCgsLqVevHoWFhdSpU4datb7+BOaWLVs4evQo119/feVxQ6EQtWvX/gYbkPQFXz6Q4tx5553HTTfd\\nxOTJkykuLgaguLiYnJwcUlJSqFu3bpWLBFNTU/n9738PfP6SAXweCc888wyTJk2iW7dujBs3ju7d\\nu/OnP/0J+PxsRGlpKcnJyXTq1Iknn3wSgKKiIoYMGcIbb7xxRjOXlJQwa9Ysjh49CsCSJUu48cYb\\nv9XFkJI8UyAJmDZtGgsXLmTQoEHUrl2bU6dO0bt3b0aPHg1Q5ZvtlClTmDFjBo0aNeLaa6+lefPm\\nhEIhbr75ZjZv3sy//uu/Ur9+fVq0aMHQoUMB6N27N4MHD2bRokXMnz+fmTNnctNNN1FaWkpmZiaZ\\nmZns27fvtG/qU6ZM+dILDXv06MFtt93GoEGDqKiooF27duTm5tbwlqRzX8hfnSxJksCXDyRJUoRR\\nIEmSAKNAkiRFGAWSJAmIs3998P/9IIekxs2DHqPSsaOHeGh8X9LTLwl6lCpSUpI4fPhY0GN8J7ir\\n6Lin6Lin6Lmr6KSlNTyj28dVFCQ1bk5ySougx4h5CQm+AUy03FV03FN03FP03FXN8OUDSZIEGAWS\\nJCnCKJAkSYBRIEmSIowCSZIEGAWSJCnCKJAkSYBRIEmSIowCSZIEGAWSJCnCKJAkSYBRIEmSIowC\\nSZIEGAWSJCnCKJAkSYBRIEmSIowCSZIEQEJQD7xq1SrWr1/PyZMn2bNnDz/60Y9o164dubm51K5d\\nm8TERHJzcykvL+cnP/kJF1xwAXv27KFjx47k5ORQVFTEvffey5EjRwCYMmUKGRkZQT0dSZK+8wKL\\nAoDi4mKWLFnC7t27GTFiBA0aNGDWrFm0b9+e119/nTlz5jBx4kR27drF0qVLqVevHr169eLTTz9l\\n6dKlXHPNNQwaNIhdu3YxefJknnnmmSCfjiRJ32mBRUEoFOLSSy8F4Pzzz+fUqVMcO3aM9u3bA9C1\\na1fmz58PQKtWrUhKSgIgLS2NkydPsn37dt59911+8YtfAPDZZ58F8Cy+vdTUZNLSGgY9xmlicaZY\\n5a6i456i456i566qX6BnCkKhUJXPmzdvzrZt22jXrh2bN2+mdevWX3o7gPT0dC677DIyMzM5ePAg\\nq1evPiszV7fCwmIKCoqCHqOKtLSGMTdTrHJX0XFP0XFP0XNX0TnTcIqZKAiFQuTm5jJz5kzC4TAJ\\nCQnMmjWLcDh8WhSEQiFGjhzJvffey4oVKygpKWH06NFne3xJks4poXA4HA56iLOl57CFJKe0CHqM\\nSsWH9zPnjqtJT78k6FGqsMCj566i456i456i566ic6ZnCvwniZIkCTAKJElShFEgSZIAo0CSJEUY\\nBZIkCTAKJElShFEgSZIAo0CSJEUYBZIkCTAKJElShFEgSZIAo0CSJEUYBZIkCTAKJElShFEgSZIA\\no0CSJEUkBD3A2XTs6KGgR6gi1uaRJMW3uIqC/DmDKSwsDnqMKlq2bBX0CJIkAXEWBRkZGRQUFAU9\\nhiRJMclrCiRJEmAUSJKkCKNAkiQBRoEkSYowCiRJEmAUSJKkCKNAkiQBRoEkSYqIqzcv2r59e0y+\\no2FiYmLQY0iSFF9RkDXpGZIaNw96jErHjh7iofF9SU+/JOhRJEmKryhIatyc5JQWQY8hSVJM8poC\\nSZIEGAWSJCnCKJAkSYBRIEmSIowCSZIEGAWSJCnCKJAkSYBRIEmSIowCSZIEGAWSJCnCKJAkSYBR\\nIEmSIowCSZIEGAWSJCnCKJAkSUCMRsEHH3zADTfcwAMPPMCWLVvYtm1b0CNJknTOi8koeOuttxg6\\ndChjxoxh5cqVHDp0KOiRJEk65yXU5MFPnDjBhAkTKCgo4IILLmDTpk20bt2apk2b8tlnn/Hwww9z\\n7733UlxczKFDhxg8eDAdOnRg1apV1KlTh1OnTvH222/zxz/+kbZt27J582aWLVtGYmIirVq1YubM\\nmbz66qu8+OKLhMNhRo8ezTXXXFOTT0mSpHNWjUbBihUruPjii3n44YfZuXMnmZmZtGnThszMTHr1\\n6sWHH35IZmYmvXv35uDBg9x+++289tpr9OvXj7S0NG699Va2b99Onz59qFevHgsWLODll18mKSmJ\\nOXPmsGLFCpKSkmjcuDELFy6syaciSdI5r0ajYOfOnXTv3h2ANm3akJKSAkDr1q0BaNq0KU899RTr\\n1q0jOTmZsrKyyvuGw+EqH+/bt4+2bduSlJQEwJVXXsnbb79Np06dKo/3XZSamkxaWsOgxzhNLM4U\\nq9xVdNxTdNxT9NxV9avRKMjIyGDr1q306tWLPXv2cOTIEcLhMKFQCIClS5fSuXNnBg0axMaNG1m/\\nfj1QNQhCoRAVFRW0aNGCHTt2cPz4cerXr8+7775bGQO1asXkpRFRKSwspqCgKOgxqkhLaxhzM8Uq\\ndxUd9xQd9xQ9dxWdMw2nGv1u2r9/f/bv389tt93GggULSExMJBQKVUZBz549eeaZZxg+fDi//vWv\\nadCgAadOnapym06dOjF//nwOHz7M6NGjuf3227n11ls5evQogwYNAqi8rSRJ+uZC4b/+sbyavf/+\\n+xw7dozrrruOXbt2cccdd7Bu3bqaeriv1XPYQpJTWgT2+H+r+PB+5txxNenplwQ9ShUWePTcVXTc\\nU3TcU/TcVXTO9ExBjb580LJlS8aOHcuCBQsoKytj6tSpNflwkiTpW6jRKGjWrBnLli2ryYeQJEnV\\n5Lt7hZ4kSapWRoEkSQKMAkmSFGEUSJIkwCiQJEkRRoEkSQKMAkmSFGEUSJIkwCiQJEkRRoEkSQKM\\nAkmSFGEUSJIkwCiQJEkRRoEkSQJq+Fcnx5pjRw8FPUIVsTaPJCm+xVUU5M8ZTGFhcdBjVNGyZaug\\nR5AkCYizKMjIyKCgoCjoMSRJikleUyBJkgCjQJIkRRgFkiQJMAokSVKEUSBJkgCjQJIkRRgFkiQJ\\nMAokSVJEXL150fbt22PyHQ0TExODHkOSpPiKgqxJz5DUuHnQY1Q6dvQQD43vS3r6JUGPIklSfEVB\\nUuPmJKe0CHoMSZJiktcUSJIkwCiQJEkRRoEkSQKMAkmSFGEUSJIkwCiQJEkRRoEkSQKMAkmSFGEU\\nSJIkwCiQJEkRRoEkSQKMAkmSFGEUSJIkwCiQJEkRRoEkSQK+g1Hw0ksv8cYbbwQ9hiRJ55yEoAc4\\nUzfffHPQI0iSdE76yigoLi5mypQpFBUVcejQIQYPHkyXLl2YNWsW4XCYlJQUZs+eTV5eHs2bN2fI\\nkCEcPXqUf//3fyc7O5vFixeTmJjIJ598wsCBA9m4cSMfffQRt99+O4MGDeLXv/41jz76KOFwmA4d\\nOjB9+nT69u3LlVdeybZt22jTpg1NmzZly5YtJCYm8vjjj7No0SLS0tIYOHAgM2bM4Pe//z2lpaWM\\nHj2a66+//mztTZKkc85XvnywZ88e+vTpw5IlS1iyZAlLly5l6tSpTJs2jfz8fLp3705eXh79+/fn\\nlVdeAWDNmjX07dsXgIMHD7JgwQJycnJYtGgR999/P3l5eaxYsYLy8nJmzpzJ448/zosvvkirVq34\\n5JNPKCkp4aabbmL58uVs2bKFLl268PTTT1NaWsqf//xnQqEQAL/85S85cuQIL7zwAsuWLeMPf/hD\\nDa9KkqRz21eeKWjatClPPfUU69atIzk5mbKyMnbs2EFOTg4AZWVlfO9736Nly5Y0aNCAHTt2sHr1\\nah577DG2bdvGJZdcQu3atUlOTqZly5YkJCTQqFEjTp48yeHDh2ncuDGpqakADB8+vPJxO3ToAECj\\nRo1o27Zt5ccnT56svM3HH39M586dK792zz33VN9WzqLU1GTS0hoGPcZpYnGmWOWuouOeouOeoueu\\nqt9XRsHSpUvp3LkzgwYNYuPGjfzP//wPbdq0Yd68eVxwwQVs3ryZo0ePAjBgwAAeffRRLrjgApo0\\naQJQ+VP9l2natCmfffYZR48epXHjxsyePZvMzMyoB09PT2ft2rUAFBUVMXbsWPLy8qK+f6woLCym\\noKAo6DGqSEtrGHMzxSp3FR33FB33FD13FZ0zDaevjIKePXuSm5vLr371K9q2bUtycjJTpkxhwoQJ\\nlJeXEwqFmD17NgC9e/dm5syZ/OxnPwM+D4K/joK//TgUCjFt2jRGjBhBrVq1+Id/+Ac6duwY9eDX\\nX389v/nNbxg8eDDl5eWMGjXqjJ64JEmqKhQOh8PVcaATJ05w2223sXLlyuo43N/1wAMP0KpVK/r1\\n63fG9+05bCHJKS1qYKpvpvjwfubccTXp6ZcEPUoVFnj03FV03FN03FP03FV0zvRMQbW8T8F7773H\\ngAEDuOOOO6rjcH/XqlWreOONN+jatWuNPo4kSfGoWt6noEuXLqxevbo6DvWV+vXr943OEEiSpK/3\\nnXtHQ0mSVDOMAkmSBBgFkiQpwiiQJEmAUSBJkiKMAkmSBBgFkiQpwiiQJEmAUSBJkiKMAkmSBBgF\\nkiQpwiiQJEmAUSBJkiKMAkmSBFTTr07+rjh29FDQI1QRa/NIkuJbXEVB/pzBFBYWBz1GFS1btgp6\\nBEmSgDiLgoyMDAoKioIeQ5KkmOQ1BZIkCTAKJElShFEgSZIAo0CSJEUYBZIkCTAKJElShFEgSZIA\\no0CSJEXE1ZsXbd++Pebe0TAWHT6c7J6i5K6i456i456iF4u7atmyFYmJiUGP8a3EVRRkTXqGpMbN\\ngx5DknSOOXb0EA+N70t6+iVBj/KtxFUUJDVuTnJKi6DHkCQpJnlNgSRJAowCSZIUYRRIkiTAKJAk\\nSRFGgSRJAowCSZIUYRRIkiTAKJAkSRFGgSRJAowCSZIUYRRIkiTAKJAkSRFGgSRJAowCSZIUYRRI\\nkiSghqOgvLycrKwsBg0aRFFRUU0+lCRJ+pYSavLgBw8epKSkhFWrVtXkw0iSpGpQo1Ewbdo0du/e\\nzbBhwygpKSEhIYF69erx8MMPM3XqVPr27UuPHj3YsWMH8+bNY9KkSWRnZ1OnTh0qKiqYP38+u3fv\\nJi8vj8TERPbu3UufPn0YOXIk27dvZ+7cuZSXl3P48GFycnK44ooravLpSJJ0TqvRKMjJyWHs2LFc\\neumlpKWlMXToUF5//XU+++wzbrnlFp599ll69OjBypUrGTBgABs2bKBz586MGzeOLVu2VL7kcODA\\nAVavXs3Jkyfp3r07I0eO5M9//jMTJ04kIyODNWvWsGrVKqNAkqRvoUajIBwOAzBixAgWLVrE0KFD\\nOe+88+jUqRNXXXUVubm5FBYW8s477zBu3DjKy8t5/PHH+Y//+A8aNmzImDFjCIVCZGRkUKtWLerX\\nr0+9evUAaN68OQsXLqRevXqUlJSQnJxck09FkqSvlJqaTFpaw6DH+FZqNAq+8Oqrr9KvXz8mTpzI\\n4sWLWbFiBaNGjaJv377k5ubSrVs3ateuzWuvvUbXrl0ZNWoUa9asIS8vj5tvvplQKHTaMWfPns39\\n999Peno6jzzyCPv37z8bT0WSpC9VWFhMQUFsXVR/ppFS41EQCoXo2LEjU6ZMoX79+tSuXZsZM2YA\\n0K9fP3r06MHq1asBuPzyy5k4cSKLFi2ioqKCyZMnU1RU9KVR0LdvX3784x9z/vnnc9lll1FQUFDT\\nT0WSpHNaKPzFOf4AHDp0iIkTJ7J06dKz8ng9hy0kOaXFWXksSVL8KD68nzl3XE16+iVBj1LFmZ4p\\nCOzNi9atW8fw4cO5++67gxpBkiT9lbNyTcGXueGGG7jhhhuCenhJkvQ3fJtjSZIEGAWSJCnCKJAk\\nSYBRIEmSIowCSZIEGAWSJCnCKJAkSYBRIEmSIowCSZIEGAWSJCnCKJAkSYBRIEmSIowCSZIEGAWS\\nJCkisF+dHIRjRw8FPYIk6Rx0rnx/CYXD4XDQQ5wt27dvp7CwOOgxYl5qarJ7ipK7io57io57il4s\\n7qply1YkJiYGPUYVaWkNz+j2cRUFAAUFRUGPEPPS0hq6pyi5q+i4p+i4p+i5q+icaRR4TYEkSQKM\\nAkmSFGEUSJIkwCiQJEkRRoEkSQKMAkmSFGEUSJIkwCiQJEkRcfU2x7H4joax+A5YkqT4FFdRkDXp\\nGZIaNw96jErHjh7iofF9SU+/JOhRJEmKryhIatyc5JQWQY8hSVJM8poCSZIEGAWSJCnCKJAkSYBR\\nIEmSIowCSZIEGAWSJCnCKJAkSYBRIEmSIowCSZIEGAWSJCnCKJAkSYBRIEmSIowCSZIEGAWSJCnC\\nKJAkSUAAUfDb3/6WW265hVtvvZUHH3yw8s+XL18OwFtvvcXzzz//pff99NNPmT59+lmZU5KkeHPW\\no2Du3LnMmTOHFStWsGnTJv70pz8BsGjRIgC6d+/OLbfc8qX3bdasGdOmTTtrs0qSFE8SqutAy5cv\\n57333mP+/PlMnDiRDh06sG3bNnbv3k1FRQU//vGPueqqq6hbty5Hjhzh1KlTnDx5klq1arFo0SKO\\nHDnC9OnT6dixIzt37uT6669n/vz5ABw+fJjjx4+zbNkyxowZw/PPP8+GDRt46KGHqFu3Lk2aNGH2\\n7Nk0bNiwup6OJElxp9rOFAwZMoQTJ06QnZ1NWVkZderUISUlhaeffppHH32UGTNmADB8+HBGjhxJ\\nnz59uPDCC2nTpg133nknTZo0qXIWoHPnzuTn5/PII4+QnJzMggULCIfDhEIhAKZOncqCBQvIz8/n\\nyiuvZOHChdX1VCRJikvVdqYA4Ec/+hEDBw5k1apVvPDCC2zZsoUPPvgAgPLycj755BNyc3P5r//6\\nL5o3b87999/Pk08+yfDhwyuPEQ6HKz8uKSlh1KhR3HPPPVx66aXs27cPgMLCQpKTk2nevDkAXbt2\\n5YEHHqjOp3LWpKYmk5YWe2c4YnGmWOWuouOeouOeoueuql+1RcGpU6eYM2cOM2fOZPr06WRmZnL+\\n+eczYsQIiouLefLJJ2ncuDFlZWUkJSUBkJaWxuHDh4GqMfDF8e6++24GDx7MNddcU+VrqampFBcX\\nU1BQQFpaGps2baJ169bV9VTOqsLCYgoKioIeo4q0tIYxN1OsclfRcU/RcU/Rc1fROdNwqrYomD9/\\nPj179mTAgAEcPHiQffv2ceTIEbKysiguLmbw4MHUr1+fcePG8cMf/pD69evTqFEjfvrTnwKQnp7O\\n+PHjufbaawHIz8/nww8/pLy8nGeffZZQKER2dnbl4+Xm5jJ69GhCoRCNGzeuPI4kSfpmqi0KJk2a\\nVPnxqFGj/u7tMjMzyczMPO3Ply1bBsDzzz9PnTp1GD58eJWXFQB27dpFnTp1ALjmmmtOO4MgSZK+\\nuZh686L169eTn59Pt27dTvvaJ598wrhx4+jVq1cAk0mSdO6r1gsNv60ePXrQo0ePL/3a+eefz8qV\\nK8/yRJIkxY+YOlMgSZKCYxRIkiTAKJAkSRFGgSRJAowCSZIUYRRIkiTAKJAkSRFGgSRJAowCSZIU\\nYRRIkiTAKJAkSRFGgSRJAowCSZIUYRRIkiQgxn51ck07dvRQ0CNUEWvzSJLiW1xFQf6cwRQWFgc9\\nRhUtW7YKegRJkoA4i4KMjAwKCoqCHkOSpJjkNQWSJAkwCiRJUoRRIEmSAKNAkiRFGAWSJAkwCiRJ\\nUoRRIEmSgDh7n4Lt27fH5JsXJSYmBj2GJEnxFQVZk54hqXHzoMeodOzoIR4a35f09EuCHkWSpPiK\\ngqTGzUlOaRH0GJIkxSSvKZAkSYBRIEmSIowCSZIEGAWSJCnCKJAkSYBRIEmSIowCSZIEGAWSJCnC\\nKJAkSYBRIEmSIowCSZIEGAWSJCnCKJAkSYBRIEmSIowCSZIExFAUzJ49mwMHDnzp1x555BGee+65\\nv3vfwsJCsrKyamo0SZLiQkLQA3xh8uTJf/droVDoLE4iSVJ8iioKTpw4wYQJEygoKOCCCy5g8+bN\\nLFmyhNzcXMLhMCkpKcyePZv//d//JS8vj8TERPbu3UufPn0YOXIkBw4cYOrUqZw4cYJ69eoxc+ZM\\nysrKuPPOO2nSpAk9evRg/fr1TJ8+nSZNmjBx4kSKiooAmDt3buUcu3fvZty4ccyaNYvU1FTGjRtH\\neXk5LVq0qJntSJIUR6KKghUrVnDxxRfz8MMPs3PnTjIzM7nvvvuYPXs26enprFy5kry8PK677joO\\nHDjA6tWrOXnyJN27d2fkyJHMnTuXrKwsvv/97/Ob3/yGn/3sZ4wZM4ZPP/2Ul156iYSEBNavXw/A\\nwoUL6dWrF7feeivvv/8+v/vd7wDYuXMnL774IvPnz+fiiy8mNzeXPn36MGDAADZs2MBjjz1Wc1uS\\nJCkORBUFO3fupHv37gC0adOGlJQUduzYQU5ODgBlZWV873vfAyAjI4NatWpRv3596tWrB8D27dtZ\\nvHgxeXl5ANSpUweAiy66iISEqiPs2rWLAQMGAHDFFVdwxRVXsGDBAt566y0SEhIqX0r4+OOP6d+/\\nPwBdu3b9ps9fkiRFRBUFGRkZbN26lV69erFnzx4OHz7MZZddxrx58ypfTjhy5Ajw5a//p6enM2zY\\nMK644gq2b9/OBx98AECtWqdf55iens7vfvc72rVrx+bNm3nzzTepW7cuQ4cO5eKLLyY7O5v8/HzS\\n09P57W9/S/v27dm6deu32UGgUlOTSUtrGPQYp4nFmWKVu4qOe4qOe4qeu6p+UUVB//79yc7O5rbb\\nbuPCCy+kbt265OTkMGHCBMrLy6lVqxazZs3i4MGDXxoFEyZMICcnh1OnTnHixAmmTJkCnB4QoVCI\\nESNGMHnyZF599dXK47788suEQiGuvfZa1q5dyxNPPMFdd93FhAkTWLt2La1bt/7OXoxYWFhMQUFR\\n0GNUkZbWMOZmilXuKjruKTruKXruKjpnGk6hcDgc/robvf/++xw7dozrrruOXbt2cccdd7Bu3bpv\\nPGRQeg5bSHJK7FyUWHx4P3PuuJr09EuCHqUK/7JFz11Fxz1Fxz1Fz11F50yjIKozBS1btmTs2LEs\\nWLCAsrIypk6d+o2GkyRJsSuqKGjWrBnLli2r6VkkSVKAYuYdDSVJUrCMAkmSBBgFkiQpwiiQJEmA\\nUSBJkiKMAkmSBBgFkiQpwiiQJEmAUSBJkiKMAkmSBBgFkiQpwiiQJEmAUSBJkiKMAkmSBBgFkiQp\\nIiHoAc6mY0cPBT1CFbE2jyQpvoXC4XA46CEkSVLwfPlAkiQBRoEkSYowCiRJEmAUSJKkCKNAkiQB\\nRoEkSYqIiyioqKhg6tSpDBw4kKysLPbs2RP0SDGptLSU8ePHM2TIEAYMGMAbb7wR9Egx7S9/+Qs9\\nevTg448/DnqUmLZ48WIGDhzID37wA1566aWgx4lJFRUVTJo0iUGDBjFkyBB27twZ9Egx54MPPiAr\\nKwuA3bt3V+4qJycH/2X9//PXe/rjH//IkCFDyMrKYvjw4fzlL3/52vvHRRT86le/orS0lOeee45x\\n48bx05/+NOiRYtLq1atJTU1l+fLlPPHEE8ycOTPokWJWaWkpU6dOpX79+kGPEtPeffdd3n//fZ57\\n7jny8/PZu3dv0CPFpLfffpvjx4/z7LPP8p//+Z88+OCDQY8UU/Ly8pgyZQqlpaUAzJkzh7Fjx7J8\\n+XLC4TCvv/56wBPGhr/d0+zZs7nvvvvIz8/nhhtuIC8v72uPERdR8N5779G9e3cAOnXqxB/+8IeA\\nJ4pNN954I3fffTfw+U8utWvXDnii2DVv3jwGDRpEWlpa0KPEtA0bNtCuXTvuuusuRo4cyT//8z8H\\nPVJMqlevHkVFRYTDYYqKiqhTp07QI8WUVq1asWDBgsozAh9++CFXXnklAN///vd55513ghwvZvzt\\nnn7+85/Tvn17AMrKyqhbt+7XHiMu3ua4uLiY5OTkys9r165NRUUFtWrFRRNFLSkpCfh8X/fccw9j\\nxowJeKKHYZZFAAACZUlEQVTYtGrVKlJTU+nWrRuLFy/21OVXKCws5MCBAyxevJi9e/dy5513snbt\\n2qDHijldunTh1KlT3HjjjRw5coTHHnss6JFiyg033MC+ffsqP//rv3NJSUkUFRUFMVbM+ds9ffFD\\ny3vvvcfy5ctZvnz51x4jLr4rJicnU1JSUvm5QfD3HThwgKFDh/Jv//Zv9OnTJ+hxYtKqVat45513\\nyMrK4qOPPiI7O5tPP/006LFiUkpKCt26dSMhIYHWrVtTt25dCgsLgx4r5jzxxBN06dKF1157jVde\\neYXs7GxOnToV9Fgx66///11SUkKjRo0CnCa2/eIXvyAnJ4fHH3+clJSUr719XHxn7NKlC2+++SYA\\nW7dupV27dgFPFJs+/fRThg0bxvjx4+nXr1/Q48Ssp59+mvz8fPLz82nfvj1z586lWbNmQY8Vk/7x\\nH/+Rt956C4CDBw9y/PjxqP7HFG+OHz9OgwYNAGjUqBGlpaVUVFQEPFXsuvTSS9m0aRMAb775Jl27\\ndg14otj0yiuvsHz5cvLz87nooouiuk9cvHzQu3dvNmzYwMCBA4HPL1LR6R577DGKiop49NFHefTR\\nR4HPf4KJ5nUo6cv80z/9E5s3b6Z///5UVFQwbdo0QqFQ0GPFnOHDhzNp0iQGDx5MWVkZP/nJT6hX\\nr17QY8WcL/7byc7O5r777qO0tJT09HRuvPHGgCeLLaFQiIqKCmbPns2FF17IqFGjALjqqqsYPXr0\\nV9/X35IoSZIgTl4+kCRJX88okCRJgFEgSZIijAJJkgQYBZIkKcIokCRJgFEgSZIijAJJkgTA/w+D\\n9gIkEDbvxwAAAABJRU5ErkJggg==\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x11cca5f90>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\nCgAAAAaiAAAAYKAm9zVAK1SWFdkdwasxXwBofprcToAAAMB6fAQAAICBKAAAABiIAgAAgIEoAAAA\\nGIgCAACAgSgAAAAYyGsLQF1dnebPn6/4+HglJiaqoKDA7khe7dixY0pMTLQ7hleqqanRY489pvHj\\nxysuLk7vvPOO3ZG8zuXLl5WcnKyEhASNGzdOn3/+ud2RvNbf/vY33XHHHTp58qTdUbzW6NGjlZiY\\nqMTERKWkpFzzOK/dCCgnJ0c1NTXasmWLjh07pqefflorVqywO5ZXWrt2rd544w21adPG7iheaefO\\nnQoODtZzzz2nsrIy3XvvvRoxYoTdsbzKu+++Kx8fH23evFkfffSRXnjhBf6/sEBNTY3mz5+v1q1b\\n2x3Fa1VVVUmSMjMzf/BYrz0D8PHHH2v48OGSpP79++t//ud/bE7kvW6++WYtW7ZM7Clljbvuukv/\\n/u//LumbM1u+vr42J/I+0dHReuqppyRJZ8+eVWBgoM2JvNOzzz6rhIQEuVwuu6N4rePHj+vrr7/W\\nlClTNGnSJB07duyax3ptAaioqFBAQED9n319fVVXV2djIu9155138qJkIX9/f7Vp00YVFRWaMWOG\\nZs6caXckr+Tr66ukpCSlpaUpNjbW7jheZ9u2bQoODtawYcMkiTcMFmndurWmTJmi9evX68knn9Ts\\n2bOv+drntQUgICBAFy9erP9zXV2dfHy89unCy507d06TJk3Svffeq5iYGLvjeK2nn35ae/bs0W9/\\n+1tdunTJ7jheZdu2bdq3b58SExN1/PhxJSUl6fz583bH8jphYWG6++67639u3769iouLr3qs174i\\nDho0SO+//74k6ejRo+rVq5fNiYAf5/z585o8ebIee+wx/fKXv7Q7jlfasWOHVq9eLUlq1aqVHA4H\\nbxga2SuvvKLMzExlZmYqMjJSzzzzjDp27Gh3LK+zbds2Pf3005KkwsJCVVRUXPMjF69dBDhy5Eh9\\n+OGHio+PlySlp6fbnMj7ORwOuyN4pVWrVqm8vFzLly/X8uXLJUnr1q1Ty5YtbU7mPe666y4lJSVp\\nwoQJqq2t1eOPPy6n02l3LOC6jRkzRsnJyRo/frykb177rlVmuRogAAAG4hwXAAAGogAAAGAgCgAA\\nAAaiAAAAYCAKAAAABqIAAABgIAoAAAAGogAAAGCg/w+ZVGcjGGqucgAAAABJRU5ErkJggg==\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12ae4cf90>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAesAAAFeCAYAAACl9DdnAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAADzpJREFUeJzt3X2s1nX9x/HXxUFuz8bNFK0sczGgJTnT7bcWzGhYLrSh\\nQAPxdAqHmpu2li7uBEIMsmnp0kmaLmiGfwQuncv7daMTWSXLGYkzRMhRyC/lcAiP55zfH0yWPwE1\\nseutPh5/ccGH7/X+XoPr+f1+r5vT6O3t7Q0AUFafZg8AAByaWANAcWINAMWJNQAUJ9YAUJxYA0Bx\\nfZs9APDGuru7s3Llytx1113p7u5OV1dXJkyYkEsuuST9+vXLnDlzMmrUqMyaNes/2v6sWbNyzTXX\\nZOjQoYdl3h//+Me5++67999+4YUX0tnZmd///veHZfvwfiPW8C6wePHi7Nq1Kz/96U/T2tqaPXv2\\n5NJLL82CBQty1VVXpdFopNFo/Mfbf+SRR3I4v3Lh/PPPz/nnn58k2bVrV6ZOnZrvfve7h2378H4j\\n1lDcc889l7vuuiu/+93vMnjw4CTJwIED853vfCePP/7469aPGTMmjz766P6z5FdvH3HEEZk7d262\\nbNmSPn365BOf+ESWLFmSefPmJUna29tz0003JUmuuOKK/O1vf8srr7ySSZMm5YILLsjWrVszc+bM\\njBw5Mtu2bcuqVaty7bXX5oQTTsj06dMPOv/y5ctz6qmnZvz48Yf7oYH3DbGG4p588smMHDlyf6hf\\ndeSRR2bixIlvejv33XdfOjs7c8cdd6SnpyeLFi3K1q1bs2zZsqxduzYrV67M0KFD85WvfCVf+9rX\\nMmHChOzduzezZ8/ORz7ykYwdOzbbt2/PNddck5NPPjlJsnTp0kPe56ZNm/LAAw/k/vvvf+s7Duwn\\n1lBcS0tLenp63vZ2TjnllPzwhz9MW1tbPvOZz6S9vT0f/vCHX7Oms7Mz69evz0svvZRrr702SbJn\\nz55s3LgxY8eOTd++fXPSSSe96ftcuXJlzj333LS2tr7t+eH9TKyhuLFjx+aZZ57J7t27X3N2vX37\\n9ixcuDDXXXfd6/7Oq68/v/zyy/t/79hjj829996bxx57LI8++mi++tWv5vLLL88XvvCF/WtePSi4\\n/fbb079//yTJzp07M2DAgOzcuTNHHHFE+vR5cx8i6e7uzr333pu1a9e+9Z0GXsNHt6C4o48+Omee\\n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\\nYII=\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x1184ed4d0>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\ndtc5PYbP69mzp2pqzjo9BgDgOjAR+N69e+v48Vqnx/B57du3l0TgAeBmwGvwAAAYROABADCIwAMA\\nYBCBBwDAIAIPAIBBBB4AAIMIPAAABhF4AAAMIvAAABhE4AEAMIjAAwBgEIEHAMAgAg8AgEEEHgAA\\ngwg8AAAGEXgAAAwi8AAAGETgAQAwiMADAGBQgNMDeMPevXvldtc5PYbP69q1r9MjAACuExOBT8ta\\nqU5dI5wew6c11BxT8fwghYZGOj0KAOA6MBH4Tl0jFBQa5fQYAAD4DF6DBwDAIAIPAIBBBB4AAIMI\\nPAAABhF4AAAMIvAAABhE4AEAMIjAAwBgEIEHAMAgAg8AgEEEHgAAgwg8AAAGEXgAAAwi8AAAGETg\\nAQAwiMADAGAQgQcAwCACDwCAQQQeAACDCDwAAAYReAAADCLwAAAYROABADCIwAMAYBCBBwDAIAIP\\nAIBBBB4AAIMIPAAABhF4AAAMIvAAABhE4AEAMIjAAwBgEIEHAMAgAg8AgEEEHgAAgwg8AAAGEXgA\\nAAwi8AAAGETgAQAwiMADAGBQwFd9s7S0VK+//rpaW1s1YcIELV++XH5+fho4cKB+85vfyO12KyMj\\nQ7W1tZKkhQsXKjQ0VLNmzVJ9fb2ampo0Y8YM3XPPPUpISNDdd9+tf/3rX5KkwsJCFRUVKSIiQqmp\\nqaqpqdGDDz6o0tJS5ebmavfu3WpsbNS0adM0dOjQa78JAAAMueIVfEhIiAoLC5Wfn69ly5Zp5cqV\\nqq6u1tatW1VQUKBhw4appKREGRkZ+uijj1RYWKiYmBi98sorWrRokR577DFJUn19veLj41VcXKzu\\n3btry5YtGjt2rP785z9LkjZs2KDExERt2rRJp06d0urVq7V8+XJ9/PHH13YDAAAY9JVX8C6XSz17\\n9tTBgwfldrv10EMPSZIaGhp06NAhHThwQElJSZKkAQMGaMCAAdqwYYPuvfdeSVL37t0VFBSkzz77\\nTJJ0++23S5IiIyN17tw53XLLLercubP27dunsrIyFRYWavXq1brjjjskSV26dNEjjzxybR75TSo8\\nPNjpEW4I7Mlz7Moz7Mlz7Mo7vjLwkuTn56cePXooMjJSL7/8svz9/bVmzRr17dtX+/fv10cffaQ+\\nffqosrJSW7Zs0be+9S1VVlYqOjpa1dXVqq2tVUhIyJfO29raKklKSkpSfn6+IiMjFRoaqm9/+9t6\\n8803JUm1tbWaOXOmioqKvPywb17Hj9c6PYLPCw8PZk8eYleeYU+eY1ee8eRJ0BUD73K5FBYWpgce\\neECpqalqaWlRjx49lJCQoClTpig7O1vr16+Xn5+ffve73yk4OFjZ2dkqLy/XmTNnlJubK39/f7lc\\nri+dV5JiY2M1b948PfPMM5KkoUOH6r333tP48ePV3NysX/3qV2157AAA3NRcrV9cSjvkzJkzmjBh\\ngtasWdPmcwyZWKCg0CgvTmVP3ckjWpI5TKGhkU6P4vO4gvAcu/IMe/Icu/KMJ1fwjv4xuR07digp\\nKUm/+MUvnBwDAABzrniL/lq68847VVZW5uQIAACYxAfdAABgEIEHAMAgAg8AgEEEHgAAgwg8AAAG\\nEXgAAAwi8AAAGETgAQAwiMADAGAQgQcAwCACDwCAQQQeAACDCDwAAAYReAAADCLwAAAYROABADCI\\nwAMAYBCBBwDAIAIPAIBBBB4AAIMIPAAABhF4AAAMIvAAABhE4AEAMIjAAwBgEIEHAMAgAg8AgEEE\\nHgAAgwg8AAAGEXgAAAwi8AAAGETgAQAwiMADAGAQgQcAwCACDwCAQQQeAACDCDwAAAYFOD2ANzTU\\nHHN6BJ/HjgDg5uJqbW1tdXoIAADgXdyiBwDAIAIPAIBBBB4AAIMIPAAABhF4AAAMIvAAABh0wwa+\\npaVFOTk5Sk5OVlpamg4dOuT0SD5v165dSktLc3oMn9XY2KhZs2YpNTVVSUlJevvtt50eySc1Nzcr\\nKytLKSkpGj9+vD755BOnR/J5n332mQYPHqz9+/c7PYrPuu+++5SWlqa0tDRlZ2c7PY5PW7JkiZKT\\nkzVmzBitXbv2ssfdsB9089Zbb6mxsVElJSXatWuXFixYoIKCAqfH8llFRUVav369Onfu7PQoPqus\\nrExhYWF6+umnVVNTo1GjRuknP/mJ02P5nHfeeUd+fn569dVXtX37dv3hD3/g/72v0NjYqJycHAUG\\nBjo9is86e/asJKm4uNjhSXzftm3b9I9//EMlJSVqaGjQiy++eNljb9gr+B07dmjQoEGSpP79++vj\\njz92eCLfduutt+r5558Xn2t0eSNHjtT06dMlnb9D5O/v7/BEvmnYsGHKzc2VJB05ckRdu3Z1eCLf\\n9tRTTyklJUXh4eFOj+Kz9uzZo9OnT2vSpElKT0/Xrl27nB7JZ1VUVKhPnz56+OGHNXXq1K+8CLlh\\nr+Dr6uoUFBR04Wt/f3+1tLTIz++Gfc5yTQ0fPlxVVVVOj+HTOnXqJOn8f1uPPPKIfv3rXzs8ke/y\\n9/dXZmamNm3apMWLFzs9js8qLS1VWFiYYmJitGTJEp5gX0ZgYKAmTZqkpKQkHThwQJMnT1Z5eTm/\\nn1+C2+3W0aNHtWTJEh0+fFi//OUv9eabb17y2Bt2e0FBQaqvr7/wNXGHNxw9elTp6ekaNWqU4uLi\\nnB7Hpy1YsEDl5eV6/PHHdebMGafH8UmlpaXaunWr0tLStGfPHmVmZurEiRNOj+VzevbsqcTExAv/\\nHBISouPHjzs8lW8KDQ1VTEyMAgICdNttt6lDhw5yu92XPPaGLeKdd96pLVu2SJJ27typPn36ODwR\\nbnQnTpzQxIkTNWvWLI0ePdrpcXzWunXrtGTJEklSx44d5XK5eHJ9Ga+88oqKi4tVXFys6OhoLVy4\\nUN26dXN6LJ9TWlqqBQsWSJKqq6tVV1fHSxqXMXDgQP3973+XdH5Xp0+fVmho6CWPvWFv0cfGxqqi\\nokLJycmSpPnz5zs80Y3B5XI5PYLPeuGFF1RbW6v8/Hzl5+dLkl588UV16NDB4cl8y8iRI5WZmakJ\\nEyaoqalJjz32mNq3b+/0WLiBjR07VllZWUpNTZV0/vdznjRe2o9//GNVVlZq7Nixamlp0Zw5cy77\\n+zp/mxwAAAbxFAkAAIMIPAAABhF4AAAMIvAAABhE4AEAMIjAAwBgEIEHAMAgAg8AgEH/B+pM0Sj2\\nhonBAAAAAElFTkSuQmCC\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12b007f90>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\nABiEsAMAYBDCDgCAQfwm7MeOHdOMGTN8PQYAAAHNb8LetGlTTZs2zddjAAAQ0Gp12tavv/5a2dnZ\\nqlevnqqrqzVv3jw988wz2r17t6qqqpSVlaXu3btr6tSp+u677+RwOHTTTTdpzJgxmjhxoo4fP67S\\n0lItWrRIY8aMkcvlUmVlpWbMmCGbzabx48drzZo13rqvAAAYr1Zh37Ztmzp06KCHH35Yu3btUl5e\\nnkpLS7V27VqdOHFCy5cvV1JSkjp06KCBAweqoqJCN954o8aMGSPLstS5c2cNGTJEmzdvVmRkpP70\\npz9p3759Ki8vV3h4uLfuIwAAF41ahX3gwIF65plndM899yg8PFzt27dXcnKyJKlx48YaPXq0nE6n\\ndu/ere3bt8tms6mysrLm+nFxcZKkG264QQcOHNCoUaMUEhKikSNHyuVyefBunVtUlE12O08kzoX9\\neB879j527H3s2P/UKuybNm1Sx44d9eCDD2rDhg1asGCBrr76aklSWVmZxo0bpxtuuEGNGzfWzJkz\\ndfDgQb3yyis117csS5K0fft22e12LVu2TJ988onmz5+vnJwcD96tcysudsrhKKuz2ws0dns4+/Ey\\ndux97Nj72HHdqO2Tp1qFvX379nrkkUe0ZMkSVVdX6+mnn1ZeXp4GDx6s06dP68EHH1Tz5s01fvx4\\n7dmzR5dddpnatWunwsJCSf8X9qSkJI0bN06rV6+uud7P/z0AALgwlqsu3wN3U/dhi2WLbOHWMZwl\\nR5Qz4nrFx7f20FTm4Vm497Fj72PH3seO60ZtX7H7zdfdAACA+wg7AAAGIewAABiEsAMAYBDCDgCA\\nQQg7AAAGIewAABiEsAMAYBDCDgCAQQg7AAAGIewAABiEsAMAYBDCDgCAQWp12lZfKy8t8otjAADg\\nrwLqtK0AAODceCseAACDEHYAAAxC2AEAMAhhBwDAIIQdAACDEHYAAAwSEN9jr66u1vTp01VQUKB6\\n9eppzpw5uuKKK3w9lnH69esnm80mSYqJidFjjz3m44nMkZ+fryeeeEIrV67UwYMHNXHiRAUFBal1\\n69aaNm2aLMvy9YgB7+c73rt3r+6//37FxsZKktLT03Xrrbf6eMLAVlVVpUmTJuno0aOqrKzUyJEj\\nFR8fz2PZg86240svvVT33XefWrZsKen8HssBEfZNmzapqqpKL7/8svLz8zV37lwtXrzY12MZpaKi\\nQpK0cuVKH09inmeffVZvvPGGGjVqJEnKycnRuHHj1KlTJ02bNk3vvvuuevTo4eMpA9svd7xnzx7d\\nfffduvvuu308mTnWr1+vqKgoPf744yotLVWfPn3Utm1bHssedLYdP/DAAxo2bFitHssB8Vb8xx9/\\nrG7dukmSkpOT9dlnn/l4IvN88cUX+v777zV8+HANGTJE+fn5vh7JGLGxscrNzdVPvwtq79696tSp\\nkyTphhtu0LZt23w5nhF+uePPPvtM//jHP3TXXXdp8uTJOnnypI8nDHy33HKLHnroIUk/vosaEhLC\\nY9nDzrbjPXv21PqxHBBhdzqdNW8RS1JwcLCqq6t9OJF5GjZsqOHDh2vZsmWaMWOGHn74YXbsIT17\\n9lRwcHDN33/+yx7DwsJUVlbmi7GM8ssdJycn65FHHtFLL72kmJgY5ebm+nA6M4SFhalRo0ZyOp0a\\nPXq0xowZc8b/I3gsu++XOx47dqyuuuqqWj+WAyLsNpvtjGcp1dXVCgoKiNEDRsuWLdW7d++aPzdp\\n0kQOh8PHU5np54/dkydPqnHjxj6cxkwpKSm68sorJUk9evTQ559/7uOJzPDtt99qyJAh6tu3r9LS\\n0ngse8HPd5yamnpBj+WAqOPVV1+t999/X5L06aefqk2bNj6eyDx5eXmaO3euJKmwsFBOp1N2u93H\\nU5mpbdu22rFjhyTp/fffV8eOHX08kXnuuece/etf/5Ik/fOf/1S7du18PFHgO3bsmIYNG6YJEyao\\nf//+kngse9rZdnwhj+WA+OG5lJQUbd26VYMGDZL04w8fwbNuu+02ZWdn684775T04455V8Szfvpp\\n4YkTJ2rq1KmqqqpSfHy8brnlFh9PZo6fdjxjxgzNmDFDISEhio6O1syZM308WeBbunSpysrKtGjR\\nIi1atEiSNHnyZM2ZM4fHsoecbceTJk1STk5OrR7LnN0NAACD8JIMAACDEHYAAAxC2AEAMAhhBwDA\\nIIQdAACDEHYAAAxC2AEAMAhhBwDAIP8DRr07BVAKSukAAAAASUVORK5CYII=\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x119e7d1d0>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAfgAAAFeCAYAAABpbQ2MAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAAHFdJREFUeJzt3XtwVPXdx/HPhhgk2RgS3AWMpUhizNQgCHSeRwUEDZSa\\nBLmm2TgLCKNiR7xTEgQEiqKjQJVLg1VRI5d4Aafe8Foro4OiFEqhTEAQBDEszRKyCQaaPc8fjnlK\\nuRiWhZPz2/frL5LdPftdf3N879mTnLgsy7IEAACMEmf3AAAAIPoIPAAABiLwAAAYiMADAGAgAg8A\\ngIEIPAAABiLwgIM1NjZqyZIlGj58uIYMGaK8vDw9/vjjOnLkiCSppKREzz77bMTbHzt2rA4ePBit\\ncZscOXJEN998s955552m7x0+fFj33XefbrjhBg0aNEjvv/9+1J8XiCUEHnCw6dOna+PGjXr++ef1\\n2muv6ZVXXtHOnTs1ZcoUSZLL5ZLL5Yp4+59++qmifamMv/3tbyosLNT69euPmW3+/PlKSkrSW2+9\\npSVLlmjGjBmqqqqK6nMDsYTAAw71zTff6I033tBDDz0kt9stSWrTpo1mzJihgQMHHnf/7OzsY47G\\nf/y6rq5Od955p4YMGaJhw4Zp6tSpsixLpaWlkqTRo0erqqpKVVVVuuOOOzRs2DANHjxYixcvliTt\\n2bNH1157rcaNG6dBgwYpEAhoypQpWrFixQnnfvHFF3XPPffoiiuuOObNwwcffKDCwkJJUseOHdW7\\nd2+9/fbb0fmPBcSgeLsHABCZLVu2KDMzU0lJScd8/8ILL1Rubm6zt/Pee++pvr5er732msLhsB58\\n8EHt2bNHs2fP1qpVq/TCCy+obdu2GjVqlG6++Wb1799fDQ0NuuWWW9SpUyd17dpVVVVVmjt3rnr2\\n7ClJmjVr1kmfb86cOZKkp59++pgj+H379qljx45NX7dv317fffdds18HgGMReMChWrVqpXA4fMbb\\n6dWrl/7whz/I7/frmmuu0ejRo/Wzn/3smPvU19dr3bp1OnTokJ544glJP5wz37p1q7p27ar4+Hhd\\neeWVZzTHiV5LXBwfMgKRIvCAQ3Xt2lU7duxQXV3dMUfxVVVVmjZtmp588snjHvPjR+I//hCeJF18\\n8cV699139fnnn2vt2rUaM2aMpk6dql/96ldN9/kxvhUVFWrdurUkqbq6Wueff76qq6t13nnnnXGM\\n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\\nAAAGIvAAABiIwAMAYCACDwCAgQg8AAAGIvAAABiIwAMAYCACDwCAgQg8AAAGIvAAABiIwAMAYCAC\\nDwCAgQg8AAAGird7gNNVX7Pf7hGAmMS+BziLy7Isy+4hAABAdPERPQAABiLwAAAYiMADAGAgAg8A\\ngIEIPAAABiLwAAAYqMUGPhwOa9q0aSoqKpLf79fu3buPuf3DDz/UiBEjVFRUpJdfftmmKXEiP7V2\\nzz33nPLz8+X3++X3+7Vz506bJsXJbNy4UX6//7jvs985w8nWj32vZTt69KgmTpyom266SSNHjtSH\\nH354zO2nvf9ZLdQ777xjlZSUWJZlWRs2bLBuv/32ptuOHDliDRgwwDp06JB15MgRa/jw4daBAwfs\\nGhX/5VRrZ1mWdf/991ubN2+2YzQ0w1NPPWXl5+dbv/nNb475PvudM5xs/SyLfa+le/XVV62HH37Y\\nsizLOnjwoNWvX7+m2yLZ/1rsEfz69evVp08fSVK3bt30j3/8o+m2r776Sp06dVJycrLOO+889ezZ\\nU+vWrbNrVPyXU62dJG3evFllZWUqLi7WU089ZceIOIWf//znWrBggaz/ugYW+50znGz9JPa9lm7Q\\noEG68847Jf3wSWirVq2abotk/2uxgQ+FQnK73U1ft2rVSuFwuOm25OTkptuSkpJUW1t7zmfEiZ1q\\n7SQpLy9PM2fO1PPPP68vv/xSH330kQ1T4mQGDhx4zP9YfsR+5wwnWz+Jfa+lS0xMVFJSkkKhkO66\\n6y7dc889TbdFsv+12MC73W7V1dU1fR0OhxUX98O4ycnJx9xWV1enlJSUcz4jTuxUaydJo0ePVtu2\\nbXXeeefp2muv1ZYtW+wYE6eJ/c752Pdavn379mn06NEaMmSI8vLymr4fyf7XYgPfo0cPffzxx5Kk\\nDRs26LLLLmu6rUuXLtq1a5dqamp05MgRrVu3Tt27d7drVPyXU61dbW2tCgoKVF9fL8uytHbtWuXk\\n5Ng1Kk4D+52zse+1fAcOHNDYsWM1ceJEDRs27JjbItn/WuxfkxswYIA++eQTFRUVSZJmz56tN954\\nQ/X19SosLFRJSYnGjRuncDisESNGyOv12jwxfvRTa3ffffdp1KhRSkhI0NVXX62+ffvaPDFOxOVy\\nSRL7nUOdaP3Y91q2srIy1dbWauHChVq4cKEkqbCwUIcPH45o/+OvyQEAYKAW+xE9AACIHIEHAMBA\\nBB4AAAMReAAADETgAQAwEIEHAMBABB4AAAMReAAADPR/TrLSukfAOEIAAAAASUVORK5CYII=\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x12b52c890>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAgQAAAFeCAYAAAD6/weaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\\nAAALEgAACxIB0t1+/AAAHuVJREFUeJzt3W1wlfWZgPHrQAgIiSFoghSFAE6gFiy0dFxUSumidQRa\\nBIISm7LitrUW7UoREooYMBB1ALeKFhRExVJ8AZmKHbUVq25dlVZBF5W0IlAYBhIDISFAhDz7wTFT\\nyluDOXk4z7l+3zhvue/8x3jlnMMhFgRBgCRJSmotwh5AkiSFzyCQJEkGgSRJMggkSRIGgSRJwiCQ\\nJEkYBFLSOXz4MEuWLGHUqFGMGDGCoUOHMmfOHOrq6gAoLCzk4YcfPuXHHz9+PHv27GmqcRvU1dVx\\n3XXX8cILLxxx+Y4dOxg4cGBcvqaUTAwCKckUFxezfv16Hn30UVatWsXTTz/Nxx9/zLRp0wCIxWLE\\nYrFTfvzXX3+dpv54k3feeYcxY8bw9ttvHzHbqlWruPbaa6moqGjSryclI4NASiJ///vfWb16NbNm\\nzSItLQ2AM844gxkzZnD55ZcfdftevXod8Zv353/et28fN998MyNGjGDkyJHcdtttBEFAUVERAOPG\\njWPnzp3s3LmTCRMmMHLkSL773e+ycOFCALZt28agQYO4/vrrueKKKygvL2fatGksX778mHM//vjj\\n3HLLLVx44YUNl+3cuZOXXnqJhx56qMkDREpGKWEPIKn5vP/++5x//vm0a9fuiMvPPvtshgwZ8i8/\\nzu9//3tqa2tZtWoV9fX13H777Wzbto3S0lKeeeYZHnvsMdq3b88PfvADrrvuOgYPHszBgwf54Q9/\\nSJcuXejTpw87d+5k3rx5fP3rXwegpKTkuF9v7ty5ACxatKjhso4dO3Lfffc1Zn1JJ2AQSEmkZcuW\\n1NfXf+HH6d+/P//93/9NQUEBl1xyCePGjeO888474ja1tbWsXbuWvXv38stf/hKA/fv38+GHH9Kn\\nTx9SUlLo16/fF55FUtMwCKQk0qdPHzZt2sS+ffuOeJZg586dTJ8+nXvvvfeo+3z+dPznbzoEOPfc\\nc3nxxRd56623eOONN/iP//gPbrvtNr7zne803Obz8HjiiSdo3bo1AJWVlbRp04bKykpatWpFixa+\\naimdLvyvUUoiHTt2ZPjw4UydOpWamhoAampqKC4uJjMzk9atWx/xenyHDh147733gM9eJoDPAmHZ\\nsmUUFRVx6aWXMmnSJAYOHMhf//pX4LNnIT799FPS0tL46le/2vA3Fqqrq7n22mtZs2ZNc64s6V9k\\nEEhJ5vbbb+f8889n7NixjBgxgjFjxpCbm9vwGv4/vot/2rRpzJw5k5EjR/LBBx+QnZ1NLBbjqquu\\nor6+niuvvJJRo0axb98+xo0bB8Bll11Gfn4+f/vb35g7dy7r169n+PDh5OXlMXToUIYNG3bU1/n8\\nax3vTYUn80X+VoSkz8T8548lSZLPEEiSJINAkiQZBJIkCYNAkiSRJJ9DcNGoYtpmZIc9hiQlhNqq\\nXSy542qyss4Ne5S4ycxsy+7dtWGPETdZWemNvk9SBEHbjGzSMjuHPYYkJYyUlJZhjxBXUd/vVPiS\\ngSRJMggkSZJBIEmSMAgkSRIGgSRJwiCQJEkYBJIkCYNAkiRhEEiSJAwCSZKEQSBJkjAIJEkSBoEk\\nScIgkCRJGASSJIlmCILHH3/8mJffdNNNx71PWVkZf/7zn+M1kiRJ+idxD4IFCxYc8/L77rvvuPd5\\n4YUX+Nvf/havkSRJ0j9JacoH+/jjjykqKqJVq1bU19czYMAA9uzZw8yZM+nTpw9PP/00ABMmTODW\\nW2/lf/7nf1i/fj2lpaXU19fTsWNHpk2bxjPPPENqaioXXHAB1dXV/PKXv6R169a0b9+e2bNn8/77\\n7zNnzhxSU1MZM2YM3/ve95pyDUmSkk6TBsHrr79O3759mTRpEn/+858566yzWL58OdOnT2flypW0\\nb9+e+++//4j7TJ8+nXvuuYfu3buzYsUKPvnkE0aOHElWVhYXXngh//7v/85vfvMbsrOzeeyxx3jg\\ngQcYPHgwdXV1PPXUU005viRJSatJgyAvL48HH3yQ//zP/+TMM8/kZz/72RHX5+TkHHWfTz75hO7d\\nuwMwatQoANasWQNAZWUlaWlpZGdnA9C/f3/uueceBg8eTLdu3ZpydEnSP8nKSg97hLiK+n6N1aRB\\n8Ic//IH+/fszYcIEnnvuORYtWkQQBA3Xt2hx9FsWsrOz2bJlC127dmXRokXk5OQQi8U4fPgwmZmZ\\n1NTUUF5eTlZWFm+99VZDCBzrsSRJTae8vDrsEeImKys98vs1VpMGQZ8+fZgyZQq/+tWvqK+vp6io\\niO3bt3Prrbdy8cUXE4vFjrrPjBkzmDp1Ki1atCA7O5tx48bRqlUr7r77bs4//3xKSkq46aabiMVi\\nZGRkcOedd1JWVnbMx5IkSacmFvzjr/ARNXj8A6Rldg57DElKCDW7t7OwcAiZmZ3CHiVufIbgaD7v\\nLkmSDAJJkmQQSJIkDAJJkoRBIEmSMAgkSRIGgSRJwiCQJEkYBJIkCYNAkiRhEEiSJAwCSZKEQSBJ\\nkjAIJEkSBoEkScIgkCRJQErYAzSH2qpdYY8gSQnDn5nJKSmCYGlpPpWVNWGPERcdOqRFdjdwv0Tn\\nfokrJyeHqqqDYY+hZpQUQZCbm0t5eXXYY8RFVlZ6ZHcD90t07pe4UlNTAYMgmfgeAkmSZBBIkiSD\\nQJIkYRBIkiQMAkmShEEgSZIwCCRJEgaBJEkiST6YqKysLLKfJrZ7d3Q/KQ3cL9G5X+KK8m4Q/f2y\\nsr7W6PskRRAUFC2jbUZ22GNIkhR3tVW7eHOFQXBMbTOyScvsHPYYkiSdtnwPgSRJMggkSZJBIEmS\\nMAgkSRIGgSRJwiCQJEkYBJIkCYNAkiRhEEiSJAwCSZKEQSBJkjAIJEkSBoEkScIgkCRJGASSJAmD\\nQJIkYRBIkiQgpbm/4MqVK3nllVc4ePAgW7du5Yc//CE9e/akpKSEli1bkpqaSklJCYcPH+bnP/85\\nnTp1YuvWrVx44YUUFxdTXV3NL37xC/bs2QPAtGnTyM3Nbe41JEmKlGYPAoCamhoWL17Mli1b+PGP\\nf0y7du2YNWsWvXr14qWXXqK0tJQpU6awefNmlixZQps2bRgyZAgVFRUsWbKEAQMGMHbsWDZv3szU\\nqVNZtmxZGGtIkhQZzR4EsViML3/5ywCcc8451NXVUVtbS69evQDo378/c+fOBaBr1660bdsWgKys\\nLA4ePEhZWRlvvvkmv/vd7wDYu3dvc68gSVLkhPIMQSwWO+LP2dnZbNy4kZ49e7J27Vq6det2zNsB\\n9OjRg969ezNs2DB27tzJs88+2ywzS5IUZaEHQSwWo6SkhDvuuIMgCEhJSWHWrFkEQXBUEMRiMW64\\n4QZ+8Ytf8MQTT7Bv3z5uuumm5h5fkqTIiQVBEIQ9RLwNHv8AaZmdwx5DkqS4q9m9nZcfvrHR9/Ov\\nHUqSJINAkiQZBJIkCYNAkiRhEEiSJAwCSZKEQSBJkjAIJEkSBoEkScIgkCRJGASSJAmDQJIkYRBI\\nkiQMAkmShEEgSZIwCCRJEpAS9gDNobZqV9gjSJLULE71/3mxIAiCJp7ltFNWVkZlZU3YY8RFhw5p\\nkd0N3C/RuV/iivJuEP39/u3fvtbo+yRFEACUl1eHPUJcZGWlR3Y3cL9E536JK8q7QXLs11i+h0CS\\nJBkEkiTJIJAkSRgEkiQJg0CSJGEQSJIkDAJJkoRBIEmSSJKPLo7yJxXu3h3tT9vKyOgd9giSlBSS\\nIggKipbRNiM77DHUSLVVu1hamkZmZqewR5GkyEuKIGibkU1aZuewx5Ak6bTlewgkSZJBIEmSDAJJ\\nkoRBIEmSMAgkSRIGgSRJwiCQJEkYBJIkCYNAkiRhEEiSJAwCSZKEQSBJkjAIJEkSBoEkScIgkCRJ\\nGASSJAmDQJIkEVIQ/OY3v6GgoICCggK++c1v0qtXL+bOnQvAwYMH+fa3vw3Ar3/9a8aMGcM111xD\\nSUkJQRBw+eWXs3fvXgCWLVvGokWLwlhBkqRICSUIxo4dy9KlS5k8eTJf+tKXKCoqOubtnnnmGaZP\\nn87y5cvp0aMH9fX1DB8+nNWrVwPw7LPPMnLkyOYcXZKkSEoJ6wt/9NFH3H777SxYsIA//elPVFRU\\nABAEQcNtSktLefjhh9m2bRt9+/YlCAJGjRrFxIkT+cY3vsHZZ59Nhw4dwlpBzSQrKz3sEeLK/RJb\\nlPeL8m4Q/f0aK5Qg2L59OxMnTuSee+4hOzub1NRUysvLAdiwYUPD7Z588klmzJhBamoq119/PevW\\nraN///6kp6ezYMECRo8eHcb4ambl5dVhjxA3WVnp7pfAorxflHeD5NivsUIJgpkzZ3Lw4EFmzJhB\\nfX09aWlp1NTUkJ+fz1e+8hXS0z9bJDc3l/z8fNq1a8c555zDhRdeCMCYMWMoKSlhzpw5YYwvSVLk\\nhBIECxcu/Jdul5eXR15e3lGXHz58mNGjRxOLxZp6NEmSklJo7yE4VfPmzeOtt976l6NCkiSdXMIF\\nwcSJE8MeQZKkyPGDiSRJkkEgSZIMAkmShEEgSZIwCCRJEgaBJEnCIJAkSRgEkiQJg0CSJGEQSJIk\\nDAJJkoRBIEmSMAgkSRIGgSRJIgH/+eNTUVu1K+wRdAo8N0lqPkkRBEtL86msrAl7jLjo0CEtsrsB\\n5OTkUFV1MOwxJCnykiIIcnNzKS+vDnuMuMjKSo/sbgCpqamAQSBJ8eZ7CCRJkkEgSZIMAkmShEEg\\nSZIwCCRJEgaBJEnCIJAkSRgEkiSJJPlgorKyssh+mt/u3dH+pMKMjN5hjyBJSSEpgqCgaBltM7LD\\nHkONVFu1i6WlaWRmdgp7FEmKvKQIgrYZ2aRldg57DEmSTlu+h0CSJBkEkiTJIJAkSRgEkiQJg0CS\\nJGEQSJIkDAJJkoRBIEmSMAgkSRIGgSRJwiCQJEkYBJIkCYNAkiRhEEiSJAwCSZJEnINg27ZtXH31\\n1Se9rDEKCwt57bXXvuhokiTpHyTcMwSxWIxYLBb2GJIkRUrKyW5QU1PDtGnTqK6uZteuXeTn53PB\\nBRdQWlpKfX09HTt2ZM6cObz33nvMnj2bM888k06dOtG5c2euuuoqAOrr65kyZQq5ublceeWVVFZW\\n8tOf/pTy8nJ69uzJ7bffzpVXXslvf/tb2rRpw+LFi2nZsiXf+ta3mDZtGocOHaJNmzbMmzcPgCAI\\nWL9+PbNmzeLee+/lnHPOie93SZKkiDtpEGzdupWhQ4dy2WWXsWvXLr7//e/Ttm1b5s2bR/fu3Vmx\\nYgUfffQRxcXF3HvvvXTv3p277rqr4f6ffvopkyZN4hvf+AZjx45l27Zt1NTUcOedd5KWlsZll13G\\n3r17ufzyy3n++ecZMWIEzz33HA8//DBFRUXccMMNXHrppaxZs4YPPvgAgLfffps33niDBQsW0KFD\\nh/h9dyRJShInDYKzzjqLRx99lBdffJG0tDQOHTpERUUF3bt3B2DUqFEA7Nmzp+GyAQMG8O677wJQ\\nVlbGmWeeyb59+xoe87zzziM9Pb3h8Q8cOEBeXh7FxcV0796dbt260b59ezZv3kzfvn0B+Pa3vw3A\\n6tWref3116mtrSUl5aTjKwKystLDHiGu3C+xRXm/KO8G0d+vsU76f9QlS5bQt29fxo4dyxtvvMEf\\n//hHsrOz2bJlC127dmXRokXk5ORw7rnnsnHjRnr27Mn69esbXuf/yle+wsKFCxk9ejQDBw6kXbt2\\nx3wPQNeuXQmCgMWLF5Ofnw9Ajx49eO+99xgwYACrV6+mqqoKgJtuuokdO3YwY8YM5s6d25TfD52G\\nysurwx4hbrKy0t0vgUV5vyjvBsmxX2Od9E2FgwcPZtmyZVx//fW8/PLLpKWlUVxczNSpUykoKOCD\\nDz5g0KBBzJw5kzvuuIPrrruOdevWNdw/FovRunVriouLmTJlCp9++ulx3xQ4evRoPvzwQy666CIA\\nJk+ezMKFCykoKODZZ59l2LBhDbfNy8tjz549PPfcc41eWpIkHSkWBEHQ1A/6u9/9jk2bNjFhwoSm\\nfuhTMnj8A6Rldg57DDVSze7tLCwcQmZmp7BHiZtk+C3F/RJTlHeD5NivsRLurx1KkqSmF5d35V15\\n5ZXxeFhJkhQnPkMgSZIMAkmSZBBIkiQMAkmShEEgSZIwCCRJEgaBJEnCIJAkSRgEkiQJg0CSJGEQ\\nSJIkDAJJkoRBIEmSMAgkSRJx+uePTze1VbvCHkGnwHOTpOaTFEGwtDSfysqasMeIiw4d0iK7G0BO\\nTg5VVQfDHkOSIi8pgiA3N5fy8uqwx4iLrKz0yO4GkJqaChgEkhRvvodAkiQZBJIkySCQJEkYBJIk\\nCYNAkiRhEEiSJAwCSZKEQSBJkkiSDyYqKyuL7Kf57d4d7U8qdL/E5n6JKyOjd9gjqJklRRAUFC2j\\nbUZ22GNIUkKordrF0tI0MjM7hT2KmlFSBEHbjGzSMjuHPYYkSact30MgSZIMAkmSZBBIkiQMAkmS\\nhEEgSZIwCCRJEgaBJEnCIJAkSRgEkiQJg0CSJGEQSJIkDAJJkoRBIEmSMAgkSRIGgSRJ4jQIgtmz\\nZ7Njx45jXnffffexfPny4963srKSgoKCeI0mSVLSSAl7gKlTpx73ulgs1oyTSJKUvE4YBAcOHGDy\\n5MmUl5fTqVMn1q5dy+LFiykpKSEIAjIzM5k9ezYbNmzgoYceIjU1lb///e8MHTqUG264gR07djB9\\n+nQOHDhAmzZtuOOOOzh06BA/+clPaN++PYMGDeKVV15hxowZtG/fnilTplBdXQ3AXXfd1TDHli1b\\nmDRpErNmzaJDhw5MmjSJw4cP07lz5/h+dyRJShInDIInnniCLl26cO+997Jp0yaGDRvGbbfdxuzZ\\ns+nRowdPP/00Dz30EJdccgk7duzg2Wef5eDBgwwcOJAbbriBu+66i4KCAr75zW/yv//7v8yZM4db\\nbrmFiooKnnnmGVJSUnjllVcAeOCBBxgyZAhXX30177zzDu+++y4AmzZtYsWKFcydO5cuXbpQUlLC\\n0KFDycvL409/+hMLFiyI/3dJkqSIO2EQbNq0iYEDBwLQvXt3MjMz+eijjyguLgbg0KFD5OTkAJCb\\nm0uLFi0444wzaNOmDQBlZWUsXLiQhx56CIBWrVoBcO6555KScuSX3rx5M3l5eQD069ePfv36MX/+\\nfF577TVSUlIaXj74+OOPGT16NAD9+/f/ovtLko4jKys97BHiKur7NdYJgyA3N5d169YxZMgQtm7d\\nyu7du+nduzd33313w0sIe/bsAY79en+PHj0YP348/fr1o6ysjPXr1wPQosXR72Xs0aMH7777Lj17\\n9mTt2rW8+uqrtG7dmnHjxtGlSxcKCwtZunQpPXr04C9/+Qu9evVi3bp1TfE9kCQdQ3l5ddgjxE1W\\nVnrk92usEwbB6NGjKSws5Pvf/z5f+tKXaN26NcXFxUyePJnDhw/TokULZs2axc6dO48ZBJMnT6a4\\nuJi6ujoOHDjAtGnTgKPjIRaL8eMf/5ipU6fy29/+tuFxV61aRSwW4+KLL+b5559n0aJF3HjjjUye\\nPJnnn3+ebt26+cZDSZKaQCwIguB4V77zzjvU1tZyySWXsHnzZn70ox/x4osvNud8TWLw+AdIy/QN\\niJL0r6jZvZ2FhUPIzOwU9ihx4zMERzvhMwTnnXceEydOZP78+Rw6dIjp06ef8nCSJOn0dcIgOPvs\\ns3nssceaaxZJkhSS0D+pUJIkhc8gkCRJBoEkSTIIJEkSBoEkScIgkCRJGASSJAmDQJIkYRBIkiQM\\nAkmShEEgSZIwCCRJEgaBJEnCIJAkSZzknz+OitqqXWGPIEkJw5+ZySkpgmBpaT6VlTVhjxEXHTqk\\nRXY3cL9E536JKycnh6qqg2GPoWaUFEGQm5tLeXl12GPERVZWemR3A/dLdO6XuFJTUwGDIJn4HgJJ\\nkmQQSJIkg0CSJGEQSJIkDAJJkoRBIEmSMAgkSRJJ8jkEZWVlkf3wkN27o/vBKAAZGb3DHkGSkkJS\\nBEFB0TLaZmSHPYYaqbZqF0tL08jM7BT2KJIUeUkRBG0zsknL7Bz2GJIknbZ8D4EkSTIIJEmSQSBJ\\nkjAIJEkSBoEkScIgkCRJGASSJAmDQJIkYRBIkiQMAkmShEEgSZIwCCRJEgaBJEnCIJAkSRgEkiSJ\\n0yAIVq5cydy5c0962fF8+OGH3H///fEYTZKkpJES9gCxWOxfuux4evXqRa9evZpyJEmSkk7cg2Dl\\nypWsWLGCIAi44ooreOmll9i/fz+ZmZnMnz+/4XaVlZX89Kc/5eabbwZg3bp1XH/99VRWVjJ27FjG\\njBnD8OHDueiii9i4cSMAv/rVr9iwYQNPPPEE8+bNi/cqkiRFVrO8ZNC+fXuWLVvG3r17eeSRR3jy\\nySc5dOgQ7733HgAVFRXceOONFBUVMWDAAIIgoFWrVixevJj58+fz6KOPArBv3z6GDRvG0qVL6dix\\nI6+++mqjnk2QJEnHFvdnCGKxGDk5OQC0atWKiRMn0rZtW3bu3MmhQ4cAeO2118jOzqa+vr7hPhdc\\ncAEAZ599Nvv37294vM8v79SpEwcPHoz3+JIkJYVmeQ9BixYt2LhxIy+99BJPPvkk+/fvZ9SoUQRB\\nAMBVV13F9773Pf7rv/6Lp556iiAI/M1fDbKy0sMeIa7cL7FFeb8o7wbR36+xmiUIYrEYXbt25Ywz\\nzuDaa68lMzOTCy64gF27djVcf/755/Pd736X0tJS+vXrd0QQHC8OPr/ceIi28vLqsEeIm6ysdPdL\\nYFHeL8q7QXLs11ix4PNf0yNs8PgHSMvsHPYYaqSa3dtZWDiEzMxOYY8SN8nwQ8n9ElOUd4Pk2K+x\\nQv8cAkmSFD6DQJIkGQSSJMkgkCRJGASSJAmDQJIkYRBIkiQMAkmShEEgSZIwCCRJEgaBJEnCIJAk\\nSRgEkiQJg0CSJGEQSJIkDAJJkoRBIEmSgJSwB2gOtVW7wh5Bp8Bzk6TmEwuCIAh7CEmSFC5fMpAk\\nSQaBJEkyCCRJEgaBJEnCIJAkSRgEkiSJCAVBfX0906dP55prrqGgoICtW7cecf2aNWsYPXo011xz\\nDU899VRIU566k+33yCOPMGzYMAoKCigoKODjjz8OadJTt379egoKCo66PNHP7nPH2y/Rz+7TTz/l\\n1ltv5dprryUvL481a9YccX2in9/J9kv08zt8+DBFRUWMHTuW/Px8/vrXvx5xfaKf38n2S/TzA/jk\\nk08YNGjQUbM3+uyCiHjhhReCwsLCIAiCYN26dcFPfvKThuvq6uqCyy67LNi7d29QV1cXjBo1Kqio\\nqAhr1FNyov2CIAgmTZoUbNiwIYzRmsSDDz4YDBs2LLj66quPuDwKZxcEx98vCBL/7FasWBHMnj07\\nCIIg2LNnT/Ctb32r4boonN+J9guCxD+/3//+98HUqVODIAiCN998M3I/O0+0XxAk/vnV1dUFN954\\nY/Cd73wn2LRp0xGXN/bsIvMMwdtvv83AgQMB+OpXv8r//d//NVz30Ucf0aVLF9LT02nVqhVf//rX\\nWbt2bVijnpIT7QewYcMGFixYQH5+Pg8++GAYI34hXbt2Zf78+QT/9DlZUTg7OP5+kPhnd8UVV3Dz\\nzTcDnz2T1bJly4bronB+J9oPEv/8hgwZwsyZMwHYvn07GRkZDddF4fxOtB8k/vndfffdjB07lqys\\nrCMuP5Wzi0wQ1NTUkJaW1vDnli1bUl9f33Bdenp6w3Xt2rWjurq62Wf8Ik60H8DQoUOZOXMmjz76\\nKH/5y1/44x//GMKUp+7yyy8/6gctROPs4Pj7QeKfXdu2bWnXrh01NTX87Gc/45Zbbmm4Lgrnd6L9\\nIPHPDz77eVJYWEhJSQnDhg1ruDwK5wfH3w8S+/xWrlxJhw4duPTSSwGO+IXjVM4uMkGQlpbGvn37\\nGv5cX19PixafrZeenn7Edfv27TuqEk93J9oPYNy4cbRv355WrVoxaNAg3n///TDGbHJROLuTicLZ\\n7dixg3HjxjFixAiGDh3acHlUzu94+0E0zg/gzjvv5IUXXuC2227jwIEDQHTOD469HyT2+a1cuZLX\\nX3+dgoICPvzwQwoLC/nkk0+AUzu7yATB1772NV599VUA1q1bR8+ePRuu6969O1u2bKGqqoq6ujrW\\nrl1L3759wxr1lJxov+rqaoYPH05tbS1BEPDGG2/Qu3fvsEZtUlE4uxOJwtlVVFQwfvx4br31VkaO\\nHHnEdVE4vxPtF4XzW7VqFQsXLgSgTZs2xGIxYrEYEI3zO9F+iX5+jz/+OEuXLmXp0qX06tWLu+66\\ni7POOgs4tbOLzD9uFAQBxcXFbNy4EYDS0lI2bNhAbW0tY8aM4eWXX+b++++nvr6e0aNHk5+fH/LE\\njXOy/VavXs0jjzxCamoqF198MRMmTAh54sbbtm0bkyZNYvny5axevToyZ/e54+2X6GdXUlLC888/\\nT7du3RouGzNmDPv374/E+Z1sv0Q/vwMHDlBYWEhFRQWHDh3iRz/6EbW1tZH57+9k+yX6+X2uoKCA\\nGTNm8P7775/y2UUmCCRJ0qmLzEsGkiTp1BkEkiTJIJAkSQaBJEnCIJAkSRgEkiQJg0CSJGEQSJIk\\n4P8BE29nuB3mGn4AAAAASUVORK5CYII=\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x1105a1110>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"data\": {\n      \"image/png\": \"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\\nLJU9NREREY/idisLzpo1i71795a5TIiIiMgfc7siMHLkSGdPQURExDTcrghURGF+lrOnIOifg4iI\\nK/KIIpCSHOP2W/harebYhvj6668nP/+is6chIiL/yyOKQHh4uNs/DmKWR1p8fHwAFQEREVfhEUUg\\nLS3N0N+mQ0Mb/e8POBEREffiEUUgNj4V34AQQ8YuzM9izugobLYmhowvIiJiJI8oAr4BIfgHNXT2\\nNERERFyO229DvGnTJj744ANnT0NERMQtuf0ZgZ49ezp7CiIiIm7LsCKQnp5OfHw81atXx263c911\\n19G0aVP69+9Pfn4+AwcOJC4ujsWLF+Pj48N///tf+vXrx2effcYPP/zAI488QnR0ND169KBVq1Yc\\nPHiQG264gbp16/L555/j4+PDkiVLePXVVwkODqZfv35GRRERETEtwy4NfPLJJzRv3pyVK1fy9NNP\\n8+ijj/LWW28B8M477xAVFQVAZmYm8+fPJzExkVdffZUZM2awdOlS1q9fD8C5c+fo0aMHa9as4fPP\\nP6dFixasXr2aS5cucfjwYe03ICIichUMOyPQp08flixZwmOPPUadOnV49tln8fPz48iRI2zZsoVF\\nixZx8OBBmjRpgpeXF/7+/oSGhuLt7U2dOnW4ePH/njW/5ZZbAKhTpw5hYWGlH//yGGeyWv2rZP9q\\ns+yRbYYcZsgAyuFKzJABzJHDDBnKw7AisH37diIjIxk+fDjvvPMOy5Yto0+fPixYsIAGDRoQGBgI\\nYIrf6HNyCgxf7McsCwqZIYcZMoByuBIzZABz5DBDBihfmTHs0sCtt97K3LlzGTBgAOvXr+eRRx6h\\nc+fOfPrpp/Tu3Ru4XAJ+WQT+6OO/YoYyISIi4gwWh8PhqKo3u3DhAg8//DAbNmyoqrcEoOOghYat\\nI1CQm0HykDsMX1DITC3V3XOYIQMohysxQwYwRw4zZAAXOSPwW19++SV9+vRhyJAhVfWWIiIi8heq\\nbB2BFi1asGXLlqp6OxERESkDt19QqCwK87PccmwRERGjeUQRSEmOMXz3QREREXfkEUUgPDzcFDd/\\niIiIVDaPKAJpaWmGnxHw8fExbHwRERGjeEQRiI1PxTcgxJCxC/OzmDM6yvDHB0VERIzgEUXANyDE\\nsHUERERE3FmVrSPwR2JjY0lPTyc/P5+ePXsyePDgX339wIEDxMfH/+Hr582bx7p164yepoiIiCk5\\n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\\nQgAACnsB19nOveI31ZoAAAAASUVORK5CYII=\\n\",\n      \"text/plain\": [\n       \"<matplotlib.figure.Figure at 0x10dfbd1d0>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"ml.clustering_label_distribution(ml.clustering[\\\"hdbscan\\\"][\\\"clustering\\\"], ml.labels, plot=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Are we still happy with the clustering?  \\n\",\n    \"For the sake of this example let's say *yes*.\\n\",\n    \"\\n\",\n    \"We can now compare a new sample to in-memory clustering (we're heating here a bit as we simply use already existing sample and rename it, but shh... nobody will notice).\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 19,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"label            0\\n\",\n      \"probability      1\\n\",\n      \"outlier_score    0\\n\",\n      \"Name: ?5_new, dtype: float64\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"new_sample = Instance()\\n\",\n    \"\\n\",\n    \"new_sample.load_json(\\\"../sample_data/dict/5\\\", \\\"5_new\\\")\\n\",\n    \"new_sample.label_sample()\\n\",\n    \"new_sample.extract_features()\\n\",\n    \"new_sample.extract_basic_features()\\n\",\n    \"\\n\",\n    \"# compare the new sample\\n\",\n    \"pprint(ml.compare_sample(new_sample))\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"If you're curious whether there are any striking anomalies we can run couple of tests. Let's see what happens.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 20,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"{'high_outlier_score': [],\\n\",\n      \" 'homogeneity_suspects': {-1.0: ['114',\\n\",\n      \"                                 '72',\\n\",\n      \"                                 '46',\\n\",\n      \"                                 '65',\\n\",\n      \"                                 '197',\\n\",\n      \"                                 '187',\\n\",\n      \"                                 '189',\\n\",\n      \"                                 '49',\\n\",\n      \"                                 '168',\\n\",\n      \"                                 '123',\\n\",\n      \"                                 '122',\\n\",\n      \"                                 '120',\\n\",\n      \"                                 '108',\\n\",\n      \"                                 '159',\\n\",\n      \"                                 '16',\\n\",\n      \"                                 '193',\\n\",\n      \"                                 '81',\\n\",\n      \"                                 '18',\\n\",\n      \"                                 '172',\\n\",\n      \"                                 '167',\\n\",\n      \"                                 '22',\\n\",\n      \"                                 '36',\\n\",\n      \"                                 '68',\\n\",\n      \"                                 '174',\\n\",\n      \"                                 '153',\\n\",\n      \"                                 '39',\\n\",\n      \"                                 '86'],\\n\",\n      \"                          0.0: ['162'],\\n\",\n      \"                          1.0: ['106', '137', '157', '24'],\\n\",\n      \"                          2.0: ['146', '192', '93', '155', '20', '60'],\\n\",\n      \"                          3.0: ['173'],\\n\",\n      \"                          4.0: ['117',\\n\",\n      \"                                '51',\\n\",\n      \"                                '47',\\n\",\n      \"                                '154',\\n\",\n      \"                                '26',\\n\",\n      \"                                '62',\\n\",\n      \"                                '11',\\n\",\n      \"                                '43'],\\n\",\n      \"                          5.0: ['126', '152', '10', '99', '100'],\\n\",\n      \"                          6.0: ['90',\\n\",\n      \"                                '111',\\n\",\n      \"                                '12',\\n\",\n      \"                                '199',\\n\",\n      \"                                '69',\\n\",\n      \"                                '80',\\n\",\n      \"                                '134',\\n\",\n      \"                                '53',\\n\",\n      \"                                '14',\\n\",\n      \"                                '148',\\n\",\n      \"                                '196',\\n\",\n      \"                                '182',\\n\",\n      \"                                '42',\\n\",\n      \"                                '129'],\\n\",\n      \"                          7.0: [],\\n\",\n      \"                          8.0: ['180', '71'],\\n\",\n      \"                          9.0: ['92',\\n\",\n      \"                                '82',\\n\",\n      \"                                '136',\\n\",\n      \"                                '156',\\n\",\n      \"                                '200',\\n\",\n      \"                                '58',\\n\",\n      \"                                '77',\\n\",\n      \"                                '112',\\n\",\n      \"                                '188',\\n\",\n      \"                                '66'],\\n\",\n      \"                          10.0: ['45', '76', '25', '8', '6'],\\n\",\n      \"                          11.0: ['85', '166', '125']},\\n\",\n      \" 'low_probability': ['10',\\n\",\n      \"                     '100',\\n\",\n      \"                     '110',\\n\",\n      \"                     '126',\\n\",\n      \"                     '145',\\n\",\n      \"                     '152',\\n\",\n      \"                     '154',\\n\",\n      \"                     '155',\\n\",\n      \"                     '160',\\n\",\n      \"                     '176',\\n\",\n      \"                     '185',\\n\",\n      \"                     '20',\\n\",\n      \"                     '26',\\n\",\n      \"                     '29',\\n\",\n      \"                     '52',\\n\",\n      \"                     '59',\\n\",\n      \"                     '60',\\n\",\n      \"                     '85',\\n\",\n      \"                     '99'],\\n\",\n      \" 'outliers': ['108',\\n\",\n      \"              '114',\\n\",\n      \"              '118',\\n\",\n      \"              '119',\\n\",\n      \"              '120',\\n\",\n      \"              '121',\\n\",\n      \"              '122',\\n\",\n      \"              '123',\\n\",\n      \"              '127',\\n\",\n      \"              '140',\\n\",\n      \"              '141',\\n\",\n      \"              '142',\\n\",\n      \"              '153',\\n\",\n      \"              '159',\\n\",\n      \"              '16',\\n\",\n      \"              '161',\\n\",\n      \"              '167',\\n\",\n      \"              '168',\\n\",\n      \"              '17',\\n\",\n      \"              '171',\\n\",\n      \"              '172',\\n\",\n      \"              '174',\\n\",\n      \"              '18',\\n\",\n      \"              '181',\\n\",\n      \"              '183',\\n\",\n      \"              '184',\\n\",\n      \"              '187',\\n\",\n      \"              '189',\\n\",\n      \"              '190',\\n\",\n      \"              '193',\\n\",\n      \"              '197',\\n\",\n      \"              '198',\\n\",\n      \"              '22',\\n\",\n      \"              '36',\\n\",\n      \"              '39',\\n\",\n      \"              '46',\\n\",\n      \"              '49',\\n\",\n      \"              '54',\\n\",\n      \"              '65',\\n\",\n      \"              '68',\\n\",\n      \"              '72',\\n\",\n      \"              '81',\\n\",\n      \"              '86',\\n\",\n      \"              '89']}\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/usr/local/lib/python2.7/site-packages/pandas/core/frame.py:1997: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\\n\",\n      \"  \\\"DataFrame index.\\\", UserWarning)\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"pprint(ml.anomaly_detection())\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Finally, we can save the slustering results (cluster ID, probability of cluster membership, and outlier score) inside the original JSONS that we read into the memory at the begining.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 21,\n   \"metadata\": {\n    \"collapsed\": true\n   },\n   \"outputs\": [],\n   \"source\": [\n    \"ml.save_clustering_results(loader, \\\"../sample_data/dict_cluster\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"I hope you liked `cuckooml` and you're ready to use it and contribute to it.  \\n\",\n    \"Enjoy!\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {\n    \"collapsed\": true\n   },\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 2\",\n   \"language\": \"python\",\n   \"name\": \"python2\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 2\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython2\",\n   \"version\": \"2.7.12\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 0\n}\n"
  },
  {
    "path": "examples/cuckooml.py",
    "content": "# coding=utf-8\n# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport collections\nimport datetime\nimport itertools\nimport json\nimport os\nimport re\nimport sys\nimport time\nfrom lib.cuckoo.common.config import Config\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\nfrom math import log\n\ntry:\n    import matplotlib.pyplot as plt\n    import numpy as np\n    import pandas as pd\n    import seaborn as sns\n    from hdbscan import HDBSCAN\n    from sklearn import metrics\n    from sklearn.cluster import DBSCAN\n    from sklearn.manifold import TSNE\nexcept ImportError, e:\n    print >> sys.stderr, \"Some of the packages required by CuckooML are not \\\n        available.\"\n    print >> sys.stderr, e\n\n\ndef init_cuckooml():\n    \"\"\"Initialise CuckooML analysis with default parameters.\"\"\"\n    cfg = Config(\"cuckooml\")\n\n    # Load reports for clustering\n    loader = Loader()  # class loader\n    loader.load_binaries(CUCKOO_ROOT + \"/\" + cfg.cuckooml.data_directory)\n\n    # Get features dictionaries\n    simple_features_dict = loader.get_simple_features()\n    features_dict = loader.get_features()\n    labels_dict = loader.get_labels()\n\n    # Transform them into proper features\n    ml = ML()\n    ml.load_simple_features(simple_features_dict)\n    ml.load_features(features_dict)\n    ml.load_labels(labels_dict)\n\n    simple_features = ml.simple_features\n    features_nominal = ml.feature_category(\":count:\", complement=True)\n    features_numerical = ml.feature_category(\":count:\")\n\n    if cfg.cuckooml.clustering:\n        # Select features\n        selected_features = []\n        sf = [i.strip() for i in cfg.cuckooml.features.split(\",\")]\n        if \"simple\" in sf:\n            selected_features.append(simple_features)\n        if \"nominal\" in sf:\n            selected_features.append(features_nominal)\n        if \"numerical\" in sf:\n            selected_features.append(features_numerical)\n\n        # Apply filters to selected datasets\n        filters = [i.strip() for i in cfg.cuckooml.features_filter.split(\",\")]\n\n        # Check whether features and filters dimension agrees\n        if len(filters) != len(selected_features):\n            print >> sys.stderr, \"Number of *filters* and *selected_features* \\\n                does not agree.\"\n            sys.exit(1)\n\n        data = []\n        for f, d in itertools.izip(filters, selected_features):\n            if f == \"log_bin\":\n                data.append(d.applymap(ml.__log_bin))\n            elif f == \"filter_dataset\":\n                data.append(ml.filter_dataset(d))\n            elif f == \"none\":\n                data.append(d)\n\n        data = pd.concat(data, axis=1)\n\n        # Parse clustering parameters\n        cl_args = \\\n            [i for i in cfg.cuckooml.clustering_parameters.split(\",\")]\n\n        # Select clustering algorithm\n        cls_alg = cfg.cuckooml.clustering_algorithm.lower()\n        if cls_alg == \"hdbscan\":\n            cl_args = [int(i) for i in cl_args]\n            ml.cluster_hdbscan(data, *cl_args)\n        elif cls_alg == \"dbscan\":\n            cl_args = [int(i) for i in cl_args]\n            ml.cluster_dbscan(data, *cl_args)\n\n        # Save clustering fit\n        clf = {}\n        clf[\"clustering+noise\"] = ml.assess_clustering( \\\n            ml.clustering[cls_alg][\"clustering\"], \\\n            ml.labels, data, discard_noise=False)\n        print \"Clustering fit:\"\n        clf[\"clustering\"] = ml.assess_clustering( \\\n            ml.clustering[cls_alg][\"clustering\"], \\\n            ml.labels, data, discard_noise=True)\n        pd.DataFrame(clf).to_csv(\"clustering_fit.csv\", encoding=\"utf-8\")\n\n        # Save clustering results to csv\n        print \"Clustering results saved to `clustering_results.csv`\"\n        ml.clustering[cls_alg][\"clustering\"].to_csv(\"clustering_results.csv\", \\\n                                                    encoding=\"utf-8\")\n        print \"Cluster label distribution saved to \\\n               `cluster_label_distribution.csv`\"\n        ml.clustering_label_distribution(ml.clustering[cls_alg][\"clustering\"], \\\n                                         ml.labels, plot=False) \\\n            .to_csv(\"cluster_label_distribution.csv\", encoding=\"utf-8\")\n\n    # Save abnormal behaviour stats?\n    if cfg.cuckooml.abnormal_behaviour:\n        print \"Abnormal behaviour will be saved to `abnormal_behaviour.csv`\"\n        ml.detect_abnormal_behaviour(features_numerical, figures=False).to_csv( \\\n            \"abnormal_behaviour.csv\", encoding=\"utf-8\")\n\n    if cfg.cuckooml.anomalies_detection:\n        ad = pd.DataFrame(ml.clustering[cls_alg][\"clustering\"][\"label\"])\n        ad.columns = [\"cluster\"]\n        ad_dict = ml.anomaly_detection()\n        for i in ad_dict:\n            if isinstance(ad_dict[i], list):\n                ad[i] = pd.Series([1] * len(ad_dict[i]), index=ad_dict[i])\n            elif isinstance(ad_dict[i], dict):\n                in_list = []\n                for j in ad_dict[i]:\n                    in_list += ad_dict[i][j]\n                ad[i] = pd.Series([1] * len(in_list), index=in_list)\n        print \"Saving anomaly detection results as `anomalies.csv`\"\n        ad.to_csv(\"anomalies.csv\", encoding=\"utf-8\")\n\n    if cfg.cuckooml.compare_new_samples:\n        test_location = CUCKOO_ROOT + \"/\" + cfg.cuckooml.test_directory\n\n        new_sample = None\n        if os.path.isdir(test_location):\n            new_sample = Loader()\n            new_sample.load_binaries(test_location)\n        elif os.path.isfile(test_location):\n            new_sample = Instance()\n            new_sample.load_json(test_location)\n            new_sample.label_sample()\n            new_sample.extract_features()\n            new_sample.extract_basic_features()\n        else:\n            print >> sys.stderr, \"Indicated sample(s) to compare with do(es) \\\n                not exist\"\n\n        # Compare new sample(s)\n        if new_sample is not None:\n            ml.compare_sample(new_sample).to_csv(\"test_samples.csv\", \\\n                                                 encoding=\"utf-8\")\n\n    if cfg.cuckooml.clustering and cfg.cuckooml.save_clustering_results:\n        if cfg.cuckooml.clustering_results_directory:\n            ml.save_clustering_results(loader, CUCKOO_ROOT + \"/\" + cfg.cuckooml. \\\n                                       clustering_results_directory)\n        else:\n            ml.save_clustering_results(loader)\n\n\nclass ML(object):\n    \"\"\"Feature formatting and machine learning for Cuckoo analysed binaries.\n    All functions marked with asterisk (*) were inspired by code distributed\n    with \"Back to the Future: Malware Detection with Temporally Consistent\n    Labels\" by Brad Miller at al.\"\"\"\n    SIMPLE_CATEGORIES = {\n        \"properties\": [\n            \"has_authenticode\",\n            \"has_pdb\",\n            \"pe_features\",\n            \"packer_upx\",\n            \"has_wmi\"\n        ],\n        \"behaviour\": [\n            \"dumped_buffer2\",\n            \"suspicious_process\",\n            \"persistence_autorun\",\n            \"raises_exception\",\n            \"sniffer_winpcap\",\n            \"injection_runpe\",\n            \"dumped_buffer\",\n            \"exec_crash\",\n            \"creates_service\",\n            \"allocates_rwx\"\n        ],\n        \"exploration\": [\n            \"recon_fingerprint\",\n            \"antidbg_windows\",\n            \"locates_sniffer\"\n        ],\n        \"mutex\": [\n            \"ardamax_mutexes\",\n            \"rat_xtreme_mutexes\",\n            \"bladabindi_mutexes\"\n        ],\n        \"networking\": [\n            \"network_bind\",\n            \"networkdyndns_checkip\",\n            \"network_http\",\n            \"network_icmp\",\n            \"recon_checkip\",\n            \"dns_freehosting_domain\",\n            \"dns_tld_pw\",\n            \"dns_tld_ru\"\n        ],\n        \"filesystem\": [\n            \"modifies_files\",\n            \"packer_polymorphic\",\n            \"creates_exe\",\n            \"creates_doc\"\n        ],\n        \"security\": [\n            \"rat_xtreme\",\n            \"disables_security\",\n            \"trojan_redosru\",\n            \"worm_renocide\",\n            \"antivirus_virustotal\"\n        ],\n        \"virtualisation\": [\n            \"antivm_vbox_files\",\n            \"antivm_generic_bios\",\n            \"antivm_vmware_keys\",\n            \"antivm_generic_services\",\n            \"antivm_vmware_files\",\n            \"antivm_sandboxie\",\n            \"antivm_vbox_keys\",\n            \"antivm_generic_scsi\",\n            \"antivm_vmware_in_instruction\",\n            \"antivm_generic_disk\",\n            \"antivm_virtualpc\"\n        ],\n        \"sanbox\": [\n            \"antisandbox_unhook\",\n            \"antisandbox_mouse_hook\",\n            \"antisandbox_foregroundwindows\",\n            \"antisandbox_productid\",\n            \"antisandbox_idletime\",\n            \"antisandbox_sleep\"\n        ],\n        \"infostealer\": [\n            \"infostealer_browser\",\n            \"infostealer_mail\",\n            \"infostealer_keylogger\",\n            \"infostealer_ftp\",\n        ],\n        \"ransomware\": [\n            \"ransomware_files\",\n            \"ransomware_bcdedit\"\n        ]\n    }\n\n    CATEGORIES = {\n        \"static\": {\n            \":meta:\": [\n                \"\",\n                \"size\",\n                \"timestamp\"\n            ],\n            \":sign:\": [\n                \"\",\n                \"signed\"\n            ],\n            \":heur:\": [\n                \"\"\n            ],\n            \":pack:\": [\n                \"\"\n            ],\n            \":pef:\": [\n                \"lang:\"\n            ],\n            \":simp:\": [\n                \"\",\n                \"count\"\n            ]\n        },\n        \"dynamic\": {\n            \":dimp:\": [\n                \"\",\n                \"proc:\",\n                \"mutex:\"\n            ],\n            \":file:\": {\n                \"touch:\": [\n                    \"\"\n                ],\n                \"count:\": [\n                    \"\",\n                    \"all\",\n                    \"read\",\n                    \"written\",\n                    \"deleted\",\n                    \"copied\",\n                    \"renamed\",\n                    \"opened\",\n                    \"exists\",\n                    \"failed\"\n                ]\n            },\n            \":net:\": [\n                \"\"\n            ],\n            \":reg:\": [\n                \"\",\n                \"write:\",\n                \"del:\"\n            ],\n            \":win:\": [\n                \"\"\n            ]\n        },\n        \"counts\": {\n            \":count:\": {\n                \"lang\": [\"\"],\n                \"simp\": [\n                    \"\",\n                    \":\"\n                ],\n                \"proc\": [\"\"],\n                \"dimp\": [\"\"],\n                \"file:\": [\n                    \"\",\n                    \"all\",\n                    \"read\",\n                    \"written\",\n                    \"deleted\",\n                    \"copied\",\n                    \"renamed\",\n                    \"opened\",\n                    \"exists\",\n                    \"failed\"\n                ],\n                \"tcp\": [\"\"],\n                \"udp\": [\"\"],\n                \"dns\": [\"\"],\n                \"http\": [\"\"],\n                \"reg:\": [\n                    \"\",\n                    \"write\",\n                    \"del\"\n                ],\n                \"wapi\": [\"\"]\n            }\n        }\n    }\n\n    PATTERNS = [r\"Armadillo\", r\"PECompact\", r\"ASPack\", r\"ASProtect\",\n                r\"Upack\", r\"U(PX|px)\", r\"FSG\", r\"BobSoft Mini Delphi\",\n                r\"InstallShield 2000\", r\"InstallShield Custom\",\n                r\"Xtreme\\-Protector\", r\"Crypto\\-Lock\", r\"MoleBox\", r\"Dev\\-C\\+\\+\",\n                r\"StarForce\", r\"Wise Installer Stub\", r\"SVK Protector\",\n                r\"eXPressor\", r\"EXECryptor\", r\"N(s|S)Pac(k|K)\", r\"KByS\",\n                r\"themida\", r\"Packman\", r\"EXE Shield\", r\"WinRAR 32-bit SFX\",\n                r\"WinZip 32-bit SFX\", r\"Install Stub 32-bit\", r\"P(E|e)tite\",\n                r\"PKLITE32\", r\"y(o|0)da's (Protector|Crypter)\", r\"Ste@lth PE\",\n                r\"PE\\-Armor\", r\"KGB SFX\", r\"tElock\", r\"PEBundle\", r\"Crunch\\/PE\",\n                r\"Obsidium\", r\"nPack\", r\"PEX\", r\"PE Diminisher\",\n                r\"North Star PE Shrinker\", r\"PC Guard for Win32\", r\"W32\\.Jeefo\",\n                r\"MEW [0-9]+\", r\"InstallAnywhere\", r\"Anskya Binder\",\n                r\"BeRoEXEPacker\", r\"NeoLite\", r\"SVK\\-Protector\",\n                r\"Ding Boy's PE\\-lock Phantasm\", r\"hying's PEArmor\", r\"E language\",\n                r\"NSIS Installer\", r\"Video\\-Lan\\-Client\", r\"EncryptPE\",\n                r\"HASP HL Protection\", r\"PESpin\", r\"CExe\", r\"UG2002 Cruncher\",\n                r\"ACProtect\", r\"Thinstall\", r\"DBPE\", r\"XCR\", r\"PC Shrinker\",\n                r\"AH(p|P)ack\", r\"ExeShield Protector\",\n                r\"\\* \\[MSLRH\\]\", r\"XJ \\/ XPAL\", r\"Krypton\", r\"Stealth PE\",\n                r\"Goats Mutilator\", r\"PE\\-PACK\", r\"RCryptor\", r\"\\* PseudoSigner\",\n                r\"Shrinker\", r\"PC-Guard\", r\"PELOCKnt\", r\"WinZip \\(32\\-bit\\)\",\n                r\"EZIP\", r\"PeX\", r\"PE( |\\-)Crypt\", r\"E(XE|xe)()?Stealth\",\n                r\"ShellModify\", r\"Macromedia Windows Flash Projector\\/Player\",\n                r\"WARNING ->\", r\"PE Protector\", r\"Software Compress\",\n                r\"PE( )?Ninja\", r\"Feokt\", r\"RLPack\",\n                r\"Nullsoft( PIMP)? Install System\", r\"SDProtector Pro Edition\",\n                r\"VProtector\", r\"WWPack32\", r\"CreateInstall Stub\", r\"ORiEN\",\n                r\"dePACK\", r\"ENIGMA Protector\", r\"MicroJoiner\", r\"Virogen Crypt\",\n                r\"SecureEXE\", r\"PCShrink\", r\"WinZip Self\\-Extractor\",\n                r\"PEiD\\-Bundle\", r\"DxPack\", r\"Freshbind\", r\"kkrunchy\"]\n\n    def __init__(self, context=\"standalone\"):\n        \"\"\"The context variable defines type of operation for the functions\n        using visualisations. *standalone* saves figures as files, *notebook*\n        displays them.\"\"\"\n        self.context = context  # 'notebook' 预留接口在jupyter显示\n        self.labels = None\n        self.simple_features = None\n        self.simple_features_description = {}\n        self.features = None\n        self.clustering = {}\n\n    def __log_bin(self, value, base=3):\n        \"\"\"Return a logarithmic bin of given value. * \"\"\"\n        if value is None:\n            return None\n\n        # Add base -1 to count so that 0 is in its own bin\n        return int(log(value + base - 1, base))\n\n    def __normalise_string(self, string):\n        \"\"\"Get lower case string representation. * \"\"\"\n        if string is None:\n            return None\n\n        return string.lower()\n\n    def __simplify_string(self, string, distinguish_voyels=False):\n        \"\"\"Returns a simplified representation of the string where characters\n        are mapped to their representatives. * \"\"\"\n        if string is None:\n            return None\n\n        nums = re.compile(r\"[0-9]\")\n        caps = re.compile(r\"[A-Z]\")\n        smal = re.compile(r\"[a-z]\")\n        caps_c = re.compile(r\"[QWRTPSDFGHJKLZXCVBNM]\")\n        caps_v = re.compile(r\"[EYUIOA]\")\n        smal_c = re.compile(r\"[qwrtpsdfghjklzxcvbnm]\")\n        smal_v = re.compile(r\"[eyuioa]\")\n\n        string = nums.sub('0', string)\n\n        if distinguish_voyels:\n            string = caps_c.sub('B', string)\n            string = caps_v.sub('A', string)\n            string = smal_c.sub('b', string)\n            string = smal_v.sub('a', string)\n            return string\n\n        string = caps.sub('A', string)\n        string = smal.sub('a', string)\n        return string\n\n    def __n_grams(self, string, n=3, reorder=False):\n        \"\"\"Returns a *set* of n-grams. If the iterable is smaller than n, it is\n        returned itself. * \"\"\"\n        if string is None:\n            return None\n\n        if len(string) <= n:\n            if reorder:\n                return set([\"\".join(sorted(string))])\n            return set([string])\n\n        ngrams = set()\n        for i in range(0, len(string) - n + 1):\n            if reorder:\n                ngrams.add(\"\".join(sorted(string[i:i + n])))\n            else:\n                ngrams.add(string[i:i + n])\n\n        return ngrams\n\n    def __handle_string(self, string):\n        \"\"\"Apply normalisation, simplification and n-gram extraction to a\n        string. If the string is missing (None) return empty list.\"\"\"\n        handled = self.__n_grams(\n            self.__simplify_string(\n                self.__normalise_string(string)\n            )\n        )\n        if handled is None:\n            return []\n        else:\n            return handled\n\n    def extract_labels(self, labels):\n        \"\"\"Extract labels into pandas data frame.\"\"\"\n        return pd.DataFrame(labels, index=[\"label\"]).T\n\n    def load_labels(self, labels):\n        \"\"\"Load labels into pandas data frame.\"\"\"\n        self.labels = self.extract_labels(labels)\n\n    # 提取简单特征\n    def extract_simple_features(self, simple_features):\n        \"\"\"Extract simple features form an external object into pandas data\n        frame.\"\"\"\n        simple_features = pd.DataFrame(simple_features).T  # transpose\n        simple_features.fillna(False, inplace=True)\n        # Convert to bool: True/False\n        simple_features = simple_features.astype(bool)\n        # Change to int: 1/0\n        simple_features = simple_features.astype(int)\n\n        # Aggregate features descriptions\n        simple_features_description = {}\n        for binary in simple_features:\n            for token in simple_features[binary]:\n                if token not in simple_features_description:\n                    simple_features_description[token] = \\\n                        simple_features[binary][token]\n\n        return simple_features, simple_features_description\n\n    def load_simple_features(self, simple_features):\n        \"\"\"Load simple features form an external object into pandas data\n        frame.\"\"\"\n        self.simple_features, self.simple_features_description = \\\n            self.extract_simple_features(simple_features)\n\n    def export_simple_dataset(self, filename=\"simple_dataset.csv\"):\n        \"\"\"Export a dataset consisting of malware labels and *simple* features to CSV formatted file.\"\"\"\n        # Check if data and labels are loaded\n        if self.simple_features is None:\n            print \"Please load simple features first.\"\n            return\n\n        if self.labels is None:\n            print \"Please load labels first.\"\n            return\n\n        simple_dataset = pd.concat([self.simple_features, self.labels], axis=1)\n        simple_dataset.to_csv(filename)\n\n    def simple_feature_category(self, category=\"properties\"):\n        \"\"\"Get simple feature data frame containing only features form selected category.\"\"\"\n        if self.simple_features is None:\n            print \"Simple features are not loaded. Please load them before \\\n                   extracting categories.\"\n            return None\n\n        return self.simple_features.loc[:, self.SIMPLE_CATEGORIES[category]]\n\n    # 提取完整特征\n    def extract_features(self, features, include_API_calls=False, include_API_calls_count=False):\n        \"\"\"Extract features form an external object into pandas data frame.\"\"\"\n        my_features = {}\n        for i in features:\n            my_features[i] = {}\n\n            # Exponentially bin the binary size and timestamp\n            my_features[i][\":meta:size\"] = self.__log_bin(features[i][\"size\"])\n            my_features[i][\":meta:timestamp\"] = \\\n                self.__log_bin(features[i][\"timestamp\"])\n\n            # Handle ExifTool output\n            exif = [\"FileDescription\", \"OriginalFilename\", \"magic_byte\"]\n            for e in exif:\n                for j in self.__handle_string(features[i][e]):\n                    my_features[i][\":meta:\" + j] = 1\n\n            # Is the binary signed?\n            my_features[i][\":sign:signed\"] = int(features[i][\"signed\"])\n            # And other signature features\n            signature = [\"Comments\", \"ProductName\", \"LegalCopyright\",\n                         \"InternalName\", \"CompanyName\"]\n            for s in signature:\n                for j in self.__handle_string(features[i][s]):\n                    my_features[i][\":sign:\" + j] = 1\n\n            # Extract packer\n            regexps = [re.compile(pattern) for pattern in self.PATTERNS]\n            if features[i][\"packer\"] is not None:\n                for packer in features[i][\"packer\"]:\n                    for regexp in regexps:\n                        if regexp.search(packer):\n                            my_features[i][\":pack:\" + regexp.pattern] = 1\n                            break\n\n            # Vectorise PEFs\n            for j in features[i][\"languages\"]:\n                j_norm = self.__normalise_string(j)\n                my_features[i][\":pef:lang:\" + j_norm] = 1\n            # Get number of languages\n            my_features[i][\":count:lang\"] = len(features[i][\"languages\"])\n            # TODO: handle *section_attrs* and *resource_attrs*\n\n            # Categorise static imports\n            # TODO: use binning for this count\n            my_features[i][\":simp:count\"] = \\\n                features[i][\"static_imports\"][\"count\"]\n            static_imports_dlls = features[i][\"static_imports\"].keys()\n            static_imports_dlls.remove(\"count\")\n            # Count static imports\n            my_features[i][\":count:simp\"] = len(static_imports_dlls)\n            for j in static_imports_dlls:\n                my_features[i][\":simp:\" + j] = 1\n                # TODO: include API calls?\n                if include_API_calls:\n                    for k in features[i][\"static_imports\"][j]:\n                        my_features[i][\":simp:\" + j + \":\" + k] = 1\n                # Count static imports API calls\n                if include_API_calls_count:\n                    my_features[i][\":count:simp:\" + j] = \\\n                        len(features[i][\"static_imports\"][j])\n\n            # Categorise dynamic imports\n            if features[i][\"mutex\"] is not None:\n                for mutex in features[i][\"mutex\"]:\n                    for j in self.__handle_string(mutex):\n                        my_features[i][\":dimp:mutex:\" + j] = 1\n                # Count mutexes\n                my_features[i][\":count:mutex\"] = len(features[i][\"mutex\"])\n            for process in features[i][\"processes\"]:\n                my_features[i][\":dimp:proc:\" + process] = 1\n            # Count processes\n            my_features[i][\":count:proc\"] = len(features[i][\"processes\"])\n            for di in features[i][\"dynamic_imports\"]:\n                my_features[i][\":dimp:\" + di] = 1\n            # Count dynamic imports\n            my_features[i][\":count:dimp\"] = \\\n                len(features[i][\"dynamic_imports\"])\n\n            # File operations\n            # TODO: tell apart different file operations by prefixing\n            # Files touched\n            touch = [\"file_read\", \"file_written\", \"file_deleted\", \"file_copied\",\n                     \"file_renamed\"]\n            for t in touch:\n                for f in features[i][t]:\n                    my_features[i][\":file:touch:\" + f] = 1\n            # TODO: better binning (linear not logarithmic)\n            # File numbers\n            operation_number = [(\"all\", \"files_operations\"),\n                                (\"read\", \"files_read\"),\n                                (\"written\", \"files_written\"),\n                                (\"deleted\", \"files_deleted\"),\n                                (\"copied\", \"files_copied\"),\n                                (\"renamed\", \"files_renamed\"),\n                                (\"opened\", \"files_opened\"),\n                                (\"exists\", \"files_exists\"),\n                                (\"failed\", \"files_failed\")]\n            for o in operation_number:\n                my_features[i][\":file:count:\" + o[0]] = \\\n                    self.__log_bin(features[i][o[1]])\n                my_features[i][\":count:file:\" + o[0]] = \\\n                    features[i][o[1]]\n\n            # Networking\n            # TODO: include subnets\n            # TODO: tell apart type of connection: prefix features with \"tcp\",\n            #       \"udp\", \"dns\"\n            for tcp in features[i][\"tcp\"]:\n                my_features[i][\":net:\" + tcp] = 1\n            for udp in features[i][\"udp\"]:\n                my_features[i][\":net:\" + udp] = 1\n            for dns in features[i][\"dns\"]:\n                my_features[i][\":net:\" + dns] = 1\n                for j in features[i][\"dns\"][dns]:\n                    my_features[i][\":net:\" + j] = 1\n            for http in features[i][\"http\"]:\n                my_features[i][\":net:\" + features[i][\"http\"][http][\"host\"]] \\\n                    = 1\n            # Count tcp addresses\n            my_features[i][\":count:tcp\"] = len(features[i][\"tcp\"])\n            # Count udp addresses\n            my_features[i][\":count:udp\"] = len(features[i][\"udp\"])\n            # Count dns addresses\n            my_features[i][\":count:dns\"] = len(features[i][\"dns\"])\n            # Count http addresses\n            my_features[i][\":count:http\"] = len(features[i][\"http\"])\n\n            # Register operations\n            for rw in features[i][\"regkey_written\"]:\n                my_features[i][\":reg:write:\" + rw] = 1\n            # Count register keys written\n            my_features[i][\":count:reg:write\"] = \\\n                len(features[i][\"regkey_written\"])\n            for rd in features[i][\"regkey_deleted\"]:\n                my_features[i][\":reg:del:\" + rd] = 1\n            # Count register keys written\n            my_features[i][\":count:reg:del\"] = \\\n                len(features[i][\"regkey_deleted\"])\n\n            # Windows API\n            # TODO: better binning (linear not logarithmic)\n            for wapi in features[i][\"api_stats\"]:\n                my_features[i][\":win:\" + wapi] = \\\n                    self.__log_bin(features[i][\"api_stats\"][wapi])\n            # Count Windows API calls\n            my_features[i][\":count:wapi\"] = len(features[i][\"api_stats\"])\n\n        # Make Pandas DataFrame from the dictionary\n        features_pd = pd.DataFrame(my_features).T\n        # TODO: the operation below cannot tell apart missing vales and None\n        features_pd.fillna(0, inplace=True)\n        return features_pd\n\n    def load_features(self, features, include_API_calls=False, include_API_calls_count=False):\n        \"\"\"Load features form an external object into pandas data frame.\"\"\"\n\n        self.features = self.extract_features(features, include_API_calls, include_API_calls_count)\n\n    def export_dataset(self, filename=\"dataset.csv\"):\n        \"\"\"Export a dataset consisting of malware labels and features to CSV formatted file.\"\"\"\n        # Check if data and labels are loaded\n        if self.features is None:\n            print \"Please load features first.\"\n            return\n\n        if self.labels is None:\n            print \"Please load labels first.\"\n            return\n\n        dataset = pd.concat([self.features, self.labels], axis=1)\n        dataset.to_csv(filename, encoding='utf-8')\n\n    def feature_category(self, category=\"static\", complement=False):\n        \"\"\"Get feature data frame containing only features form selected category (or their complement).\"\"\"\n\n        def pull_names(obj, prefix=\"\"):\n            ret = []\n            if isinstance(obj, dict):\n                if prefix: ret.append(prefix)\n                for key in obj:\n                    ret += pull_names(obj[key], prefix + key)\n                return ret\n            elif isinstance(obj, list):\n                for i in obj:\n                    ret.append(prefix + i)\n                return ret\n\n        if self.features is None:\n            print \"Features are not loaded. Please load them before extracting \\\n                   categories.\"\n            return None\n\n        # Pull all possible categories\n        categories = self.CATEGORIES.keys()\n        for cat in self.CATEGORIES:\n            categories += pull_names(self.CATEGORIES[cat])\n\n        # Check if chosen category is available\n        if category not in categories:\n            print \"Chosen category:\", category, \"is not available.\\n\\\n                   please choose one of the following:\"\n            print \", \".join(categories)\n            return None\n\n        # Get a list of specified prefixes\n        if category == \"static\" or category == \"dynamic\" or category == \"count\":\n            category = pull_names(category)\n        else:\n            category = [category]\n\n        extract = []\n        # TODO: what if we want exact match but most starts with word\n        for col in self.features:\n            for c in category:\n                if complement and not col.startswith(c):\n                    extract.append(col)\n                elif not complement and col.startswith(c):\n                    extract.append(col)\n\n        return self.features.loc[:, extract]\n\n    def filter_dataset(self, dataset=None, feature_coverage=0.1,\n                       complement=False):\n        \"\"\"Prune features that are useless.\"\"\"\n        if dataset is None:\n            dataset = self.features.copy()\n\n        # Remove sparse features\n        row_count = dataset.shape[0]\n        remove_features = []\n        for col in dataset:\n            zero_count = 0.0\n            for row in dataset[col]:\n                if not row:\n                    zero_count += 1\n            # XOR\n            if complement != (row_count - zero_count) / row_count < feature_coverage:\n                remove_features.append(col)\n        dataset.drop(remove_features, axis=1, inplace=True)\n\n        return dataset\n\n    def detect_abnormal_behaviour(self, count_dataset=None, figures=True):\n        \"\"\"Detect samples that behave significantly different than others.\"\"\"\n        if count_dataset is None:\n            # Pull all count features\n            count_features = self.feature_category(\":count:\")\n            meta_size = self.feature_category(\":meta:size\")\n            simp_count = self.feature_category(\":simp:count\")\n            count_dataset = pd.concat([count_features, meta_size, simp_count], axis=1)\n\n        if not figures:\n            ret = {}\n        for f in count_dataset:\n            # Produce boxplots\n            if figures:\n                sns.boxplot(count_dataset[f])\n                sns.swarmplot(count_dataset[f], color=\".25\")\n                plt.title(\"Abnormal behaviour detection for \" + f)\n                if self.context == \"notebook\":\n                    plt.show()\n                else:\n                    plt.savefig(\"abnormal_behaviour_\" + f.replace(\":\", \"_\") + \\\n                                \".png\")\n                    plt.close()\n\n            # Get list of local outliers\n            f_1_quartile = count_dataset[f].quantile(0.25)\n            f_3_quartile = count_dataset[f].quantile(0.75)\n            f_IQR = f_3_quartile - f_1_quartile\n            f_outliers = []\n            f_suspected_outliers = []\n            for s in count_dataset[f].index:\n                if count_dataset[f][s] > f_3_quartile + 3 * f_IQR or \\\n                        count_dataset[f][s] < f_1_quartile - 3 * f_IQR:\n                    f_outliers.append(s)\n                    continue\n                if count_dataset[f][s] > f_3_quartile + 1.5 * f_IQR or \\\n                        count_dataset[f][s] < f_1_quartile - 1.5 * f_IQR:\n                    f_suspected_outliers.append(s)\n            if figures:\n                print f\n                print \"Outliers: \", \", \".join(f_outliers)\n                print \"Suspected outliers: \", \", \".join(f_suspected_outliers)\n                print \"------------------------------------------------------------\"\n            else:\n                ret[f] = {\"outliers\": f_outliers,\n                          \"suspect_outliers\": f_suspected_outliers}\n        if not figures:\n            return pd.DataFrame(ret).T\n\n    def visualise_data(self, data=None, labels=None, learning_rate=200,\n                       fig_name=\"custom\"):\n        \"\"\"Create t-Distributed Stochastic Neighbor Embedding for features and\n        labels to help inspect the data.\"\"\"\n        if data is None:\n            data = self.features\n        if labels is None:\n            labels = self.labels\n\n        tsne = TSNE(learning_rate=learning_rate)\n        tsne_fit = tsne.fit_transform(data)\n        tsne_df = pd.DataFrame(tsne_fit, index=data.index, columns=['0', '1'])\n        tsne_dfl = pd.concat([tsne_df, labels], axis=1)\n\n        sns.lmplot(\"0\", \"1\", data=tsne_dfl, fit_reg=False, hue=\"label\",\n                   scatter_kws={\"marker\": \"D\", \"s\": 50}, legend_out=True)\n        plt.title(fig_name + \" (lr:\" + str(learning_rate) + \")\")\n        if self.context == \"notebook\":\n            plt.show()\n        else:\n            plt.savefig(fig_name + \"_\" + str(learning_rate) + \".png\",\n                        bbox_inches='tight', pad_inches=1.)\n            plt.close()\n\n    def save_dataset(self, filename=\"custom_dataset.csv\", features=None, \\\n                     labels=None):\n        \"\"\"Export a dataset to CSV formatted file.\"\"\"\n        # Check if data and labels are loaded\n        if features is None:\n            print \"You must indicate data to be saved.\"\n            return\n\n        if labels is None:\n            print \"You didn't indicate labels to be used. Internal labels will \\\n                   be used.\"\n            if self.labels is None:\n                print \"Internal labels not available.\"\n                return\n            else:\n                labels = self.labels\n\n        dataset = pd.concat([features, labels], axis=1)\n        dataset.to_csv(filename, encoding='utf-8')\n\n    def cluster_dbscan(self, features=None, eps=20.0, min_samples=5, dry=False):\n        \"\"\"Do *dbscan* clustering and return \"\"\"\n        if features is None:\n            print \"You didn't indicate features to be used. Internal features \\\n                will be used.\"\n            if self.features is None:\n                print \"Internal features not available.\"\n                return\n            else:\n                features = self.features\n\n        dbscan = DBSCAN(eps=eps, min_samples=min_samples).fit(features)\n\n        # TODO: Allow storing multiple clustering results based on parameters\n        if dry:\n            return {\n                \"eps\": eps,\n                \"min_samples\": min_samples,\n                \"clustering\": pd.DataFrame(dbscan.labels_, index=features.index,\n                                           columns=[\"label\"])\n            }\n        else:\n            # if \"dbscan\" not in self.clustering:\n            # self.clustering[\"dbscan\"] = {}\n            # clustering_hash = \"eps:%f&min_samples:%d\" % (eps, min_samples)\n            self.clustering[\"dbscan\"] = {\n                # self.clustering[\"dbscan\"][clustering_hash] = {\n                \"eps\": eps,\n                \"min_samples\": min_samples,\n                \"clustering\": pd.DataFrame(dbscan.labels_, index=features.index,\n                                           columns=[\"label\"])\n            }\n\n    def cluster_hdbscan(self, features=None, min_samples=1, \\\n                        min_cluster_size=6, dry=False):\n        \"\"\"Do *hdbscan* clustering and return \"\"\"\n        if features is None:\n            print \"You didn't indicate features to be used. Internal features \\\n                will be used.\"\n            if self.features is None:\n                print \"Internal features not available.\"\n                return\n            else:\n                features = self.features\n\n        hdbscan = HDBSCAN(min_samples=min_samples, \\\n                          min_cluster_size=min_cluster_size)\n        hdbscan_fit = hdbscan.fit(features)\n        hdbscan_stats = np.column_stack([hdbscan_fit.labels_,\n                                         hdbscan_fit.probabilities_,\n                                         hdbscan_fit.outlier_scores_])\n\n        # TODO: Allow storing multiple clustering results based on parameters\n        if dry:\n            return {\n                \"min_samples\": min_samples,\n                \"min_cluster_size\": min_cluster_size,\n                \"clustering\": pd.DataFrame(hdbscan_stats, index=features.index,\n                                           columns=[\"label\", \"probability\",\n                                                    \"outlier_score\"])\n            }\n        else:\n            # if \"hdbscan\" not in self.clustering:\n            # self.clustering[\"hdbscan\"] = {}\n            # clustering_hash = \"min_samples:%s&min_cluster_size:%d\" % \\\n            # (min_samples, min_cluster_size)\n            # self.clustering[\"hdbscan\"][clustering_hash] = {\n            self.clustering[\"hdbscan\"] = {\n                \"min_samples\": min_samples,\n                \"min_cluster_size\": min_cluster_size,\n                \"clustering\": pd.DataFrame(hdbscan_stats, index=features.index,\n                                           columns=[\"label\", \"probability\",\n                                                    \"outlier_score\"])\n            }\n\n    def save_clustering_results(self, loader, save_location=\"\"):\n        \"\"\"Update JSONs report files with clustering results\"\"\"\n        # TODO: Allow storing multiple clustering results based on parameters\n        hdbscan_root = [\"info\", \"clustering\", \"hdbscan\"]\n        hdbscan_paths = {\"label\": \"clusterID\",\n                         \"probability\": \"clusterProbability\",\n                         \"outlier_score\": \"outlierScore\"}\n        if \"hdbscan\" in self.clustering:\n            loader.update_binaries(self.clustering[\"hdbscan\"][\"clustering\"],\n                                   hdbscan_root, hdbscan_paths)\n            loader.update_binaries(self.clustering[\"hdbscan\"][\"min_samples\"],\n                                   hdbscan_root, \"min_samples\")\n            loader.update_binaries(\n                self.clustering[\"hdbscan\"][\"min_cluster_size\"], hdbscan_root,\n                \"min_cluster_size\")\n\n        dbscan_root = [\"info\", \"clustering\", \"dbscan\"]\n        dbscan_paths = {\"label\": \"clusterID\"}\n        if \"dbscan\" in self.clustering:\n            loader.update_binaries(self.clustering[\"dbscan\"][\"clustering\"],\n                                   dbscan_root, dbscan_paths)\n            loader.update_binaries(self.clustering[\"dbscan\"][\"eps\"],\n                                   dbscan_root, \"eps\")\n            loader.update_binaries(self.clustering[\"dbscan\"][\"min_samples\"],\n                                   dbscan_root, \"min_samples\")\n\n        loader.save_binaries(save_location)\n\n    def anomaly_detection(self, samples=None, labels=None,\n                          probability_threshold=0.9, outlier_threshold=0.5,\n                          homogeneity_threshold=0.2):\n        \"\"\"Detect anomalies in clustering using samples classified as noise and\n        low probability cluster membership.\"\"\"\n        if \"hdbscan\" not in self.clustering:\n            print \"Soft clustering is needed for *anomaly detection*.\", \\\n                \"Currently only *HDBSCAN* is supported.\"\n            return\n\n        if labels is None:\n            labels = self.labels\n        if samples is None:\n            samples = self.clustering[\"hdbscan\"][\"clustering\"]\n        sample = samples.copy()\n        sample.rename(columns={\"label\": \"cluster\"}, inplace=True)\n        sample = pd.concat([sample, labels], axis=1)\n\n        anomalies = {}\n\n        anomalies[\"outliers\"] = sample[sample.cluster == -1].index.tolist()\n        # TODO: cluster ID and samples most similar to given outlier\n\n        # Clustered as X but below threshold\n        anomalies[\"low_probability\"] = \\\n            sample.loc[sample.probability < probability_threshold] \\\n                .loc[sample.cluster != -1].index.tolist()\n\n        # High outlier score\n        anomalies[\"high_outlier_score\"] = \\\n            sample.loc[sample.outlier_score > outlier_threshold] \\\n                .loc[sample.cluster != -1].index.tolist()\n\n        # Within cluster inconsistencies - detect non-homogeneous clusters\n        anomalies[\"homogeneity_suspects\"] = {}\n        for i in set(sample[\"cluster\"].tolist()):\n            c = collections.Counter(\n                sample[sample.cluster == i][\"label\"].tolist())\n            total = float(sum(c.values()))\n            suspicious = [j for j in c if c[j] / total < homogeneity_threshold]\n\n            anomalies[\"homogeneity_suspects\"][i] = []\n            for j in suspicious:\n                anomalies[\"homogeneity_suspects\"][i] += \\\n                    sample.loc[sample.cluster == i].loc[sample.label == j] \\\n                        .index.tolist()\n\n        return anomalies\n\n    def compare_sample(self, sample, amend=False):\n        \"\"\"Compare new sample with current clustering.\"\"\"\n        if isinstance(sample, Instance):\n            # Retrieve cluster ID\n            # TODO: this alters cluster structure-retraining needs to be removed\n            features = self.extract_features({\"?\" + sample.name: sample.features})\n            # simple_features = self.extract_simple_features(\n            # {\"?\"+sample.name: sample.basic_features})\n            # label = self.extract_labels({\"?\"+sample.name: sample.label})\n            extended_features = pd.concat([self.features, features])\n            extended_features.fillna(0, inplace=True)\n            clustering = self.cluster_hdbscan(features=extended_features, \\\n                                              dry=True)\n            clustering_result = clustering[\"clustering\"].loc[\"?\" + sample.name]\n\n            # TODO: return samples that are the most similar to the analysed one\n\n            # Save clustering information to the sample's JSON\n            if amend:\n                root = [\"info\", \"clustering\", \"hdbscan\"]\n                sample.update(clustering_result[\"label\"], root + [\"clusterID\"])\n                sample.update(clustering_result[\"probability\"],\n                              root + [\"clusterProbability\"])\n                sample.update(clustering_result[\"outlier_score\"],\n                              root + [\"outlierScore\"])\n                sample.update(clustering[\"min_samples\"], \"min_samples\")\n                sample.update(clustering[\"min_cluster_size\"], \\\n                              \"min_cluster_size\")\n                sample.save_json(os.path.dirname(sample.json_path) + \"/\")\n        # TODO: handle more than one test sample\n        elif isinstance(sample, Loader):\n            clustering_result = pd.DataFrame()\n\n        return clustering_result\n\n    def assess_clustering(self, clustering, labels, data=None,\n                          discard_noise=False):\n        \"\"\"Assess clusters fit according to variety of metrics.\"\"\"\n\n        def performance_metric(clustering, labels, data, noise):\n            performance_metrics = {}\n            performance_metrics[\"Adjusted Random Index\"] = \\\n                metrics.adjusted_rand_score(labels, clustering)\n            performance_metrics[\"Adjusted Mutual Information Score\"] = \\\n                metrics.adjusted_mutual_info_score(labels, clustering)\n            performance_metrics[\"Homogeneity\"] = \\\n                metrics.homogeneity_score(labels, clustering)\n            performance_metrics[\"Completeness\"] = \\\n                metrics.completeness_score(labels, clustering)\n            performance_metrics[\"V-measure\"] = \\\n                metrics.v_measure_score(labels, clustering)\n\n            if data is None or noise:\n                return performance_metrics\n            performance_metrics[\"Silhouette Coefficient\"] = \\\n                metrics.silhouette_score(data, np.array(clustering))\n\n            return performance_metrics\n\n        cluster_label = clustering[\"label\"].tolist()\n        ground_label = labels[\"label\"].tolist()\n\n        if discard_noise:\n            clustering = []\n            labels = []\n            noise_clustering = []\n            noise_labels = []\n            for c, g in itertools.izip(cluster_label, ground_label):\n                if c == -1:\n                    noise_clustering.append(c)\n                    noise_labels.append(g)\n                else:\n                    clustering.append(c)\n                    labels.append(g)\n            # print performance_metric(noise_clustering, noise_labels, \\\n            #                          data, True)\n        else:\n            clustering = cluster_label\n            labels = ground_label\n\n        return performance_metric(clustering, labels, data, discard_noise)\n\n    def clustering_label_distribution(self, clustering, labels, plot=False):\n        \"\"\"Get statistics about number of ground truth labels per cluster.\"\"\"\n        cluster_ids = set(clustering[\"label\"].tolist())\n        labels_ids = set(labels[\"label\"].tolist())\n        cluster_distribution = {}\n        for i in cluster_ids:\n            cluster_distribution[i] = {}\n            for j in labels_ids:\n                cluster_distribution[i][j] = 0\n\n        for i in clustering.index:\n            cluster_distribution[clustering[\"label\"][i]][labels[\"label\"][i]] \\\n                += 1\n\n        if plot:\n            for i in cluster_distribution:\n                fig = plt.figure()\n                ax = fig.add_subplot(111)\n                yticks = []\n                counter = 0\n                for j in cluster_distribution[i]:\n                    if cluster_distribution[i][j]:\n                        ax.barh(counter, cluster_distribution[i][j])\n                        counter += 1\n                        yticks.append(j)\n                yticks_range = [l + .4 for l in range(len(yticks))]\n                plt.yticks(yticks_range, yticks)\n                ax.set_ylim([0, yticks_range[-1] + .4])\n                plt.title(\"Cluster: %d\" % i)\n                if self.context == \"notebook\":\n                    plt.show()\n                else:\n                    plt.savefig(\"cluster_%d%s\" % (i, \".png\"), bbox_inches=\"tight\")\n                    plt.close()\n        else:\n            cluster_distribution = pd.DataFrame(cluster_distribution).T\n            cluster_distribution.index.name = \"cluster_id\"\n            return cluster_distribution\n\n\nclass Loader(object):\n    \"\"\"Loads instances for analysis and give possibility to extract properties of interest.\"\"\"\n\n    def __init__(self):\n        self.binaries = {}\n        self.binaries_location = \"\"\n        self.binaries_updated = False\n\n    def load_binaries(self, directory):\n        \"\"\"Load all binaries' reports from given directory.\"\"\"\n        self.binaries_location = directory + \"/\"\n        for f in os.listdir(directory):\n            self.binaries[f] = Instance()\n            self.binaries[f].load_json(directory + \"/\" + f, f)\n            self.binaries[f].label_sample()\n            self.binaries[f].extract_features()\n            self.binaries[f].extract_basic_features()\n\n    def update_binaries(self, elements, root, locations):\n        \"\"\"Append `elements` to the loaded JSONs at given `locations`.\"\"\"\n        if isinstance(elements, pd.DataFrame) and isinstance(locations, dict):\n            self.binaries_updated = True\n            for i in elements.index:\n                for j in elements.columns:\n                    self.binaries[i].update(elements[j][i], root + [locations[j]])\n        elif isinstance(locations, str):\n            self.binaries_updated = True\n            for i in self.binaries:\n                self.binaries[i].update(elements, root + [locations])\n\n    def save_binaries(self, alternative_location=\"\"):\n        \"\"\"Save the binaries to given location if they have been updated.\"\"\"\n        if self.binaries_updated:\n            save_location = self.binaries_location\n            if alternative_location:\n                save_location = alternative_location\n                if save_location[-1] != \"/\":\n                    save_location += \"/\"\n\n            # Create directory if it does not exist\n            if not os.path.exists(save_location):\n                os.makedirs(save_location)\n\n            for f in self.binaries:\n                self.binaries[f].save_json(save_location)\n            self.binaries_updated = False\n        else:\n            print \"The binaries haven't been updated. No need to save them.\"\n\n    def get_labels(self):\n        \"\"\"Return binary labels as a labelled dictionary.\"\"\"\n        labels = {}\n        for i in self.binaries:\n            labels[i] = self.binaries[i].label\n        return labels\n\n    def get_features(self):\n        \"\"\"Return complex binary features as a labelled dictionary.\"\"\"\n        features = {}\n        for i in self.binaries:\n            features[i] = self.binaries[i].features\n        return features\n\n    def get_simple_features(self):\n        \"\"\"Return simplified binary features as a labelled dictionary.\"\"\"\n        simple_features = {}\n        for i in self.binaries:\n            simple_features[i] = self.binaries[i].basic_features\n        return simple_features\n\n\nclass Instance(object):\n    \"\"\"Machine Learning (clustering) for Cuckoo.\"\"\"\n    LABEL_SIGNIFICANCE_COUNT = 5\n    POSITIVE_RATE = 2 * LABEL_SIGNIFICANCE_COUNT\n\n    def __init__(self):\n        self.json_path = \"\"\n        self.name = \"\"\n        self.report = None\n        self.total = None\n        self.positives = None\n        self.scans = None\n        self.label = None\n        self.features = {}\n        self.basic_features = {}\n\n    def load_json(self, json_file, name=\"unknown\"):\n        \"\"\"Load JSON formatted malware report. It can handle both a path to\n        JSON file and a dictionary object.\"\"\"\n        if isinstance(json_file, str):\n            self.json_path = json_file\n            with open(json_file, \"r\") as malware_report:\n                try:\n                    self.report = json.load(malware_report)\n                except ValueError, error:\n                    print >> sys.stderr, \"Could not load file;\", \\\n                        malware_report, \"is not a valid JSON file.\"\n                    print >> sys.stderr, \"Exception: %s\" % str(error)\n                    sys.exit(1)\n        elif isinstance(json_file, dict):\n            self.report = json_file\n        else:\n            # Unknown binary format\n            print >> sys.stderr, \"Could not load the data *\", json, \"* is of \" \\\n                                                                    \"unknown type: \", type(json), \".\"\n\n        self.name = name\n\n        # Get total and positives\n        self.total = self.report.get(\"virustotal\").get(\"total\")\n        self.positives = self.report.get(\"virustotal\").get(\"positives\")\n        # Pull all VT normalised results\n        self.scans = self.report.get(\"virustotal\").get(\"scans\")\n\n    def label_sample(self, external_labels=None, label_type=\"family\"):\n        \"\"\"Generate label for the loaded sample. You can use platform, cve, metatype, type, and family (default).\"\"\"\n        merged_labels = []\n\n        if external_labels is None and self.scans is not None:\n            for vendor in self.scans:\n                merged_labels += self.scans[vendor][\"normalized\"][label_type]\n        elif external_labels is not None and self.scans is None:\n            merged_labels = external_labels\n\n        if not merged_labels:\n            self.label = \"none\"\n            return\n\n        # Get most common label if it has more hits than set threshold\n        labels_frequency = collections.Counter(merged_labels)\n        top_label, top_label_count = labels_frequency.most_common(1)[0]\n        if top_label_count >= self.LABEL_SIGNIFICANCE_COUNT:\n            # self.positives >= self.POSITIVE_RATE:\n            self.label = top_label.encode(\"ascii\", \"ignore\")\n        else:\n            self.label = \"none\"\n\n    def update(self, element, location):\n        \"\"\"Insert `element` at given `location`.\"\"\"\n        element_to_update = self.report\n        for l in location[:-1]:\n            etu = element_to_update.get(l)\n            if etu is None:\n                element_to_update[l] = {}\n                element_to_update = element_to_update.get(l)\n            else:\n                element_to_update = etu\n        element_to_update[location[-1]] = element\n\n    def save_json(self, root_dir):\n        \"\"\"Save JSON stored in the class to a file.\"\"\"\n        with open(root_dir + self.name, \"w\") as j_file:\n            json.dump(self.report, j_file)\n\n    def extract_features(self):\n        \"\"\"Extract features of the loaded sample.\"\"\"\n        self.extract_features_static()\n        self.extract_features_dynamic()\n\n    def extract_features_static(self):\n        \"\"\"Extract static features of the loaded sample.\"\"\"\n        self.feature_static_metadata()\n        self.feature_static_signature()\n        self.feature_static_heuristic()\n        self.feature_static_packer()\n        self.feature_static_pef()\n        self.feature_static_imports()\n\n    def extract_features_dynamic(self):\n        \"\"\"Extract dynamic features of the loaded sample.\"\"\"\n        self.feature_dynamic_imports()\n        self.feature_dynamic_filesystem()\n        self.feature_dynamic_network()\n        self.feature_dynamic_registry()\n        self.feature_dynamic_windowsapi()\n\n    def feature_static_metadata(self):\n        \"\"\"Create features form extracted binary metadata.\"\"\"\n        # Get binary size\n        self.features[\"size\"] = \\\n            self.report.get(\"target\", {}).get(\"file\", {}).get(\"size\")\n\n        # Get binary timestamp in the UNIX timestamp format\n        str_dt = self.report.get(\"static\", {}).get(\"pe_timestamp\")\n        ts = None\n        if str_dt is not None:\n            dt = datetime.datetime.strptime(str_dt, \"%Y-%m-%d %H:%M:%S\")\n            ts = int(time.mktime(dt.timetuple()))\n        self.features[\"timestamp\"] = ts\n\n        # ExifTool output\n        et_tokens = [\"FileDescription\", \"OriginalFilename\"]\n        for token in et_tokens:\n            self.features[token] = None\n        for attr in self.report.get(\"static\", {}).get(\"pe_versioninfo\", []):\n            attr_name = attr.get(\"name\")\n            if attr_name in et_tokens:\n                self.features[attr_name] = attr.get(\"value\")\n\n        # Magic byte\n        self.features[\"magic_byte\"] = \\\n            self.report.get(\"target\", {}).get(\"file\", {}).get(\"type\")\n\n    def feature_static_signature(self):\n        \"\"\"Create features form binary signature check.\"\"\"\n        # Check availability of digital signature\n        self.features[\"signed\"] = \\\n            bool(self.report.get(\"static\", {}).get(\"signature\", []))\n\n        # ExifTool output\n        et_tokens = [\"Comments\", \"ProductName\", \"LegalCopyright\", \\\n                     \"InternalName\", \"CompanyName\"]\n        for token in et_tokens:\n            self.features[token] = None\n        for attr in self.report.get(\"static\", {}).get(\"pe_versioninfo\", []):\n            attr_name = attr.get(\"name\")\n            if attr_name in et_tokens:\n                self.features[attr_name] = attr.get(\"value\")\n\n    def feature_static_heuristic(self):\n        \"\"\"Create features form results return by heuristic tools.\n        **Not available for current JSON content.**\"\"\"\n        pass\n\n    def feature_static_packer(self):\n        \"\"\"Create feature from information returned by packer/cryptor\n        detectors.\"\"\"\n        self.features[\"packer\"] = \\\n            self.report.get(\"static\", {}).get(\"peid_signatures\", None)\n\n    def feature_static_pef(self):\n        \"\"\"Create features from information derived form portable executable\n        format.\"\"\"\n        # Get resource languages\n        self.features[\"languages\"] = []\n        for d in self.report.get(\"static\", {}).get(\"pe_resources\", []):\n            lang = d.get(\"language\", False)\n            if lang:\n                if lang.startswith(\"LANG_\"):\n                    lang = lang[5:]\n                else:\n                    lang = lang\n                if lang not in self.features[\"languages\"]:\n                    self.features[\"languages\"].append(lang)\n            sublang = d.get(\"sublanguage\", False)\n            if sublang:\n                if sublang.startswith(\"SUBLANG_\"):\n                    sublang = sublang[8:]\n                else:\n                    sublang = sublang\n                if sublang not in self.features[\"languages\"]:\n                    self.features[\"languages\"].append(sublang)\n\n        # Section and resource attributes\n        self.features[\"section_attrs\"] = {}\n        for d in self.report.get(\"static\", {}).get(\"pe_sections\", []):\n            n = d.get(\"name\")\n            e = d.get(\"entropy\")\n            if n and d:\n                self.features[\"section_attrs\"][n] = e\n        self.features[\"resource_attrs\"] = {}\n        for d in self.report.get(\"static\", {}).get(\"pe_resources\", []):\n            n = d.get(\"name\")\n            f = d.get(\"filetype\")\n            if n and f:\n                self.features[\"resource_attrs\"][n] = f\n\n    def feature_static_imports(self):\n        \"\"\"Extract features from static imports like referenced library\n        functions.\"\"\"\n        self.features[\"static_imports\"] = {}\n\n        # Static libraries import count\n        self.features[\"static_imports\"][\"count\"] = \\\n            self.report.get(\"static\", {}).get(\"imported_dll_count\", None)\n\n        # Get all imported libraries\n        for d in self.report.get(\"static\", {}).get(\"pe_imports\", []):\n            ddl_name = d.get(\"dll\")\n            if not ddl_name:\n                continue\n            self.features[\"static_imports\"][ddl_name] = []\n            for i in d.get(\"imports\", []):\n                ref = i.get(\"name\")\n                if ref is not None:\n                    self.features[\"static_imports\"][ddl_name].append(ref)\n\n    def feature_dynamic_imports(self):\n        \"\"\"Extract features from dynamic imports, mutexes, and processes.\"\"\"\n        # Get mutexes\n        self.features[\"mutex\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}).get(\"mutex\")\n\n        # Get processes names\n        self.features[\"processes\"] = []\n        for p in self.report.get(\"behavior\", {}).get(\"processes\", []):\n            p_name = p.get(\"process_name\")\n            if p_name and p_name not in self.features[\"processes\"]:\n                self.features[\"processes\"].append(p_name)\n\n        # Get dynamically loaded library names\n        self.features[\"dynamic_imports\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"dll_loaded\", [])\n\n    def feature_dynamic_filesystem(self):\n        \"\"\"Extract features from filesystem operations.\"\"\"\n\n        def flatten_list(structured):\n            \"\"\"Flatten nested list.\"\"\"\n            flat = []\n            for i in structured:\n                flat += i\n            return flat\n\n        # Get file operations and their number\n        self.features[\"file_read\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_read\", [])\n        self.features[\"files_read\"] = len(self.features[\"file_read\"])\n        self.features[\"file_written\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_written\", [])\n        self.features[\"files_written\"] = len(self.features[\"file_written\"])\n        self.features[\"file_deleted\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_deleted\", [])\n        self.features[\"files_deleted\"] = len(self.features[\"file_deleted\"])\n        self.features[\"file_copied\"] = flatten_list( \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_copied\", [])\n        )\n        self.features[\"files_copied\"] = len( \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_copied\", [])\n        )\n        self.features[\"file_renamed\"] = flatten_list( \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_moved\", [])\n        )\n        self.features[\"files_renamed\"] = len(self.features[\"file_renamed\"])\n\n        # Get other file operations numbers\n        self.features[\"files_opened\"] = len(\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_opened\", [])\n        )\n        self.features[\"files_exists\"] = len(\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_exists\", [])\n        )\n        self.features[\"files_failed\"] = len(\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_failed\", [])\n        )\n\n        # Get total number of unique touched files\n        file_operations = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_read\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_written\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_deleted\", []) + \\\n            flatten_list(self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                         .get(\"file_copied\", [])) + \\\n            flatten_list(self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                         .get(\"file_moved\", [])) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_recreated\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_opened\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_exists\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"file_failed\", [])\n        # remove duplicates\n        self.features[\"files_operations\"] = len(list(set(file_operations)))\n\n    def feature_dynamic_network(self):\n        \"\"\"Extract features from network operations.\"\"\"\n        # Get TCP IP addresses\n        self.features[\"tcp\"] = []\n        for c in self.report.get(\"network\", {}).get(\"tcp\", []):\n            c_dst = c.get(\"dst\")\n            if c_dst and c_dst not in self.features[\"tcp\"]:\n                self.features[\"tcp\"].append(c_dst)\n\n        # Get UDP IPs\n        self.features[\"udp\"] = []\n        for c in self.report.get(\"network\", {}).get(\"udp\", []):\n            c_dst = c.get(\"dst\")\n            if c_dst and c_dst not in self.features[\"udp\"]:\n                self.features[\"udp\"].append(c_dst)\n\n        # Get DNS queries and responses\n        self.features[\"dns\"] = {}\n        for c in self.report.get(\"network\", {}).get(\"dns\", []):\n            request = c.get(\"request\")\n            if request:\n                self.features[\"dns\"][request] = []\n            else:\n                continue\n\n            answers = c.get(\"answers\", [])\n            for a in answers:\n                a_type = a.get(\"type\")\n                a_data = a.get(\"data\")\n                if a_type == \"A\" and a_data:\n                    self.features[\"dns\"][request].append(a_data)\n\n        # Get HTTP requests: method, host, port, path\n        self.features[\"http\"] = {}\n        for c in self.report.get(\"network\", {}).get(\"http\", []):\n            c_data = c.get(\"data\")\n            if c_data:\n                self.features[\"http\"][c_data] = {}\n            else:\n                continue\n\n            c_method = c.get(\"method\")\n            if c_method:\n                self.features[\"http\"][c_data][\"method\"] = c_method\n            c_host = c.get(\"host\")\n            if c_host:\n                self.features[\"http\"][c_data][\"host\"] = c_host\n            c_port = c.get(\"port\")\n            if c_port:\n                self.features[\"http\"][c_data][\"port\"] = c_port\n\n    def feature_dynamic_registry(self):\n        \"\"\"Extract features from registry operations.\"\"\"\n        # Registry written\n        self.features[\"regkey_written\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"regkey_written\", [])\n        # Registry delete\n        self.features[\"regkey_deleted\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}) \\\n                .get(\"regkey_deleted\", [])\n\n    def feature_dynamic_windowsapi(self):\n        \"\"\"Extract features from Windows API calls sequence.\"\"\"\n        self.features[\"api_stats\"] = {}\n        apistats = self.report.get(\"behavior\", {}).get(\"apistats\", {})\n        for d in apistats:\n            for e in apistats[d]:\n                if e in self.features[\"api_stats\"]:\n                    self.features[\"api_stats\"][e] += apistats[d][e]\n                else:\n                    self.features[\"api_stats\"][e] = apistats[d][e]\n\n    def extract_basic_features(self):\n        \"\"\"Extract very basic set of features from *signatures* JSON field.\n        These are extracted characteristics of the binary by cuckoo sandbox.\"\"\"\n        if self.basic_features:\n            self.basic_features = {}\n\n        for s in self.report.get(\"signatures\", []):\n            name = s.get(\"name\", \"\")\n            description = s.get(\"description\", \"\")\n            if name:\n                self.basic_features[name] = description\n                continue\n            if description:\n                self.basic_features[hash(description)] = description\n"
  },
  {
    "path": "examples/detectiontest.py",
    "content": "# coding=utf-8\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Bold-Falcon - https://github.com/PowerLZY/Bold-Falcon\n# See the file 'docs/LICENSE' for copying permission.\n\nimport sys\nimport os\nsys.path.append(\"..\")\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\n\nfrom instance import Instance\nfrom loader import Loader\nfrom modules.detection.strings import Strings_ngram\nfrom modules.processing.cuckooml import ML\n\nimport joblib\nfrom sklearn.feature_extraction.text import TfidfVectorizer\nfrom pprint import pprint\n\n# The first stage is to load the data from the directory holding all the JSONs\nloader = Loader()\nloader.load_binaries_dir(\"../sample_data/dict\")\n\n# Then we extract all the relevant information from the loaded samples.\nsimple_features_dict = loader.get_simple_features()\nfeatures_dict = loader.get_features()\nfeatures_strings = features_dict['66'][\"strings\"]\n\n\n\n\"\"\"\n例子：\nsimple_features_dict['165']:{\n    u'injection_runpe': u'Executed a process and injected code into it, probably while unpacking', \n    u'worm_renocide': u'Creates known Renocide Worm files, registry keys and/or mutexes', \n    u'pe_features': u'The executable has PE anomalies (could be a false positive)', \n    u'raises_exception': u'One or more processes crashed', \n    u'dumped_buffer': u'One or more potentially interesting buffers were extracted, these generally contain injected code, configuration data, etc.', \n    u'antisandbox_productid': u'Retrieves Windows ProductID, probably to fingerprint the sandbox',\n    u'antivirus_virustotal': u'File has been identified by at least one AntiVirus on VirusTotal as malicious', \n    u'allocates_rwx': u'Allocates read-write-execute memory (usually to unpack itself)',\n    u'packer_upx': u'The executable is compressed using UPX'\n}\n\"\"\"\nlabels_dict = loader.get_labels()\n\n# Now that all the needed information are at hand we create a cuckooml Machine Learning instance\n# and inject therein all these information.\n# ml = ML(context=\"notebook\")\nml = ML()\nml.load_simple_features(simple_features_dict)\nml.load_features(features_dict)\nml.load_labels(labels_dict)\n\n# Once loaded into ML class the data is reformated into Pandas DataFrame object\n# therefore it is easy to manipulate and use it with variety of machine learning algorithms.\nsimple_features = ml.simple_features\nfeatures = ml.features\nlabels = ml.labels\n\n\"\"\"\n{'packer': None, 'file_renamed': [], 'files_operations': 5, 'files_renamed': 0, 'Comments': None, 'files_deleted': 0, 'section_attrs': {u'.reloc': 4.563135239901142, u'.data': 5.714073993806871, u'.rdata': 6.335321668165209, u'.text': 6.723680694442286, u'.rsrc': 3.6143275609945746}, 'files_exists': 2, 'size': 180736, 'InternalName': u'dpapimig', 'regkey_written': [], 'file_copied': [], 'regkey_deleted': [], 'languages': [u'ENGLISH', u'ENGLISH_US'], 'mutex': None, 'dns': {}, 'files_opened': 0, 'file_read': [], 'LegalCopyright': u'\\\\xa9 Microsoft Corporation. All rights reserved.', 'udp': [u'192.168.57.255', u'239.255.255.250'], 'files_failed': 0, 'http': {}, 'api_stats': {u'LdrUnloadDll': 2, u'GetSystemMetrics': 1, u'NtAllocateVirtualMemory': 58, u'NtQuerySystemInformation': 2, u'GetSystemInfo': 1, u'CreateActCtxW': 1, u'NtUnmapViewOfSection': 2, u'LdrGetProcedureAddress': 10, u'MessageBoxTimeoutW': 1, u'SetUnhandledExceptionFilter': 2, u'LoadStringW': 2, u'GetFileAttributesW': 2, u'NtCreateFile': 5, u'NtClose': 17, u'GetSystemTimeAsFileTime': 3, u'RegOpenKeyExA': 4, u'NtDeviceIoControlFile': 6, u'NtTerminateProcess': 3, u'LdrGetDllHandle': 4, u'LdrLoadDll': 1, u'NtFreeVirtualMemory': 28}, 'timestamp': 1427745061, 'file_written': [], 'files_copied': 0, 'resource_attrs': {u'RT_GROUP_CURSOR': u'MS Windows cursor resource - 1 icon, 32x256, hotspot @1x1', u'RT_CURSOR': u'data', u'RT_VERSION': u'data'}, 'tcp': [], 'FileDescription': u'DPAPI Key Migration Wizard', 'dynamic_imports': [u'C:\\\\DOCUME~1\\\\ADMINI~1\\\\LOCALS~1\\\\Temp\\\\5b28c86d7e581e52328942b35ece0d0875585fbb4e29378666d1af5be7f56b46.dll'], 'OriginalFilename': u'dpapimig.exe', 'static_imports': {'count': 9, u'WTSAPI32.dll': [u'WTSQueryUserToken'], u'IPHLPAPI.DLL': [u'GetAdaptersInfo'], u'KERNEL32.dll': [u'GetModuleFileNameA', u'SetFileTime', u'GetFileAttributesW', u'FindFirstFileW', u'FindClose', u'FindNextFileW', u'GetFileTime', u'GetLastError', u'GetLocalTime', u'TerminateProcess', u'OpenProcess', u'Process32NextW', u'Process32FirstW', u'CreateToolhelp32Snapshot', u'DeleteFileW', u'GetNativeSystemInfo', u'GetComputerNameW', u'FileTimeToLocalFileTime', u'SetCurrentDirectoryW', u'GetCurrentDirectoryW', u'GetEnvironmentVariableW', u'SetEnvironmentVariableW', u'SetFilePointer', u'GetFileSize', u'GetDiskFreeSpaceExW', u'GetLogicalDrives', u'LoadLibraryW', u'CreateFileA', u'GetCurrentProcess', u'GetVolumeInformationW', u'GetDriveTypeW', u'Module32FirstW', u'GetProcessTimes', u'GetExitCodeProcess', u'WaitForSingleObject', u'Sleep', u'GetACP', u'GetTempFileNameW', u'GetTempPathW', u'GetTempFileNameA', u'CreateThread', u'ReleaseMutex', u'CreateMutexW', u'SetErrorMode', u'GetFileAttributesA', u'GetFullPathNameA', u'FileTimeToSystemTime', u'FindFirstFileA', u'FindNextFileA', u'SetEndOfFile', u'HeapReAlloc', u'SetFileAttributesW', u'WriteFile', u'GetModuleFileNameW', u'CreateFileW', u'ReadFile', u'MultiByteToWideChar', u'WideCharToMultiByte', u'LoadLibraryA', u'GetProcAddress', u'lstrlenA', u'lstrcpyA', u'GlobalAlloc', u'GetTickCount', u'GlobalFree', u'CreateProcessW', u'FlushFileBuffers', u'WriteConsoleW', u'SetStdHandle', u'GetProcessHeap', u'GetStringTypeW', u'LCMapStringW', u'HeapSize', u'GetCurrentProcessId', u'QueryPerformanceCounter', u'GetEnvironmentStringsW', u'FreeEnvironmentStringsW', u'DeleteCriticalSection', u'GetStartupInfoW', u'GetFileType', u'SetHandleCount', u'GetConsoleMode', u'GetConsoleCP', u'InitializeCriticalSectionAndSpinCount', u'LeaveCriticalSection', u'GetTempPathA', u'CloseHandle', u'EnterCriticalSection', u'HeapDestroy', u'HeapCreate', u'GetStdHandle', u'GetSystemTimeAsFileTime', u'HeapAlloc', u'MoveFileW', u'RtlUnwind', u'HeapFree', u'GetCurrentThreadId', u'DecodePointer', u'GetCommandLineA', u'UnhandledExceptionFilter', u'SetUnhandledExceptionFilter', u'IsDebuggerPresent', u'IsProcessorFeaturePresent', u'EncodePointer', u'TlsAlloc', u'TlsGetValue', u'TlsSetValue', u'TlsFree', u'InterlockedIncrement', u'GetModuleHandleW', u'SetLastError', u'InterlockedDecrement', u'RaiseException', u'GetCPInfo', u'GetOEMCP', u'IsValidCodePage', u'ExitProcess'], u'OLEAUT32.dll': [u'SystemTimeToVariantTime'], u'ADVAPI32.dll': [u'LookupPrivilegeValueA', u'RegisterServiceCtrlHandlerA', u'OpenProcessToken', u'DuplicateTokenEx', u'CreateProcessAsUserW', u'SetServiceStatus', u'GetUserNameW', u'RegQueryValueExW', u'AdjustTokenPrivileges', u'RegOpenKeyW', u'RegCloseKey'], u'SHLWAPI.dll': [u'StrTrimW'], u'WS2_32.dll': [u'__WSAFDIsSet', u'htons', u'shutdown', u'closesocket', u'htonl', u'connect', u'ioctlsocket', u'socket', u'inet_addr', u'setsockopt', u'WSAStartup', u'select', u'send'], u'USER32.dll': [u'wsprintfW'], u'USERENV.dll': [u'CreateEnvironmentBlock', u'DestroyEnvironmentBlock']}, 'magic_byte': u'PE32 executable (DLL) (GUI) Intel 80386, for MS Windows', 'processes': [u'lsass.exe', u'rundll32.exe'], 'CompanyName': u'Microsoft Corporation', 'files_written': 0, 'signed': False, 'ProductName': u'Microsoft\\\\xae Windows\\\\xae Operating System', 'file_deleted': [], 'files_read': 0, 'strings': [u'!This program cannot be run in DOS mode.', u'`.rdata', u'@.data', u'@.reloc', u'PQQQQQQf', u'VPj j ', u'] VWh\\\\', u'SSSVSR', u'G,VSPW', u')ND)NP', u\"M8j8h8'\", u'U,QPWR', u'QQSVWd', u'9} tK9}$uA9}(uA', u'9E vcP', u'9}$tB+', u'9u(vDVSj', u'9u v&V', u'URPQQh', u'^SSSSS', u'u)jAXf;', u'HHt$HHt', u't\\x1f=MOC', u'Ht\\x1fHu4j', u't*=RCC', u';7|G;p', u'tR99u2', u'<at,<rt\"<wt', u'j@j ^V', u';t$,v-', u'UQPXY]Y[', u't\"SS9] u', u'PPPPPPPP', u'PPPPPPPP', u'tCHt(Ht ', u'<+t\"<-t', u'+t HHt', u'W(9W$u', u'tm9_ th9_$tc', u'Flf+Fp', u'D$(8D*', u'Nxf+Fd', u'|$ WUSV', u'D$$SUV', u'login.live.com', u'TPQBXODU', u'%s%s %s', u'RPCSvc', u' zip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll', u'1.2.7.f-hanba-win64-v1', u'bad allocation', u'FlsFree', u'FlsSetValue', u'FlsGetValue', u'FlsAlloc', u'Unknown exception', u'HH:mm:ss', u'dddd, MMMM dd, yyyy', u'MM/dd/yy', u'December', u'November', u'October', u'September', u'August', u'February', u'January', u'Saturday', u'Friday', u'Thursday', u'Wednesday', u'Tuesday', u'Monday', u'Sunday', u'\\x1f !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~', u'CorExitProcess', u'(null)', u'`h````', u'xpxxxx', u'`h`hhh', u'xppwpp', u'bad exception', u'UTF-16LE', u'UNICODE', u'\\x1f !\"#$%&\\'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~', u'\\x1f !\"#$%&\\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~', u'GetProcessWindowStation', u'GetUserObjectInformationW', u'GetLastActivePopup', u'GetActiveWindow', u'MessageBoxW', u\" Complete Object Locator'\", u\" Class Hierarchy Descriptor'\", u\" Base Class Array'\", u' Base Class Descriptor at (', u\" Type Descriptor'\", u\"`local static thread guard'\", u\"`managed vector copy constructor iterator'\", u\"`vector vbase copy constructor iterator'\", u\"`vector copy constructor iterator'\", u\"`dynamic atexit destructor for '\", u\"`dynamic initializer for '\", u\"`eh vector vbase copy constructor iterator'\", u\"`eh vector copy constructor iterator'\", u\"`managed vector destructor iterator'\", u\"`managed vector constructor iterator'\", u\"`placement delete[] closure'\", u\"`placement delete closure'\", u\"`omni callsig'\", u' delete[]', u' new[]', u\"`local vftable constructor closure'\", u\"`local vftable'\", u\"`udt returning'\", u\"`copy constructor closure'\", u\"`eh vector vbase constructor iterator'\", u\"`eh vector destructor iterator'\", u\"`eh vector constructor iterator'\", u\"`virtual displacement map'\", u\"`vector vbase constructor iterator'\", u\"`vector destructor iterator'\", u\"`vector constructor iterator'\", u\"`scalar deleting destructor'\", u\"`default constructor closure'\", u\"`vector deleting destructor'\", u\"`vbase destructor'\", u\"`string'\", u\"`local static guard'\", u\"`typeof'\", u\"`vcall'\", u\"`vbtable'\", u\"`vftable'\", u'operator', u' delete', u'__unaligned', u'__restrict', u'__ptr64', u'__eabi', u'__clrcall', u'__fastcall', u'__thiscall', u'__stdcall', u'__pascal', u'__cdecl', u'__based(', u'1#QNAN', u'1#SNAN', u' deflate 1.2.7 Copyright 1995-2012 Jean-loup Gailly and Mark Adler ', u'Qkkbal', u\"[-&LMb#{'\", u'w+OQvr', u'IN\\x1fSKyu', u')\\\\ZEo^m/', u'H*0\"ZOW', u'mj>zjZ', u'IiGM>nw', u'ewh/?y', u'OZw3(?', u'V_:X1:', u'CloseHandle', u'CreateProcessW', u'GlobalFree', u'GetTickCount', u'GlobalAlloc', u'lstrcpyA', u'lstrlenA', u'GetProcAddress', u'LoadLibraryA', u'WideCharToMultiByte', u'MultiByteToWideChar', u'ReadFile', u'CreateFileW', u'GetModuleFileNameW', u'WriteFile', u'SetFileAttributesW', u'GetModuleFileNameA', u'SetFileTime', u'GetFileAttributesW', u'FindFirstFileW', u'FindClose', u'FindNextFileW', u'GetFileTime', u'GetLastError', u'GetLocalTime', u'TerminateProcess', u'OpenProcess', u'Process32NextW', u'Process32FirstW', u'CreateToolhelp32Snapshot', u'DeleteFileW', u'GetNativeSystemInfo', u'GetComputerNameW', u'FileTimeToLocalFileTime', u'SetCurrentDirectoryW', u'GetCurrentDirectoryW', u'GetEnvironmentVariableW', u'SetEnvironmentVariableW', u'SetFilePointer', u'GetFileSize', u'GetDiskFreeSpaceExW', u'GetLogicalDrives', u'LoadLibraryW', u'CreateFileA', u'GetCurrentProcess', u'GetVolumeInformationW', u'GetDriveTypeW', u'Module32FirstW', u'GetProcessTimes', u'GetExitCodeProcess', u'WaitForSingleObject', u'GetACP', u'GetTempFileNameW', u'GetTempPathW', u'GetTempFileNameA', u'GetTempPathA', u'CreateThread', u'ReleaseMutex', u'CreateMutexW', u'SetErrorMode', u'GetFileAttributesA', u'GetFullPathNameA', u'FileTimeToSystemTime', u'FindFirstFileA', u'FindNextFileA', u'KERNEL32.dll', u'wsprintfW', u'USER32.dll', u'RegCloseKey', u'RegOpenKeyW', u'AdjustTokenPrivileges', u'LookupPrivilegeValueA', u'RegQueryValueExW', u'GetUserNameW', u'SetServiceStatus', u'CreateProcessAsUserW', u'DuplicateTokenEx', u'OpenProcessToken', u'RegisterServiceCtrlHandlerA', u'ADVAPI32.dll', u'OLEAUT32.dll', u'DestroyEnvironmentBlock', u'CreateEnvironmentBlock', u'USERENV.dll', u'StrTrimW', u'SHLWAPI.dll', u'WS2_32.dll', u'GetAdaptersInfo', u'IPHLPAPI.DLL', u'WTSQueryUserToken', u'WTSAPI32.dll', u'GetSystemTimeAsFileTime', u'HeapAlloc', u'MoveFileW', u'RtlUnwind', u'HeapFree', u'GetCurrentThreadId', u'DecodePointer', u'GetCommandLineA', u'UnhandledExceptionFilter', u'SetUnhandledExceptionFilter', u'IsDebuggerPresent', u'IsProcessorFeaturePresent', u'EncodePointer', u'TlsAlloc', u'TlsGetValue', u'TlsSetValue', u'TlsFree', u'InterlockedIncrement', u'GetModuleHandleW', u'SetLastError', u'InterlockedDecrement', u'RaiseException', u'GetCPInfo', u'GetOEMCP', u'IsValidCodePage', u'ExitProcess', u'GetStdHandle', u'HeapCreate', u'HeapDestroy', u'EnterCriticalSection', u'LeaveCriticalSection', u'InitializeCriticalSectionAndSpinCount', u'GetConsoleCP', u'GetConsoleMode', u'SetHandleCount', u'GetFileType', u'GetStartupInfoW', u'DeleteCriticalSection', u'FreeEnvironmentStringsW', u'GetEnvironmentStringsW', u'QueryPerformanceCounter', u'GetCurrentProcessId', u'HeapSize', u'LCMapStringW', u'GetStringTypeW', u'SetStdHandle', u'WriteConsoleW', u'FlushFileBuffers', u'HeapReAlloc', u'SetEndOfFile', u'GetProcessHeap', u'ServerDll.dll', u'ServiceMain', u'VeriSign, Inc.1\\x1f0', u'VeriSign Trust Network1;09', u'2Terms of use at https://www.verisign.com/rpa (c)061806', u'/VeriSign Class 3 Extended Validation SSL SGC CA0', u'120918000000Z', u'140919235959Z0', u'Washington1', u'Private Organization1', u'6004134851', u'980521', u'Washington1', u'Redmond1', u'1 Microsoft Way1', u'Microsoft Corporation1', u'Passport1', u'login.live.com0', u'g!+:4c', u'login.live.com0', u'-http://EVIntl-crl.verisign.com/EVIntl2006.crl0D', u'https://www.verisign.com/cps04', u'\\x1fhttp://EVIntl-ocsp.verisign.com09', u'-http://EVIntl-aia.verisign.com/EVIntl2006.cer0', u'VeriSign, Inc.1\\x1f0', u'VeriSign Trust Network1:08', u'1(c) 2006 VeriSign, Inc. - For authorized use only1E0C', u'<VeriSign Class 3 Public Primary Certification Authority - G50', u'061108000000Z', u'161107235959Z0', u'VeriSign, Inc.1\\x1f0', u'VeriSign Trust Network1;09', u'2Terms of use at https://www.verisign.com/rpa (c)061806', u'/VeriSign Class 3 Extended Validation SSL SGC CA0', u'https://www.verisign.com/cps0=', u',http://EVSecure-crl.verisign.com/pca3-g5.crl0 ', u'[0Y0W0U', u'image/gif0!0\\x1f0', u'#http://logo.verisign.com/vslogo.gif0)', u'Class3CA2048-1-480=', u'!http://EVSecure-ocsp.verisign.com0\\x1f', u'(@w9nHrE1]k9', u'VeriSign, Inc.1705', u'.Class 3 Public Primary Certification Authority0', u'061108000000Z', u'211107235959Z0', u'VeriSign, Inc.1\\x1f0', u'VeriSign Trust Network1:08', u'1(c) 2006 VeriSign, Inc. - For authorized use only1E0C', u'<VeriSign Class 3 Public Primary Certification Authority - G50', u' http://crl.verisign.com/pca3.crl0', u'https://www.verisign.com/cps0', u'[0Y0W0U', u'image/gif0!0\\x1f0', u'#http://logo.verisign.com/vslogo.gif04', u'http://ocsp.verisign.com0', u'dBaD4t0', u'.?AVCZipper@@', u'.?AVbad_alloc@std@@', u'.?AVexception@std@@', u'.?AVtype_info@@', u'                          ', u'abcdefghijklmnopqrstuvwxyz', u'ABCDEFGHIJKLMNOPQRSTUVWXYZ', u'                          ', u'abcdefghijklmnopqrstuvwxyz', u'ABCDEFGHIJKLMNOPQRSTUVWXYZ', u'.?AVbad_exception@std@@', u'incompatible version', u'buffer error', u'insufficient memory', u'data error', u'stream error', u'file error', u'stream end', u'need dictionary', u'PADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADD', u'2U2d2m2t2', u'5+525M5', u'7#8-8o8', u':\":2:B:j:', u'92:9:O:', u';*;4;<;j;', u'<\"<3<^<', u'>5>Y>e>', u'0J1[1z1', u'233F3S3a3m3', u\"4'404^4*:u:\", u'=:>2?]?s?', u'!0[0o0', u'1&1@1Y1', u'3H3O3h3v3|3', u'4>5$:*:E:a:', u'40?0H0l0', u'1?1`1m1', u'1&2-2I2y2', u'4+444i4', u'5C5J5i5', u';#;);/;|;', u'<\\x1f<7<z<', u'?@?F?y?', u'6&60666n677', u'9\":/:n:', u':!;,;2;8;>;N;V;u;{;', u';*<U<\\\\<', u'=-=@=L=m=', u'2\\x1f2B2~2', u'3(3Q3_3z3', u'6L7V7^7', u'8\"8L8T8', u'8.9<9C9I9', u':::H:O:', u';\\x1f<-<:<A<_=', u'8Q8o8w8', u':4:V:v:', u'>#>5>t>z>', u'>S?o?x?', u'0%0+0x0', u'1&10161<1B1H1M1V1]1g1m1s1', u'3;3b3n3', u':d;p;|;', u'g1777?', u'?\"?(?.?4?:?', u'3)3O3m3t3x3|3', u'3R4]4x4', u'5 5$5(5,5v5|5', u'6<6T6[6c6h6l6p6', u'7J7P7T7X7\\\\7', u';$<*</<7<G<Q<W<k<', u'>&?+?1?5?;???E?I?O?S?X?^?b?h?l?r?v?|?', u'8=9C9U9h9', u'<!<(</<6<=<E<M<U<a<j<o<u<', u'Z0_0j0q0}0', u'1(1=1c1', u'3f3v3|3', u'4\"4)4.464?4K4P4U4[4_4e4j4p4u4', u'5/5T6f6F7P7]7', u':V;c;i;', u'0&0?0I0\\\\0', u'3$3,343K3d3', u'9,979Q9\\\\9d9t9z9', u':0;H;R;m;u;{;', u'4L7P7T7X7\\\\7`7d7h7', u'4,575=5b5h5m5n6', u'8*898F8R8b8i8x8', u'9M9\\\\9e9', u';0<X<z<', u'=*=<=A=', u'0a0h0}0', u'5*636?6x6', u'677B7L7]7h7(999A9G9L9R9', u':T:`:o:t:', u':*<M<Z<f<n<v<', u'>\\x1f>1>H>V>\\\\>', u'0I1l1~1', u':.:@:R:x:', u';,;>;P;', u';9=>=C=H=X=', u\"> >'>,>3>8>F>\", u'>>?M?\\\\?', u'0%0`0z0', u'0(0;0M0', u'4#4-4D4i4', u'9#:K:d:', u';!;*;j;|;', u'5n6b7j7', u'9;:A:O:', u'2-8O8c8v=', u'6%666B6[6d6v6', u'7\"7+7?7K7d7m7', u'6T7X7\\\\7p7t7x7', u'5$5,545', u'6 6$6(6,6064686<6@6D6H6L6P6T6X6\\\\6`6d6h6l6p6t6x6|6', u'7 7$7(7,7074787<7@7D7H7L7P7T7X7', u'8(848@8L8', u'X8\\\\8`8d8h8l8p8t8x8|8', u'3 3(3@3D3\\\\3l3p3', u'4D4H4P4\\\\4|4', u'505P5p5', u'606<6X6d6', u'7 7(7,7D7H7X7|7', u'8 8$8,8@8\\\\8`8|8', u'9 9,9H9h9', u':(:4:P:l:p:', u'9 9$9(9,9094989<9@9D9H9L9P9T9X9\\\\9`9d9h9l9p9t9x9|9', u': :$:(:,:0:4:8:<:@:D:H:L:P:T:X:', u';(;,;0;4;8;<;@;D;H;L;P;T;X;\\\\;`;d;h;l;p;', u'jjjjjj', u'jjjjjj', u'%s\\\\*.*', u'%s\\\\%s\\\\', u'%sd.e%sc \"%s > %s\" 2>&1', u'%sd.e%sc \"%s%s %s > %s\" 2>&1', u'r /a /s', u'%s\\\\%X%d.%s', u'KERNEL32.DLL', u'HH:mm:ss', u'dddd, MMMM dd, yyyy', u'MM/dd/yy', u'December', u'November', u'October', u'September', u'August', u'February', u'January', u'Saturday', u'Friday', u'Thursday', u'Wednesday', u'Tuesday', u'Monday', u'Sunday', u'mscoree.dll', u'runtime error ', u'TLOSS error', u'SING error', u'DOMAIN error', u'- Attempt to use MSIL code from this assembly during native code initialization', u'This indicates a bug in your application. It is most likely the result of calling an MSIL-compiled (/clr) function from a native constructor or from DllMain.', u'- not enough space for locale information', u'- Attempt to initialize the CRT more than once.', u'This indicates a bug in your application.', u'- CRT not initialized', u'- unable to initialize heap', u'- not enough space for lowio initialization', u'- not enough space for stdio initialization', u'- pure virtual function call', u'- not enough space for _onexit/atexit table', u'- unable to open console device', u'- unexpected heap error', u'- unexpected multithread lock error', u'- not enough space for thread data', u'- abort() has been called', u'- not enough space for environment', u'- not enough space for arguments', u'- floating point support not loaded', u'Microsoft Visual C++ Runtime Library', u'<program name unknown>', u'Runtime Error!', u'Program: ', u'(null)', u'         (((((                  H', u'         h((((                  H', u'                                 H', u'WUSER32.DLL', u'CONOUT$', u'VS_VERSION_INFO', u'StringFileInfo', u'040904B0', u'CompanyName', u'Microsoft Corporation', u'FileDescription', u'DPAPI Key Migration Wizard', u'FileVersion', u'6.1.7600.16385 (win7_rtm.090713-1255)', u'InternalName', u'dpapimig', u'LegalCopyright', u' Microsoft Corporation. All rights reserved.', u'OriginalFilename', u'dpapimig.exe', u'ProductName', u'Microsoft', u' Windows', u' Operating System', u'ProductVersion', u'6.1.7600.16385', u'VarFileInfo', u'Translation']}\n\n\"\"\"\n\n\n"
  },
  {
    "path": "examples/getjsondata.py",
    "content": "# coding=utf-8\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Bold-Falcon - https://github.com/PowerLZY/Bold-Falcon\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom instance import Instance\n\nget_data = True\n\nif get_data:\n    import os\n    import tarfile\n    import urllib\n\n    data_root = \"../sample_data/\"\n    if not os.path.exists(data_root):\n        os.makedirs(data_root)\n\n    data_filename = \"sample.tar.gz\"\n    urllib.urlretrieve(\"https://gist.github.com/So-Cool/8ca88add639b41d33b13228f18be6baa/raw/07ac42e555e9b49b13b6a3e71cea7502efd4bd88/sample.tar.gz\", data_root+data_filename)\n\n    tar = tarfile.open(data_root+data_filename, \"r:gz\")\n    tar.extractall(path=data_root+data_filename.split('.')[0]+\"/\")\n    tar.close()\n\nrelabelled = True  # False\nread_from = \"../sample_data/sample\"\nsave_in = \"../sample_data/dict\"\n\n\"\"\"if your data was not produced with one of the latest cuckoo versions there might be a hance that you're missing data labels; in this case you need to run labeling process independently; to do so please follow the guideline below.)\nIf you have just got the data from the above code cell you need to execute the code below\"\"\"\nif relabelled:\n    import json\n    import os\n    import sys\n    from lib.cuckoo.common.virustotal import VirusTotalAPI\n\n    if not os.path.exists(save_in):\n        os.makedirs(save_in)\n    vt = VirusTotalAPI(\"\", 0, 0)\n\n    for f in os.listdir(read_from):\n        with open(read_from + \"/\" + f, \"r\") as malware_report:\n            try:\n                report = json.load(malware_report)\n            except ValueError, error:\n                print >> sys.stderr, \"Could not load file;\", malware_report, \"is not a valid JSON file.\"\n                print >> sys.stderr, \"Exception: %s\" % str(error)\n                print >> sys.stderr, \"Moving on to the next file...\"\n                continue\n\n            if report[\"virustotal\"].get(\"scans\") is not None:\n                report[\"virustotal\"][\"normalized\"] = {\n                    \"cve\": \"\",\n                    \"platform\": \"\",\n                    \"metatype\": \"\",\n                    \"type\": \"\",\n                    \"family\": \"\"\n                }\n\n                norm_lower = {\n                    \"cve\": [],\n                    \"platform\": [],\n                    \"metatype\": [],\n                    \"type\": [],\n                    \"family\": [],\n                }\n\n                for vendor in report[\"virustotal\"][\"scans\"]:\n                    report[\"virustotal\"][\"scans\"][vendor][\"normalized\"] = \\\n                        vt.normalize(report[\"virustotal\"][\"scans\"][vendor][\"result\"])\n\n                    for label_type in report[\"virustotal\"][\"scans\"][vendor][\"normalized\"]:\n                        norm_lower[label_type] += report[\"virustotal\"][\"scans\"][vendor][\"normalized\"][label_type]\n\n                labeller = Instance()\n                for label_type in norm_lower:\n                    labeller.label_sample(norm_lower[label_type])\n                    report[\"virustotal\"][\"normalized\"][label_type] = labeller.label\n\n            with open(save_in + \"/\" + f, \"w\") as malware_report_updated: # save_in : '../sample_data/dict'\n                json.dump(report, malware_report_updated)\n"
  },
  {
    "path": "examples/instance.py",
    "content": "# coding=utf-8\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Bold-Falcon - https://github.com/PowerLZY/Bold-Falcon\n# See the file 'docs/LICENSE' for copying permission.\n\nimport collections\nimport datetime\nimport json\nimport sys\nimport time\n\n\nclass Instance(object):\n    \"\"\"Machine Learning (clustering) for Cuckoo.\"\"\"\n    LABEL_SIGNIFICANCE_COUNT = 5\n    POSITIVE_RATE = 2 * LABEL_SIGNIFICANCE_COUNT\n\n    def __init__(self):\n        self.json_path = \"\"\n        self.bin_path = \"\"\n        self.name = \"\"\n        self.report = None\n        self.total = None\n        self.positives = None\n        self.scans = None\n        self.label = None\n        self.features = {}\n        self.basic_features = {}\n\n\n    def load_json(self, json_file, name=\"unknown\"):\n        \"\"\"Load JSON formatted malware report. It can handle both a path to\n        JSON file and a dictionary object.\"\"\"\n        if isinstance(json_file, str):\n            self.json_path = json_file\n            with open(json_file, \"r\") as malware_report:\n                try:\n                    self.report = json.load(malware_report)\n                except ValueError, error:\n                    print >> sys.stderr, \"Could not load file;\", \\\n                        malware_report, \"is not a valid JSON file.\"\n                    print >> sys.stderr, \"Exception: %s\" % str(error)\n                    sys.exit(1)\n        elif isinstance(json_file, dict):\n            self.report = json_file\n        else:\n            # Unknown binary format\n            print >> sys.stderr, \"Could not load the data *\", json, \"* is of \" \\\n                \"unknown type: \", type(json), \".\"\n\n        self.name = name\n\n        # Get total and positives\n        self.total = self.report.get(\"virustotal\").get(\"total\")\n        self.positives = self.report.get(\"virustotal\").get(\"positives\")\n        # Pull all VT normalised results\n        self.scans = self.report.get(\"virustotal\").get(\"scans\")\n\n\n    def label_sample(self, external_labels=None, label_type=\"family\"):\n        \"\"\"\n        为加载的样本生成标签。您可以使用platform、cve、metatype、type和family（默认）\n        Generate label for the loaded sample. You can use platform, cve, metatype, type, and family (default).\n        \"\"\"\n        merged_labels = []\n\n        if external_labels is None and self.scans is not None:\n            for vendor in self.scans:\n                merged_labels += self.scans[vendor][\"normalized\"][label_type]\n        elif external_labels is not None and self.scans is None:\n            merged_labels = external_labels\n\n        if not merged_labels:\n            self.label = \"none\"\n            return\n\n        # Get most common label if it has more hits than set threshold\n        labels_frequency = collections.Counter(merged_labels)\n        top_label, top_label_count = labels_frequency.most_common(1)[0]\n        if top_label_count >= self.LABEL_SIGNIFICANCE_COUNT:\n                # self.positives >= self.POSITIVE_RATE:\n            self.label = top_label.encode(\"ascii\", \"ignore\")\n        else:\n            self.label = \"none\"\n\n\n    def update(self, element, location):\n        \"\"\"Insert `element` at given `location`.\"\"\"\n        element_to_update = self.report\n        for l in location[:-1]:\n            etu = element_to_update.get(l)\n            if etu is None:\n                element_to_update[l] = {}\n                element_to_update = element_to_update.get(l)\n            else:\n                element_to_update = etu\n        element_to_update[location[-1]] = element\n\n\n    def save_json(self, root_dir):\n        \"\"\"Save JSON stored in the class to a file.\"\"\"\n        with open(root_dir+self.name, \"w\") as j_file:\n            json.dump(self.report, j_file)\n\n\n    def extract_features(self):\n        \"\"\"Extract features of the loaded sample.\"\"\"\n        self.extract_features_static()\n        self.extract_features_dynamic()\n\n\n    def extract_features_static(self):\n        \"\"\"Extract static features of the loaded sample.\"\"\"\n        self.feature_static_metadata()\n        self.feature_static_signature()\n        # self.feature_static_heuristic()\n        self.feature_static_string()\n        self.feature_static_packer()\n        self.feature_static_pef()\n        self.feature_static_imports()\n\n\n    def extract_features_dynamic(self):\n        \"\"\"Extract dynamic features of the loaded sample.\"\"\"\n        self.feature_dynamic_imports()\n        self.feature_dynamic_filesystem()\n        self.feature_dynamic_network()\n        self.feature_dynamic_registry()\n        self.feature_dynamic_windowsapi()\n\n\n    def feature_static_metadata(self):\n        \"\"\"Create features form extracted binary metadata.\"\"\"\n        # Get binary size\n        self.features[\"size\"] = self.report.get(\"target\", {}).get(\"file\", {}).get(\"size\")\n\n        # Get binary timestamp in the UNIX timestamp format\n        str_dt = self.report.get(\"static\", {}).get(\"pe_timestamp\")\n        ts = None\n        if str_dt is not None:\n            dt = datetime.datetime.strptime(str_dt, \"%Y-%m-%d %H:%M:%S\")\n            ts = int(time.mktime(dt.timetuple()))\n        self.features[\"timestamp\"] = ts\n\n        # ExifTool output\n        et_tokens = [\"FileDescription\", \"OriginalFilename\"]\n        for token in et_tokens:\n            self.features[token] = None\n        for attr in self.report.get(\"static\", {}).get(\"pe_versioninfo\", []):\n            attr_name = attr.get(\"name\")\n            if attr_name in et_tokens:\n                self.features[attr_name] = attr.get(\"value\")\n\n        # Magic byte\n        self.features[\"magic_byte\"] = \\\n            self.report.get(\"target\", {}).get(\"file\", {}).get(\"type\")\n\n\n    def feature_static_signature(self):\n        \"\"\"Create features form binary signature check.\"\"\"\n        # Check availability of digital signature\n        self.features[\"signed\"] = bool(self.report.get(\"static\", {}).get(\"signature\", []))\n\n\n        # ExifTool output\n        et_tokens = [\"Comments\", \"ProductName\", \"LegalCopyright\", \"InternalName\", \"CompanyName\"]\n        for token in et_tokens:\n            self.features[token] = None\n        for attr in self.report.get(\"static\", {}).get(\"pe_versioninfo\", []):\n            attr_name = attr.get(\"name\")\n            if attr_name in et_tokens:\n                self.features[attr_name] = attr.get(\"value\")\n\n\n    def feature_static_heuristic(self):\n        \"\"\"Create features form results return by heuristic tools.\n        **Not available for current JSON content.**\"\"\"\n        pass\n\n\n    def feature_static_packer(self):\n        \"\"\"Create feature from information returned by packer/cryptor\n        detectors.\"\"\"\n        self.features[\"packer\"] = \\\n            self.report.get(\"static\", {}).get(\"peid_signatures\", None)\n\n\n    def feature_static_pef(self):\n        \"\"\"Create features from information derived form portable executable\n        format.\"\"\"\n        # Get resource languages\n        self.features[\"languages\"] = []\n        for d in self.report.get(\"static\", {}).get(\"pe_resources\", []):\n            lang = d.get(\"language\", False)\n            if lang:\n                if lang.startswith(\"LANG_\"):\n                    lang = lang[5:]\n                else:\n                    lang = lang\n                if lang not in self.features[\"languages\"]:\n                    self.features[\"languages\"].append(lang)\n            sublang = d.get(\"sublanguage\", False)\n            if sublang:\n                if sublang.startswith(\"SUBLANG_\"):\n                    sublang = sublang[8:]\n                else:\n                    sublang = sublang\n                if sublang not in self.features[\"languages\"]:\n                    self.features[\"languages\"].append(sublang)\n\n        # Section and resource attributes\n        self.features[\"section_attrs\"] = {}\n        for d in self.report.get(\"static\", {}).get(\"pe_sections\", []):\n            n = d.get(\"name\")\n            e = d.get(\"entropy\")\n            if n and d:\n                self.features[\"section_attrs\"][n] = e\n        self.features[\"resource_attrs\"] = {}\n        for d in self.report.get(\"static\", {}).get(\"pe_resources\", []):\n            n = d.get(\"name\")\n            f = d.get(\"filetype\")\n            if n and f:\n                self.features[\"resource_attrs\"][n] = f\n\n\n    def feature_static_imports(self):\n        \"\"\"Extract features from static imports like referenced library\n        functions.\"\"\"\n        self.features[\"static_imports\"] = {}\n\n        # Static libraries import count\n        self.features[\"static_imports\"][\"count\"] = \\\n            self.report.get(\"static\", {}).get(\"imported_dll_count\", None)\n\n        # Get all imported libraries\n        for d in self.report.get(\"static\", {}).get(\"pe_imports\", []):\n            ddl_name = d.get(\"dll\")\n            if not ddl_name:\n                continue\n            self.features[\"static_imports\"][ddl_name] = []\n            for i in d.get(\"imports\", []):\n                ref = i.get(\"name\")\n                if ref is not None:\n                    self.features[\"static_imports\"][ddl_name].append(ref)\n\n    def feature_static_string(self):\n        \"\"\"Create Static string list\"\"\"\n        self.features['strings'] = self.report.get(\"strings\", {})\n\n\n    def feature_dynamic_imports(self):\n        \"\"\"Extract features from dynamic imports, mutexes, and processes.\"\"\"\n        # Get mutexes\n        self.features[\"mutex\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}).get(\"mutex\")\n\n        # Get processes names\n        self.features[\"processes\"] = []\n        for p in self.report.get(\"behavior\", {}).get(\"processes\", []):\n            p_name = p.get(\"process_name\")\n            if p_name and p_name not in self.features[\"processes\"]:\n                self.features[\"processes\"].append(p_name)\n\n        # Get dynamically loaded library names\n        self.features[\"dynamic_imports\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"dll_loaded\", [])\n\n\n\n\n    def feature_dynamic_filesystem(self):\n        \"\"\"Extract features from filesystem operations.\"\"\"\n        def flatten_list(structured):\n            \"\"\"Flatten nested list.\"\"\"\n            flat = []\n            for i in structured:\n                flat += i\n            return flat\n\n        # Get file operations and their number\n        self.features[\"file_read\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_read\", [])\n        self.features[\"files_read\"] = len(self.features[\"file_read\"])\n        self.features[\"file_written\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_written\", [])\n        self.features[\"files_written\"] = len(self.features[\"file_written\"])\n        self.features[\"file_deleted\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_deleted\", [])\n        self.features[\"files_deleted\"] = len(self.features[\"file_deleted\"])\n        self.features[\"file_copied\"] = flatten_list(\\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_copied\", [])\n                                                   )\n        self.features[\"files_copied\"] = len(\\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_copied\", [])\n                                            )\n        self.features[\"file_renamed\"] = flatten_list(\\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_moved\", [])\n                                                    )\n        self.features[\"files_renamed\"] = len(self.features[\"file_renamed\"])\n\n        # Get other file operations numbers\n        self.features[\"files_opened\"] = len(\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_opened\", [])\n        )\n        self.features[\"files_exists\"] = len(\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_exists\", [])\n        )\n        self.features[\"files_failed\"] = len(\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_failed\", [])\n        )\n\n        # Get total number of unique touched files\n        file_operations = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_read\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_written\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_deleted\", []) + \\\n            flatten_list(self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_copied\", [])) + \\\n            flatten_list(self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_moved\", [])) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_recreated\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_opened\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_exists\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_failed\", [])\n        # remove duplicates\n        self.features[\"files_operations\"] = len(list(set(file_operations)))\n\n\n    def feature_dynamic_network(self):\n        \"\"\"Extract features from network operations.\"\"\"\n        # Get TCP IP addresses\n        self.features[\"tcp\"] = []\n        for c in self.report.get(\"network\", {}).get(\"tcp\", []):\n            c_dst = c.get(\"dst\")\n            if c_dst and c_dst not in self.features[\"tcp\"]:\n                self.features[\"tcp\"].append(c_dst)\n\n        # Get UDP IPs\n        self.features[\"udp\"] = []\n        for c in self.report.get(\"network\", {}).get(\"udp\", []):\n            c_dst = c.get(\"dst\")\n            if c_dst and c_dst not in self.features[\"udp\"]:\n                self.features[\"udp\"].append(c_dst)\n\n        # Get DNS queries and responses\n        self.features[\"dns\"] = {}\n        for c in self.report.get(\"network\", {}).get(\"dns\", []):\n            request = c.get(\"request\")\n            if request:\n                self.features[\"dns\"][request] = []\n            else:\n                continue\n\n            answers = c.get(\"answers\", [])\n            for a in answers:\n                a_type = a.get(\"type\")\n                a_data = a.get(\"data\")\n                if a_type == \"A\" and a_data:\n                    self.features[\"dns\"][request].append(a_data)\n\n        # Get HTTP requests: method, host, port, path\n        self.features[\"http\"] = {}\n        for c in self.report.get(\"network\", {}).get(\"http\", []):\n            c_data = c.get(\"data\")\n            if c_data:\n                self.features[\"http\"][c_data] = {}\n            else:\n                continue\n\n            c_method = c.get(\"method\")\n            if c_method:\n                self.features[\"http\"][c_data][\"method\"] = c_method\n            c_host = c.get(\"host\")\n            if c_host:\n                self.features[\"http\"][c_data][\"host\"] = c_host\n            c_port = c.get(\"port\")\n            if c_port:\n                self.features[\"http\"][c_data][\"port\"] = c_port\n\n\n    def feature_dynamic_registry(self):\n        \"\"\"Extract features from registry operations.\"\"\"\n        # Registry written\n        self.features[\"regkey_written\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"regkey_written\", [])\n        # Registry delete\n        self.features[\"regkey_deleted\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"regkey_deleted\", [])\n\n\n    def feature_dynamic_windowsapi(self):\n        \"\"\"Extract features from Windows API calls sequence.\"\"\"\n        self.features[\"api_stats\"] = {}\n        apistats = self.report.get(\"behavior\", {}).get(\"apistats\", {})\n        for d in apistats:\n            for e in apistats[d]:\n                if e in self.features[\"api_stats\"]:\n                    self.features[\"api_stats\"][e] += apistats[d][e]\n                else:\n                    self.features[\"api_stats\"][e] = apistats[d][e]\n\n\n    def extract_basic_features(self):\n        \"\"\"Extract very basic set of features from *signatures* JSON field.\n        These are extracted characteristics of the binary by cuckoo sandbox.\"\"\"\n        if self.basic_features:\n            self.basic_features = {}\n\n        for s in self.report.get(\"signatures\", []):\n            name = s.get(\"name\", \"\")\n            description = s.get(\"description\", \"\")\n            if name:\n                self.basic_features[name] = description\n                continue\n            if description:\n                self.basic_features[hash(description)] = description"
  },
  {
    "path": "examples/loader.py",
    "content": "# coding=utf-8\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Bold-Falcon - https://github.com/PowerLZY/Bold-Falcon\n# See the file 'docs/LICENSE' for copying permission.\n\n\nimport os\nimport pandas as pd\nfrom instance import Instance\n\n\nclass Loader(object):\n    \"\"\"Loads instances for analysis and give possibility to extract properties of interest.\"\"\"\n    def __init__(self):\n        self.binaries = {}\n        self.binaries_location = \"\"\n        self.binaries_updated = False\n\n\n    def load_binaries_dir(self, directory):\n        \"\"\"Load all binaries' reports from given directory.\"\"\"\n        self.binaries_location = directory + \"/\"\n        # 导入整个文件夹的json\n        for f in os.listdir(directory):\n            self.binaries[f] = Instance()\n            self.binaries[f].load_json(directory+\"/\"+f, f)\n            self.binaries[f].label_sample()\n            self.binaries[f].extract_features()\n            self.binaries[f].extract_basic_features()\n\n    def update_binaries(self, elements, root, locations):\n        \"\"\"在给定的位置将“elements”附加到加载的json\"\"\"\n        if isinstance(elements, pd.DataFrame) and isinstance(locations, dict):\n            self.binaries_updated = True\n            for i in elements.index:\n                for j in elements.columns:\n                    self.binaries[i].update(elements[j][i], root+[locations[j]])\n        elif isinstance(locations, str):\n            self.binaries_updated = True\n            for i in self.binaries:\n                self.binaries[i].update(elements, root+[locations])\n\n\n    def save_binaries(self, alternative_location=\"\"):\n        \"\"\"Save the binaries to given location if they have been updated.\"\"\"\n        if self.binaries_updated:\n            save_location = self.binaries_location\n            if alternative_location:\n                save_location = alternative_location\n                if save_location[-1] != \"/\":\n                    save_location += \"/\"\n\n            # Create directory if it does not exist\n            if not os.path.exists(save_location):\n                os.makedirs(save_location)\n\n            for f in self.binaries:\n                self.binaries[f].save_json(save_location)\n            self.binaries_updated = False\n        else:\n            print \"The binaries haven't been updated. No need to save them.\"\n\n\n    def get_labels(self):\n        \"\"\"Return binary labels as a labelled dictionary.\"\"\"\n        labels = {}\n        for i in self.binaries:\n            labels[i] = self.binaries[i].label\n        return labels\n\n\n    def get_features(self):\n        \"\"\"Return complex binary features as a labelled dictionary.\"\"\"\n        features = {}\n        for i in self.binaries:\n            features[i] = self.binaries[i].features\n        return features\n\n\n    def get_simple_features(self):\n        \"\"\"Return simplified binary features as a labelled dictionary.\"\"\"\n        simple_features = {}\n        for i in self.binaries:\n            simple_features[i] = self.binaries[i].basic_features\n        return simple_features"
  },
  {
    "path": "examples/ml.py",
    "content": "# coding=utf-8\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Bold-Falcon - https://github.com/PowerLZY/Bold-Falcon\n# See the file 'docs/LICENSE' for copying permission.\n\nimport collections\nimport itertools\nimport os\nimport re\nfrom math import log\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns\nfrom hdbscan import HDBSCAN\nfrom sklearn import metrics\nfrom sklearn.cluster import DBSCAN\nfrom sklearn.manifold import TSNE\n\nfrom instance import Instance\nfrom loader import Loader\n\nclass ML(object):\n    \"\"\"Feature formatting and machine learning for Cuckoo analysed binaries.\n    All functions marked with asterisk (*) were inspired by code distributed\n    with \"Back to the Future: Malware Detection with Temporally Consistent\n    Labels\" by Brad Miller at al.\"\"\"\n    SIMPLE_CATEGORIES = {\n        \"properties\": [\n            \"has_authenticode\",\n            \"has_pdb\",\n            \"pe_features\",\n            \"packer_upx\",\n            \"has_wmi\"\n        ],\n        \"behaviour\": [\n            \"dumped_buffer2\",\n            \"suspicious_process\",\n            \"persistence_autorun\",\n            \"raises_exception\",\n            \"sniffer_winpcap\",\n            \"injection_runpe\",\n            \"dumped_buffer\",\n            \"exec_crash\",\n            \"creates_service\",\n            \"allocates_rwx\"\n        ],\n        \"exploration\": [\n            \"recon_fingerprint\",\n            \"antidbg_windows\",\n            \"locates_sniffer\"\n        ],\n        \"mutex\": [\n            \"ardamax_mutexes\",\n            \"rat_xtreme_mutexes\",\n            \"bladabindi_mutexes\"\n        ],\n        \"networking\": [\n            \"network_bind\",\n            \"networkdyndns_checkip\",\n            \"network_http\",\n            \"network_icmp\",\n            \"recon_checkip\",\n            \"dns_freehosting_domain\",\n            \"dns_tld_pw\",\n            \"dns_tld_ru\"\n        ],\n        \"filesystem\": [\n            \"modifies_files\",\n            \"packer_polymorphic\",\n            \"creates_exe\",\n            \"creates_doc\"\n        ],\n        \"security\": [\n            \"rat_xtreme\",\n            \"disables_security\",\n            \"trojan_redosru\",\n            \"worm_renocide\",\n            \"antivirus_virustotal\"\n        ],\n        \"virtualisation\": [\n            \"antivm_vbox_files\",\n            \"antivm_generic_bios\",\n            \"antivm_vmware_keys\",\n            \"antivm_generic_services\",\n            \"antivm_vmware_files\",\n            \"antivm_sandboxie\",\n            \"antivm_vbox_keys\",\n            \"antivm_generic_scsi\",\n            \"antivm_vmware_in_instruction\",\n            \"antivm_generic_disk\",\n            \"antivm_virtualpc\"\n        ],\n        \"sanbox\": [\n            \"antisandbox_unhook\",\n            \"antisandbox_mouse_hook\",\n            \"antisandbox_foregroundwindows\",\n            \"antisandbox_productid\",\n            \"antisandbox_idletime\",\n            \"antisandbox_sleep\"\n        ],\n        \"infostealer\": [\n            \"infostealer_browser\",\n            \"infostealer_mail\",\n            \"infostealer_keylogger\",\n            \"infostealer_ftp\",\n        ],\n        \"ransomware\": [\n            \"ransomware_files\",\n            \"ransomware_bcdedit\"\n        ]\n    }\n\n    CATEGORIES = {\n        \"static\": {\n            \":meta:\": [\n                \"\",\n                \"size\",\n                \"timestamp\"\n            ],\n            \":sign:\": [\n                \"\",\n                \"signed\"\n            ],\n            \":heur:\": [\n                \"\"\n            ],\n            \":pack:\": [\n                \"\"\n            ],\n            \":pef:\": [\n                \"lang:\"\n            ],\n            \":simp:\": [\n                \"\",\n                \"count\"\n            ]\n        },\n        \"dynamic\": {\n            \":dimp:\": [\n                \"\",\n                \"proc:\",\n                \"mutex:\"\n            ],\n            \":file:\": {\n                \"touch:\": [\n                    \"\"\n                ],\n                \"count:\": [\n                    \"\",\n                    \"all\",\n                    \"read\",\n                    \"written\",\n                    \"deleted\",\n                    \"copied\",\n                    \"renamed\",\n                    \"opened\",\n                    \"exists\",\n                    \"failed\"\n                ]\n            },\n            \":net:\": [\n                \"\"\n            ],\n            \":reg:\": [\n                \"\",\n                \"write:\",\n                \"del:\"\n            ],\n            \":win:\": [\n                \"\"\n            ]\n        },\n        \"counts\": {\n            \":count:\": {\n                \"lang\": [\"\"],\n                \"simp\": [\n                    \"\",\n                    \":\"\n                ],\n                \"proc\": [\"\"],\n                \"dimp\": [\"\"],\n                \"file:\": [\n                    \"\",\n                    \"all\",\n                    \"read\",\n                    \"written\",\n                    \"deleted\",\n                    \"copied\",\n                    \"renamed\",\n                    \"opened\",\n                    \"exists\",\n                    \"failed\"\n                ],\n                \"tcp\": [\"\"],\n                \"udp\": [\"\"],\n                \"dns\": [\"\"],\n                \"http\": [\"\"],\n                \"reg:\": [\n                    \"\",\n                    \"write\",\n                    \"del\"\n                ],\n                \"wapi\": [\"\"]\n            }\n        }\n    }\n\n    PATTERNS = [r\"Armadillo\", r\"PECompact\", r\"ASPack\", r\"ASProtect\",\n                r\"Upack\", r\"U(PX|px)\", r\"FSG\", r\"BobSoft Mini Delphi\",\n                r\"InstallShield 2000\", r\"InstallShield Custom\",\n                r\"Xtreme\\-Protector\", r\"Crypto\\-Lock\", r\"MoleBox\", r\"Dev\\-C\\+\\+\",\n                r\"StarForce\", r\"Wise Installer Stub\", r\"SVK Protector\",\n                r\"eXPressor\", r\"EXECryptor\", r\"N(s|S)Pac(k|K)\", r\"KByS\",\n                r\"themida\", r\"Packman\", r\"EXE Shield\", r\"WinRAR 32-bit SFX\",\n                r\"WinZip 32-bit SFX\", r\"Install Stub 32-bit\", r\"P(E|e)tite\",\n                r\"PKLITE32\", r\"y(o|0)da's (Protector|Crypter)\", r\"Ste@lth PE\",\n                r\"PE\\-Armor\", r\"KGB SFX\", r\"tElock\", r\"PEBundle\", r\"Crunch\\/PE\",\n                r\"Obsidium\", r\"nPack\", r\"PEX\", r\"PE Diminisher\",\n                r\"North Star PE Shrinker\", r\"PC Guard for Win32\", r\"W32\\.Jeefo\",\n                r\"MEW [0-9]+\", r\"InstallAnywhere\", r\"Anskya Binder\",\n                r\"BeRoEXEPacker\", r\"NeoLite\", r\"SVK\\-Protector\",\n                r\"Ding Boy's PE\\-lock Phantasm\", r\"hying's PEArmor\", r\"E language\",\n                r\"NSIS Installer\", r\"Video\\-Lan\\-Client\", r\"EncryptPE\",\n                r\"HASP HL Protection\", r\"PESpin\", r\"CExe\", r\"UG2002 Cruncher\",\n                r\"ACProtect\", r\"Thinstall\", r\"DBPE\", r\"XCR\", r\"PC Shrinker\",\n                r\"AH(p|P)ack\", r\"ExeShield Protector\",\n                r\"\\* \\[MSLRH\\]\", r\"XJ \\/ XPAL\", r\"Krypton\", r\"Stealth PE\",\n                r\"Goats Mutilator\", r\"PE\\-PACK\", r\"RCryptor\", r\"\\* PseudoSigner\",\n                r\"Shrinker\", r\"PC-Guard\", r\"PELOCKnt\", r\"WinZip \\(32\\-bit\\)\",\n                r\"EZIP\", r\"PeX\", r\"PE( |\\-)Crypt\", r\"E(XE|xe)()?Stealth\",\n                r\"ShellModify\", r\"Macromedia Windows Flash Projector\\/Player\",\n                r\"WARNING ->\", r\"PE Protector\", r\"Software Compress\",\n                r\"PE( )?Ninja\", r\"Feokt\", r\"RLPack\",\n                r\"Nullsoft( PIMP)? Install System\", r\"SDProtector Pro Edition\",\n                r\"VProtector\", r\"WWPack32\", r\"CreateInstall Stub\", r\"ORiEN\",\n                r\"dePACK\", r\"ENIGMA Protector\", r\"MicroJoiner\", r\"Virogen Crypt\",\n                r\"SecureEXE\", r\"PCShrink\", r\"WinZip Self\\-Extractor\",\n                r\"PEiD\\-Bundle\", r\"DxPack\", r\"Freshbind\", r\"kkrunchy\"]\n\n    def __init__(self, context=\"standalone\"):\n        \"\"\"The context variable defines type of operation for the functions\n        using visualisations. *standalone* saves figures as files, *notebook*\n        displays them.\"\"\"\n        self.context = context  # 'notebook' 预留接口在jupyter显示\n        self.labels = None\n        self.simple_features = None\n        self.simple_features_description = {}\n        self.features = None\n        self.clustering = {}\n\n    def __log_bin(self, value, base=3):\n        \"\"\"Return a logarithmic bin of given value. * \"\"\"\n        if value is None:\n            return None\n\n        # Add base -1 to count so that 0 is in its own bin\n        return int(log(value + base - 1, base))\n\n    def __normalise_string(self, string):\n        \"\"\"Get lower case string representation. * \"\"\"\n        if string is None:\n            return None\n\n        return string.lower()\n\n    def __simplify_string(self, string, distinguish_voyels=False):\n        \"\"\"Returns a simplified representation of the string where characters\n        are mapped to their representatives. * \"\"\"\n        if string is None:\n            return None\n\n        nums = re.compile(r\"[0-9]\")\n        caps = re.compile(r\"[A-Z]\")\n        smal = re.compile(r\"[a-z]\")\n        caps_c = re.compile(r\"[QWRTPSDFGHJKLZXCVBNM]\")\n        caps_v = re.compile(r\"[EYUIOA]\")\n        smal_c = re.compile(r\"[qwrtpsdfghjklzxcvbnm]\")\n        smal_v = re.compile(r\"[eyuioa]\")\n\n        string = nums.sub('0', string)\n\n        if distinguish_voyels:\n            string = caps_c.sub('B', string)\n            string = caps_v.sub('A', string)\n            string = smal_c.sub('b', string)\n            string = smal_v.sub('a', string)\n            return string\n\n        string = caps.sub('A', string)\n        string = smal.sub('a', string)\n        return string\n\n    def __n_grams(self, string, n=3, reorder=False):\n        \"\"\"Returns a *set* of n-grams. If the iterable is smaller than n, it is\n        returned itself. * \"\"\"\n        if string is None:\n            return None\n\n        if len(string) <= n:\n            if reorder:\n                return set([\"\".join(sorted(string))])\n            return set([string])\n\n        ngrams = set()\n        for i in range(0, len(string) - n + 1):\n            if reorder:\n                ngrams.add(\"\".join(sorted(string[i:i + n])))\n            else:\n                ngrams.add(string[i:i + n])\n\n        return ngrams\n\n    def __handle_string(self, string):\n        \"\"\"Apply normalisation, simplification and n-gram extraction to a\n        string. If the string is missing (None) return empty list.\"\"\"\n        handled = self.__n_grams(\n            self.__simplify_string(\n                self.__normalise_string(string)\n            )\n        )\n        if handled is None:\n            return []\n        else:\n            return handled\n\n    def extract_labels(self, labels):\n        \"\"\"Extract labels into pandas data frame.\"\"\"\n        return pd.DataFrame(labels, index=[\"label\"]).T\n\n    def load_labels(self, labels):\n        \"\"\"Load labels into pandas data frame.\"\"\"\n        self.labels = self.extract_labels(labels)\n\n    # 提取简单特征\n    def extract_simple_features(self, simple_features):\n        \"\"\"Extract simple features form an external object into pandas data\n        frame.\"\"\"\n        simple_features = pd.DataFrame(simple_features).T  # transpose\n        simple_features.fillna(False, inplace=True)\n        # Convert to bool: True/False\n        simple_features = simple_features.astype(bool)\n        # Change to int: 1/0\n        simple_features = simple_features.astype(int)\n\n        # Aggregate features descriptions\n        simple_features_description = {}\n        for binary in simple_features:\n            for token in simple_features[binary]:\n                if token not in simple_features_description:\n                    simple_features_description[token] = \\\n                        simple_features[binary][token]\n\n        return simple_features, simple_features_description\n\n    def load_simple_features(self, simple_features):\n        \"\"\"Load simple features form an external object into pandas data\n        frame.\"\"\"\n        self.simple_features, self.simple_features_description = \\\n            self.extract_simple_features(simple_features)\n\n    def export_simple_dataset(self, filename=\"simple_dataset.csv\"):\n        \"\"\"Export a dataset consisting of malware labels and *simple* features to CSV formatted file.\"\"\"\n        # Check if data and labels are loaded\n        if self.simple_features is None:\n            print \"Please load simple features first.\"\n            return\n\n        if self.labels is None:\n            print \"Please load labels first.\"\n            return\n\n        simple_dataset = pd.concat([self.simple_features, self.labels], axis=1)\n        simple_dataset.to_csv(filename)\n\n    def simple_feature_category(self, category=\"properties\"):\n        \"\"\"Get simple feature data frame containing only features form selected category.\"\"\"\n        if self.simple_features is None:\n            print \"Simple features are not loaded. Please load them before \\\n                   extracting categories.\"\n            return None\n\n        return self.simple_features.loc[:, self.SIMPLE_CATEGORIES[category]]\n\n    # 提取完整特征\n    def extract_features(self, features, include_API_calls=False, include_API_calls_count=False):\n        \"\"\"Extract features form an external object into pandas data frame.\"\"\"\n        my_features = {}\n        for i in features:\n            my_features[i] = {}\n\n            # Exponentially bin the binary size and timestamp\n            my_features[i][\":meta:size\"] = self.__log_bin(features[i][\"size\"])\n            my_features[i][\":meta:timestamp\"] = \\\n                self.__log_bin(features[i][\"timestamp\"])\n\n            # Handle ExifTool output\n            exif = [\"FileDescription\", \"OriginalFilename\", \"magic_byte\"]\n            for e in exif:\n                for j in self.__handle_string(features[i][e]):\n                    my_features[i][\":meta:\" + j] = 1\n\n            # Is the binary signed?\n            my_features[i][\":sign:signed\"] = int(features[i][\"signed\"])\n            # And other signature features\n            signature = [\"Comments\", \"ProductName\", \"LegalCopyright\",\n                         \"InternalName\", \"CompanyName\"]\n            for s in signature:\n                for j in self.__handle_string(features[i][s]):\n                    my_features[i][\":sign:\" + j] = 1\n\n            # Extract packer\n            regexps = [re.compile(pattern) for pattern in self.PATTERNS]\n            if features[i][\"packer\"] is not None:\n                for packer in features[i][\"packer\"]:\n                    for regexp in regexps:\n                        if regexp.search(packer):\n                            my_features[i][\":pack:\" + regexp.pattern] = 1\n                            break\n\n            # Vectorise PEFs\n            for j in features[i][\"languages\"]:\n                j_norm = self.__normalise_string(j)\n                my_features[i][\":pef:lang:\" + j_norm] = 1\n            # Get number of languages\n            my_features[i][\":count:lang\"] = len(features[i][\"languages\"])\n            # TODO: handle *section_attrs* and *resource_attrs*\n\n            # Categorise static imports\n            # TODO: use binning for this count\n            my_features[i][\":simp:count\"] = \\\n                features[i][\"static_imports\"][\"count\"]\n            static_imports_dlls = features[i][\"static_imports\"].keys()\n            static_imports_dlls.remove(\"count\")\n            # Count static imports\n            my_features[i][\":count:simp\"] = len(static_imports_dlls)\n            for j in static_imports_dlls:\n                my_features[i][\":simp:\" + j] = 1\n                # TODO: include API calls?\n                if include_API_calls:\n                    for k in features[i][\"static_imports\"][j]:\n                        my_features[i][\":simp:\" + j + \":\" + k] = 1\n                # Count static imports API calls\n                if include_API_calls_count:\n                    my_features[i][\":count:simp:\" + j] = \\\n                        len(features[i][\"static_imports\"][j])\n\n            # Categorise dynamic imports\n            if features[i][\"mutex\"] is not None:\n                for mutex in features[i][\"mutex\"]:\n                    for j in self.__handle_string(mutex):\n                        my_features[i][\":dimp:mutex:\" + j] = 1\n                # Count mutexes\n                my_features[i][\":count:mutex\"] = len(features[i][\"mutex\"])\n            for process in features[i][\"processes\"]:\n                my_features[i][\":dimp:proc:\" + process] = 1\n            # Count processes\n            my_features[i][\":count:proc\"] = len(features[i][\"processes\"])\n            for di in features[i][\"dynamic_imports\"]:\n                my_features[i][\":dimp:\" + di] = 1\n            # Count dynamic imports\n            my_features[i][\":count:dimp\"] = \\\n                len(features[i][\"dynamic_imports\"])\n\n            # File operations\n            # TODO: tell apart different file operations by prefixing\n            # Files touched\n            touch = [\"file_read\", \"file_written\", \"file_deleted\", \"file_copied\",\n                     \"file_renamed\"]\n            for t in touch:\n                for f in features[i][t]:\n                    my_features[i][\":file:touch:\" + f] = 1\n            # TODO: better binning (linear not logarithmic)\n            # File numbers\n            operation_number = [(\"all\", \"files_operations\"),\n                                (\"read\", \"files_read\"),\n                                (\"written\", \"files_written\"),\n                                (\"deleted\", \"files_deleted\"),\n                                (\"copied\", \"files_copied\"),\n                                (\"renamed\", \"files_renamed\"),\n                                (\"opened\", \"files_opened\"),\n                                (\"exists\", \"files_exists\"),\n                                (\"failed\", \"files_failed\")]\n            for o in operation_number:\n                my_features[i][\":file:count:\" + o[0]] = \\\n                    self.__log_bin(features[i][o[1]])\n                my_features[i][\":count:file:\" + o[0]] = \\\n                    features[i][o[1]]\n\n            # Networking\n            # TODO: include subnets\n            # TODO: tell apart type of connection: prefix features with \"tcp\",\n            #       \"udp\", \"dns\"\n            for tcp in features[i][\"tcp\"]:\n                my_features[i][\":net:\" + tcp] = 1\n            for udp in features[i][\"udp\"]:\n                my_features[i][\":net:\" + udp] = 1\n            for dns in features[i][\"dns\"]:\n                my_features[i][\":net:\" + dns] = 1\n                for j in features[i][\"dns\"][dns]:\n                    my_features[i][\":net:\" + j] = 1\n            for http in features[i][\"http\"]:\n                my_features[i][\":net:\" + features[i][\"http\"][http][\"host\"]] \\\n                    = 1\n            # Count tcp addresses\n            my_features[i][\":count:tcp\"] = len(features[i][\"tcp\"])\n            # Count udp addresses\n            my_features[i][\":count:udp\"] = len(features[i][\"udp\"])\n            # Count dns addresses\n            my_features[i][\":count:dns\"] = len(features[i][\"dns\"])\n            # Count http addresses\n            my_features[i][\":count:http\"] = len(features[i][\"http\"])\n\n            # Register operations\n            for rw in features[i][\"regkey_written\"]:\n                my_features[i][\":reg:write:\" + rw] = 1\n            # Count register keys written\n            my_features[i][\":count:reg:write\"] = \\\n                len(features[i][\"regkey_written\"])\n            for rd in features[i][\"regkey_deleted\"]:\n                my_features[i][\":reg:del:\" + rd] = 1\n            # Count register keys written\n            my_features[i][\":count:reg:del\"] = \\\n                len(features[i][\"regkey_deleted\"])\n\n            # Windows API\n            # TODO: better binning (linear not logarithmic)\n            for wapi in features[i][\"api_stats\"]:\n                my_features[i][\":win:\" + wapi] = \\\n                    self.__log_bin(features[i][\"api_stats\"][wapi])\n            # Count Windows API calls\n            my_features[i][\":count:wapi\"] = len(features[i][\"api_stats\"])\n\n        # Make Pandas DataFrame from the dictionary\n        features_pd = pd.DataFrame(my_features).T\n        # TODO: the operation below cannot tell apart missing vales and None\n        features_pd.fillna(0, inplace=True)\n        return features_pd\n\n    def load_features(self, features, include_API_calls=False, include_API_calls_count=False):\n        \"\"\"Load features form an external object into pandas data frame.\"\"\"\n\n        self.features = self.extract_features(features, include_API_calls, include_API_calls_count)\n\n    def export_dataset(self, filename=\"dataset.csv\"):\n        \"\"\"Export a dataset consisting of malware labels and features to CSV formatted file.\"\"\"\n        # Check if data and labels are loaded\n        if self.features is None:\n            print \"Please load features first.\"\n            return\n\n        if self.labels is None:\n            print \"Please load labels first.\"\n            return\n\n        dataset = pd.concat([self.features, self.labels], axis=1)\n        dataset.to_csv(filename, encoding='utf-8')\n\n    def feature_category(self, category=\"static\", complement=False):\n        \"\"\"Get feature data frame containing only features form selected category (or their complement).\"\"\"\n\n        def pull_names(obj, prefix=\"\"):\n            ret = []\n            if isinstance(obj, dict):\n                if prefix: ret.append(prefix)\n                for key in obj:\n                    ret += pull_names(obj[key], prefix + key)\n                return ret\n            elif isinstance(obj, list):\n                for i in obj:\n                    ret.append(prefix + i)\n                return ret\n\n        if self.features is None:\n            print \"Features are not loaded. Please load them before extracting \\\n                   categories.\"\n            return None\n\n        # Pull all possible categories\n        categories = self.CATEGORIES.keys()\n        for cat in self.CATEGORIES:\n            categories += pull_names(self.CATEGORIES[cat])\n\n        # Check if chosen category is available\n        if category not in categories:\n            print \"Chosen category:\", category, \"is not available.\\n\\\n                   please choose one of the following:\"\n            print \", \".join(categories)\n            return None\n\n        # Get a list of specified prefixes\n        if category == \"static\" or category == \"dynamic\" or category == \"count\":\n            category = pull_names(category)\n        else:\n            category = [category]\n\n        extract = []\n        # TODO: what if we want exact match but most starts with word\n        for col in self.features:\n            for c in category:\n                if complement and not col.startswith(c):\n                    extract.append(col)\n                elif not complement and col.startswith(c):\n                    extract.append(col)\n\n        return self.features.loc[:, extract]\n\n    def filter_dataset(self, dataset=None, feature_coverage=0.1,\n                       complement=False):\n        \"\"\"Prune features that are useless.\"\"\"\n        if dataset is None:\n            dataset = self.features.copy()\n\n        # Remove sparse features\n        row_count = dataset.shape[0]\n        remove_features = []\n        for col in dataset:\n            zero_count = 0.0\n            for row in dataset[col]:\n                if not row:\n                    zero_count += 1\n            # XOR\n            if complement != (row_count - zero_count) / row_count < feature_coverage:\n                remove_features.append(col)\n        dataset.drop(remove_features, axis=1, inplace=True)\n\n        return dataset\n\n    def detect_abnormal_behaviour(self, count_dataset=None, figures=True):\n        \"\"\"Detect samples that behave significantly different than others.\"\"\"\n        if count_dataset is None:\n            # Pull all count features\n            count_features = self.feature_category(\":count:\")\n            meta_size = self.feature_category(\":meta:size\")\n            simp_count = self.feature_category(\":simp:count\")\n            count_dataset = pd.concat([count_features, meta_size, simp_count], axis=1)\n\n        if not figures:\n            ret = {}\n        for f in count_dataset:\n            # Produce boxplots\n            if figures:\n                sns.boxplot(count_dataset[f])\n                sns.swarmplot(count_dataset[f], color=\".25\")\n                plt.title(\"Abnormal behaviour detection for \" + f)\n                if self.context == \"notebook\":\n                    plt.show()\n                else:\n                    plt.savefig(\"abnormal_behaviour_\" + f.replace(\":\", \"_\") + \\\n                                \".png\")\n                    plt.close()\n\n            # Get list of local outliers\n            f_1_quartile = count_dataset[f].quantile(0.25)\n            f_3_quartile = count_dataset[f].quantile(0.75)\n            f_IQR = f_3_quartile - f_1_quartile\n            f_outliers = []\n            f_suspected_outliers = []\n            for s in count_dataset[f].index:\n                if count_dataset[f][s] > f_3_quartile + 3 * f_IQR or \\\n                        count_dataset[f][s] < f_1_quartile - 3 * f_IQR:\n                    f_outliers.append(s)\n                    continue\n                if count_dataset[f][s] > f_3_quartile + 1.5 * f_IQR or \\\n                        count_dataset[f][s] < f_1_quartile - 1.5 * f_IQR:\n                    f_suspected_outliers.append(s)\n            if figures:\n                print f\n                print \"Outliers: \", \", \".join(f_outliers)\n                print \"Suspected outliers: \", \", \".join(f_suspected_outliers)\n                print \"------------------------------------------------------------\"\n            else:\n                ret[f] = {\"outliers\": f_outliers,\n                          \"suspect_outliers\": f_suspected_outliers}\n        if not figures:\n            return pd.DataFrame(ret).T\n\n    def visualise_data(self, data=None, labels=None, learning_rate=200,\n                       fig_name=\"custom\"):\n        \"\"\"Create t-Distributed Stochastic Neighbor Embedding for features and\n        labels to help inspect the data.\"\"\"\n        if data is None:\n            data = self.features\n        if labels is None:\n            labels = self.labels\n\n        tsne = TSNE(learning_rate=learning_rate)\n        tsne_fit = tsne.fit_transform(data)\n        tsne_df = pd.DataFrame(tsne_fit, index=data.index, columns=['0', '1'])\n        tsne_dfl = pd.concat([tsne_df, labels], axis=1)\n\n        sns.lmplot(\"0\", \"1\", data=tsne_dfl, fit_reg=False, hue=\"label\",\n                   scatter_kws={\"marker\": \"D\", \"s\": 50}, legend_out=True)\n        plt.title(fig_name + \" (lr:\" + str(learning_rate) + \")\")\n        if self.context == \"notebook\":\n            plt.show()\n        else:\n            plt.savefig(fig_name + \"_\" + str(learning_rate) + \".png\",\n                        bbox_inches='tight', pad_inches=1.)\n            plt.close()\n\n    def save_dataset(self, filename=\"custom_dataset.csv\", features=None, \\\n                     labels=None):\n        \"\"\"Export a dataset to CSV formatted file.\"\"\"\n        # Check if data and labels are loaded\n        if features is None:\n            print \"You must indicate data to be saved.\"\n            return\n\n        if labels is None:\n            print \"You didn't indicate labels to be used. Internal labels will \\\n                   be used.\"\n            if self.labels is None:\n                print \"Internal labels not available.\"\n                return\n            else:\n                labels = self.labels\n\n        dataset = pd.concat([features, labels], axis=1)\n        dataset.to_csv(filename, encoding='utf-8')\n\n    # ToDo: load_model(self, model_path)\n    # ToDo: predict()\n\n    # 聚类和异常检测\n    def cluster_dbscan(self, features=None, eps=20.0, min_samples=5, dry=False):\n        \"\"\"Do *dbscan* clustering and return \"\"\"\n        if features is None:\n            print \"You didn't indicate features to be used. Internal features \\\n                will be used.\"\n            if self.features is None:\n                print \"Internal features not available.\"\n                return\n            else:\n                features = self.features\n\n        dbscan = DBSCAN(eps=eps, min_samples=min_samples).fit(features)\n\n        # TODO: Allow storing multiple clustering results based on parameters\n        if dry:\n            return {\n                \"eps\": eps,\n                \"min_samples\": min_samples,\n                \"clustering\": pd.DataFrame(dbscan.labels_, index=features.index,\n                                           columns=[\"label\"])\n            }\n        else:\n            # if \"dbscan\" not in self.clustering:\n            # self.clustering[\"dbscan\"] = {}\n            # clustering_hash = \"eps:%f&min_samples:%d\" % (eps, min_samples)\n            self.clustering[\"dbscan\"] = {\n                # self.clustering[\"dbscan\"][clustering_hash] = {\n                \"eps\": eps,\n                \"min_samples\": min_samples,\n                \"clustering\": pd.DataFrame(dbscan.labels_, index=features.index,\n                                           columns=[\"label\"])\n            }\n\n    def cluster_hdbscan(self, features=None, min_samples=1, \\\n                        min_cluster_size=6, dry=False):\n        \"\"\"Do *hdbscan* clustering and return \"\"\"\n        if features is None:\n            print \"You didn't indicate features to be used. Internal features \\\n                will be used.\"\n            if self.features is None:\n                print \"Internal features not available.\"\n                return\n            else:\n                features = self.features\n\n        hdbscan = HDBSCAN(min_samples=min_samples, \\\n                          min_cluster_size=min_cluster_size)\n        hdbscan_fit = hdbscan.fit(features)\n        hdbscan_stats = np.column_stack([hdbscan_fit.labels_,\n                                         hdbscan_fit.probabilities_,\n                                         hdbscan_fit.outlier_scores_])\n\n        # TODO: Allow storing multiple clustering results based on parameters\n        if dry:\n            return {\n                \"min_samples\": min_samples,\n                \"min_cluster_size\": min_cluster_size,\n                \"clustering\": pd.DataFrame(hdbscan_stats, index=features.index,\n                                           columns=[\"label\", \"probability\",\n                                                    \"outlier_score\"])\n            }\n        else:\n            # if \"hdbscan\" not in self.clustering:\n            # self.clustering[\"hdbscan\"] = {}\n            # clustering_hash = \"min_samples:%s&min_cluster_size:%d\" % \\\n            # (min_samples, min_cluster_size)\n            # self.clustering[\"hdbscan\"][clustering_hash] = {\n            self.clustering[\"hdbscan\"] = {\n                \"min_samples\": min_samples,\n                \"min_cluster_size\": min_cluster_size,\n                \"clustering\": pd.DataFrame(hdbscan_stats, index=features.index,\n                                           columns=[\"label\", \"probability\",\n                                                    \"outlier_score\"])\n            }\n\n    def save_clustering_results(self, loader, save_location=\"\"):\n        \"\"\"Update JSONs report files with clustering results\"\"\"\n        # TODO: Allow storing multiple clustering results based on parameters\n        hdbscan_root = [\"info\", \"clustering\", \"hdbscan\"]\n        hdbscan_paths = {\"label\": \"clusterID\",\n                         \"probability\": \"clusterProbability\",\n                         \"outlier_score\": \"outlierScore\"}\n        if \"hdbscan\" in self.clustering:\n            loader.update_binaries(self.clustering[\"hdbscan\"][\"clustering\"],\n                                   hdbscan_root, hdbscan_paths)\n            loader.update_binaries(self.clustering[\"hdbscan\"][\"min_samples\"],\n                                   hdbscan_root, \"min_samples\")\n            loader.update_binaries(\n                self.clustering[\"hdbscan\"][\"min_cluster_size\"], hdbscan_root,\n                \"min_cluster_size\")\n\n        dbscan_root = [\"info\", \"clustering\", \"dbscan\"]\n        dbscan_paths = {\"label\": \"clusterID\"}\n        if \"dbscan\" in self.clustering:\n            loader.update_binaries(self.clustering[\"dbscan\"][\"clustering\"],\n                                   dbscan_root, dbscan_paths)\n            loader.update_binaries(self.clustering[\"dbscan\"][\"eps\"],\n                                   dbscan_root, \"eps\")\n            loader.update_binaries(self.clustering[\"dbscan\"][\"min_samples\"],\n                                   dbscan_root, \"min_samples\")\n\n        loader.save_binaries(save_location)\n\n    def anomaly_detection(self, samples=None, labels=None,\n                          probability_threshold=0.9, outlier_threshold=0.5,\n                          homogeneity_threshold=0.2):\n        \"\"\"Detect anomalies in clustering using samples classified as noise and\n        low probability cluster membership.\"\"\"\n        if \"hdbscan\" not in self.clustering:\n            print \"Soft clustering is needed for *anomaly detection*.\", \\\n                \"Currently only *HDBSCAN* is supported.\"\n            return\n\n        if labels is None:\n            labels = self.labels\n        if samples is None:\n            samples = self.clustering[\"hdbscan\"][\"clustering\"]\n        sample = samples.copy()\n        sample.rename(columns={\"label\": \"cluster\"}, inplace=True)\n        sample = pd.concat([sample, labels], axis=1)\n\n        anomalies = {}\n\n        anomalies[\"outliers\"] = sample[sample.cluster == -1].index.tolist()\n        # TODO: cluster ID and samples most similar to given outlier\n\n        # Clustered as X but below threshold\n        anomalies[\"low_probability\"] = \\\n            sample.loc[sample.probability < probability_threshold] \\\n                .loc[sample.cluster != -1].index.tolist()\n\n        # High outlier score\n        anomalies[\"high_outlier_score\"] = \\\n            sample.loc[sample.outlier_score > outlier_threshold] \\\n                .loc[sample.cluster != -1].index.tolist()\n\n        # Within cluster inconsistencies - detect non-homogeneous clusters\n        anomalies[\"homogeneity_suspects\"] = {}\n        for i in set(sample[\"cluster\"].tolist()):\n            c = collections.Counter(\n                sample[sample.cluster == i][\"label\"].tolist())\n            total = float(sum(c.values()))\n            suspicious = [j for j in c if c[j] / total < homogeneity_threshold]\n\n            anomalies[\"homogeneity_suspects\"][i] = []\n            for j in suspicious:\n                anomalies[\"homogeneity_suspects\"][i] += \\\n                    sample.loc[sample.cluster == i].loc[sample.label == j] \\\n                        .index.tolist()\n\n        return anomalies\n\n    def compare_sample(self, sample, amend=False):\n        \"\"\"Compare new sample with current clustering.\"\"\"\n        if isinstance(sample, Instance):\n            # Retrieve cluster ID\n            # TODO: this alters cluster structure-retraining needs to be removed\n            features = self.extract_features({\"?\" + sample.name: sample.features})\n            # simple_features = self.extract_simple_features(\n            # {\"?\"+sample.name: sample.basic_features})\n            # label = self.extract_labels({\"?\"+sample.name: sample.label})\n            extended_features = pd.concat([self.features, features])\n            extended_features.fillna(0, inplace=True)\n            clustering = self.cluster_hdbscan(features=extended_features, \\\n                                              dry=True)\n            clustering_result = clustering[\"clustering\"].loc[\"?\" + sample.name]\n\n            # TODO: return samples that are the most similar to the analysed one\n\n            # Save clustering information to the sample's JSON\n            if amend:\n                root = [\"info\", \"clustering\", \"hdbscan\"]\n                sample.update(clustering_result[\"label\"], root + [\"clusterID\"])\n                sample.update(clustering_result[\"probability\"],\n                              root + [\"clusterProbability\"])\n                sample.update(clustering_result[\"outlier_score\"],\n                              root + [\"outlierScore\"])\n                sample.update(clustering[\"min_samples\"], \"min_samples\")\n                sample.update(clustering[\"min_cluster_size\"], \\\n                              \"min_cluster_size\")\n                sample.save_json(os.path.dirname(sample.json_path) + \"/\")\n        # TODO: handle more than one test sample\n        elif isinstance(sample, Loader):\n            clustering_result = pd.DataFrame()\n\n        return clustering_result\n\n    def assess_clustering(self, clustering, labels, data=None,\n                          discard_noise=False):\n        \"\"\"Assess clusters fit according to variety of metrics.\"\"\"\n\n        def performance_metric(clustering, labels, data, noise):\n            performance_metrics = {}\n            performance_metrics[\"Adjusted Random Index\"] = \\\n                metrics.adjusted_rand_score(labels, clustering)\n            performance_metrics[\"Adjusted Mutual Information Score\"] = \\\n                metrics.adjusted_mutual_info_score(labels, clustering)\n            performance_metrics[\"Homogeneity\"] = \\\n                metrics.homogeneity_score(labels, clustering)\n            performance_metrics[\"Completeness\"] = \\\n                metrics.completeness_score(labels, clustering)\n            performance_metrics[\"V-measure\"] = \\\n                metrics.v_measure_score(labels, clustering)\n\n            if data is None or noise:\n                return performance_metrics\n            performance_metrics[\"Silhouette Coefficient\"] = \\\n                metrics.silhouette_score(data, np.array(clustering))\n\n            return performance_metrics\n\n        cluster_label = clustering[\"label\"].tolist()\n        ground_label = labels[\"label\"].tolist()\n\n        if discard_noise:\n            clustering = []\n            labels = []\n            noise_clustering = []\n            noise_labels = []\n            for c, g in itertools.izip(cluster_label, ground_label):\n                if c == -1:\n                    noise_clustering.append(c)\n                    noise_labels.append(g)\n                else:\n                    clustering.append(c)\n                    labels.append(g)\n            # print performance_metric(noise_clustering, noise_labels, \\\n            #                          data, True)\n        else:\n            clustering = cluster_label\n            labels = ground_label\n\n        return performance_metric(clustering, labels, data, discard_noise)\n\n    def clustering_label_distribution(self, clustering, labels, plot=False):\n        \"\"\"Get statistics about number of ground truth labels per cluster.\"\"\"\n        cluster_ids = set(clustering[\"label\"].tolist())\n        labels_ids = set(labels[\"label\"].tolist())\n        cluster_distribution = {}\n        for i in cluster_ids:\n            cluster_distribution[i] = {}\n            for j in labels_ids:\n                cluster_distribution[i][j] = 0\n\n        for i in clustering.index:\n            cluster_distribution[clustering[\"label\"][i]][labels[\"label\"][i]] \\\n                += 1\n\n        if plot:\n            for i in cluster_distribution:\n                fig = plt.figure()\n                ax = fig.add_subplot(111)\n                yticks = []\n                counter = 0\n                for j in cluster_distribution[i]:\n                    if cluster_distribution[i][j]:\n                        ax.barh(counter, cluster_distribution[i][j])\n                        counter += 1\n                        yticks.append(j)\n                yticks_range = [l + .4 for l in range(len(yticks))]\n                plt.yticks(yticks_range, yticks)\n                ax.set_ylim([0, yticks_range[-1] + .4])\n                plt.title(\"Cluster: %d\" % i)\n                if self.context == \"notebook\":\n                    plt.show()\n                else:\n                    plt.savefig(\"cluster_%d%s\" % (i, \".png\"), bbox_inches=\"tight\")\n                    plt.close()\n        else:\n            cluster_distribution = pd.DataFrame(cluster_distribution).T\n            cluster_distribution.index.name = \"cluster_id\"\n            return cluster_distribution"
  },
  {
    "path": "examples/rundetectiontest.py",
    "content": "# coding=utf-8\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Bold-Falcon - https://github.com/PowerLZY/Bold-Falcon\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport pkgutil\nimport importlib\nimport inspect\nimport logging\nfrom collections import defaultdict\nfrom distutils.version import StrictVersion\n\nfrom lib.cuckoo.common.abstracts import Auxiliary, Machinery, LibVirtMachinery, Processing, Detection\nfrom lib.cuckoo.common.abstracts import Report, Signature\nfrom lib.cuckoo.common.config import Config\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT, CUCKOO_VERSION\nfrom lib.cuckoo.common.exceptions import CuckooCriticalError\nfrom lib.cuckoo.common.exceptions import CuckooOperationalError\nfrom lib.cuckoo.common.exceptions import CuckooProcessingError\nfrom lib.cuckoo.common.exceptions import CuckooReportError\nfrom lib.cuckoo.common.exceptions import CuckooDependencyError\nfrom loader import Loader\nfrom lib.cuckoo.core.startup import init_logging, init_modules\n\nlog = logging.getLogger(__name__)\n\n_modules = defaultdict(list)\n\nclass RunProcessing(object):\n    \"\"\"Analysis Results Processing Engine.\n\n    This class handles the loading and execution of the processing modules.\n    It executes the enabled ones sequentially and generates a dictionary which\n    is then passed over the reporting engine.\n    \"\"\"\n\n    def __init__(self, task):\n        \"\"\"@param task: task dictionary of the analysis to process.\"\"\"\n        self.task = task\n        self.analysis_path = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\", str(task[\"id\"]))\n        self.baseline_path = os.path.join(CUCKOO_ROOT, \"storage\", \"baseline\")\n        self.cfg = Config(\"processing\")\n\n    def process(self, module, results):\n        \"\"\"Run a processing module.\n        @param module: processing module to run.\n        @param results: results dict.\n        @return: results generated by module.\n        \"\"\"\n        # Initialize the specified processing module.\n        try:\n            current = module()\n        except:\n            log.exception(\"Failed to load the processing module \"\n                          \"\\\"{0}\\\":\".format(module))\n            return None, None\n\n        # Extract the module name.\n        module_name = inspect.getmodule(current).__name__\n        if \".\" in module_name:\n            module_name = module_name.rsplit(\".\", 1)[1]\n\n        try:\n            options = self.cfg.get(module_name)\n        except CuckooOperationalError:\n            log.debug(\"Processing module %s not found in configuration file\",\n                      module_name)\n            return None, None\n\n        # If the processing module is disabled in the config, skip it.\n        if not options.enabled:\n            return None, None\n\n        # Give it the path to the baseline directory.\n        current.set_baseline(self.baseline_path)\n        # Give it the path to the analysis results.\n        current.set_path(self.analysis_path)\n        # Give it the analysis task object.\n        current.set_task(self.task)\n        # Give it the options from the relevant processing.conf section.\n        current.set_options(options)\n        # Give the results that we have obtained so far.\n        current.set_results(results)\n\n        try:\n            # Run the processing module and retrieve the generated data to be\n            # appended to the general results container.\n            data = current.run()\n\n            log.debug(\"Executed processing module \\\"%s\\\" on analysis at \"\n                      \"\\\"%s\\\"\", current.__class__.__name__, self.analysis_path)\n\n            # If succeeded, return they module's key name and the data.\n            return current.key, data\n        except CuckooDependencyError as e:\n            log.warning(\"The processing module \\\"%s\\\" has missing dependencies: %s\", current.__class__.__name__, e)\n        except CuckooProcessingError as e:\n            log.warning(\"The processing module \\\"%s\\\" returned the following \"\n                        \"error: %s\", current.__class__.__name__, e)\n        except:\n            log.exception(\"Failed to run the processing module \\\"%s\\\" for task #%d:\",\n                          current.__class__.__name__, self.task[\"id\"])\n\n        return None, None\n\n    def run(self):\n        \"\"\"Run all processing modules and all signatures.\n        @return: processing results.\n        \"\"\"\n        # This is the results container. It's what will be used by all the\n        # reporting modules to make it consumable by humans and machines.\n        # It will contain all the results generated by every processing\n        # module available. Its structure can be observed through the JSON\n        # dump in the analysis' reports folder. (If jsondump is enabled.)\n        # We friendly call this \"fat dict\".\n        results = {\n            \"_temp\": {},\n        }\n\n        # Order modules using the user-defined sequence number.\n        # If none is specified for the modules, they are selected in\n        # alphabetical order.\n        processing_list = list_plugins(group=\"processing\")\n\n        # If no modules are loaded, return an empty dictionary.\n        if processing_list:\n            processing_list.sort(key=lambda module: module.order)\n\n            # Run every loaded processing module.\n            for module in processing_list:\n                key, result = self.process(module, results)\n\n                # If the module provided results, append it to the fat dict.\n                if key and result:\n                    results[key] = result\n        else:\n            log.info(\"No processing modules loaded\")\n\n        results.pop(\"_temp\", None)\n\n        # Return the fat dict.\n        return results\n\nclass RunDetection(object):\n    \"\"\"\n    描述\n\n    :param task: task dictionary of the analysis to detection.\n    :param results: results dict\n    \"\"\"\n\n    def __init__(self, results):\n\n        #self.task = task\n        #self.analysis_path = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\", str(task[\"id\"]))\n        #self.baseline_path = os.path.join(CUCKOO_ROOT, \"storage\", \"baseline\")\n        self.cfg = Config(\"detection\")\n\n        self.results = results\n        self.predict = {}\n\n    def process(self, module):\n        \"\"\"\n        Run a detection module.\n\n        @param module: detection module to run.\n        @param results: results dict.\n        @return: results generated by module.\n        \"\"\"\n        # Initialize the specified detection module.\n        try:\n            current = module()\n        except:\n            log.exception(\"Failed to load the detection module \"\n                          \"\\\"{0}\\\":\".format(module))\n            return None, None\n\n        # Extract the module name.\n        module_name = inspect.getmodule(current).__name__\n        if \".\" in module_name:\n            module_name = module_name.rsplit(\".\", 1)[1]\n\n        try:\n            options = self.cfg.get(module_name)\n        except CuckooOperationalError:\n            log.debug(\"Detection module %s not found in configuration file\", module_name)\n            return None, None\n\n        # If the Detection module is disabled in the config, skip it.\n        if not options.enabled:\n            return None, None\n\n        # ---- Detection module 需要的配置 ----\n        # Give it the path to the baseline directory.\n        # rrent.set_baseline(self.baseline_path)\n        # Give it the path to the analysis results.\n        # current.set_path(self.analysis_path)\n        # Give it the analysis task object.\n        # current.set_task(self.task)\n        # Give it the options from the relevant Detection.conf section.\n        #current.set_options(options)\n        # Give the results that we have obtained so far.\n        current.load_instance(self.results)\n        # ---- Detection module 需要的配置 ----\n\n        try:\n            # Run the Detection module and retrieve the generated data to be\n            # appended to the general results container.\n            data = current.run()\n\n            log.debug(\"Executed Detection module \\\"%s\\\" on analysis at \"\n                      \"\\\"%s\\\"\", current.__class__.__name__, self.analysis_path)\n\n            # If succeeded, return they module's key name and the data.\n            return current.key, data\n        except CuckooDependencyError as e:\n            log.warning(\"The Detection module \\\"%s\\\" has missing dependencies: %s\", current.__class__.__name__, e)\n        except CuckooProcessingError as e:\n            log.warning(\"The Detection module \\\"%s\\\" returned the following \"\n                        \"error: %s\", current.__class__.__name__, e)\n        except:\n            log.exception(\"Failed to run the Detection module \\\"%s\\\" for task #%d:\",\n                          current.__class__.__name__, self.task[\"id\"])\n\n        return None, None\n\n    def run(self):\n        \"\"\"Run all detection modules.\n        @return: detection results.\n        \"\"\"\n        # This is the results container. It's what will be used by all the\n        # reporting modules to make it consumable by humans and machines.\n        # It will contain all the results generated by every processing\n        # module available. Its structure can be observed through the JSON\n        # dump in the analysis' reports folder. (If jsondump is enabled.)\n        # We friendly call this \"fat dict\".\n\n        predict = {}\n\n        # Order modules using the user-defined sequence number.\n        # If none is specified for the modules, they are selected in\n        # alphabetical order.\n        detection_list = list_plugins(group=\"detection\")\n\n        # If no modules are loaded, return an empty dictionary.\n        if detection_list:\n            detection_list.sort(key=lambda module: module.order)\n\n            # Run every loaded detection module.\n            for module in detection_list:\n                key, predict = self.process(module)\n\n                # If the module provided results, append it to the ’info‘ dict.\n                if key and result:\n                    self.results['info']['detection'] = {key:predict}\n        else:\n            log.info(\"No detection modules loaded\")\n\n\"\"\" From plugin.py \"\"\"\ndef import_package(package):\n    prefix = package.__name__ + \".\"\n    for loader, name, ispkg in pkgutil.iter_modules(package.__path__, prefix):\n        import_plugin(name)\n\ndef import_plugin(name):\n    try:\n        module = __import__(name, globals(), locals(), [\"dummy\"], -1)\n    except ImportError as e:\n        raise CuckooCriticalError(\"Unable to import plugin \"\n                                  \"\\\"{0}\\\": {1}\".format(name, e))\n    else:\n        load_plugins(module)\n\ndef load_plugins(module): # 导入插件\n\n    for name, value in inspect.getmembers(module):\n        if inspect.isclass(value):\n            if issubclass(value, Auxiliary) and value is not Auxiliary:\n                register_plugin(\"auxiliary\", value)\n            elif issubclass(value, Machinery) and value is not Machinery and value is not LibVirtMachinery:\n                register_plugin(\"machinery\", value)\n            elif issubclass(value, Processing) and value is not Processing:\n                register_plugin(\"processing\", value)\n            elif issubclass(value, Detection) and value is not Detection:\n                # 只导入detection的子类\n                register_plugin(\"detection\", value)\n            elif issubclass(value, Report) and value is not Report:\n                register_plugin(\"reporting\", value)\n            elif issubclass(value, Signature) and value is not Signature:\n                register_plugin(\"signatures\", value)\n# 全局注册_modules\ndef register_plugin(group, name):\n    global _modules\n    group = _modules.setdefault(group, [])\n    group.append(name)\n# _modules[group]\ndef list_plugins(group=None):\n    if group:\n        return _modules[group]\n    else:\n        return _modules\n\ndef init_modules(machinery=True):\n    \"\"\"Initializes plugins.\"\"\"\n    log.debug(\"Importing modules...\")\n\n    # Import all processing modules.\n    import modules.processing\n    import_package(modules.processing)\n\n    # ToDo:Import all processing modules.\n    import modules.detection\n    import_package(modules.detection)\n\n\n\n\n\nif __name__ == \"__main__\":\n\n    # The first stage is to load the data from the directory holding all the JSONs\n    init_modules()\n    loader = Loader()\n    loader.load_binaries_dir(\"../sample_data/dict\")\n    result = loader.binaries['133'].report\n    # Then we extract all the relevant information from the loaded samples.\n    #features_dict = loader.get_features()\n\n    RunDetection(results=result).run()"
  },
  {
    "path": "lib/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "lib/cuckoo/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "lib/cuckoo/common/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "lib/cuckoo/common/abstracts.py",
    "content": "# coding=utf-8\n# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2018 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport re\nimport logging\nimport collections\nimport datetime\nimport json\nimport sys\nimport time\nimport pandas as pd\nimport xml.etree.ElementTree as ET\nimport numpy as np\n\nfrom lib.cuckoo.common.config import Config\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\nfrom lib.cuckoo.common.exceptions import CuckooCriticalError\nfrom lib.cuckoo.common.exceptions import CuckooMachineError\nfrom lib.cuckoo.common.exceptions import CuckooOperationalError\nfrom lib.cuckoo.common.exceptions import CuckooReportError\nfrom lib.cuckoo.common.exceptions import CuckooDependencyError\nfrom lib.cuckoo.common.objects import Dictionary\nfrom lib.cuckoo.common.utils import create_folder\nfrom lib.cuckoo.core.database import Database\n\ntry:\n    import libvirt\n    # ToDo:libvirt是提供了一个方便的方式来管理虚拟机和其他虚拟化功能的软件的集合，\n    # 如存储和网络接口管理。这些软件包括一个API库，一个守护进程（Libvirtd），\n    # 和一个命令行实用程序（virsh）。\n    HAVE_LIBVIRT = True\nexcept ImportError:\n    HAVE_LIBVIRT = False\n\nlog = logging.getLogger(__name__)\n\nclass Auxiliary(object):\n    \"\"\"\n    Base abstract class for auxiliary modules.\n    \n    :param task: Current analysis task\n    :param machine: machine info\n    :param options: options conf \n    \"\"\"\n\n    def __init__(self):\n        self.task = None\n        self.machine = None\n        self.options = None\n\n    def set_task(self, task):\n        '''\n        set Current analysis task info\n        '''\n        self.task = task\n\n    def set_machine(self, machine):\n        '''\n        set machine info\n        '''\n        self.machine = machine\n\n    def set_options(self, options):\n        '''\n        set options\n        '''\n        self.options = options\n\n    def start(self):\n        '''\n        start machine\n        '''\n        raise NotImplementedError\n\n    def stop(self):\n        '''\n        stop machine\n        '''\n        raise NotImplementedError\n\nclass Machinery(object):\n    \"\"\"\n    Base abstract class for machinery modules.\n\n    :note: Default label used in machinery configuration file to supply virtual machine name/label/vmx path. Override it if you dubbed it in another way.\n    \"\"\"\n    LABEL = \"label\"\n    def __init__(self):\n        self.module_name = \"\"\n        self.options = None\n        self.options_globals = Config()\n        # Database pointer.\n        self.db = Database()\n\n        # Machine table is cleaned to be filled from configuration file\n        # at each start.\n        self.db.clean_machines()\n\n    def pcap_path(self, task_id):\n        \"\"\"Returns the .pcap path for this task id.\"\"\"\n        return os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\",\n                            \"%s\" % task_id, \"dump.pcap\")\n\n    def set_options(self, options):\n        \"\"\"\n        Set machine manager options.\n        \n        :param options: machine manager options dict.\n        \"\"\"\n        self.options = options\n\n    def initialize(self, module_name):\n        \"\"\"\n        Read, load, and verify machines configuration.\n        \n        :param module_name: module name.\n        \"\"\"\n        # Load.\n        self._initialize(module_name)\n\n        # Run initialization checks.\n        self._initialize_check()\n\n    def _get_resultserver_port(self):\n        \"\"\"\n        Returns the ResultServer port.\n        \n        :note: Avoid import recursion issues by importing ResultServer here.\n        \"\"\"\n        from lib.cuckoo.core.resultserver import ResultServer\n        return ResultServer().port\n\n    def _initialize(self, module_name):\n        \"\"\"\n        Read configuration.\n        \n        :param module_name: module name.\n        \"\"\"\n        self.module_name = module_name\n        mmanager_opts = self.options.get(module_name)\n\n        for machine_id in mmanager_opts[\"machines\"].strip().split(\",\"):\n            try:\n                machine_opts = self.options.get(machine_id.strip())\n                machine = Dictionary()\n                machine.id = machine_id.strip()\n                machine.label = machine_opts[self.LABEL]\n                machine.platform = machine_opts[\"platform\"]\n                machine.options = machine_opts.get(\"options\", \"\")\n                machine.tags = machine_opts.get(\"tags\")\n                machine.ip = machine_opts[\"ip\"]\n\n                # If configured, use specific network interface for this\n                # machine, else use the default value.\n                if machine_opts.get(\"interface\"):\n                    machine.interface = machine_opts[\"interface\"]\n                else:\n                    machine.interface = mmanager_opts.get(\"interface\")\n\n                # If configured, use specific snapshot name, else leave it\n                # empty and use default behaviour.\n                machine.snapshot = machine_opts.get(\"snapshot\")\n\n                # If configured, use specific resultserver IP and port,\n                # else use the default value.\n                opt_resultserver = self.options_globals.resultserver\n\n                # the resultserver port might have been dynamically changed\n                #  -> get the current one from the resultserver singleton\n                opt_resultserver.port = self._get_resultserver_port()\n\n                ip = machine_opts.get(\"resultserver_ip\", opt_resultserver.ip)\n                port = machine_opts.get(\"resultserver_port\", opt_resultserver.port)\n\n                machine.resultserver_ip = ip\n                machine.resultserver_port = port\n\n                # Strip parameters.\n                for key, value in machine.items():\n                    if value and isinstance(value, basestring):\n                        machine[key] = value.strip()\n\n                self.db.add_machine(name=machine.id,\n                                    label=machine.label,\n                                    ip=machine.ip,\n                                    platform=machine.platform,\n                                    options=machine.options,\n                                    tags=machine.tags,\n                                    interface=machine.interface,\n                                    snapshot=machine.snapshot,\n                                    resultserver_ip=ip,\n                                    resultserver_port=port)\n            except (AttributeError, CuckooOperationalError) as e:\n                log.warning(\"Configuration details about machine %s \"\n                            \"are missing: %s\", machine_id.strip(), e)\n                continue\n\n    def _initialize_check(self):\n        \"\"\"\n        Runs checks against virtualization software when a machine manageris initialized.\n        \n        :note: in machine manager modules you may override or superclass his method.\n        :raise CuckooMachineError: if a misconfiguration or a unkown vm state is found.\n        \"\"\"\n        try:\n            configured_vms = self._list()\n        except NotImplementedError:\n            return\n\n        for machine in self.machines():\n            # If this machine is already in the \"correct\" state, then we\n            # go on to the next machine.\n            if machine.label in configured_vms and \\\n                    self._status(machine.label) in [self.POWEROFF, self.ABORTED]:\n                continue\n\n            # This machine is currently not in its correct state, we're going\n            # to try to shut it down. If that works, then the machine is fine.\n            try:\n                self.stop(machine.label)\n            except CuckooMachineError as e:\n                msg = \"Please update your configuration. Unable to shut \" \\\n                      \"'{0}' down or find the machine in its proper state:\" \\\n                      \" {1}\".format(machine.label, e)\n                raise CuckooCriticalError(msg)\n\n        if not self.options_globals.timeouts.vm_state:\n            raise CuckooCriticalError(\"Virtual machine state change timeout \"\n                                      \"setting not found, please add it to \"\n                                      \"the config file.\")\n\n    def machines(self):\n        \"\"\"\n        List virtual machines.\n        \n        :return: virtual machines list\n        \"\"\"\n        return self.db.list_machines()\n\n    def availables(self):\n        \"\"\"\n        How many machines are free.\n        \n        :return: free machines count.\n        \"\"\"\n        return self.db.count_machines_available()\n\n    def acquire(self, machine_id=None, platform=None, tags=None):\n        \"\"\"\n        Acquire a machine to start analysis.\n        \n        :param machine_id: machine ID.\n        :param platform: machine platform.\n        :param tags: machine tags\n        :return: machine or None.\n        \"\"\"\n        if machine_id:\n            return self.db.lock_machine(label=machine_id)\n        elif platform:\n            return self.db.lock_machine(platform=platform, tags=tags)\n        else:\n            return self.db.lock_machine(tags=tags)\n\n    def release(self, label=None):\n        \"\"\"\n        Release a machine.\n        \n        :param label: machine name.\n        \"\"\"\n        self.db.unlock_machine(label)\n\n    def running(self):\n        \"\"\"\n        Returns running virtual machines.\n        \n        :return: running virtual machines list.\n        \"\"\"\n        return self.db.list_machines(locked=True)\n\n    def shutdown(self):\n        \"\"\"\n        Shutdown the machine manager. Kills all alive machines.\n        \n        :raise CuckooMachineError: if unable to stop machine.\n        \"\"\"\n        if len(self.running()) > 0:\n            log.info(\"Still %s guests alive. Shutting down...\",\n                     len(self.running()))\n            for machine in self.running():\n                try:\n                    self.stop(machine.label)\n                except CuckooMachineError as e:\n                    log.warning(\"Unable to shutdown machine %s, please check \"\n                                \"manually. Error: %s\", machine.label, e)\n\n    def set_status(self, label, status):\n        \"\"\"\n        Set status for a virtual machine.\n        \n        :param label: virtual machine label\n        :param status: new virtual machine status\n        \"\"\"\n        self.db.set_machine_status(label, status)\n\n    def start(self, label, task):\n        \"\"\"\n        Start a machine.\n        \n        :param label: machine name.\n        :param task: task object.\n        :raise NotImplementedError: this method is abstract.\n        \"\"\"\n        raise NotImplementedError\n\n    def stop(self, label=None):\n        \"\"\"\n        Stop a machine.\n        \n        :param label: machine name.\n        :raise NotImplementedError: this method is abstract.\n        \"\"\"\n        raise NotImplementedError\n\n    def _list(self):\n        \"\"\"\n        Lists virtual machines configured.\n        \n        :raise NotImplementedError: this method is abstract.\n        \"\"\"\n        raise NotImplementedError\n\n    def dump_memory(self, label, path):\n        \"\"\"\n        Takes a memory dump of a machine.\n        \n        :param path: path to where to store the memory dump.\n        \"\"\"\n        raise NotImplementedError\n\n    def _wait_status(self, label, state):\n        \"\"\"\n        Waits for a vm status.\n        \n        :param label: virtual machine name.\n        :param state: virtual machine status, accepts multiple states as list.\n        :raise CuckooMachineError: if default waiting timeout expire.\n        \"\"\"\n        # This block was originally suggested by Loic Jaquemet.\n        waitme = 0\n        try:\n            current = self._status(label)\n        except NameError:\n            return\n\n        if isinstance(state, str):\n            state = [state]\n\n        while current not in state: # 虚拟机状态为poweroff {wrong}\n            log.debug(\"Waiting %i cuckooseconds for machine %s to switch \"\n                      \"to status %s\", waitme, label, state)\n            if waitme > int(self.options_globals.timeouts.vm_state):\n                raise CuckooMachineError(\"Timeout hit while for machine {0} \"\n                                         \"to change status\".format(label))\n            time.sleep(1)\n            waitme += 1\n            current = self._status(label)\n\nclass LibVirtMachinery(Machinery):\n    \"\"\"\n    Libvirt based machine manager.\n\n    :note: If you want to write a custom module for a virtualization software\n    supported by libvirt you have just to inherit this machine manager and\n    change the connection string.\n    \"\"\"\n\n    # VM states.\n    RUNNING = \"running\"\n    PAUSED = \"paused\"\n    POWEROFF = \"poweroff\"\n    ERROR = \"machete\"\n    ABORTED = \"abort\"\n\n    def __init__(self):\n        if not HAVE_LIBVIRT:\n            raise CuckooDependencyError(\"Unable to import libvirt\")\n\n        super(LibVirtMachinery, self).__init__()\n\n    def initialize(self, module):\n        \"\"\"\n        Initialize machine manager module. Override default to set proper\n        connection string.\n        \n        :param module:  machine manager module\n        \"\"\"\n        super(LibVirtMachinery, self).initialize(module)\n\n    def _initialize_check(self):\n        \"\"\"\n        Runs all checks when a machine manager is initialized.\n        \n        :raise CuckooMachineError: if libvirt version is not supported.\n        \"\"\"\n        # Version checks.\n        if not self._version_check():\n            raise CuckooMachineError(\"Libvirt version is not supported, \"\n                                     \"please get an updated version\")\n\n        # Preload VMs\n        self.vms = self._fetch_machines()\n\n        # Base checks. Also attempts to shutdown any machines which are\n        # currently still active.\n        super(LibVirtMachinery, self)._initialize_check()\n\n    def start(self, label, task):\n        \"\"\"\n        Starts a virtual machine.\n        \n        :param label: virtual machine name.\n        :param task: task object.\n        :raise CuckooMachineError: if unable to start virtual machine.\n        \"\"\"\n        log.debug(\"Starting machine %s\", label)\n\n        if self._status(label) != self.POWEROFF:\n            msg = \"Trying to start a virtual machine that has not \" \\\n                  \"been turned off {0}\".format(label)\n            raise CuckooMachineError(msg)\n\n        conn = self._connect()\n\n        vm_info = self.db.view_machine_by_label(label)\n\n        snapshot_list = self.vms[label].snapshotListNames(flags=0)\n\n        # If a snapshot is configured try to use it.\n        if vm_info.snapshot and vm_info.snapshot in snapshot_list:\n            # Revert to desired snapshot, if it exists.\n            log.debug(\"Using snapshot {0} for virtual machine \"\n                      \"{1}\".format(vm_info.snapshot, label))\n            try:\n                vm = self.vms[label]\n                snapshot = vm.snapshotLookupByName(vm_info.snapshot, flags=0)\n                self.vms[label].revertToSnapshot(snapshot, flags=0)\n            except libvirt.libvirtError:\n                msg = \"Unable to restore snapshot {0} on \" \\\n                      \"virtual machine {1}\".format(vm_info.snapshot, label)\n                raise CuckooMachineError(msg)\n            finally:\n                self._disconnect(conn)\n        elif self._get_snapshot(label):\n            snapshot = self._get_snapshot(label)\n            log.debug(\"Using snapshot {0} for virtual machine \"\n                      \"{1}\".format(snapshot.getName(), label))\n            try:\n                self.vms[label].revertToSnapshot(snapshot, flags=0)\n            except libvirt.libvirtError:\n                raise CuckooMachineError(\"Unable to restore snapshot on \"\n                                         \"virtual machine {0}\".format(label))\n            finally:\n                self._disconnect(conn)\n        else:\n            self._disconnect(conn)\n            raise CuckooMachineError(\"No snapshot found for virtual machine \"\n                                     \"{0}\".format(label))\n\n        # Check state.\n        self._wait_status(label, self.RUNNING)\n\n    def stop(self, label):\n        \"\"\"\n        Stops a virtual machine. Kill them all.\n        \n        :param label: virtual machine name.\n        :raise CuckooMachineError: if unable to stop virtual machine.\n        \"\"\"\n        log.debug(\"Stopping machine %s\", label)\n\n        if self._status(label) == self.POWEROFF:\n            raise CuckooMachineError(\"Trying to stop an already stopped \"\n                                     \"machine {0}\".format(label))\n\n        # Force virtual machine shutdown.\n        conn = self._connect()\n        try:\n            if not self.vms[label].isActive():\n                log.debug(\"Trying to stop an already stopped machine %s. \"\n                          \"Skip\", label)\n            else:\n                self.vms[label].destroy()  # Machete's way!\n        except libvirt.libvirtError as e:\n            raise CuckooMachineError(\"Error stopping virtual machine \"\n                                     \"{0}: {1}\".format(label, e))\n        finally:\n            self._disconnect(conn)\n        # Check state.\n        self._wait_status(label, self.POWEROFF)\n\n    def shutdown(self):\n        \"\"\"Override shutdown to free libvirt handlers - they print errors.\"\"\"\n        super(LibVirtMachinery, self).shutdown()\n\n        # Free handlers.\n        self.vms = None\n\n    def dump_memory(self, label, path):\n        \"\"\"\n        Takes a memory dump.\n        \n        :param path: path to where to store the memory dump.\n        \"\"\"\n        log.debug(\"Dumping memory for machine %s\", label)\n\n        conn = self._connect()\n        try:\n            # Resolve permission issue as libvirt creates the file as\n            # root/root in mode 0600, preventing us from reading it. This\n            # supposedly still doesn't allow us to remove it, though..\n            open(path, \"wb\").close()\n            self.vms[label].coreDump(path, flags=libvirt.VIR_DUMP_MEMORY_ONLY)\n        except libvirt.libvirtError as e:\n            raise CuckooMachineError(\"Error dumping memory virtual machine \"\n                                     \"{0}: {1}\".format(label, e))\n        finally:\n            self._disconnect(conn)\n\n    def _status(self, label):\n        \"\"\"\n        Gets current status of a vm.\n        \n        :param label: virtual machine name.\n        :return: status string.\n        \"\"\"\n        log.debug(\"Getting status for %s\", label)\n\n        # Stetes mapping of python-libvirt.\n        # virDomainState\n        # VIR_DOMAIN_NOSTATE = 0\n        # VIR_DOMAIN_RUNNING = 1\n        # VIR_DOMAIN_BLOCKED = 2\n        # VIR_DOMAIN_PAUSED = 3\n        # VIR_DOMAIN_SHUTDOWN = 4\n        # VIR_DOMAIN_SHUTOFF = 5\n        # VIR_DOMAIN_CRASHED = 6\n        # VIR_DOMAIN_PMSUSPENDED = 7\n\n        conn = self._connect()\n        try:\n            state = self.vms[label].state(flags=0)\n        except libvirt.libvirtError as e:\n            raise CuckooMachineError(\"Error getting status for virtual \"\n                                     \"machine {0}: {1}\".format(label, e))\n        finally:\n            self._disconnect(conn)\n\n        if state:\n            if state[0] == 1:\n                status = self.RUNNING\n            elif state[0] == 3:\n                status = self.PAUSED\n            elif state[0] == 4 or state[0] == 5:\n                status = self.POWEROFF\n            else:\n                status = self.ERROR\n\n        # Report back status.\n        if status:\n            self.set_status(label, status)\n            return status\n        else:\n            raise CuckooMachineError(\"Unable to get status for \"\n                                     \"{0}\".format(label))\n\n    def _connect(self):\n        \"\"\"\n        Connects to libvirt subsystem.\n        \n        :raise CuckooMachineError: when unable to connect to libvirt.\n        \"\"\"\n        # Check if a connection string is available.\n        if not self.dsn:\n            raise CuckooMachineError(\"You must provide a proper \"\n                                     \"connection string\")\n\n        try:\n            return libvirt.open(self.dsn)\n        except libvirt.libvirtError:\n            raise CuckooMachineError(\"Cannot connect to libvirt\")\n\n    def _disconnect(self, conn):\n        \"\"\"\n        Disconnects to libvirt subsystem.\n        \n        :raise CuckooMachineError: if cannot disconnect from libvirt.\n        \"\"\"\n        try:\n            conn.close()\n        except libvirt.libvirtError:\n            raise CuckooMachineError(\"Cannot disconnect from libvirt\")\n\n    def _fetch_machines(self):\n        \"\"\"\n        Fetch machines handlers.\n        \n        :return: dict with machine label as key and handle as value.\n        \"\"\"\n        vms = {}\n        for vm in self.machines():\n            vms[vm.label] = self._lookup(vm.label)\n        return vms\n\n    def _lookup(self, label):\n        \"\"\"\n        Search for a virtual machine.\n        \n        :param conn: libvirt connection handle.\n        :param label: virtual machine name.\n        :raise CuckooMachineError: if virtual machine is not found.\n        \"\"\"\n        conn = self._connect()\n        try:\n            vm = conn.lookupByName(label)\n        except libvirt.libvirtError:\n                raise CuckooMachineError(\"Cannot find machine \"\n                                         \"{0}\".format(label))\n        finally:\n            self._disconnect(conn)\n        return vm\n\n    def _list(self):\n        \"\"\"\n        List available virtual machines.\n        \n        :raise CuckooMachineError: if unable to list virtual machines.\n        \"\"\"\n        conn = self._connect()\n        try:\n            names = conn.listDefinedDomains()\n        except libvirt.libvirtError:\n            raise CuckooMachineError(\"Cannot list domains\")\n        finally:\n            self._disconnect(conn)\n        return names\n\n    def _version_check(self):\n        \"\"\"\n        Check if libvirt release supports snapshots.\n        \n        :return: True or false.\n        \"\"\"\n        if libvirt.getVersion() >= 8000:\n            return True\n        else:\n            return False\n\n    def _get_snapshot(self, label):\n        \"\"\"\n        Get current snapshot for virtual machine\n        \n        :param label: virtual machine name\n        :return None or current snapshot\n        :raise CuckooMachineError: if cannot find current snapshot or\n                                   when there are too many snapshots available\n        \"\"\"\n        def _extract_creation_time(node):\n            \"\"\"Extracts creation time from a KVM vm config file.\n            :param node: config file node\n            :return: extracted creation time\n            \"\"\"\n            xml = ET.fromstring(node.getXMLDesc(flags=0))\n            return xml.findtext(\"./creationTime\")\n\n        snapshot = None\n        conn = self._connect()\n        try:\n            vm = self.vms[label]\n\n            # Try to get the currrent snapshot, otherwise fallback on the latest\n            # from config file.\n            if vm.hasCurrentSnapshot(flags=0):\n                snapshot = vm.snapshotCurrent(flags=0)\n            else:\n                log.debug(\"No current snapshot, using latest snapshot\")\n\n                # No current snapshot, try to get the last one from config file.\n                snapshot = sorted(vm.listAllSnapshots(flags=0),\n                                  key=_extract_creation_time,\n                                  reverse=True)[0]\n        except libvirt.libvirtError:\n            raise CuckooMachineError(\"Unable to get snapshot for \"\n                                     \"virtual machine {0}\".format(label))\n        finally:\n            self._disconnect(conn)\n\n        return snapshot\n\nclass Processing(object):\n    \"\"\"Base abstract class for processing module.\"\"\"\n    order = 1\n    enabled = True\n\n    def __init__(self):\n        self.analysis_path = \"\"\n        self.baseline_path = \"\"\n        self.logs_path = \"\"\n        self.task = None\n        self.options = None\n        self.results = {}\n\n    def set_options(self, options):\n        \"\"\"\n        Set report options.\n        \n        :param options: report options dict.\n        \"\"\"\n        self.options = options\n\n    def set_task(self, task):\n        \"\"\"\n        Add task information.\n        \n        :param task: task dictionary.\n        \"\"\"\n        self.task = task\n\n    def set_baseline(self, baseline_path):\n        \"\"\"\n        Set the path to the baseline directory.\n        \"\"\"\n        self.baseline_path = baseline_path\n\n    def set_path(self, analysis_path):\n        \"\"\"\n        Set paths.\n        \n        :param analysis_path: analysis folder \n        \"\"\"\n        self.analysis_path = analysis_path\n        self.log_path = os.path.join(self.analysis_path, \"analysis.log\")\n        self.file_path = os.path.realpath(os.path.join(self.analysis_path,\n                                                       \"binary\"))\n        self.dropped_path = os.path.join(self.analysis_path, \"files\")\n        self.dropped_meta_path = os.path.join(self.analysis_path, \"files.json\")\n        self.package_files = os.path.join(self.analysis_path, \"package_files\")\n        self.buffer_path = os.path.join(self.analysis_path, \"buffer\")\n        self.logs_path = os.path.join(self.analysis_path, \"logs\")\n        self.shots_path = os.path.join(self.analysis_path, \"shots\")\n        self.pcap_path = os.path.join(self.analysis_path, \"dump.pcap\")\n        self.pmemory_path = os.path.join(self.analysis_path, \"memory\")\n        self.memory_path = os.path.join(self.analysis_path, \"memory.dmp\")\n        self.mitmout_path = os.path.join(self.analysis_path, \"mitm.log\")\n        self.mitmerr_path = os.path.join(self.analysis_path, \"mitm.err\")\n        self.tlsmaster_path = os.path.join(self.analysis_path, \"tlsmaster.txt\")\n        self.suricata_path = os.path.join(self.analysis_path, \"suricata\")\n        self.network_path = os.path.join(self.analysis_path, \"network\")\n        self.taskinfo_path = os.path.join(self.analysis_path, \"task.json\")\n\n    def set_results(self, results):\n        \"\"\"\n        Set the results - the fat dictionary.\n        \"\"\"\n        self.results = results\n\n    def run(self):\n        \"\"\"\n        Start processing.\n        \n        :raise NotImplementedError: this method is abstract.\n        \"\"\"\n        raise NotImplementedError\n\nclass Instance(object):\n    \"\"\"\n    Instance for binaries .\n    \"\"\"\n    LABEL_SIGNIFICANCE_COUNT = 5\n    POSITIVE_RATE = 2 * LABEL_SIGNIFICANCE_COUNT\n\n    def __init__(self):\n        self.json_path = \"\"\n        self.bin_path = \"\"\n        self.name = \"\"\n        self.report = None\n        self.total = None\n        self.positives = None\n        self.scans = None\n        self.label = None\n        self.features = {}\n        self.basic_features = {}\n\n    def load_json(self, json_file, name=\"unknown\"):\n        \"\"\"\n        Load JSON formatted malware report. It can handle both a path to JSON file and a dictionary object.\n        \n        :param json_file: json path\n        :param name: default \"unknown\"\n        \"\"\"\n        if isinstance(json_file, str):\n            self.json_path = json_file\n            with open(json_file, \"r\") as malware_report:\n                try:\n                    self.report = json.load(malware_report)\n                except ValueError, error:\n                    print >> sys.stderr, \"Could not load file;\", malware_report, \"is not a valid JSON file.\"\n                    print >> sys.stderr, \"Exception: %s\" % str(error)\n                    sys.exit(1)\n        elif isinstance(json_file, dict):\n            self.report = json_file\n        else:\n            # Unknown binary format\n            print >> sys.stderr, \"Could not load the data *\", json, \"* is of \" \\\n                \"unknown type: \", type(json), \".\"\n\n        self.name = name\n        # Get total and positives\n        self.total = self.report.get(\"virustotal\").get(\"total\")\n        self.positives = self.report.get(\"virustotal\").get(\"positives\")\n        # Pull all VT normalised results\n        self.scans = self.report.get(\"virustotal\").get(\"scans\")\n\n    def load_binaries(self, data_path, first_n_byte = 2 ** 20):\n        '''\n        Import the sample and convert it into a fixed length byte sequence for MalConv\n\n        :param data_path: Analysis sample path\n        :param first_n_byte: fixed length\n        :return numpy: byte sequence\n        '''\n        try:\n            with open(data_path, 'rb') as f:\n                tmp = [int(ord(i)) + 1 for i in f.read()[:first_n_byte]]  # index 0 will be special padding index 每个值加一\n                tmp = tmp + [0] * (first_n_byte - len(tmp))\n        except:\n            raise CuckooOperationalError(\"Error convert it into a fixed length byte sequence\")\n        return np.array(tmp)\n\n    def label_sample(self, external_labels=None, label_type=\"family\"):\n        \"\"\"\n        Generate label for the loaded sample. You can use platform, cve, metatype, type, and family (default).\n        \"\"\"\n        merged_labels = []\n\n        if external_labels is None and self.scans is not None:\n            for vendor in self.scans:\n                merged_labels += self.scans[vendor][\"normalized\"][label_type]\n        elif external_labels is not None and self.scans is None:\n            merged_labels = external_labels\n\n        if not merged_labels:\n            self.label = \"none\"\n            return\n\n        # Get most common label if it has more hits than set threshold\n        labels_frequency = collections.Counter(merged_labels)\n        top_label, top_label_count = labels_frequency.most_common(1)[0]\n        if top_label_count >= self.LABEL_SIGNIFICANCE_COUNT:\n                # self.positives >= self.POSITIVE_RATE:\n            self.label = top_label.encode(\"ascii\", \"ignore\")\n        else:\n            self.label = \"none\"\n\n    def update(self, element, location):\n        \"\"\"\n        Insert `element` at given `location`.\n        \"\"\"\n        element_to_update = self.report\n        for l in location[:-1]:\n            etu = element_to_update.get(l)\n            if etu is None:\n                element_to_update[l] = {}\n                element_to_update = element_to_update.get(l)\n            else:\n                element_to_update = etu\n        element_to_update[location[-1]] = element\n\n    def save_json(self, root_dir):\n        \"\"\"\n        Save JSON stored in the class to a file.\n        \"\"\"\n        with open(root_dir+self.name, \"w\") as j_file:\n            json.dump(self.report, j_file)\n\n    def extract_features(self):\n        \"\"\"Extract features of the loaded sample.\"\"\"\n        self.extract_features_static()\n        self.extract_features_dynamic()\n\n    def extract_features_static(self):\n        \"\"\"Extract static features of the loaded sample.\"\"\"\n        self.feature_static_metadata()\n        self.feature_static_signature()\n        # self.feature_static_heuristic()\n        self.feature_static_string()\n        self.feature_static_packer()\n        self.feature_static_pef()\n        self.feature_static_imports()\n\n    def extract_features_dynamic(self):\n        \"\"\"Extract dynamic features of the loaded sample.\"\"\"\n        self.feature_dynamic_imports()\n        self.feature_dynamic_filesystem()\n        self.feature_dynamic_network()\n        self.feature_dynamic_registry()\n        self.feature_dynamic_windowsapi()\n\n    def feature_static_metadata(self):\n        \"\"\"Create features form extracted binary metadata.\"\"\"\n        \n        # Get binary size\n        self.features[\"size\"] = self.report.get(\"target\", {}).get(\"file\", {}).get(\"size\")\n\n        # Get binary timestamp in the UNIX timestamp format\n        str_dt = self.report.get(\"static\", {}).get(\"pe_timestamp\")\n        ts = None\n        if str_dt is not None:\n            dt = datetime.datetime.strptime(str_dt, \"%Y-%m-%d %H:%M:%S\")\n            ts = int(time.mktime(dt.timetuple()))\n        self.features[\"timestamp\"] = ts\n\n        # ExifTool output\n        et_tokens = [\"FileDescription\", \"OriginalFilename\"]\n        for token in et_tokens:\n            self.features[token] = None\n        for attr in self.report.get(\"static\", {}).get(\"pe_versioninfo\", []):\n            attr_name = attr.get(\"name\")\n            if attr_name in et_tokens:\n                self.features[attr_name] = attr.get(\"value\")\n\n        # Magic byte\n        self.features[\"magic_byte\"] = \\\n            self.report.get(\"target\", {}).get(\"file\", {}).get(\"type\")\n\n    def feature_static_signature(self):\n        \"\"\"Create features form binary signature check.\"\"\"\n        \n        # Check availability of digital signature\n        self.features[\"signed\"] = bool(self.report.get(\"static\", {}).get(\"signature\", []))\n\n\n        # ExifTool output\n        et_tokens = [\"Comments\", \"ProductName\", \"LegalCopyright\", \"InternalName\", \"CompanyName\"]\n        for token in et_tokens:\n            self.features[token] = None\n        for attr in self.report.get(\"static\", {}).get(\"pe_versioninfo\", []):\n            attr_name = attr.get(\"name\")\n            if attr_name in et_tokens:\n                self.features[attr_name] = attr.get(\"value\")\n\n    def feature_static_heuristic(self):\n        \"\"\"Create features form results return by heuristic tools.\n        **Not available for current JSON content.**\"\"\"\n        pass\n\n    def feature_static_packer(self):\n        \"\"\"\n        Create feature from information returned by packer/cryptor detectors.\n        \"\"\"\n        self.features[\"packer\"] = \\\n            self.report.get(\"static\", {}).get(\"peid_signatures\", None)\n\n    def feature_static_pef(self):\n        \"\"\"\n        Create features from information derived form portable executable format.\n        \"\"\"\n        # Get resource languages\n        self.features[\"languages\"] = []\n        for d in self.report.get(\"static\", {}).get(\"pe_resources\", []):\n            lang = d.get(\"language\", False)\n            if lang:\n                if lang.startswith(\"LANG_\"):\n                    lang = lang[5:]\n                else:\n                    lang = lang\n                if lang not in self.features[\"languages\"]:\n                    self.features[\"languages\"].append(lang)\n            sublang = d.get(\"sublanguage\", False)\n            if sublang:\n                if sublang.startswith(\"SUBLANG_\"):\n                    sublang = sublang[8:]\n                else:\n                    sublang = sublang\n                if sublang not in self.features[\"languages\"]:\n                    self.features[\"languages\"].append(sublang)\n\n        # Section and resource attributes\n        self.features[\"section_attrs\"] = {}\n        for d in self.report.get(\"static\", {}).get(\"pe_sections\", []):\n            n = d.get(\"name\")\n            e = d.get(\"entropy\")\n            if n and d:\n                self.features[\"section_attrs\"][n] = e\n        self.features[\"resource_attrs\"] = {}\n        for d in self.report.get(\"static\", {}).get(\"pe_resources\", []):\n            n = d.get(\"name\")\n            f = d.get(\"filetype\")\n            if n and f:\n                self.features[\"resource_attrs\"][n] = f\n\n    def feature_static_imports(self):\n        \"\"\"Extract features from static imports like referenced library\n        functions.\"\"\"\n        self.features[\"static_imports\"] = {}\n\n        # Static libraries import count\n        self.features[\"static_imports\"][\"count\"] = \\\n            self.report.get(\"static\", {}).get(\"imported_dll_count\", None)\n\n        # Get all imported libraries\n        for d in self.report.get(\"static\", {}).get(\"pe_imports\", []):\n            ddl_name = d.get(\"dll\")\n            if not ddl_name:\n                continue\n            self.features[\"static_imports\"][ddl_name] = []\n            for i in d.get(\"imports\", []):\n                ref = i.get(\"name\")\n                if ref is not None:\n                    self.features[\"static_imports\"][ddl_name].append(ref)\n\n    def feature_static_string(self):\n        \"\"\"Create Static string list\"\"\"\n        self.features['strings'] = self.report.get(\"strings\", {})\n\n    def feature_dynamic_imports(self):\n        \"\"\"Extract features from dynamic imports, mutexes, and processes.\"\"\"\n        # Get mutexes\n        self.features[\"mutex\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}).get(\"mutex\")\n\n        # Get processes names\n        self.features[\"processes\"] = []\n        for p in self.report.get(\"behavior\", {}).get(\"processes\", []):\n            p_name = p.get(\"process_name\")\n            if p_name and p_name not in self.features[\"processes\"]:\n                self.features[\"processes\"].append(p_name)\n\n        # Get dynamically loaded library names\n        self.features[\"dynamic_imports\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"dll_loaded\", [])\n\n    def feature_dynamic_filesystem(self):\n        \"\"\"Extract features from filesystem operations.\"\"\"\n        def flatten_list(structured):\n            \"\"\"Flatten nested list.\"\"\"\n            flat = []\n            for i in structured:\n                flat += i\n            return flat\n\n        # Get file operations and their number\n        self.features[\"file_read\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_read\", [])\n        self.features[\"files_read\"] = len(self.features[\"file_read\"])\n        self.features[\"file_written\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_written\", [])\n        self.features[\"files_written\"] = len(self.features[\"file_written\"])\n        self.features[\"file_deleted\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_deleted\", [])\n        self.features[\"files_deleted\"] = len(self.features[\"file_deleted\"])\n        self.features[\"file_copied\"] = flatten_list(\\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_copied\", [])\n                                                   )\n        self.features[\"files_copied\"] = len(\\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_copied\", [])\n                                            )\n        self.features[\"file_renamed\"] = flatten_list(\\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_moved\", [])\n                                                    )\n        self.features[\"files_renamed\"] = len(self.features[\"file_renamed\"])\n\n        # Get other file operations numbers\n        self.features[\"files_opened\"] = len(\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_opened\", [])\n        )\n        self.features[\"files_exists\"] = len(\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_exists\", [])\n        )\n        self.features[\"files_failed\"] = len(\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_failed\", [])\n        )\n\n        # Get total number of unique touched files\n        file_operations = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_read\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_written\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_deleted\", []) + \\\n            flatten_list(self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_copied\", [])) + \\\n            flatten_list(self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_moved\", [])) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_recreated\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_opened\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_exists\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_failed\", [])\n        # remove duplicates\n        self.features[\"files_operations\"] = len(list(set(file_operations)))\n\n    def feature_dynamic_network(self):\n        \"\"\"Extract features from network operations.\"\"\"\n        # Get TCP IP addresses\n        self.features[\"tcp\"] = []\n        for c in self.report.get(\"network\", {}).get(\"tcp\", []):\n            c_dst = c.get(\"dst\")\n            if c_dst and c_dst not in self.features[\"tcp\"]:\n                self.features[\"tcp\"].append(c_dst)\n\n        # Get UDP IPs\n        self.features[\"udp\"] = []\n        for c in self.report.get(\"network\", {}).get(\"udp\", []):\n            c_dst = c.get(\"dst\")\n            if c_dst and c_dst not in self.features[\"udp\"]:\n                self.features[\"udp\"].append(c_dst)\n\n        # Get DNS queries and responses\n        self.features[\"dns\"] = {}\n        for c in self.report.get(\"network\", {}).get(\"dns\", []):\n            request = c.get(\"request\")\n            if request:\n                self.features[\"dns\"][request] = []\n            else:\n                continue\n\n            answers = c.get(\"answers\", [])\n            for a in answers:\n                a_type = a.get(\"type\")\n                a_data = a.get(\"data\")\n                if a_type == \"A\" and a_data:\n                    self.features[\"dns\"][request].append(a_data)\n\n        # Get HTTP requests: method, host, port, path\n        self.features[\"http\"] = {}\n        for c in self.report.get(\"network\", {}).get(\"http\", []):\n            c_data = c.get(\"data\")\n            if c_data:\n                self.features[\"http\"][c_data] = {}\n            else:\n                continue\n\n            c_method = c.get(\"method\")\n            if c_method:\n                self.features[\"http\"][c_data][\"method\"] = c_method\n            c_host = c.get(\"host\")\n            if c_host:\n                self.features[\"http\"][c_data][\"host\"] = c_host\n            c_port = c.get(\"port\")\n            if c_port:\n                self.features[\"http\"][c_data][\"port\"] = c_port\n\n    def feature_dynamic_registry(self):\n        \"\"\"Extract features from registry operations.\"\"\"\n        # Registry written\n        self.features[\"regkey_written\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"regkey_written\", [])\n        # Registry delete\n        self.features[\"regkey_deleted\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"regkey_deleted\", [])\n\n    def feature_dynamic_windowsapi(self):\n        \"\"\"Extract features from Windows API calls sequence.\"\"\"\n        self.features[\"api_stats\"] = {}\n        apistats = self.report.get(\"behavior\", {}).get(\"apistats\", {})\n        for d in apistats:\n            for e in apistats[d]:\n                if e in self.features[\"api_stats\"]:\n                    self.features[\"api_stats\"][e] += apistats[d][e]\n                else:\n                    self.features[\"api_stats\"][e] = apistats[d][e]\n\n    def extract_basic_features(self):\n        \"\"\"Extract very basic set of features from *signatures* JSON field.\"\"\"\n        if self.basic_features:\n            self.basic_features = {}\n\n        for s in self.report.get(\"signatures\", []):\n            name = s.get(\"name\", \"\")\n            description = s.get(\"description\", \"\")\n            if name:\n                self.basic_features[name] = description\n                continue\n            if description:\n                self.basic_features[hash(description)] = description\n\nclass Detection(object):\n    \"\"\"\n    Base abstract class for detection module.\n    \"\"\"\n    order = 1\n    enabled = True\n\n    def __init__(self):\n        self.key = None\n        self.task = None\n        self.options = None  # conf options\n        # self.json_path = None  # 原文件结果路径\n        # self.bin_path = None  # 原文件路径\n        self.labels = None\n        self.features = None\n        self.binaries = {}\n        self.binaries_location = \"\"\n        self.binaries_updated = False\n        self.results = {}  # 保持模型预测结果\n\n    def set_options(self, options):\n        \"\"\"\n        Set report options.\n\n        :param options: report options dict.\n        \"\"\"\n        self.options = options\n\n    def set_path(self, analysis_path):\n        \"\"\"\n        Set paths.\n\n        :param analysis_path: analysis folder path.\n        :param file_path: binaries file path\n        \"\"\"\n        self.analysis_path = analysis_path\n        self.file_path = os.path.realpath(os.path.join(self.analysis_path, \"binary\"))\n\n    def set_task(self, task):\n        \"\"\"Add task information.\n        \n        :param task: task dictionary.\n        \"\"\"\n        self.task = task\n\n    def load_instance(self, results):\n        \"\"\"\n        Initialize the sample instance and load the dictionary\n        \n        :param results:  results dict\n        \"\"\"\n        self.binaries = Instance()\n        self.binaries.load_json(results) #导入json\n        # self.binaries.extract_features() #导入全体特征\n        # self.binaries.extract_basic_features()\n\n    def get_features(self):\n        \"\"\"Return complex binary features as a labelled dictionary.\"\"\"\n        features = {}\n        if isinstance(self.binaries, list):\n            for i in self.binaries:\n                features[i] = self.binaries[i].features\n        elif isinstance(self.binaries, Instance):\n            features = self.binaries.features\n        else:\n            # Unknown binary format\n            print >> sys.stderr, \"Could not get the features *\", self.binaries, \"* is of \" \"unknown type: \", type(\n                self.binaries), \".\"\n        return features\n    # ------------------- only dir --------------------------\n    def load_binaries_dir(self, directory):\n        \"\"\"\n        Load all binaries' reports from given directory.\n        \"\"\"\n        self.binaries_location = directory + \"/\"\n        # 导入整个文件夹的json\n        for f in os.listdir(directory):\n            self.binaries[f] = Instance()\n            self.binaries[f].load_json(directory + \"/\" + f, f)\n            self.binaries[f].label_sample()\n            self.binaries[f].extract_features()\n            self.binaries[f].extract_basic_features()\n\n    def update_binaries(self, elements, root, locations):\n        \"\"\"Attach \"elements\" to the loaded JSON at the given location\"\"\"\n        if isinstance(elements, pd.DataFrame) and isinstance(locations, dict):\n            self.binaries_updated = True\n            for i in elements.index:\n                for j in elements.columns:\n                    self.binaries[i].update(elements[j][i], root + [locations[j]])\n        elif isinstance(locations, str):\n            self.binaries_updated = True\n            for i in self.binaries:\n                self.binaries[i].update(elements, root + [locations])\n\n    def save_binaries(self, alternative_location=\"\"):\n        \"\"\"Save the binaries to given location if they have been updated.\"\"\"\n        if self.binaries_updated:\n            save_location = self.binaries_location\n            if alternative_location:\n                save_location = alternative_location\n                if save_location[-1] != \"/\":\n                    save_location += \"/\"\n\n            # Create directory if it does not exist\n            if not os.path.exists(save_location):\n                os.makedirs(save_location)\n\n            for f in self.binaries:\n                self.binaries[f].save_json(save_location)\n            self.binaries_updated = False\n        else:\n            print \"The binaries haven't been updated. No need to save them.\"\n\n    def get_labels(self):\n        \"\"\"Return binary labels as a labelled dictionary.\"\"\"\n        labels = {}\n        for i in self.binaries:\n            labels[i] = self.binaries[i].label\n        return labels\n\n    def get_simple_features(self):\n        \"\"\"Return simplified binary features as a labelled dictionary.\"\"\"\n        simple_features = {}\n        for i in self.binaries:\n            simple_features[i] = self.binaries[i].basic_features\n        return simple_features\n    # ------------------- only dir --------------------------\n    def run(self):\n        \"\"\"\n        Start detection.\n        \n        :raise NotImplementedError: this method is abstract.\n        \"\"\"\n        raise NotImplementedError\n\nclass Signature(object):\n    \"\"\"Base class for Cuckoo signatures.\"\"\"\n    name = \"\"\n    description = \"\"\n    severity = 1\n    order = 1\n    categories = []\n    families = []\n    authors = []\n    references = []\n    platform = None\n    alert = False\n    enabled = True\n    minimum = None\n    maximum = None\n\n    # Maximum amount of marks to record.\n    markcount = 50\n\n    # Basic filters to reduce the amount of events sent to this signature.\n    filter_apinames = []\n    filter_categories = []\n\n    # If no on_call() handler is present and this field has been set, then\n    # dispatch on a per-API basis to the accompanying API. That is, rather\n    # than calling the generic on_call(), call, e.g., on_call_CreateFile().\n    on_call_dispatch = False\n\n    def __init__(self, caller):\n        \"\"\"\n        :param caller: calling object. Stores results in caller.results\n        \"\"\"\n        self.marks = []\n        self.matched = False\n        self._caller = caller\n\n        # These are set by the caller, they represent the process identifier\n        # and call index respectively.\n        self.pid = None\n        self.cid = None\n        self.call = None\n\n    def _check_value(self, pattern, subject, regex=False, all=False):\n        \"\"\"\n        Checks a pattern against a given subject.\n        \n        :param pattern: string or expression to check for.\n        :param subject: target of the check.\n        :param regex: boolean representing if the pattern is a regular\n                      expression or not and therefore should be compiled.\n        :return: boolean with the result of the check.\n        \"\"\"\n        ret = set()\n        if regex:\n            exp = re.compile(pattern, re.IGNORECASE)\n            if isinstance(subject, list):\n                for item in subject:\n                    if exp.match(item):\n                        ret.add(item)\n            else:\n                if exp.match(subject):\n                    ret.add(subject)\n        else:\n            if isinstance(subject, list):\n                for item in subject:\n                    if item.lower() == pattern.lower():\n                        ret.add(item)\n            else:\n                if subject == pattern:\n                    ret.add(subject)\n\n        # Return all elements.\n        if all:\n            return list(ret)\n        # Return only the first element, if available. Otherwise return None.\n        elif ret:\n            return ret.pop()\n\n    def get_results(self, key=None, default=None):\n        '''\n        Get Signature results\n        '''\n        if key:\n            return self._caller.results.get(key, default)\n\n        return self._caller.results\n\n    def get_processes(self, name=None):\n        \"\"\"Get a list of processes.\n\n        :param name: If set only return processes with that name.\n        :return: List of processes or empty list\n        \"\"\"\n        for item in self.get_results(\"behavior\", {}).get(\"processes\", []):\n            if name is None or item[\"process_name\"] == name:\n                yield item\n\n    def get_process_by_pid(self, pid=None):\n        \"\"\"Get a process by its process identifier.\n\n        :param pid: pid to search for.\n        :return: process.\n        \"\"\"\n        for item in self.get_results(\"behavior\", {}).get(\"processes\", []):\n            if item[\"pid\"] == pid:\n                return item\n\n    def get_summary(self, key=None, default=[]):\n        \"\"\"Get one or all values related to the global summary.\"\"\"\n        summary = self.get_results(\"behavior\", {}).get(\"summary\", {})\n        return summary.get(key, default) if key else summary\n\n    def get_summary_generic(self, pid, actions):\n        \"\"\"Get generic info from summary.\n\n        :param pid: pid of the process. None for all\n        :param actions: A list of actions to get\n        \"\"\"\n        ret = []\n        for process in self.get_results(\"behavior\", {}).get(\"generic\", []):\n            if pid is not None and process[\"pid\"] != pid:\n                continue\n\n            for action in actions:\n                if action in process[\"summary\"]:\n                    ret += process[\"summary\"][action]\n        return ret\n\n    def get_files(self, pid=None, actions=None):\n        \"\"\"Get files read, queried, or written to optionally by a\n        specific process.\n\n        :param pid: the process or None for all\n        :param actions: actions to search for. None is all\n        :return: yields files\n\n        \"\"\"\n        if actions is None:\n            actions = [\n                \"file_opened\", \"file_written\",\n                \"file_read\", \"file_deleted\",\n                \"file_exists\", \"file_failed\",\n            ]\n\n        return self.get_summary_generic(pid, actions)\n\n    def get_dll_loaded(self, pid=None):\n        \"\"\"Get DLLs loaded by a specific process.\n\n        :param pid: the process or None for all\n        :return: yields DLLs loaded\n\n        \"\"\"\n        return self.get_summary_generic(pid, [\"dll_loaded\"])\n\n    def get_keys(self, pid=None, actions=None):\n        \"\"\"Get registry keys.\n\n        :param pid: The pid to look in or None for all.\n        :param actions: the actions as a list.\n        :return: yields registry keys\n\n        \"\"\"\n        if actions is None:\n            actions = [\n                \"regkey_opened\", \"regkey_written\",\n                \"regkey_read\", \"regkey_deleted\",\n            ]\n\n        return self.get_summary_generic(pid, actions)\n\n    def check_file(self, pattern, regex=False, actions=None, pid=None,\n                   all=False):\n        \"\"\"Checks for a file being opened.\n\n        :param pattern: string or expression to check for.\n        :param regex: boolean representing if the pattern is a regular\n                      expression or not and therefore should be compiled.\n        :param actions: a list of key actions to use.\n        :param pid: The process id to check. If it is set to None, all\n                    processes will be checked.\n        :return: boolean with the result of the check.\n        \"\"\"\n        if actions is None:\n            actions = [\n                \"file_opened\", \"file_written\",\n                \"file_read\", \"file_deleted\",\n                \"file_exists\", \"file_failed\",\n            ]\n\n        return self._check_value(pattern=pattern,\n                                 subject=self.get_files(pid, actions),\n                                 regex=regex,\n                                 all=all)\n\n    def check_dll_loaded(self, pattern, regex=False, actions=None, pid=None,\n                         all=False):\n        \"\"\"Checks for DLLs being loaded.\n\n        :param pattern: string or expression to check for.\n        :param regex: boolean representing if the pattern is a regular\n                      expression or not and therefore should be compiled.\n        :param pid: The process id to check. If it is set to None, all\n                    processes will be checked.\n        :return: boolean with the result of the check.\n        \"\"\"\n        return self._check_value(pattern=pattern,\n                                 subject=self.get_dll_loaded(pid),\n                                 regex=regex,\n                                 all=all)\n\n    def check_key(self, pattern, regex=False, actions=None, pid=None,\n                  all=False):\n        \"\"\"Checks for a registry key being accessed.\n\n        :param pattern: string or expression to check for.\n        :param regex: boolean representing if the pattern is a regular\n                      expression or not and therefore should be compiled.\n        :param actions: a list of key actions to use.\n        :param pid: The process id to check. If it is set to None, all\n                    processes will be checked.\n        :return: boolean with the result of the check.\n        \"\"\"\n        if actions is None:\n            actions = [\n                \"regkey_written\", \"regkey_opened\",\n                \"regkey_read\", \"regkey_deleted\",\n            ]\n\n        return self._check_value(pattern=pattern,\n                                 subject=self.get_keys(pid, actions),\n                                 regex=regex,\n                                 all=all)\n\n    def get_mutexes(self, pid=None):\n        \"\"\"\n        Get the summary genertic\n\n        :param pid: Pid to filter for\n        :return:List of mutexes\n        \"\"\"\n        return self.get_summary_generic(pid, [\"mutex\"])\n\n    def check_mutex(self, pattern, regex=False, all=False):\n        \"\"\"Checks for a mutex being opened.\n\n        :param pattern: string or expression to check for.\n        :param regex: boolean representing if the pattern is a regular\n                      expression or not and therefore should be compiled.\n        :return: boolean with the result of the check.\n        \"\"\"\n        return self._check_value(pattern=pattern,\n                                 subject=self.get_mutexes(),\n                                 regex=regex,\n                                 all=all)\n\n    def get_command_lines(self):\n        \"\"\"Retrieves all command lines used.\"\"\"\n        return self.get_summary(\"command_line\")\n\n    def get_wmi_queries(self):\n        \"\"\"Retrieves all executed WMI queries.\"\"\"\n        return self.get_summary(\"wmi_query\")\n\n    def get_net_generic(self, subtype):\n        \"\"\"Generic getting network data.\n\n        :param subtype: subtype string to search for.\n        \"\"\"\n        return self.get_results(\"network\", {}).get(subtype, [])\n\n    def get_net_hosts(self):\n        \"\"\"Returns a list of all hosts.\"\"\"\n        return self.get_net_generic(\"hosts\")\n\n    def get_net_domains(self):\n        \"\"\"Returns a list of all domains.\"\"\"\n        return self.get_net_generic(\"domains\")\n\n    def get_net_http(self):\n        \"\"\"Returns a list of all http data.\"\"\"\n        return self.get_net_generic(\"http\")\n\n    def get_net_http_ex(self):\n        \"\"\"Returns a list of all http data.\"\"\"\n        return \\\n            self.get_net_generic(\"http_ex\") + self.get_net_generic(\"https_ex\")\n\n    def get_net_udp(self):\n        \"\"\"Returns a list of all udp data.\"\"\"\n        return self.get_net_generic(\"udp\")\n\n    def get_net_icmp(self):\n        \"\"\"Returns a list of all icmp data.\"\"\"\n        return self.get_net_generic(\"icmp\")\n\n    def get_net_irc(self):\n        \"\"\"Returns a list of all irc data.\"\"\"\n        return self.get_net_generic(\"irc\")\n\n    def get_net_smtp(self):\n        \"\"\"Returns a list of all smtp data.\"\"\"\n        return self.get_net_generic(\"smtp\")\n\n    def get_virustotal(self):\n        \"\"\"Returns the information retrieved from virustotal.\"\"\"\n        return self.get_results(\"virustotal\", {})\n\n    def get_volatility(self, module=None):\n        \"\"\"Returns the data that belongs to the given module.\"\"\"\n        volatility = self.get_results(\"memory\", {})\n        return volatility if module is None else volatility.get(module, {})\n\n    def get_apkinfo(self, section=None, default={}):\n        \"\"\"Returns the apkinfo results for this analysis.\"\"\"\n        apkinfo = self.get_results(\"apkinfo\", {})\n        return apkinfo if section is None else apkinfo.get(section, default)\n\n    def get_droidmon(self, section=None, default={}):\n        \"\"\"Returns the droidmon results for this analysis.\"\"\"\n        droidmon = self.get_results(\"droidmon\", {})\n        return droidmon if section is None else droidmon.get(section, default)\n\n    def get_googleplay(self, section=None, default={}):\n        \"\"\"Returns the Google Play results for this analysis.\"\"\"\n        googleplay = self.get_results(\"googleplay\", {})\n        return googleplay if section is None else googleplay.get(section, default)\n\n    def check_ip(self, pattern, regex=False, all=False):\n        \"\"\"Checks for an IP address being contacted.\n\n        :param pattern: string or expression to check for.\n        :param regex: boolean representing if the pattern is a regular\n                      expression or not and therefore should be compiled.\n        :return: boolean with the result of the check.\n        \"\"\"\n        return self._check_value(pattern=pattern,\n                                 subject=self.get_net_hosts(),\n                                 regex=regex,\n                                 all=all)\n\n    def check_domain(self, pattern, regex=False, all=False):\n        \"\"\"Checks for a domain being contacted.\n\n        :param pattern: string or expression to check for.\n        :param regex: boolean representing if the pattern is a regular\n                      expression or not and therefore should be compiled.\n        :return: boolean with the result of the check.\n        \"\"\"\n        domains = set()\n        for item in self.get_net_domains():\n            domains.add(item[\"domain\"])\n\n        return self._check_value(pattern=pattern,\n                                 subject=list(domains),\n                                 regex=regex,\n                                 all=all)\n\n    def check_url(self, pattern, regex=False, all=False):\n        \"\"\"Checks for a URL being contacted.\n\n        :param pattern: string or expression to check for.\n        :param regex: boolean representing if the pattern is a regular\n                      expression or not and therefore should be compiled.\n        :return: boolean with the result of the check.\n        \"\"\"\n        urls = set()\n        for item in self.get_net_http():\n            urls.add(item[\"uri\"])\n\n        return self._check_value(pattern=pattern,\n                                 subject=list(urls),\n                                 regex=regex,\n                                 all=all)\n\n    def init(self):\n        \"\"\"Allow signatures to initialize themselves.\"\"\"\n\n    def mark_call(self, *args, **kwargs):\n        \"\"\"Mark the current call as explanation as to why this signature\n        matched.\"\"\"\n        mark = {\n            \"type\": \"call\",\n            \"pid\": self.pid,\n            \"cid\": self.cid,\n            \"call\": self.call,\n        }\n\n        if args or kwargs:\n            log.warning(\n                \"You have provided extra arguments to the mark_call() method \"\n                \"which no longer supports doing so. Please report explicit \"\n                \"IOCs through mark_ioc().\"\n            )\n\n        self.marks.append(mark)\n\n    def mark_ioc(self, category, ioc, description=None):\n        \"\"\"Mark an IOC as explanation as to why the current signature\n        matched.\"\"\"\n        mark = {\n            \"type\": \"ioc\",\n            \"category\": category,\n            \"ioc\": ioc,\n            \"description\": description,\n        }\n\n        # Prevent duplicates.\n        if mark not in self.marks:\n            self.marks.append(mark)\n\n    def mark_vol(self, plugin, **kwargs):\n        \"\"\"Mark output of a Volatility plugin as explanation as to why the\n        current signature matched.\"\"\"\n        mark = {\n            \"type\": \"volatility\",\n            \"plugin\": plugin,\n        }\n        mark.update(kwargs)\n        self.marks.append(mark)\n\n    def mark(self, **kwargs):\n        \"\"\"Mark arbitrary data.\"\"\"\n        mark = {\n            \"type\": \"generic\",\n        }\n        mark.update(kwargs)\n        self.marks.append(mark)\n\n    def has_marks(self, count=None):\n        \"\"\"Returns true if this signature has one or more marks.\"\"\"\n        if count is not None:\n            return len(self.marks) >= count\n        return not not self.marks\n\n    def on_call(self, call, process):\n        \"\"\"Notify signature about API call. Return value determines\n        if this signature is done or could still match.\n\n        Only called if signature is \"active\".\n\n        :param call: logged API call.\n        :param process: proc object.\n        \"\"\"\n        # Dispatch this call to a per-API specific handler.\n        if self.on_call_dispatch:\n            return getattr(self, \"on_call_%s\" % call[\"api\"])(call, process)\n\n        raise NotImplementedError\n\n    def on_signature(self, signature):\n        \"\"\"Event yielded when another signatures has matched. Some signatures\n        only take effect when one or more other signatures have matched as\n        well.\n\n        :param signature: The signature that just matched\n        \"\"\"\n\n    def on_process(self, process):\n        \"\"\"Called on process change.\n\n        :note: Can be used for cleanup of flags, re-activation of the signature, etc.\n        :param process: dictionary describing this process\n        \"\"\"\n\n    def on_complete(self):\n        \"\"\"\n        Signature is notified when all API calls have been processed.\"\"\"\n\n    def results(self):\n        \"\"\"Turn this signature into actionable results.\"\"\"\n        return dict(name=self.name,\n                    description=self.description,\n                    severity=self.severity,\n                    families=self.families,\n                    references=self.references,\n                    marks=self.marks[:self.markcount],\n                    markcount=len(self.marks))\n\nclass Report(object):\n    \"\"\"Base abstract class for reporting module.\"\"\"\n    order = 1\n\n    def __init__(self):\n        self.analysis_path = \"\"\n        self.reports_path = \"\"\n        self.task = None\n        self.options = None\n\n    def _get_analysis_path(self, subpath):\n        return os.path.join(self.analysis_path, subpath)\n\n    def set_path(self, analysis_path):\n        \"\"\"Set analysis folder path.\n\n        :param analysis_path: analysis folder path.\n        \"\"\"\n        self.analysis_path = analysis_path\n        self.conf_path = self._get_analysis_path(\"analysis.conf\")\n        self.file_path = os.path.realpath(self._get_analysis_path(\"binary\"))\n        self.reports_path = self._get_analysis_path(\"reports\")\n        self.shots_path = self._get_analysis_path(\"shots\")\n        self.pcap_path = self._get_analysis_path(\"dump.pcap\")\n\n        try:\n            create_folder(folder=self.reports_path)\n        except CuckooOperationalError as e:\n            raise CuckooReportError(e)\n\n    def set_options(self, options):\n        \"\"\"Set report options.\n\n        :param options: report options dict.\n        \"\"\"\n        self.options = options\n\n    def set_task(self, task):\n        \"\"\"Add task information.\n\n        :param task: task dictionary.\n        \"\"\"\n        self.task = task\n\n    def run(self):\n        \"\"\"Start report processing.\n\n        :raise NotImplementedError: this method is abstract.\n        \"\"\"\n        raise NotImplementedError\n\nclass BehaviorHandler(object):\n    \"\"\"Base class for behavior handlers inside of BehaviorAnalysis.\"\"\"\n    key = \"undefined\"\n\n    # Behavior event types this handler is interested in.\n    event_types = []\n\n    def __init__(self, behavior_analysis):\n        self.analysis = behavior_analysis\n\n    def handles_path(self, logpath):\n        \"\"\"Needs to return True for the log files this handler wants to\n        process.\"\"\"\n        return False\n\n    def parse(self, logpath):\n        \"\"\"Called after handles_path succeeded, should generate behavior\n        events.\"\"\"\n        raise NotImplementedError\n\n    def handle_event(self, event):\n        \"\"\"Handle an event that gets passed down the stack.\"\"\"\n        raise NotImplementedError\n\n    def run(self):\n        \"\"\"Return the handler specific structure, gets placed into\n        behavior[self.key].\"\"\"\n        raise NotImplementedError\n\nclass ProtocolHandler(object):\n    \"\"\"Abstract class for protocol handlers coming out of the analysis.\"\"\"\n    def __init__(self, handler, version=None):\n        self.handler = handler\n        self.version = version\n\n    def init(self):\n        pass\n\n    def close(self):\n        pass\n"
  },
  {
    "path": "lib/cuckoo/common/colors.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport sys\n\ndef color(text, color_code):\n    \"\"\"Colorize text.\n    \n    :param text: text.\n    :param color_code: color.\n    :return: colorized text.\n    \"\"\"\n    # $TERM under Windows:\n    # cmd.exe -> \"\" (what would you expect..?)\n    # cygwin -> \"cygwin\" (should support colors, but doesn't work somehow)\n    # mintty -> \"xterm\" (supports colors)\n    if sys.platform == \"win32\" and os.getenv(\"TERM\") != \"xterm\":\n        return text\n    return \"\\x1b[%dm%s\\x1b[0m\" % (color_code, text)\n\ndef black(text):\n    return color(text, 30)\n\ndef red(text):\n    return color(text, 31)\n\ndef green(text):\n    return color(text, 32)\n\ndef yellow(text):\n    return color(text, 33)\n\ndef blue(text):\n    return color(text, 34)\n\ndef magenta(text):\n    return color(text, 35)\n\ndef cyan(text):\n    return color(text, 36)\n\ndef white(text):\n    return color(text, 37)\n\ndef bold(text):\n    return color(text, 1)\n"
  },
  {
    "path": "lib/cuckoo/common/compare.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport collections\n\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\n\nANALYSIS_ROOT = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\")\n\ndef behavior_categories_percent(calls):\n    catcounts = collections.defaultdict(lambda: 0)\n\n    for call in calls:\n        catcounts[call.get(\"category\", \"none\")] += 1\n\n    return dict(catcounts)\n\ndef combine_behavior_percentages(stats):\n    # get all categories present\n    cats = set()\n    for v in stats.values():\n        for v2 in v.values():\n            cats |= set(v2.keys())\n\n    sums = {}\n    for tid in stats:\n        sums[tid] = {}\n        for cat in cats:\n            sums[tid][cat] = sum(j.get(cat, 0) for j in stats[tid].values())\n\n    totals = dict((k, sum(v.values())) for k, v in sums.items())\n\n    percentages = {}\n    for tid in stats:\n        percentages[tid] = {}\n        for cat in cats:\n            percentages[tid][cat] = round(sums[tid][cat] * 1.0 / totals[tid] * 100, 2)\n\n    return percentages\n\ndef iter_task_process_logfiles(tid):\n    tpath = os.path.join(ANALYSIS_ROOT, str(tid), \"logs\")\n\n    for fname in os.listdir(tpath):\n        fpath = os.path.join(tpath, fname)\n        pid = int(fname.split(\".\")[0])\n        yield (pid, fpath)\n\ndef helper_percentages_storage(tid1, tid2):\n    counts = {}\n\n    for tid in [tid1, tid2]:\n        counts[tid] = {}\n\n        for pid, fpath in iter_task_process_logfiles(tid):\n            # ppl = ParseProcessLog(fpath)\n            # category_counts = behavior_categories_percent(ppl.calls)\n            category_counts = None\n\n            counts[tid][pid] = category_counts\n\n    return combine_behavior_percentages(counts)\n\ndef helper_percentages_mongo(results_db, tid1, tid2, ignore_categories=[\"misc\"]):\n    counts = {}\n\n    for tid in[tid1, tid2]:\n        counts[tid] = {}\n\n        pids_calls = results_db.analysis.find_one(\n            {\n                \"info.id\": int(tid),\n            },\n            {\n                \"behavior.processes.pid\": 1,\n                \"behavior.processes.calls\": 1\n            }\n        )\n\n        if not pids_calls:\n            continue\n\n        for pdoc in pids_calls[\"behavior\"][\"processes\"]:\n            pid = pdoc[\"pid\"]\n            counts[tid][pid] = {}\n\n            for coid in pdoc[\"calls\"]:\n                chunk = results_db.calls.find_one({\"_id\": coid}, {\"calls.category\": 1})\n                category_counts = behavior_categories_percent(chunk[\"calls\"])\n                for cat, count in category_counts.items():\n                    if cat in ignore_categories:\n                        continue\n\n                    counts[tid][pid][cat] = counts[tid][pid].get(cat, 0) + count\n\n    return combine_behavior_percentages(counts)\n"
  },
  {
    "path": "lib/cuckoo/common/config.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport ConfigParser\n\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\nfrom lib.cuckoo.common.exceptions import CuckooOperationalError\nfrom lib.cuckoo.common.objects import Dictionary\n\nclass Config():\n    \"\"\"Configuration file parser.\n\n    :param file_name: file name without extension.\n    :param cfg: configuration file path.\n    \"\"\"\n\n    def __init__(self, file_name=\"cuckoo\", cfg=None):\n        \"\"\"\n        :param file_name: file name without extension.\n        :param cfg: configuration file path.\n        \"\"\"\n        config = ConfigParser.ConfigParser()\n\n        if cfg:\n            config.read(cfg)\n        else:\n            config.read(os.path.join(CUCKOO_ROOT, \"conf\", \"%s.conf\" % file_name))\n\n        for section in config.sections():\n            setattr(self, section, Dictionary())\n            for name, raw_value in config.items(section):\n                try:\n                    # Ugly fix to avoid '0' and '1' to be parsed as a\n                    # boolean value.\n                    # We raise an exception to goto fail^w parse it\n                    # as integer.\n                    if config.get(section, name) in [\"0\", \"1\"]:\n                        raise ValueError\n\n                    value = config.getboolean(section, name)\n                except ValueError:\n                    try:\n                        value = config.getint(section, name)\n                    except ValueError:\n                        value = config.get(section, name)\n\n                setattr(getattr(self, section), name, value)\n\n    def get(self, section):\n        \"\"\"Get option.\n\n        :param section: section to fetch.\n        :raise CuckooOperationalError: if section not found.\n        :return: option value.\n        \"\"\"\n        try:\n            return getattr(self, section)\n        except AttributeError as e:\n            raise CuckooOperationalError(\"Option %s is not found in \"\n                                         \"configuration, error: %s\" %\n                                         (section, e))\n\ndef parse_options(options):\n    \"\"\"Parse the analysis options field to a dictionary.\"\"\"\n    ret = {}\n    for field in options.split(\",\"):\n        if \"=\" not in field:\n            continue\n\n        key, value = field.split(\"=\", 1)\n        ret[key.strip()] = value.strip()\n    return ret\n\ndef emit_options(options):\n    \"\"\"Emit the analysis options from a dictionary to a string.\"\"\"\n    return \",\".join(\"%s=%s\" % (k, v) for k, v in options.items())\n"
  },
  {
    "path": "lib/cuckoo/common/constants.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\n\n_current_dir = os.path.abspath(os.path.dirname(__file__))\nCUCKOO_ROOT = os.path.normpath(os.path.join(_current_dir, \"..\", \"..\", \"..\"))\n\nCUCKOO_VERSION = \"2.0-dev\"\nCUCKOO_GUEST_PORT = 8000\nCUCKOO_GUEST_INIT = 0x001\nCUCKOO_GUEST_RUNNING = 0x002\nCUCKOO_GUEST_COMPLETED = 0x003\nCUCKOO_GUEST_FAILED = 0x004\nGITHUB_URL = \"https://github.com/PowerLZY/Bold-Falcon\"\nISSUES_PAGE_URL = \"https://github.com/PowerLZY/Bold-Falcon/issues\"\n\nLATEST_HTTPREPLAY = \"0.1.11\"\n"
  },
  {
    "path": "lib/cuckoo/common/defines.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nREG_NONE                = 0\nREG_SZ                  = 1\nREG_EXPAND_SZ           = 2\nREG_BINARY              = 3\nREG_DWORD_LITTLE_ENDIAN = 4\nREG_DWORD               = 4\nREG_DWORD_BIG_ENDIAN    = 5\n"
  },
  {
    "path": "lib/cuckoo/common/dns.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport select\nimport socket\nimport threading\n\ntry:\n    import pycares\n    HAVE_CARES = True\nexcept:\n    HAVE_CARES = False\n\n#try:\n#    import gevent, gevent.socket\n#    HAVE_GEVENT = True\n#except:\nHAVE_GEVENT = False\n\n\n# these are used by all resolvers\nDNS_TIMEOUT = 5\nDNS_TIMEOUT_VALUE = \"\"\n\ndef set_timeout(value):\n    global DNS_TIMEOUT\n    DNS_TIMEOUT = value\n\ndef set_timeout_value(value):\n    global DNS_TIMEOUT_VALUE\n    DNS_TIMEOUT_VALUE = value\n\n\n# standard gethostbyname in thread\n# http://code.activestate.com/recipes/473878/\ndef with_timeout(func, args=(), kwargs={}):\n    \"\"\"This function will spawn a thread and run the given function\n    using the args, kwargs and return the given default value if the\n    timeout_duration is exceeded.\n    \"\"\"\n    class ResultThread(threading.Thread):\n        daemon = True\n        def __init__(self):\n            threading.Thread.__init__(self)\n            self.result, self.error = None, None\n        def run(self):\n            try:\n                self.result = func(*args, **kwargs)\n            except Exception, e:\n                self.error = e\n\n    it = ResultThread()\n    it.start()\n    it.join(DNS_TIMEOUT)\n    if it.isAlive():\n        return DNS_TIMEOUT_VALUE\n    else:\n        if it.error:\n            raise it.error\n        return it.result\n\ndef resolve_thread(name):\n    return with_timeout(gethostbyname, (name,))\n\ndef gethostbyname(name):\n    try:\n        ip = socket.gethostbyname(name)\n    except socket.gaierror:\n        ip = \"\"\n    return ip\n\n\n# C-ARES (http://c-ares.haxx.se/)\ndef resolve_cares(name):\n    # create new c-ares channel\n    careschan = pycares.Channel(timeout=DNS_TIMEOUT, tries=1)\n\n    # if we don't get a response we return the default value\n    result = Resultholder()\n    result.value = DNS_TIMEOUT_VALUE\n\n    def setresult_cb(res, error):\n        # ignore error and just take first result ip (randomized anyway)\n        if res and res.addresses:\n            result.value = res.addresses[0]\n\n    # resolve with cb\n    careschan.gethostbyname(name, socket.AF_INET, setresult_cb)\n\n    # now do the actual work\n    readfds, writefds = careschan.getsock()\n    canreadfds, canwritefds, _ = select.select(readfds, writefds, [],\n                                               DNS_TIMEOUT)\n    for rfd in canreadfds:\n        careschan.process_fd(rfd, -1)\n\n    # if the query did not succeed, setresult was not called and we just\n    # return result destroy the channel first to not leak anything\n    careschan.destroy()\n    return result.value\n\n# workaround until py3 nonlocal (for c-ares and gevent)\nclass Resultholder:\n    pass\n\n\n# gevent based resolver with timeout\n\"\"\"def resolve_gevent(name):\n    result = resolve_gevent_real(name)\n    # if it failed, do this a second time because of strange libevent behavior\n    # basically sometimes the Timeout fires immediately instead of after\n    # DNS_TIMEOUT\n    if result == DNS_TIMEOUT_VALUE:\n        result = resolve_gevent_real(name)\n    return result\n\ndef resolve_gevent_real(name):\n    result = DNS_TIMEOUT_VALUE\n    with gevent.Timeout(DNS_TIMEOUT, False):\n        try:\n            result = gevent.socket.gethostbyname(name)\n        except socket.gaierror:\n            pass\n\n    return result\n\"\"\"\n\n# choose resolver automatically\ndef resolve(name):\n    if HAVE_CARES:\n        return resolve_cares(name)\n    #elif HAVE_GEVENT:\n    #    return resolve_gevent(name)\n    else:\n        return resolve_thread(name)\n\n# another alias\nresolve_best = resolve\n"
  },
  {
    "path": "lib/cuckoo/common/exceptions.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nclass CuckooCriticalError(Exception):\n    \"\"\"Cuckoo struggle in a critical error.\"\"\"\n\nclass CuckooStartupError(CuckooCriticalError):\n    \"\"\"Error starting up Cuckoo.\"\"\"\n\nclass CuckooDatabaseError(CuckooCriticalError):\n    \"\"\"Cuckoo database error.\"\"\"\n\nclass CuckooDependencyError(CuckooCriticalError):\n    \"\"\"Missing dependency error.\"\"\"\n\nclass CuckooOperationalError(Exception):\n    \"\"\"Cuckoo operation error.\"\"\"\n\nclass CuckooMachineError(CuckooOperationalError):\n    \"\"\"Error managing analysis machine.\"\"\"\n\nclass CuckooAnalysisError(CuckooOperationalError):\n    \"\"\"Error during analysis.\"\"\"\n\nclass CuckooProcessingError(CuckooOperationalError):\n    \"\"\"Error in processor module.\"\"\"\n\nclass CuckooDetectionError(CuckooOperationalError):\n    \"\"\"Error in processor module.\"\"\"\n\nclass CuckooReportError(CuckooOperationalError):\n    \"\"\"Error in reporting module.\"\"\"\n\nclass CuckooGuestError(CuckooOperationalError):\n    \"\"\"Cuckoo guest agent error.\"\"\"\n\nclass CuckooResultError(CuckooOperationalError):\n    \"\"\"Cuckoo result server error.\"\"\"\n"
  },
  {
    "path": "lib/cuckoo/common/irc.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2012 JoseMi Holguin (@j0sm1)\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\n\"\"\"IRC Protocol\"\"\"\n\nimport cStringIO\nimport re\nimport logging\n\nfrom lib.cuckoo.common.utils import convert_to_printable\n\nlog = logging.getLogger(\"Processing.Pcap.irc.protocol\")\n\n\nclass ircMessage(object):\n    \"\"\"IRC Protocol Request.\"\"\"\n\n    # Client commands\n    __methods_client = dict.fromkeys(( \"PASS\", \"JOIN\", \"USER\", \"OPER\", \"MODE\", \"SERVICE\", \"QUIT\", \"SQUIT\",\n        \"PART\", \"TOPIC\", \"NAMES\", \"LIST\", \"INVITE\",\n        \"KICK\", \"PRIVMSG\", \"NOTICE\", \"MOTD\", \"LUSERS\", \"VERSION\", \"STATS\", \"LINKS\", \"TIME\", \"CONNECT\",\n        \"TRACE\", \"ADMIN\", \"INFO\", \"SERVLIST\",\n        \"SQUERY\", \"WHO\", \"WHOIS\", \"WHOWAS\", \"KILL\", \"PING\", \"PONG\", \"ERROR\", \"AWAY\", \"REHASH\", \"DIE\", \"RESTART\",\n        \"SUMMON\", \"USERS\", \"WALLOPS\",\n        \"USERHOST\", \"NICK\", \"ISON\"\n    ))\n\n    def __init__(self):\n        self._messages = []\n        # Server commandis : prefix - command - params \n        self._sc = {}\n        # Client commands : command - params \n        self._cc = {}\n\n    def _unpack(self, buf):\n        \"\"\"Extract into a list irc messages of a tcp streams.\n        @buf: tcp stream data\n        \"\"\"\n        try:\n            f = cStringIO.StringIO(buf)\n            lines = f.readlines()\n        except Exception:\n            log.error(\"Failed reading tcp stream buffer\")\n            return False\n\n        for element in lines:\n            if not re.match(\"^:\", element) is None:\n                command = \"([a-zA-Z]+|[0-9]{3})\"\n                params = \"(\\x20.+)\"\n                irc_server_msg = re.findall(\"(^:[\\w+.{}!@|()]+\\x20)\"+command+params,element)\n                if irc_server_msg:\n                    self._sc[\"prefix\"] = convert_to_printable(irc_server_msg[0][0].strip())\n                    self._sc[\"command\"] = convert_to_printable(irc_server_msg[0][1].strip())\n                    self._sc[\"params\"] = convert_to_printable(irc_server_msg[0][2].strip())\n                    self._sc[\"type\"] = \"server\"\n                    self._messages.append(dict(self._sc))\n            else:\n                irc_client_msg = re.findall(\"([a-zA-Z]+\\x20)(.+[\\x0a\\0x0d])\",element)\n                if irc_client_msg and irc_client_msg[0][0].strip() in self.__methods_client:\n                    self._cc[\"command\"] = convert_to_printable(irc_client_msg[0][0].strip())\n                    self._cc[\"params\"] = convert_to_printable(irc_client_msg[0][1].strip())\n                    self._cc[\"type\"] = \"client\"\n                    self._messages.append(dict(self._cc))\n    \n    def getClientMessages(self, buf):\n        \"\"\"Get irc client commands of tcp streams.\n        @buf: list of messages\n        @return: dictionary of the client messages\n        \"\"\"\n\n        try:\n            self._unpack(buf)\n        except Exception:\n            return None\n\n        entry_cc = []\n        for msg in self._messages:\n            if msg[\"type\"] == \"client\":\n                entry_cc.append(msg)\n\n        return entry_cc\n\n    def getClientMessagesFilter(self, buf, filters):\n        \"\"\"Get irc client commands of tcp streams.\n        @buf: list of messages\n        @return: dictionary of the client messages filtered\n        \"\"\"\n        try:\n            self._unpack(buf)\n        except Exception:\n            return None\n\n        entry_cc = []\n\n        for msg in self._messages:\n            if msg[\"type\"] == \"client\" and msg[\"command\"] not in filters:\n                entry_cc.append(msg)\n\n        return entry_cc\n\n    def getServerMessages(self, buf):\n        \"\"\"Get irc server commands of tcp streams.\n        @buf: list of messages\n        @return: dictionary of server messages\n        \"\"\"\n\n        try:\n            self._unpack(buf)\n        except Exception:\n            return None\n\n        entry_sc = []\n\n        for msg in self._messages:\n            if msg[\"type\"] == \"server\":\n                entry_sc.append(msg)\n\n        return entry_sc\n\n    def getServerMessagesFilter(self, buf, filters):\n        \"\"\"Get irc server commands of tcp streams.\n        @buf: list of messages\n        @return: dictionary of server messages filtered\n        \"\"\"\n        try:\n            self._unpack(buf)\n        except Exception:\n            return None\n\n        entry_sc = []\n        for msg in self._messages:\n            if msg[\"type\"] == \"server\" and msg[\"command\"] not in filters:\n                entry_sc.append(msg)\n\n        return entry_sc\n\n    def isthereIRC(self, buf):\n        \"\"\"Check if there is irc messages in a stream TCP.\n        @buf: stream data\n        @return: boolean result\n        \"\"\"\n\n        try:\n            self._unpack(buf)\n            if self._messages:\n                return True\n            else:\n                return False\n        except Exception:\n            return False\n"
  },
  {
    "path": "lib/cuckoo/common/logo.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport sys\nimport random\n\nfrom lib.cuckoo.common.colors import color, yellow\nfrom lib.cuckoo.common.constants import CUCKOO_VERSION\n\ndef logo():\n    \"\"\"\n    Bold-Falcon asciiarts.\n\n    :return: asciiarts array.\n    \"\"\"\n    logos = []\n\n    logos.append(\"\"\"\n     ____        _     _       _____     _                 \n    | __ )  ___ | | __| |     |  ___|_ _| | ___ ___  _ __  \n    |  _ \\ / _ \\| |/ _` |_____| |_ / _` | |/ __/ _ \\| '_ \\ \n    | |_) | (_) | | (_| |_____|  _| (_| | | (_| (_) | | | |\n    |____/ \\___/|_|\\__,_|     |_|  \\__,_|_|\\___\\___/|_| |_|\n    \"\"\")\n\n\n    print(color(random.choice(logos), random.randrange(31, 37)))\n    print\n    print(\" Bold-Falcon Sandbox %s\" % yellow(CUCKOO_VERSION))\n    print(\" www.Bold-Falcon.org\")\n    print(\" Copyright (c) 2021-2023\")\n    print\n    sys.stdout.flush()\n"
  },
  {
    "path": "lib/cuckoo/common/netlog.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport datetime\nimport hashlib\nimport logging\nimport os.path\nimport struct\n\ntry:\n    import bson\n    HAVE_BSON = True\nexcept ImportError:\n    HAVE_BSON = False\nelse:\n    # The BSON module provided by pymongo works through its \"BSON\" class.\n    if hasattr(bson, \"BSON\"):\n        bson_decode = lambda d: bson.BSON(d).decode()\n    # The BSON module provided by \"pip install bson\" works through the\n    # \"loads\" function (just like pickle etc.)\n    elif hasattr(bson, \"loads\"):\n        bson_decode = lambda d: bson.loads(d)\n\nfrom lib.cuckoo.common.abstracts import ProtocolHandler\nfrom lib.cuckoo.common.utils import get_filename_from_path\nfrom lib.cuckoo.common.exceptions import CuckooResultError\n\nlog = logging.getLogger(__name__)\n\n# 20 Mb max message length.\nMAX_MESSAGE_LENGTH = 20 * 1024 * 1024\n\ndef pointer_converter_32bit(v):\n    return \"0x%08x\" % (v % 2**32)\n\ndef pointer_converter_64bit(v):\n    return \"0x%016x\" % (v % 2**64)\n\ndef default_converter_32bit(v):\n    if isinstance(v, (int, long)) and v < 0:\n        return v % 2**32\n\n    # Try to avoid various unicode issues through usage of latin-1 encoding.\n    if isinstance(v, str):\n        return v.decode(\"latin-1\")\n    return v\n\ndef default_converter_64bit(v):\n    # Don't convert signed 64-bit integers into unsigned 64-bit integers as\n    # MongoDB doesn't support 64-bit unsigned integers (and ElasticSearch\n    # probably doesn't either).\n    # if isinstance(v, (int, long)) and v < 0:\n        # return v % 2**64\n\n    # Try to avoid various unicode issues through usage of latin-1 encoding.\n    if isinstance(v, str):\n        return v.decode(\"latin-1\")\n    return v\n\nclass BsonParser(ProtocolHandler):\n    \"\"\"Receives and interprets .bson logs from the monitor.\n\n    The monitor provides us with \"info\" messages that explain how the function\n    arguments will come through later on. This class remembers these info\n    mappings and then transforms the api call messages accordingly.\n\n    Other message types typically get passed through after renaming the\n    keys slightly.\n    \"\"\"\n    converters_32bit = {\n        None: default_converter_32bit,\n        \"p\": pointer_converter_32bit,\n        \"x\": pointer_converter_32bit,\n    }\n\n    converters_64bit = {\n        None: default_converter_64bit,\n        \"p\": pointer_converter_64bit,\n        \"x\": pointer_converter_32bit,\n    }\n\n    def init(self):\n        self.fd = self.handler\n\n        self.infomap = {}\n        self.flags_value = {}\n        self.flags_bitmask = {}\n        self.pid = None\n        self.is_64bit = False\n        self.buffer_sha1 = None\n\n        if not HAVE_BSON:\n            log.critical(\n                \"Starting BsonParser, but bson is not available! \"\n                \"(install with `pip install bson`)\"\n            )\n\n    def resolve_flags(self, apiname, argdict, flags):\n        # Resolve 1:1 values.\n        for argument, values in self.flags_value[apiname].items():\n            if isinstance(argdict[argument], str):\n                value = int(argdict[argument], 16)\n            else:\n                value = argdict[argument]\n\n            if value in values:\n                flags[argument] = values[value]\n\n        # Resolve bitmasks.\n        for argument, values in self.flags_bitmask[apiname].items():\n            if argument in flags:\n                continue\n\n            flags[argument] = []\n\n            if isinstance(argdict[argument], str):\n                value = int(argdict[argument], 16)\n            else:\n                value = argdict[argument]\n\n            for key, flag in values:\n                # TODO Have the monitor provide actual bitmasks as well.\n                if (value & key) == key:\n                    flags[argument].append(flag)\n\n            flags[argument] = \"|\".join(flags[argument])\n\n    def determine_unserializers(self, arginfo):\n        \"\"\"Determines which unserializers (or converters) have to be used in\n        order to parse the various arguments for this function call. Keeps in\n        mind whether the current bson is 32-bit or 64-bit.\"\"\"\n        argnames, converters = [], []\n\n        for argument in arginfo:\n            if isinstance(argument, (tuple, list)):\n                argument, argtype = argument\n            else:\n                argtype = None\n\n            if self.is_64bit:\n                converter = self.converters_64bit[argtype]\n            else:\n                converter = self.converters_32bit[argtype]\n\n            argnames.append(argument)\n            converters.append(converter)\n\n        return argnames, converters\n\n    def __iter__(self):\n        self.fd.seek(0)\n\n        while True:\n            data = self.fd.read(4)\n            if not data:\n                return\n\n            if len(data) != 4:\n                log.critical(\"BsonParser lacking data.\")\n                return\n\n            blen = struct.unpack(\"I\", data)[0]\n            if blen > MAX_MESSAGE_LENGTH:\n                log.critical(\n                    \"BSON message larger than MAX_MESSAGE_LENGTH, \"\n                    \"stopping handler.\"\n                )\n                return\n\n            data += self.fd.read(blen-4)\n            if len(data) < blen:\n                log.critical(\"BsonParser lacking data.\")\n                return\n\n            try:\n                dec = bson_decode(data)\n            except Exception as e:\n                log.warning(\n                    \"BsonParser decoding problem %s on data[:50] %s\",\n                    e, repr(data[:50])\n                )\n                return\n\n            mtype = dec.get(\"type\", \"none\")\n            index = dec.get(\"I\", -1)\n\n            if mtype == \"info\":\n                # API call index info message, explaining the argument names, etc.\n                name = dec.get(\"name\", \"NONAME\")\n                arginfo = dec.get(\"args\", [])\n                category = dec.get(\"category\")\n\n                argnames, converters = self.determine_unserializers(arginfo)\n                self.infomap[index] = name, arginfo, argnames, converters, category\n\n                if dec.get(\"flags_value\"):\n                    self.flags_value[name] = {}\n                    for arg, values in dec[\"flags_value\"].items():\n                        self.flags_value[name][arg] = dict(values)\n\n                if dec.get(\"flags_bitmask\"):\n                    self.flags_bitmask[name] = {}\n                    for arg, values in dec[\"flags_bitmask\"].items():\n                        self.flags_bitmask[name][arg] = values\n                continue\n\n            # Handle dumped buffers.\n            if mtype == \"buffer\":\n                buf = dec.get(\"buffer\")\n                sha1 = dec.get(\"checksum\")\n                self.buffer_sha1 = hashlib.sha1(buf).hexdigest()\n\n                # Why do we pass along a sha1 checksum again?\n                if sha1 != self.buffer_sha1:\n                    log.warning(\"Incorrect sha1 passed along for a buffer.\")\n\n                # If the parent is netlogs ResultHandler then we actually dump\n                # it - this should only be the case during the analysis, any\n                # after processing will then be ignored.\n                from lib.cuckoo.core.resultserver import ResultHandler\n\n                if isinstance(self.fd, ResultHandler):\n                    filepath = os.path.join(\n                        self.fd.storagepath, \"buffer\", self.buffer_sha1\n                    )\n                    with open(filepath, \"wb\") as f:\n                        f.write(buf)\n\n                continue\n\n            tid = dec.get(\"T\", 0)\n            time = dec.get(\"t\", 0)\n\n            parsed = {\n                \"type\": mtype,\n                \"tid\": tid,\n                \"time\": time,\n            }\n\n            if mtype == \"debug\":\n                parsed[\"message\"] = dec.get(\"msg\", \"\")\n                log.info(\"Debug message from monitor: %s\", parsed[\"message\"])\n            else:\n                # Regular api call from monitor\n                if index not in self.infomap:\n                    log.warning(\"Got API with unknown index - monitor needs \"\n                                \"to explain first: {0}\".format(dec))\n                    continue\n\n                apiname, arginfo, argnames, converters, category = self.infomap[index]\n                args = dec.get(\"args\", [])\n\n                if len(args) != len(argnames):\n                    log.warning(\n                        \"Inconsistent arg count (compared to arg names) \"\n                        \"on %s: %s names %s\", dec, argnames, apiname\n                    )\n                    continue\n\n                argdict = {}\n                for idx, value in enumerate(args):\n                    argdict[argnames[idx]] = converters[idx](value)\n\n                # Special new process message from the monitor.\n                if apiname == \"__process__\":\n                    parsed[\"type\"] = \"process\"\n\n                    if \"TimeLow\" in argdict:\n                        timelow = argdict[\"TimeLow\"]\n                        timehigh = argdict[\"TimeHigh\"]\n\n                        parsed[\"pid\"] = pid = argdict[\"ProcessIdentifier\"]\n                        parsed[\"ppid\"] = argdict[\"ParentProcessIdentifier\"]\n                        modulepath = argdict[\"ModulePath\"]\n\n                    elif \"time_low\" in argdict:\n                        timelow = argdict[\"time_low\"]\n                        timehigh = argdict[\"time_high\"]\n\n                        if \"pid\" in argdict:\n                            parsed[\"pid\"] = pid = argdict[\"pid\"]\n                            parsed[\"ppid\"] = argdict[\"ppid\"]\n                        else:\n                            parsed[\"pid\"] = pid = argdict[\"process_identifier\"]\n                            parsed[\"ppid\"] = argdict[\"parent_process_identifier\"]\n\n                        modulepath = argdict[\"module_path\"]\n\n                    else:\n                        raise CuckooResultError(\n                            \"I don't recognize the bson log contents.\"\n                        )\n\n                    # FILETIME is 100-nanoseconds from 1601 :/\n                    vmtimeunix = (timelow + (timehigh << 32))\n                    vmtimeunix = vmtimeunix / 10000000.0 - 11644473600\n                    vmtime = datetime.datetime.fromtimestamp(vmtimeunix)\n                    parsed[\"first_seen\"] = vmtime\n\n                    procname = get_filename_from_path(modulepath)\n                    parsed[\"process_path\"] = modulepath\n                    parsed[\"process_name\"] = procname\n                    parsed[\"command_line\"] = argdict.get(\"command_line\")\n\n                    # Is this a 64-bit process?\n                    if argdict.get(\"is_64bit\"):\n                        self.is_64bit = True\n\n                    # Is this process being \"tracked\"?\n                    parsed[\"track\"] = bool(argdict.get(\"track\", 1))\n                    parsed[\"modules\"] = argdict.get(\"modules\", {})\n\n                    self.pid = pid\n\n                elif apiname == \"__thread__\":\n                    parsed[\"pid\"] = pid = argdict[\"ProcessIdentifier\"]\n\n                # elif apiname == \"__anomaly__\":\n                    # tid = argdict[\"ThreadIdentifier\"]\n                    # subcategory = argdict[\"Subcategory\"]\n                    # msg = argdict[\"Message\"]\n                    # self.handler.log_anomaly(subcategory, tid, msg)\n                    # return True\n\n                else:\n                    parsed[\"type\"] = \"apicall\"\n                    parsed[\"pid\"] = self.pid\n                    parsed[\"api\"] = apiname\n                    parsed[\"category\"] = category\n                    parsed[\"status\"] = argdict.pop(\"is_success\", 1)\n                    parsed[\"return_value\"] = argdict.pop(\"retval\", 0)\n                    parsed[\"arguments\"] = argdict\n                    parsed[\"flags\"] = {}\n\n                    parsed[\"stacktrace\"] = dec.get(\"s\", [])\n                    parsed[\"uniqhash\"] = dec.get(\"h\", 0)\n\n                    if \"e\" in dec and \"E\" in dec:\n                        parsed[\"last_error\"] = dec[\"e\"]\n                        parsed[\"nt_status\"] = dec[\"E\"]\n\n                    if apiname in self.flags_value:\n                        self.resolve_flags(apiname, argdict, parsed[\"flags\"])\n\n                    if self.buffer_sha1:\n                        parsed[\"buffer\"] = self.buffer_sha1\n                        self.buffer_sha1 = None\n\n            yield parsed\n"
  },
  {
    "path": "lib/cuckoo/common/objects.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport binascii\nimport hashlib\nimport logging\nimport mmap\nimport os\nimport re\nimport subprocess\n\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\nfrom lib.cuckoo.common.whitelist import is_whitelisted_domain\n\ntry:\n    import magic\n    HAVE_MAGIC = True\nexcept ImportError:\n    HAVE_MAGIC = False\n\ntry:\n    import pydeep\n    HAVE_PYDEEP = True\nexcept ImportError:\n    HAVE_PYDEEP = False\n\ntry:\n    import yara\n    HAVE_YARA = True\nexcept ImportError:\n    HAVE_YARA = False\n\ntry:\n    import pefile\n    HAVE_PEFILE = True\nexcept ImportError:\n    HAVE_PEFILE = False\n\ntry:\n    import androguard\n    HAVE_ANDROGUARD = True\nexcept ImportError:\n    HAVE_ANDROGUARD = False\n\nlog = logging.getLogger(__name__)\n\nFILE_CHUNK_SIZE = 16 * 1024\n\nURL_REGEX = (\n    # HTTP/HTTPS.\n    \"(https?:\\\\/\\\\/)\"\n    \"(([\"\n    # IP address.\n    \"(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\\\.\"\n    \"(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\\\.\"\n    \"(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\\\.\"\n    \"(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])]|\"\n    # Or domain name.\n    \"[a-zA-Z0-9\\\\.-]+)\"\n    # Optional port.\n    \"(\\\\:\\\\d+)?\"\n    # URI.\n    \"(/[\\\\(\\\\)a-zA-Z0-9_:%?=/\\\\.-]*)?\"\n)\n\nclass Dictionary(dict):\n    \"\"\"Cuckoo custom dict.\"\"\"\n\n    def __getattr__(self, key):\n        return self.get(key, None)\n\n    __setattr__ = dict.__setitem__\n    __delattr__ = dict.__delitem__\n\nclass URL:\n    \"\"\"URL base object.\"\"\"\n\n    def __init__(self, url):\n        \"\"\":param url: URL\"\"\"\n        self.url = url\n\nclass File(object):\n    \"\"\"Basic file object class with all useful utilities.\"\"\"\n\n    # To be substituted with a category.\n    YARA_RULEPATH = os.path.join(CUCKOO_ROOT, \"data\", \"yara\", \"index_%s.yar\")\n\n    # static fields which indicate whether the user has been\n    # notified about missing dependencies already\n    notified_yara = False\n    notified_pefile = False\n    notified_androguard = False\n\n    # Given that ssdeep hashes are not really used much in practice we're just\n    # going to disable its warning by default for now.\n    notified_pydeep = True\n\n    # The yara rules should not change during one session of processing tasks,\n    # thus we can cache them. If they are updated, one should restart Cuckoo\n    # or the processing tasks.\n    yara_rules = {}\n\n    def __init__(self, file_path):\n        \"\"\":param file_path: file path.\"\"\"\n        self.file_path = file_path\n\n        # these will be populated when first accessed\n        self._file_data = None\n        self._crc32 = None\n        self._md5 = None\n        self._sha1 = None\n        self._sha256 = None\n        self._sha512 = None\n\n    def get_name(self):\n        \"\"\"Get file name.\n\n        :return: file name.\n        \"\"\"\n        file_name = os.path.basename(self.file_path)\n        return file_name\n\n    def valid(self):\n        return os.path.exists(self.file_path) and \\\n            os.path.isfile(self.file_path) and \\\n            os.path.getsize(self.file_path) != 0\n\n    def get_data(self):\n        \"\"\"Read file contents.\n\n        :return: data.\n        \"\"\"\n        return self.file_data\n\n    def get_chunks(self):\n        \"\"\"Read file contents in chunks (generator).\"\"\"\n\n        with open(self.file_path, \"rb\") as fd:\n            while True:\n                chunk = fd.read(FILE_CHUNK_SIZE)\n                if not chunk:\n                    break\n                yield chunk\n\n    def calc_hashes(self):\n        \"\"\"Calculate all possible hashes for this file.\"\"\"\n        crc = 0\n        md5 = hashlib.md5()\n        sha1 = hashlib.sha1()\n        sha256 = hashlib.sha256()\n        sha512 = hashlib.sha512()\n\n        for chunk in self.get_chunks():\n            crc = binascii.crc32(chunk, crc)\n            md5.update(chunk)\n            sha1.update(chunk)\n            sha256.update(chunk)\n            sha512.update(chunk)\n\n        self._crc32 = \"\".join(\"%02X\" % ((crc >> i) & 0xff)\n                              for i in [24, 16, 8, 0])\n        self._md5 = md5.hexdigest()\n        self._sha1 = sha1.hexdigest()\n        self._sha256 = sha256.hexdigest()\n        self._sha512 = sha512.hexdigest()\n\n    @property\n    def file_data(self):\n        if not self._file_data:\n            self._file_data = open(self.file_path, \"rb\").read()\n        return self._file_data\n\n    def get_size(self):\n        \"\"\"Get file size.\n\n        :return: file size.\n        \"\"\"\n        return os.path.getsize(self.file_path)\n\n    def get_crc32(self):\n        \"\"\"Get CRC32.\n\n        :return: CRC32.\n        \"\"\"\n        if not self._crc32:\n            self.calc_hashes()\n        return self._crc32\n\n    def get_md5(self):\n        \"\"\"Get MD5.\n\n        :return: MD5.\n        \"\"\"\n        if not self._md5:\n            self.calc_hashes()\n        return self._md5\n\n    def get_sha1(self):\n        \"\"\"Get SHA1.\n\n        :return: SHA1.\n        \"\"\"\n        if not self._sha1:\n            self.calc_hashes()\n        return self._sha1\n\n    def get_sha256(self):\n        \"\"\"Get SHA256.\n\n        :return: SHA256.\n        \"\"\"\n        if not self._sha256:\n            self.calc_hashes()\n        return self._sha256\n\n    def get_sha512(self):\n        \"\"\"\n        Get SHA512.\n\n        :return: SHA512.\n        \"\"\"\n        if not self._sha512:\n            self.calc_hashes()\n        return self._sha512\n\n    def get_ssdeep(self):\n        \"\"\"\n        Get SSDEEP.\n\n        :return: SSDEEP.\n        \"\"\"\n        if not HAVE_PYDEEP:\n            if not File.notified_pydeep:\n                File.notified_pydeep = True\n                log.warning(\"Unable to import pydeep (install with `pip install pydeep`)\")\n            return None\n\n        try:\n            return pydeep.hash_file(self.file_path)\n        except Exception:\n            return None\n\n    def get_type(self):\n        \"\"\"Get MIME file type.\n\n        :return: file type.\n        \"\"\"\n        file_type = None\n        if HAVE_MAGIC:\n            try:\n                ms = magic.open(magic.MAGIC_NONE)\n                ms.load()\n                file_type = ms.file(self.file_path)\n            except:\n                try:\n                    file_type = magic.from_file(self.file_path)\n                except Exception as e:\n                    log.debug(\"Error getting magic from file %s: %s\",\n                              self.file_path, e)\n            finally:\n                try:\n                    ms.close()\n                except:\n                    pass\n\n        if file_type is None:\n            try:\n                p = subprocess.Popen([\"file\", \"-b\", self.file_path],\n                                     stdout=subprocess.PIPE)\n                file_type = p.stdout.read().strip()\n            except Exception as e:\n                log.debug(\"Error running file(1) on %s: %s\",\n                          self.file_path, e)\n\n        return file_type\n\n    def get_content_type(self):\n        \"\"\"Get MIME content file type (example: image/jpeg).\n\n        :return: file content type.\n        \"\"\"\n        file_type = None\n        if HAVE_MAGIC:\n            try:\n                ms = magic.open(magic.MAGIC_MIME)\n                ms.load()\n                file_type = ms.file(self.file_path)\n            except:\n                try:\n                    file_type = magic.from_file(self.file_path, mime=True)\n                except:\n                    pass\n            finally:\n                try:\n                    ms.close()\n                except:\n                    pass\n\n        if file_type is None:\n            try:\n                args = [\"file\", \"-b\", \"--mime-type\", self.file_path]\n                file_type = subprocess.check_output(args).strip()\n            except:\n                pass\n\n        return file_type\n\n    def get_exported_functions(self):\n        \"\"\"Get the exported function names of this PE file.\"\"\"\n        filetype = self.get_type()\n        if \"MS-DOS\" not in filetype and \"PE32\" not in self.get_type():\n            return\n\n        if not HAVE_PEFILE:\n            if not File.notified_pefile:\n                File.notified_pefile = True\n                log.warning(\"Unable to import pefile (`pip install pefile`)\")\n            return\n\n        try:\n            pe = pefile.PE(self.file_path)\n            if not hasattr(pe, \"DIRECTORY_ENTRY_EXPORT\"):\n                return\n\n            for export in pe.DIRECTORY_ENTRY_EXPORT.symbols:\n                if export.name:\n                    yield export.name\n        except Exception as e:\n            log.warning(\"Error enumerating exported functions: %s\", e)\n\n    def get_imported_functions(self):\n        \"\"\"Get the imported functions of this PE file.\"\"\"\n        filetype = self.get_type()\n        if \"MS-DOS\" not in filetype and \"PE32\" not in self.get_type():\n            return\n\n        if not HAVE_PEFILE:\n            if not File.notified_pefile:\n                File.notified_pefile = True\n                log.warning(\"Unable to import pefile (`pip install pefile`)\")\n            return\n\n        try:\n            pe = pefile.PE(self.file_path)\n            if not hasattr(pe, \"DIRECTORY_ENTRY_IMPORT\"):\n                return\n\n            for imp in pe.DIRECTORY_ENTRY_IMPORT:\n                for entry in imp.imports:\n                    yield dict(dll=imp.dll,\n                               name=entry.name,\n                               ordinal=entry.ordinal,\n                               hint=entry.hint,\n                               address=entry.address)\n        except Exception as e:\n            log.warning(\"Error enumerating imported functions: %s\", e)\n\n    def get_apk_entry(self):\n        \"\"\"Get the entry point for this APK. The entry point is denoted by a\n        package and main activity name.\"\"\"\n        filetype = self.get_type()\n        if \"Zip archive data\" not in filetype and \"Java Jar\" not in filetype:\n            return \"\", \"\"\n\n        if not HAVE_ANDROGUARD:\n            if not File.notified_androguard:\n                File.notified_androguard = True\n                log.warning(\"Unable to import androguard (`pip install androguard`)\")\n            return \"\", \"\"\n\n        try:\n            a = androguard.core.bytecodes.apk.APK(self.file_path)\n            if not a.is_valid_APK():\n                return \"\", \"\"\n\n            package = a.get_package()\n            if not package:\n                log.warning(\"Unable to find the main package, this analysis \"\n                            \"will probably fail.\")\n                return \"\", \"\"\n\n            main_activity = a.get_main_activity()\n            if main_activity:\n                log.debug(\"Picked package %s and main activity %s.\",\n                          package, main_activity)\n                return package, main_activity\n\n            activities = a.get_activities()\n            for activity in activities:\n                if \"main\" in activity or \"start\" in activity:\n                    log.debug(\"Choosing package %s and main activity due to \"\n                              \"its name %s.\", package, activity)\n                    return package, activity\n\n            if activities and activities[0]:\n                log.debug(\"Picked package %s and the first activity %s.\",\n                          package, activities[0])\n                return package, activities[0]\n        except Exception as e:\n            log.warning(\"Error extracting package and main activity: %s.\", e)\n\n        return \"\", \"\"\n\n    def _yara_encode_string(self, s):\n        # Beware, spaghetti code ahead.\n        try:\n            new = s.encode(\"utf-8\")\n        except UnicodeDecodeError:\n            s = s.lstrip(\"uU\").encode(\"hex\").upper()\n            s = \" \".join(s[i:i+2] for i in range(0, len(s), 2))\n            new = \"{ %s }\" % s\n\n        return new\n\n    def _yara_matches_177(self, matches):\n        \"\"\"Extract matches from the Yara output for version 1.7.7.\"\"\"\n        ret = []\n        for _, rule_matches in matches.items():\n            for match in rule_matches:\n                strings = set()\n\n                for s in match[\"strings\"]:\n                    strings.add(self._yara_encode_string(s[\"data\"]))\n\n                ret.append({\n                    \"name\": match[\"rule\"],\n                    \"meta\": match[\"meta\"],\n                    \"strings\": list(strings),\n                })\n\n        return ret\n\n    def get_yara(self, category=\"binaries\"):\n        \"\"\"Get Yara signatures matches.\n\n        :return: matched Yara signatures.\n        \"\"\"\n        results = []\n\n        if not HAVE_YARA:\n            if not File.notified_yara:\n                File.notified_yara = True\n                log.warning(\"Unable to import yara (please compile from sources)\")\n            return results\n\n        # Compile the Yara rules only the first time.\n        if category not in File.yara_rules:\n            rulepath = self.YARA_RULEPATH % category\n            if not os.path.exists(rulepath):\n                log.warning(\"The specified rule file at %s doesn't exist, \"\n                            \"skip\", rulepath)\n                return results\n\n            try:\n                File.yara_rules[category] = yara.compile(rulepath)\n            except:\n                log.exception(\"Error compiling the Yara rules.\")\n                return\n\n        if not os.path.getsize(self.file_path):\n            return results\n\n        try:\n            matches = File.yara_rules[category].match(self.file_path)\n\n            if getattr(yara, \"__version__\", None) == \"1.7.7\":\n                return self._yara_matches_177(matches)\n\n            results = []\n\n            for match in matches:\n                strings = set()\n                for s in match.strings:\n                    strings.add(self._yara_encode_string(s[2]))\n\n                results.append({\n                    \"name\": match.rule,\n                    \"meta\": match.meta,\n                    \"strings\": list(strings),\n                })\n\n        except Exception as e:\n            log.exception(\"Unable to match Yara signatures: %s\", e)\n\n        return results\n\n    def get_urls(self):\n        \"\"\"Extract all URLs embedded in this file through a simple regex.\"\"\"\n        if not os.path.getsize(self.file_path):\n            return []\n\n        # http://stackoverflow.com/a/454589\n        urls = set()\n        f = open(self.file_path, \"rb\")\n        m = mmap.mmap(f.fileno(), 0, access=mmap.PROT_READ)\n\n        for url in re.findall(URL_REGEX, m):\n            if not is_whitelisted_domain(url[1]):\n                urls.add(\"\".join(url))\n\n        return list(urls)\n\n    def get_all(self):\n        \"\"\"Get all information available.\n\n        :return: information dict.\n        \"\"\"\n        infos = {}\n        infos[\"name\"] = self.get_name()\n        infos[\"path\"] = self.file_path\n        infos[\"size\"] = self.get_size()\n        infos[\"crc32\"] = self.get_crc32()\n        infos[\"md5\"] = self.get_md5()\n        infos[\"sha1\"] = self.get_sha1()\n        infos[\"sha256\"] = self.get_sha256()\n        infos[\"sha512\"] = self.get_sha512()\n        infos[\"ssdeep\"] = self.get_ssdeep()\n        infos[\"type\"] = self.get_type()\n        infos[\"yara\"] = self.get_yara()\n        infos[\"urls\"] = self.get_urls()\n        return infos\n"
  },
  {
    "path": "lib/cuckoo/common/utils.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport hashlib\nimport logging\nimport os\nimport sys\nimport shutil\nimport ntpath\nimport string\nimport tempfile\nimport xmlrpclib\nimport inspect\nimport platform\nimport threading\nimport json\nimport multiprocessing\nimport warnings\n\nfrom cStringIO import StringIO\nfrom datetime import datetime\n\nfrom lib.cuckoo.common.exceptions import CuckooOperationalError\nfrom lib.cuckoo.common.config import Config\n\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT, CUCKOO_VERSION\nfrom lib.cuckoo.common.constants import GITHUB_URL, ISSUES_PAGE_URL\n\ntry:\n    import bs4\n    HAVE_BS4 = True\nexcept ImportError:\n    HAVE_BS4 = False\n\ntry:\n    import chardet\n    HAVE_CHARDET = True\nexcept ImportError:\n    HAVE_CHARDET = False\n\ntry:\n    import jsbeautifier\n    HAVE_JSBEAUTIFIER = True\nexcept ImportError:\n    HAVE_JSBEAUTIFIER = False\n\nlog = logging.getLogger(__name__)\n\ndef create_folders(root=\".\", folders=[]):\n    \"\"\"Create directories.\n\n    :param root: root path.\n    :param folders: folders list to be created.\n    :raise CuckooOperationalError: if fails to create folder.\n    \"\"\"\n    for folder in folders:\n        create_folder(root, folder)\n\ndef create_folder(root=\".\", folder=None):\n    \"\"\"Create directory.\n\n    :param root: root path.\n    :param folder: folder name to be created.\n    :raise CuckooOperationalError: if fails to create folder.\n    \"\"\"\n    folder_path = os.path.join(root, folder)\n    if folder and not os.path.isdir(folder_path):\n        try:\n            os.makedirs(folder_path)\n        except OSError:\n            raise CuckooOperationalError(\"Unable to create folder: %s\" %\n                                         folder_path)\n\ndef delete_folder(folder):\n    \"\"\"Delete a folder and all its subdirectories.\n\n    :param folder: path to delete.\n    :raise CuckooOperationalError: if fails to delete folder.\n    \"\"\"\n    if os.path.exists(folder):\n        try:\n            shutil.rmtree(folder)\n        except OSError:\n            raise CuckooOperationalError(\"Unable to delete folder: \"\n                                         \"{0}\".format(folder))\n\n# Don't allow all characters in \"string.printable\", as newlines, carriage\n# returns, tabs, \\x0b, and \\x0c may mess up reports.\nPRINTABLE_CHARACTERS = \\\n    string.letters + string.digits + string.punctuation + \" \\t\\r\\n\"\n\ndef convert_char(c):\n    \"\"\"Escapes characters.\n\n    :param c: dirty char.\n    :return: sanitized char.\n    \"\"\"\n    if c in PRINTABLE_CHARACTERS:\n        return c\n    else:\n        return \"\\\\x%02x\" % ord(c)\n\ndef is_printable(s):\n    \"\"\" Test if a string is printable.\"\"\"\n    for c in s:\n        if c not in PRINTABLE_CHARACTERS:\n            return False\n    return True\n\ndef convert_to_printable(s):\n    \"\"\"Convert char to printable.\n\n    :param s: string.\n    :return: sanitized string.\n    \"\"\"\n    if is_printable(s):\n        return s\n    return \"\".join(convert_char(c) for c in s)\n\ndef datetime_to_iso(timestamp):\n    \"\"\"Parse a datatime string and returns a datetime in iso format.\n\n    :param timestamp: timestamp string\n    :return: ISO datetime\n    \"\"\"\n    return datetime.strptime(timestamp, \"%Y-%m-%d %H:%M:%S\").isoformat()\n\ndef get_filename_from_path(path):\n    \"\"\"Cross-platform filename extraction from path.\n\n    :param path: file path.\n    :return: filename.\n    \"\"\"\n    dirpath, filename = ntpath.split(path)\n    return filename if filename else ntpath.basename(dirpath)\n\ndef store_temp_file(filedata, filename, path=None):\n    \"\"\"Store a temporary file.\n\n    :param filedata: content of the original file.\n    :param filename: name of the original file.\n    :param path: optional path for temp directory.\n    :return: path to the temporary file.\n    \"\"\"\n    filename = get_filename_from_path(filename)\n\n    # Reduce length (100 is arbitrary).\n    filename = filename[:100]\n\n    options = Config()\n    # Create temporary directory path.\n    if path:\n        target_path = path\n    else:\n        tmp_path = options.cuckoo.get(\"tmppath\", \"/tmp\")\n        target_path = os.path.join(tmp_path, \"cuckoo-tmp\")\n    if not os.path.exists(target_path):\n        os.mkdir(target_path)\n\n    tmp_dir = tempfile.mkdtemp(prefix=\"upload_\", dir=target_path)\n    tmp_file_path = os.path.join(tmp_dir, filename)\n    with open(tmp_file_path, \"wb\") as tmp_file:\n        # If filedata is file object, do chunked copy.\n        if hasattr(filedata, \"read\"):\n            chunk = filedata.read(1024)\n            while chunk:\n                tmp_file.write(chunk)\n                chunk = filedata.read(1024)\n        else:\n            tmp_file.write(filedata)\n\n    return tmp_file_path\n\nclass TimeoutServer(xmlrpclib.ServerProxy):\n    \"\"\"Timeout server for XMLRPC.\n\n    XMLRPC + timeout - still a bit ugly - but at least gets rid of setdefaulttimeout\n    inspired by http://stackoverflow.com/questions/372365/set-timeout-for-xmlrpclib-serverproxy\n    (although their stuff was messy, this is cleaner)\n    :see: http://stackoverflow.com/questions/372365/set-timeout-for-xmlrpclib-serverproxy\n    \"\"\"\n    def __init__(self, *args, **kwargs):\n        timeout = kwargs.pop(\"timeout\", None)\n        kwargs[\"transport\"] = TimeoutTransport(timeout=timeout)\n        xmlrpclib.ServerProxy.__init__(self, *args, **kwargs)\n\n    def _set_timeout(self, timeout):\n        t = self._ServerProxy__transport\n        t.timeout = timeout\n        # If we still have a socket we need to update that as well.\n        if hasattr(t, \"_connection\") and t._connection[1] and t._connection[1].sock:\n            t._connection[1].sock.settimeout(timeout)\n\nclass TimeoutTransport(xmlrpclib.Transport):\n    def __init__(self, *args, **kwargs):\n        self.timeout = kwargs.pop(\"timeout\", None)\n        xmlrpclib.Transport.__init__(self, *args, **kwargs)\n\n    def make_connection(self, *args, **kwargs):\n        conn = xmlrpclib.Transport.make_connection(self, *args, **kwargs)\n        if self.timeout is not None:\n            conn.timeout = self.timeout\n        return conn\n\nclass Singleton(type):\n    \"\"\"Singleton.\n\n    :see: http://stackoverflow.com/questions/6760685/creating-a-singleton-in-python\n    \"\"\"\n    _instances = {}\n\n    def __call__(cls, *args, **kwargs):\n        if cls not in cls._instances:\n            cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)\n        return cls._instances[cls]\n\nclass ThreadSingleton(type):\n    \"\"\"Singleton per thread.\"\"\"\n    _instances = threading.local()\n\n    def __call__(cls, *args, **kwargs):\n        if not getattr(cls._instances, \"instance\", None):\n            cls._instances.instance = super(ThreadSingleton, cls).__call__(*args, **kwargs)\n        return cls._instances.instance\n\ndef to_unicode(s):\n    \"\"\"Attempt to fix non uft-8 string into utf-8. It tries to guess input encoding,\n    if fail retry with a replace strategy (so undetectable chars will be escaped).\n\n    :see: fuller list of encodings at http://docs.python.org/library/codecs.html#standard-encodings\n    \"\"\"\n\n    def brute_enc(s2):\n        \"\"\"Trying to decode via simple brute forcing.\"\"\"\n        encodings = (\"ascii\", \"utf8\", \"latin1\")\n        for enc in encodings:\n            try:\n                return unicode(s2, enc)\n            except UnicodeDecodeError:\n                pass\n        return None\n\n    def chardet_enc(s2):\n        \"\"\"Guess encoding via chardet.\"\"\"\n        enc = chardet.detect(s2)[\"encoding\"]\n\n        try:\n            return unicode(s2, enc)\n        except UnicodeDecodeError:\n            pass\n        return None\n\n    # If already in unicode, skip.\n    if isinstance(s, unicode):\n        return s\n\n    # First try to decode against a little set of common encodings.\n    result = brute_enc(s)\n\n    # Try via chardet.\n    if not result and HAVE_CHARDET:\n        result = chardet_enc(s)\n\n    # If not possible to convert the input string, try again with\n    # a replace strategy.\n    if not result:\n        result = unicode(s, errors=\"replace\")\n\n    return result\n\ndef cleanup_value(v):\n    \"\"\"Cleanup utility function, strips some unwanted parts from values.\"\"\"\n    v = str(v)\n    if v.startswith(\"\\\\??\\\\\"):\n        v = v[4:]\n    return v\n\ndef classlock(f):\n    \"\"\"Classlock decorator (created for database.Database).\n    Used to put a lock to avoid sqlite errors.\n    \"\"\"\n    def inner(self, *args, **kwargs):\n        curframe = inspect.currentframe()\n        calframe = inspect.getouterframes(curframe, 2)\n\n        if calframe[1][1].endswith(\"database.py\"):\n            return f(self, *args, **kwargs)\n\n        with self._lock:\n            return f(self, *args, **kwargs)\n\n    return inner\n\nclass SuperLock(object):\n    def __init__(self):\n        self.tlock = threading.Lock()\n        self.mlock = multiprocessing.Lock()\n\n    def __enter__(self):\n        self.tlock.acquire()\n        self.mlock.acquire()\n\n    def __exit__(self, type, value, traceback):\n        self.mlock.release()\n        self.tlock.release()\n\ndef hash_file(method, filepath):\n    \"\"\"Calculates an hash on a file by path.\n\n    :param method: callable hashing method\n    :param path: file path\n    :return: computed hash string\n    \"\"\"\n    f = open(filepath, \"rb\")\n    h = method()\n    while True:\n        buf = f.read(1024 * 1024)\n        if not buf:\n            break\n        h.update(buf)\n    return h.hexdigest()\n\ndef md5_file(filepath):\n    return hash_file(hashlib.md5, filepath)\n\ndef sha1_file(filepath):\n    return hash_file(hashlib.sha1, filepath)\n\nGUIDS = {}\n\ndef guid_name(guid):\n    if not GUIDS:\n        for line in open(os.path.join(CUCKOO_ROOT, \"data\", \"guids.txt\")):\n            try:\n                guid, name, url = line.strip().split()\n            except:\n                log.debug(\"Invalid GUID entry: %s\", line)\n                continue\n\n            GUIDS[\"{%s}\" % guid] = name\n\n    return GUIDS.get(guid)\n\ndef exception_message():\n    \"\"\"Creates a message describing an unhandled exception.\"\"\"\n    def get_os_release():\n        \"\"\"Returns detailed OS release.\"\"\"\n        if platform.linux_distribution()[0]:\n            return \" \".join(platform.linux_distribution())\n        elif platform.mac_ver()[0]:\n            return \"%s %s\" % (platform.mac_ver()[0], platform.mac_ver()[2])\n        else:\n            return \"Unknown\"\n\n    msg = (\n        \"Oops! Cuckoo failed in an unhandled exception!\\nSometimes bugs are \"\n        \"already fixed in the development release, it is therefore \"\n        \"recommended to retry with the latest development release available \"\n        \"%s\\nIf the error persists please open a new issue at %s\\n\\n\" %\n        (GITHUB_URL, ISSUES_PAGE_URL)\n    )\n\n    msg += \"=== Exception details ===\\n\"\n    msg += \"Cuckoo version: %s\\n\" % CUCKOO_VERSION\n    msg += \"OS version: %s\\n\" % os.name\n    msg += \"OS release: %s\\n\" % get_os_release()\n    msg += \"Python version: %s\\n\" % sys.version.split()[0]\n    msg += \"Machine arch: %s\\n\" % platform.machine()\n\n    git_version = os.path.join(CUCKOO_ROOT, \".git\", \"refs\", \"heads\", \"master\")\n    if os.path.exists(git_version):\n        try:\n            msg += \"Git version: %s\\n\" % open(git_version, \"rb\").read().strip()\n        except:\n            pass\n\n    try:\n        import pip\n        from pip._internal.utils.misc import get_installed_distributions\n\n        msg += \"Modules: %s\\n\" % \" \".join(sorted(\n            \"%s:%s\" % (package.key, package.version)\n            for package in get_installed_distributions()\n        ))\n    except ImportError:\n        pass\n\n    msg += \"\\n\"\n    return msg\n\n_jsbeautify_blacklist = [\n    \"\",\n    \"error: Unknown p.a.c.k.e.r. encoding.\\n\",\n]\n\n_jsbeautify_lock = threading.Lock()\n\ndef jsbeautify(javascript):\n    \"\"\"Beautifies Javascript through jsbeautifier and ignore some messages.\"\"\"\n    if not HAVE_JSBEAUTIFIER:\n        return javascript\n\n    with _jsbeautify_lock:\n        origout, sys.stdout = sys.stdout, StringIO()\n        javascript = jsbeautifier.beautify(javascript)\n\n        if sys.stdout.getvalue() not in _jsbeautify_blacklist:\n            log.warning(\"jsbeautifier returned error: %s\", sys.stdout.getvalue())\n\n        sys.stdout = origout\n    return javascript\n\ndef htmlprettify(html):\n    \"\"\"Beautifies HTML through BeautifulSoup4.\"\"\"\n    if not HAVE_BS4:\n        return html\n\n    # The following ignores the following bs4 warning:\n    # UserWarning: \".\" looks like a filename, not markup.\n    with warnings.catch_warnings():\n        warnings.simplefilter(\"ignore\", lineno=182)\n        return bs4.BeautifulSoup(html, \"html.parser\").prettify()\n\ndef json_default(obj):\n    \"\"\"JSON serializer for objects not serializable by default json code\"\"\"\n    if isinstance(obj, datetime):\n        if obj.utcoffset() is not None:\n            obj = obj - obj.utcoffset()\n        return {\"$dt\": obj.isoformat()}\n    raise TypeError(\"Type not serializable\")\n\ndef json_hook(obj):\n    \"\"\"JSON object hook, deserializing datetimes ($date)\"\"\"\n    if \"$dt\" in obj:\n        x = obj[\"$dt\"]\n        return datetime.strptime(x, \"%Y-%m-%dT%H:%M:%S.%f\")\n    return obj\n\ndef json_encode(obj, **kwargs):\n    \"\"\"JSON encoding wrapper that handles datetime objects\"\"\"\n    return json.dumps(obj, default=json_default, **kwargs)\n\ndef json_decode(x):\n    \"\"\"JSON decoder that does ugly first-level datetime handling\"\"\"\n    return json.loads(x, object_hook=json_hook)\n\ndef versiontuple(v):\n    \"\"\"Return the version as a tuple for easy comparison.\"\"\"\n    return tuple(int(x) for x in v.split(\".\"))\n"
  },
  {
    "path": "lib/cuckoo/common/virustotal.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport re\n\ntry:\n    import requests\n    HAVE_REQUESTS = True\n\n    # Disable requests/urllib3 debug & info messages.\n    logging.getLogger(\"requests\").setLevel(logging.WARNING)\n    logging.getLogger(\"urllib3\").setLevel(logging.WARNING)\nexcept ImportError:\n    HAVE_REQUESTS = False\n\nfrom lib.cuckoo.common.exceptions import CuckooOperationalError\nfrom lib.cuckoo.common.objects import File\nfrom modules.processing.cuckooml import Instance\n\nclass VirusTotalResourceNotScanned(CuckooOperationalError):\n    \"\"\"This resource has not been scanned yet.\"\"\"\n\nclass VirusTotalAPI(object):\n    \"\"\"Wrapper to VirusTotal API.\"\"\"\n\n    FILE_REPORT = \"https://www.virustotal.com/vtapi/v2/file/report\"\n    URL_REPORT = \"https://www.virustotal.com/vtapi/v2/url/report\"\n    FILE_SCAN = \"https://www.virustotal.com/vtapi/v2/file/scan\"\n    URL_SCAN = \"https://www.virustotal.com/vtapi/v2/url/scan\"\n\n    VARIANT_BLACKLIST = [\n        \"a\", \"variant\", \"of\", \"file\", \"generic\", \"not\",\n        \"file\", \"other\", \"potentially\", \"text\", \"optional\",\n        \"agent\", \"susp\", \"dangerousobject\", \"dangerous\", \"object\", \"corrupt\",\n        \"lookslike\", \"looks\", \"like\", \"unclassifiedmalware\", \"unclassified\",\n        \"malware\", \"horse\", \"application\", \"program\", \"malicious\", \"small\",\n        \"behaveslike\", \"behaves\", \"behave\", \"heuristic\", \"reputation\",\n        \"suspected\", \"undef\", \"unknown\", \"normal\", \"damaged\",\n        \"malagent\", \"packer\", \"password\", \"patched\", \"patchfile\", \"pepatch\",\n        \"servstart\", \"gen\", \"generikcd\", \"genmalicious\", \"heur\", \"heur2\",\n        \"applicunwnt\", \"autorun\", \"avkill\", \"generik\",\n        \"encodefeature\", \"encoder\", \"infostealer\", \"keylogger\", \"obfus\",\n        \"website\", \"plugin\", \"webtoolbar\", \"packed\", \"toolbar\",\n        \"obfuscator\", \"stealer\", \"suspectcrc\"\n    ]\n\n    FIX_BLACKLIST = [  # prefixes&suffixes\n        \"apt\", \"ms\",\n        \"vb\", \"mal\", \"pack\", \"exe\", \"enz\"  # \"doc\"\n    ]\n\n    PLATFORMS = {\n        # Operating systems\n        \"androidos\": \"Android operating system\",\n        \"dos\": \"MS-DOS platform\",\n        \"epoc\": \"Psion devices\",\n        \"freebsd\": \"FreeBSD platform\",\n        \"iphoneos\": \"iPhone operating system\",\n        \"linux\": \"Linux platform\",\n        \"macos\": \"MAC 9.x platform or earlier\",\n        \"macos_x\": \"MacOS X or later\",\n        \"os2\": \"OS2 platform\",\n        \"palm\": \"Palm operating system\",\n        \"solaris\": \"System V-based Unix platforms\",\n        \"sunos\": \"Unix platforms 4.1.3 or lower\",\n        \"symbos\": \"Symbian operating system\",\n        \"unix\": \"general Unix platforms\",\n        \"win16\": \"Win16 (3.1) platform\",\n        \"win2k\": \"Windows 2000 platform\",\n        \"win32\": \"Windows 32-bit platform\",\n        \"win64\": \"Windows 64-bit platform\",\n        \"win95\": \"Windows 95, 98 and ME platforms\",\n        \"win98\": \"Windows 98 platform only\",\n        \"wince\": \"Windows CE platform\",\n        \"winnt\": \"WinNT\",\n        # Scripting languages\n        \"abap\": \"Advanced Business Application Programming scripts\",\n        \"alisp\": \"ALisp scripts\",\n        \"amipro\": \"AmiPro script\",\n        \"ansi\": \"American National Standards Institute scripts\",\n        \"applescript\": \"compiled Apple scripts\",\n        \"asp\": \"Active Server Pages scripts\",\n        \"autoit\": \"AutoIT scripts\",\n        \"bas\": \"Basic scripts\",\n        \"bat\": \"Basic scripts\",\n        \"corelscript\": \"Corelscript scripts\",\n        \"hta\": \"HTML Application scripts\",\n        \"html\": \"HTML Application scripts\",\n        \"inf\": \"Install scripts\",\n        \"irc\": \"mIRC/pIRC scripts\",\n        \"java\": \"Java binaries (classes)\",\n        \"js\": \"Javascript scripts\",\n        \"logo\": \"LOGO scripts\",\n        \"mpb\": \"MapBasic scripts\",\n        \"msh\": \"Monad shell scripts\",\n        \"msil\": \".Net intermediate language scripts\",\n        \"perl\": \"Perl scripts\",\n        \"php\": \"Hypertext Preprocessor scripts\",\n        \"python\": \"Python scripts\",\n        \"sap\": \"SAP platform scripts\",\n        \"sh\": \"Shell scripts\",\n        \"vba\": \"Visual Basic for Applications scripts\",\n        \"vbs\": \"Visual Basic scripts\",\n        \"winbat\": \"Winbatch scripts\",\n        \"winhlp\": \"Windows Help scripts\",\n        \"winreg\": \"Windows registry scripts\",\n        # Macros\n        \"a97m\": \"Access 97, 2000, XP, 2003, 2007, and 2010 macros\",\n        \"he\": \"macro scripting\",\n        \"o97m\": \"Office 97, 2000, XP, 2003, 2007, and 2010 macros - those that \\\n            affect Word, Excel, and Powerpoint\",\n        \"pp97m\": \"PowerPoint 97, 2000, XP, 2003, 2007, and 2010 macros\",\n        \"v5m\": \"Visio5 macros\",\n        \"w1m\": \"Word1Macro\",\n        \"w2m\": \"Word2Macro\",\n        \"w97m\": \"Word 97, 2000, XP, 2003, 2007, and 2010 macros\",\n        \"wm\": \"Word 95 macros\",\n        \"x97m\": \"Excel 97, 2000, XP, 2003, 2007, and 2010 macros\",\n        \"xf\": \"Excel formulas\",\n        \"xm\": \"Excel 95 macros\",\n        # Other file types\n        \"asx\": \"XML metafile of Windows Media .asf files\",\n        \"hc\": \"HyperCard Apple scripts\",\n        \"mime\": \"MIME packets\",\n        \"netware\": \"Novell Netware files\",\n        \"qt\": \"Quicktime files\",\n        \"sb\": \"StarBasic (Staroffice XML) files\",\n        \"swf\": \"Shockwave Flash files\",\n        \"tsql\": \"MS SQL server files\",\n        \"xml\": \"XML files\"\n    }\n\n    ALTERNATIVE_PLATFORMS = {\n        \"multi\": \"multi\",\n        \"macro\": \"o97m\",\n        \"office\": \"o97m\",\n        \"excel\": \"x97m\",\n        \"word\": \"w97m\",\n        \"powerpoint\": \"pp97m\",\n        \"access\": \"a97m\",\n        \"msil\": \"msil\"\n    }\n\n    TYPES = [\n        \"adware\",\n        \"behavior\",\n        \"browsermodifier\",\n        \"constructor\",\n        \"ddos\",\n        \"dialer\",\n        \"dos\",\n        \"exploit\",\n        \"hacktool\",\n        \"joke\",\n        \"misleading\",\n        \"monitoringtool\",\n        \"program\",\n        \"pws\",\n        \"ransom\",\n        \"remoteaccess\",\n        \"riskware\",\n        \"rogue\",\n        \"rootkit\",\n        \"settingsmodifier\",\n        \"softwarebundler\",\n        \"spammer\",\n        \"spoofer\",\n        \"tool\",\n        \"trojan\",\n        \"clicker\",\n        \"downloader\",\n        \"dropper\",\n        \"notifier\",\n        \"proxy\",\n        \"spyware\",\n        \"backdoor\",\n        \"virtool\",\n        \"virus\",\n        \"worm\"\n    ]\n\n    TROJANS = [\n        \"clicker\",\n        \"downloader\",\n        \"dropper\",\n        \"notifier\",\n        \"proxy\",\n        \"spyware\",\n        \"backdoor\"\n    ]\n\n    RISKWARE = [\n        \"adware\",\n        \"softwarebundler\",\n        \"hacktool\",\n        \"rogue\"\n    ]\n\n    MAPPING = {\n        \"click\": \"clicker\",\n        \"spy\": \"spyware\",\n        \"adware\": \"adware\",\n        \"ad\": \"adware\",\n        \"bundler\": \"softwarebundler\",\n        \"hack\": \"hacktool\",\n        \"hackkms\": \"hacktool\",\n        \"kms\": \"hacktool\",\n        \"hacktool\": \"hacktool\",\n        \"rogue\": \"rogue\",\n        \"rogueware\": \"rogue\",\n        \"riskware\": \"riskware\",\n        \"risk\": \"riskware\",\n        \"grayware\": \"riskware\",\n        \"hktl\": \"riskware\",\n        \"keygen\": \"riskware\",\n        \"onlinegames\": \"riskware\",\n        \"scareware\": \"riskware\",\n        \"startpage\": \"riskware\",\n        \"suspicious\": \"riskware\",\n        \"unwanted\": \"riskware\",\n        \"backdoor\": \"backdoor\",\n        \"bkdr\": \"backdoor\",\n        \"genericbackdoor\": \"backdoor\",\n        \"trojbackdoor\": \"backdoor\",\n        \"trojan\": \"trojan\",\n        \"banker\": \"trojan\",\n        \"injector\": \"trojan\",\n        \"inject\": \"trojan\",\n        \"inj\": \"trojan\",\n        \"tr\": \"trojan\",\n        \"trj\": \"trojan\",\n        \"trjn\": \"trojan\",\n        \"troj\": \"trojan\",\n        \"trojware\": \"trojan\",\n        \"downloader\": \"downloader\",\n        \"loader\": \"downloader\",\n        \"exedown\": \"downloader\",\n        \"dldr\": \"downloader\",\n        \"dloader\": \"downloader\",\n        \"dloadr\": \"downloader\",\n        \"downldexe\": \"downloader\",\n        \"downldr\": \"downloader\",\n        \"down\": \"downloader\",\n        \"dload\": \"downloader\",\n        \"dloade\": \"downloader\",\n        \"dl\": \"downloader\",\n        \"download\": \"downloader\",\n        \"downagent\": \"downloader\",\n        \"downware\": \"downloader\",\n        \"dwnldr\": \"downloader\",\n        \"dwnlder\": \"downloader\",\n        \"load\": \"downloader\",\n        \"muldown\": \"downloader\",\n        \"ransom\": \"ransom\",\n        \"crypt\": \"ransom\",\n        \"crypter\": \"ransom\",\n        \"cryptor\": \"ransom\",\n        \"krypt\": \"ransom\",\n        \"kryptik\": \"ransom\",\n        \"lock\": \"ransom\",\n        \"ransom\": \"ransom\",\n        \"ransomcrypt\": \"ransom\",\n        \"ransomlock\": \"ransom\",\n        \"rootkit\": \"rootkit\",\n        \"rkit\": \"rootkit\",\n        \"rtk\": \"rootkit\",\n        \"sys\": \"rootkit\",\n        # extension\n        \"expl\": \"exploit\",\n        \"dropper\": \"dropper\",\n        \"mdropper\": \"dropper\",\n        \"dropped\": \"dropper\",\n        \"drop\": \"dropper\",\n        \"drp\": \"dropper\",\n        \"mailer\": \"mailer\"\n    }\n\n    TEMPLATE = \"{type}:{platform}/{family}.{variant}!{information}\"\n\n    def __init__(self, apikey, timeout, scan=0):\n        \"\"\"Initialize VirusTotal API with the API key and timeout.\n\n        :param api_key: virustotal api key\n        :param timeout: request and response timeout\n        :param scan: send file to scan or just get report\n        \"\"\"\n        self.apikey = apikey\n        self.timeout = timeout\n        self.scan = scan\n\n    def _request_json(self, url, **kwargs):\n        \"\"\"Wrapper around doing a request and parsing its JSON output.\"\"\"\n        if not HAVE_REQUESTS:\n            raise CuckooOperationalError(\n                \"The VirusTotal processing module requires the requests \"\n                \"library (install with `pip install requests`)\")\n\n        try:\n            r = requests.post(url, timeout=self.timeout, **kwargs)\n            return r.json() if r.status_code == 200 else {}\n        except (requests.ConnectionError, ValueError) as e:\n            raise CuckooOperationalError(\"Unable to fetch VirusTotal \"\n                                         \"results: %r\" % e.message)\n\n    def _get_report(self, url, resource, summary=False):\n        \"\"\"Fetch the report of a file or URL.\"\"\"\n        data = dict(resource=resource, apikey=self.apikey)\n\n        r = self._request_json(url, data=data)\n\n        # This URL has not been analyzed yet - send a request to analyze it\n        # and return with the permalink.\n        if not r.get(\"response_code\"):\n            if self.scan:\n                raise VirusTotalResourceNotScanned\n            else:\n                return {\n                    \"summary\": {\n                        \"error\": \"resource has not been scanned yet\",\n                    }\n                }\n\n        results = {\n            \"summary\": {\n                \"positives\": r.get(\"positives\", 0),\n                \"permalink\": r.get(\"permalink\"),\n                \"scan_date\": r.get(\"scan_date\"),\n            },\n        }\n\n        # For backwards compatibility.\n        results.update(r)\n\n        if not summary:\n            results[\"scans\"] = {}\n            results[\"normalized\"] = {\n                \"cve\": \"\",\n                \"platform\": \"\",\n                \"metatype\": \"\",\n                \"type\": \"\",\n                \"family\": \"\"\n            }\n\n            # Embed all VirusTotal results into the report.\n            for engine, signature in r.get(\"scans\", {}).items():\n                signature[\"normalized\"] = self.normalize(signature[\"result\"])\n                results[\"scans\"][engine.replace(\".\", \"_\")] = signature\n\n            # Normalize each detected variant in order to try to find the\n            # exact malware family.\n            norm_lower = {\n                \"cve\": [],\n                \"platform\": [],\n                \"metatype\": [],\n                \"type\": [],\n                \"family\": [],\n            }\n            for signature in results[\"scans\"].values():\n                for label_type in signature[\"normalized\"]:\n                    norm_lower[label_type] += signature[\"normalized\"][label_type]\n\n            labeller = Instance()\n            for label_type in norm_lower:\n                labeller.label_sample(norm_lower[label_type])\n                results[\"normalized\"][label_type] = labeller.label\n\n        return results\n\n    def url_report(self, url, summary=False):\n        \"\"\"Get the report of an existing URL scan.\n\n        :param url: URL\n        :param summary: if you want a summary report\"\"\"\n        return self._get_report(self.URL_REPORT, url, summary)\n\n    def file_report(self, filepath, summary=False):\n        \"\"\"Get the report of an existing file scan.\n\n        :param filepath: file path\n        :param summary: if you want a summary report\"\"\"\n        resource = File(filepath).get_md5()\n        return self._get_report(self.FILE_REPORT, resource, summary)\n\n    def url_scan(self, url):\n        \"\"\"Submit a URL to be scanned.\n\n        :param url: URL\n        \"\"\"\n        data = dict(apikey=self.apikey, url=url)\n        r = self._request_json(self.URL_SCAN, data=data)\n        return dict(summary=dict(permalink=r.get(\"permalink\")))\n\n    def file_scan(self, filepath):\n        \"\"\"Submit a file to be scanned.\n\n        :param filepath: file path\n        \"\"\"\n        data = dict(apikey=self.apikey)\n        files = {\"file\": open(filepath, \"rb\")}\n        r = self._request_json(self.FILE_SCAN, data=data, files=files)\n        return dict(summary=dict(permalink=r.get(\"permalink\")))\n\n    def detect_platform(self, tokens):\n        \"\"\"Guess platform affected by malware based on tokenised VT name.\"\"\"\n\n        def compare_platforms(platform_list, token):\n            \"\"\"Check whether token is one of predefined platforms.\"\"\"\n            platform = \"\"\n            for os in platform_list:\n                if token.startswith(os):\n                    return os\n                if os.startswith(token):\n                    return os\n            for os in platform_list:\n                if os in token:\n                    return os\n            return platform\n\n        platform = []\n        remaining_tokens = []\n\n        while tokens:\n            token = tokens.pop()\n\n            # Check for alternative platforms\n            cp = compare_platforms(self.ALTERNATIVE_PLATFORMS, token)\n            if cp:\n                platform.append(self.ALTERNATIVE_PLATFORMS[cp])\n                remaining_tokens += token.split(cp)\n                continue\n\n            # Check for OS\n            cp = compare_platforms(self.PLATFORMS, token)\n            if cp:\n                platform.append(cp)\n                remaining_tokens += token.split(cp)\n                continue\n\n            # Check for MS Windows name variants: \"win\" and \"w\" instead of \"win\"\n            if \"win\" in token:\n                platform.append(\"win\")\n                remaining_tokens += token.split(\"win\")\n                continue\n\n            # find windows edition encoded as \"w..\"; if the string is followed\n            # by \"m\" it's a macro and not an OS\n            found = re.findall(r\"w(16|32|64|95|98|2k|ce|nt|bat|hlp|reg)(?!m)\",\n                               token)\n            # WARNING: only works for the first match\n            if found:\n                platform.append(\"win\" + found[0])\n                remaining_tokens += token.split(\"w\"+found[0])\n                continue\n\n            # Handle MS Office macros # x w pp a\n            # Office 2K\n            found = re.findall(r\"([a-zA-Z])2km\", token)\n            if found:\n                platform.append(found[0] + \"97m\")\n                remaining_tokens += token.split(found[0] + \"2km\")\n                continue\n\n            # Office 97 with missing \"m\"\n            found = re.findall(r\"([a-zA-Z]97)\", token)\n            if found:\n                platform.append(found[0] + \"m\")\n                remaining_tokens += token.split(found[0] + \"m\")\n                continue\n\n            # If none of the above apply transfer the token\n            remaining_tokens.append(token)\n\n        # Remove empty strings tokens\n        tokens = [t.strip() for t in remaining_tokens if t.strip()]\n\n        return platform, tokens\n\n    def clean_tokens(self, tokens):\n        \"\"\"Cleans tokenised malware name based on VARIANT_BLACKLIST.\n        The conditions for removing a substring are: exact match, prefix, and\n        suffix.\"\"\"\n\n        def resolve_mapping(self, mapping, token):\n            \"\"\"Find possible tokens mappings from longest to the shortest\n            string according to predefined MAPPING lookup table.\"\"\"\n            # TODO: pick the most probable abbreviation combination i.e. the one\n            #       that uses all of the sub-tokens and not only a few\n            #       e.g. \"adload\"\n            new_token = \"\"\n            old_tokens = []\n\n            for key in mapping:\n                # if the token is constructed from multiple tokens\n                # startswith and endswith should be separated here\n                if token.startswith(key):\n                    new_token = self.MAPPING[key]\n                    old_tokens = token.split(key)\n                    break\n                if token.endswith(key):\n                    new_token = self.MAPPING[key]\n                    old_tokens = token.split(key)\n                    break\n                if key in token:\n                    tokens_iter3.append(self.MAPPING[key])\n                    old_tokens = token.split(key)\n                    break\n\n            # clean old_tokens from empty strings\n            old_tokens = [t.strip() for t in old_tokens if t.strip()]\n\n            return new_token, old_tokens\n\n        # Check 1:1 mappings\n        tokens_iter0 = []\n        for token in tokens:\n            if token in self.MAPPING:\n                tokens_iter0.append(self.MAPPING[token])\n            else:\n                tokens_iter0.append(token)\n\n        # Handle blacklisted tokens and random (hex) hashes\n        tokens_iter1 = []\n        for token in tokens_iter0:\n            if token not in self.VARIANT_BLACKLIST and \\\n                    token not in self.FIX_BLACKLIST and \\\n                    not token.isdigit() and \\\n                    not re.match(\"[a-fA-F0-9]+$\", token) and \\\n                    len(token) > 2:\n                tokens_iter1.append(token)\n\n        tokens_iter2 = []\n        for token in tokens_iter1:\n            for variant in self.FIX_BLACKLIST:\n                new_token = \"\"\n                if token.startswith(variant):\n                    new_token = token.split(variant)[-1]\n                    tokens_iter2.append(new_token)\n                    break\n                if token.endswith(variant):\n                    new_token = token.split(variant)[0]\n                    tokens_iter2.append(new_token)\n                    break\n\n            # When none of the above apply keep the token\n            if not new_token:\n                tokens_iter2.append(token)\n\n        # Get proper names according to predefined mapping\n        sorted_mapping = sorted(self.MAPPING, key=len, reverse=True)\n        tokens_iter3 = []\n        while tokens_iter2:\n            token = tokens_iter2.pop()\n\n            if token in self.MAPPING:\n                tokens_iter3.append(self.MAPPING[token])\n                continue\n\n            new_token, old_tokens = resolve_mapping(self, sorted_mapping, token)\n            tokens_iter2 += old_tokens\n            if new_token:\n                tokens_iter3.append(new_token)\n            # If no new token found leave the token untouched\n            else:\n                tokens_iter3.append(token)\n\n        # Remove tokens up to 2 letters and the blacklisted ones\n        tokens_iter4 = [t for t in tokens_iter3 if len(t) > 2 and\n                        t not in self.VARIANT_BLACKLIST]\n\n        return tokens_iter4\n\n    def normalize(self, variant):\n        \"\"\"Normalize the variant name provided by an Anti Virus engine. This\n        attempts to extract the useful parts of a variant name by stripping\n        all the boilerplate stuff from it.\"\"\"\n        ret = {\n            \"cve\": [],\n            \"platform\": [],\n            \"metatype\": [],\n            \"type\": [],\n            \"family\": []\n        }\n\n        if not variant:\n            return ret\n\n        # Handles \"CVE-2012-1234\", \"CVE2012-1234\".\n        cve = re.search(\"CVE[-_]?(\\\\d{4})[-_](\\\\d{4})\", variant)\n        if cve:\n            ret[\"cve\"].append(\"CVE-%s-%s\" % (cve.group(1), cve.group(2)))\n\n        # Handles \"CVE121234\".\n        cve = re.search(\"CVE(\\\\d{2})(\\\\d{4})\", variant)\n        if cve:\n            ret[\"cve\"].append(\"CVE-20%s-%s\" % (cve.group(1), cve.group(2)))\n\n        # Split variant into tokens based on any punctuation symbol including _\n        vt_name = variant.encode(\"ascii\", \"ignore\").lower()\n        tokens = re.findall(r\"[a-zA-Z0-9]+\", vt_name)\n\n        tokens = self.clean_tokens(tokens)\n        ret[\"platform\"], tokens = self.detect_platform(tokens)\n\n        # Discard too short tokens which are not recognised\n        tokens = [t for t in tokens if len(t) >= 4]\n\n        for token in tokens:\n            # Get metatype: trojan & riskware\n            if (token == \"trojan\" or token in self.TROJANS) and\\\n                    \"trojan\" not in ret[\"metatype\"]:\n                ret[\"metatype\"].append(\"trojan\")\n            if (token == \"riskware\" or token in self.RISKWARE) and\\\n                    \"riskware\" not in ret[\"metatype\"]:\n                ret[\"metatype\"].append(\"riskware\")\n\n            # Get type\n            if token != \"trojan\" and token != \"riskware\" and \\\n                    token in self.TYPES:\n                ret[\"type\"].append(token)\n\n            # Get family\n            if token != \"trojan\" and token != \"riskware\" and \\\n                    token not in self.TYPES:\n                ret[\"family\"].append(token)\n\n        return ret\n"
  },
  {
    "path": "lib/cuckoo/common/whitelist.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os.path\n\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\n\ndomains = set()\n\ndef is_whitelisted_domain(domain):\n    return domain in domains\n\n# Initialize the domain whitelist.\nfor domain in open(os.path.join(CUCKOO_ROOT, \"data\", \"whitelist\", \"domain.txt\")):\n    domains.add(domain.strip())\n"
  },
  {
    "path": "lib/cuckoo/core/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "lib/cuckoo/core/database.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport json\nimport logging\nfrom datetime import datetime\n\nfrom lib.cuckoo.common.config import Config, parse_options, emit_options\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\nfrom lib.cuckoo.common.exceptions import CuckooDatabaseError\nfrom lib.cuckoo.common.exceptions import CuckooOperationalError\nfrom lib.cuckoo.common.exceptions import CuckooDependencyError\nfrom lib.cuckoo.common.objects import File, URL, Dictionary\nfrom lib.cuckoo.common.utils import create_folder, Singleton, classlock, SuperLock, json_encode\n\ntry:\n    from sqlalchemy import create_engine, Column, not_\n    from sqlalchemy import Integer, String, Boolean, DateTime, Enum\n    from sqlalchemy import ForeignKey, Text, Index, Table\n    from sqlalchemy.ext.declarative import declarative_base\n    from sqlalchemy.exc import SQLAlchemyError, IntegrityError\n    from sqlalchemy.orm import sessionmaker, relationship, joinedload\n    from sqlalchemy.ext.hybrid import hybrid_property\n    Base = declarative_base()\nexcept ImportError:\n    raise CuckooDependencyError(\n        \"Unable to import sqlalchemy (install with `pip install sqlalchemy`)\"\n    )\n\nlog = logging.getLogger(__name__)\n\nSCHEMA_VERSION = \"cd31654d187\"\nTASK_PENDING = \"pending\"\nTASK_RUNNING = \"running\"\nTASK_COMPLETED = \"completed\"\nTASK_RECOVERED = \"recovered\"\nTASK_REPORTED = \"reported\"\nTASK_FAILED_ANALYSIS = \"failed_analysis\"\nTASK_FAILED_PROCESSING = \"failed_processing\"\nTASK_FAILED_REPORTING = \"failed_reporting\"\n\n# Secondary table used in association Machine - Tag.\nmachines_tags = Table(\n    \"machines_tags\", Base.metadata,\n    Column(\"machine_id\", Integer, ForeignKey(\"machines.id\")),\n    Column(\"tag_id\", Integer, ForeignKey(\"tags.id\"))\n)\n\n# Secondary table used in association Task - Tag.\ntasks_tags = Table(\n    \"tasks_tags\", Base.metadata,\n    Column(\"task_id\", Integer, ForeignKey(\"tasks.id\")),\n    Column(\"tag_id\", Integer, ForeignKey(\"tags.id\"))\n)\n\nclass Machine(Base):\n    \"\"\"Configured virtual machines to be used as guests.\"\"\"\n    __tablename__ = \"machines\"\n\n    id = Column(Integer(), primary_key=True)\n    name = Column(String(255), nullable=False)\n    label = Column(String(255), nullable=False)\n    ip = Column(String(255), nullable=False)\n    platform = Column(String(255), nullable=False)\n    tags = relationship(\"Tag\", secondary=machines_tags, single_parent=True,\n                        backref=\"machine\")\n    options = Column(String(255), nullable=True)\n    interface = Column(String(255), nullable=True)\n    snapshot = Column(String(255), nullable=True)\n    locked = Column(Boolean(), nullable=False, default=False)\n    locked_changed_on = Column(DateTime(timezone=False), nullable=True)\n    status = Column(String(255), nullable=True)\n    status_changed_on = Column(DateTime(timezone=False), nullable=True)\n    resultserver_ip = Column(String(255), nullable=False)\n    resultserver_port = Column(String(255), nullable=False)\n\n    def __repr__(self):\n        return \"<Machine('{0}','{1}')>\".format(self.id, self.name)\n\n    def to_dict(self):\n        \"\"\"Converts object to dict.\n\n        :return: dict\n        \"\"\"\n        d = {}\n        for column in self.__table__.columns:\n            value = getattr(self, column.name)\n            if isinstance(value, datetime):\n                d[column.name] = value.strftime(\"%Y-%m-%d %H:%M:%S\")\n            else:\n                d[column.name] = value\n\n        # Tags are a relation so no column to iterate.\n        d[\"tags\"] = [tag.name for tag in self.tags]\n        return d\n\n    def to_json(self):\n        \"\"\"Converts object to JSON.\n\n        :return: JSON data\n        \"\"\"\n        return json.dumps(self.to_dict())\n\n    def is_analysis(self):\n        \"\"\"Is this an analysis machine? Generally speaking all machines are\n        analysis machines, however, this is not the case for service VMs.\n        Please refer to the services auxiliary module.\"\"\"\n        for tag in self.tags:\n            if tag.name == \"service\":\n                return\n        return True\n\n    def __init__(self, name, label, ip, platform, options, interface,\n                 snapshot, resultserver_ip, resultserver_port):\n        self.name = name\n        self.label = label\n        self.ip = ip\n        self.platform = platform\n        self.options = options\n        self.interface = interface\n        self.snapshot = snapshot\n        self.resultserver_ip = resultserver_ip\n        self.resultserver_port = resultserver_port\n\nclass Tag(Base):\n    \"\"\"Tag describing anything you want.\"\"\"\n    __tablename__ = \"tags\"\n\n    id = Column(Integer(), primary_key=True)\n    name = Column(String(255), nullable=False, unique=True)\n\n    def __repr__(self):\n        return \"<Tag('{0}','{1}')>\".format(self.id, self.name)\n\n    def __init__(self, name):\n        self.name = name\n\nclass Guest(Base):\n    \"\"\"Tracks guest run.\"\"\"\n    __tablename__ = \"guests\"\n\n    id = Column(Integer(), primary_key=True)\n    # TODO Replace the guest.status with a more generic Task.status solution.\n    status = Column(String(16), nullable=False)\n    name = Column(String(255), nullable=False)\n    label = Column(String(255), nullable=False)\n    manager = Column(String(255), nullable=False)\n    started_on = Column(DateTime(timezone=False),\n                        default=datetime.now,\n                        nullable=False)\n    shutdown_on = Column(DateTime(timezone=False), nullable=True)\n    task_id = Column(Integer,\n                     ForeignKey(\"tasks.id\"),\n                     nullable=False,\n                     unique=True)\n\n    def __repr__(self):\n        return \"<Guest('{0}','{1}')>\".format(self.id, self.name)\n\n    def to_dict(self):\n        \"\"\"Converts object to dict.\n\n        :return: dict\n        \"\"\"\n        d = {}\n        for column in self.__table__.columns:\n            value = getattr(self, column.name)\n            if isinstance(value, datetime):\n                d[column.name] = value.strftime(\"%Y-%m-%d %H:%M:%S\")\n            else:\n                d[column.name] = value\n        return d\n\n    def to_json(self):\n        \"\"\"Converts object to JSON.\n\n        :return: JSON data\n        \"\"\"\n        return json.dumps(self.to_dict())\n\n    def __init__(self, name, label, manager):\n        self.name = name\n        self.label = label\n        self.manager = manager\n\nclass Sample(Base):\n    \"\"\"Submitted files details.\"\"\"\n    __tablename__ = \"samples\"\n\n    id = Column(Integer(), primary_key=True)\n    file_size = Column(Integer(), nullable=False)\n    file_type = Column(Text(), nullable=False)\n    md5 = Column(String(32), nullable=False)\n    crc32 = Column(String(8), nullable=False)\n    sha1 = Column(String(40), nullable=False)\n    sha256 = Column(String(64), nullable=False)\n    sha512 = Column(String(128), nullable=False)\n    ssdeep = Column(String(255), nullable=True)\n    __table_args__ = Index(\"hash_index\", \"md5\", \"crc32\", \"sha1\",\n                           \"sha256\", \"sha512\", unique=True),\n\n    def __repr__(self):\n        return \"<Sample('{0}','{1}')>\".format(self.id, self.sha256)\n\n    def to_dict(self):\n        \"\"\"Converts object to dict.\n\n        :return: dict\n        \"\"\"\n        d = {}\n        for column in self.__table__.columns:\n            d[column.name] = getattr(self, column.name)\n        return d\n\n    def to_json(self):\n        \"\"\"Converts object to JSON.\n\n        :return: JSON data\n        \"\"\"\n        return json.dumps(self.to_dict())\n\n    def __init__(self, md5, crc32, sha1, sha256, sha512,\n                 file_size, file_type=None, ssdeep=None):\n        self.md5 = md5\n        self.sha1 = sha1\n        self.crc32 = crc32\n        self.sha256 = sha256\n        self.sha512 = sha512\n        self.file_size = file_size\n        if file_type:\n            self.file_type = file_type\n        if ssdeep:\n            self.ssdeep = ssdeep\n\nclass Error(Base):\n    \"\"\"Analysis errors.\"\"\"\n    __tablename__ = \"errors\"\n\n    id = Column(Integer(), primary_key=True)\n    message = Column(String(255), nullable=False)\n    task_id = Column(Integer, ForeignKey(\"tasks.id\"), nullable=False)\n\n    def to_dict(self):\n        \"\"\"Converts object to dict.\n\n        :return: dict\n        \"\"\"\n        d = {}\n        for column in self.__table__.columns:\n            d[column.name] = getattr(self, column.name)\n        return d\n\n    def to_json(self):\n        \"\"\"Converts object to JSON.\n\n        :return: JSON data\n        \"\"\"\n        return json.dumps(self.to_dict())\n\n    def __init__(self, message, task_id):\n        self.message = message\n        self.task_id = task_id\n\n    def __repr__(self):\n        return \"<Error('{0}','{1}','{2}')>\".format(self.id, self.message, self.task_id)\n\nclass Task(Base):\n    \"\"\"Analysis task queue.\"\"\"\n    __tablename__ = \"tasks\"\n\n    id = Column(Integer(), primary_key=True)\n    target = Column(Text(), nullable=False)\n    category = Column(String(255), nullable=False)\n    timeout = Column(Integer(), server_default=\"0\", nullable=False)\n    priority = Column(Integer(), server_default=\"1\", nullable=False)\n    custom = Column(String(255), nullable=True)\n    owner = Column(String(64), nullable=True)\n    machine = Column(String(255), nullable=True)\n    package = Column(String(255), nullable=True)\n    tags = relationship(\"Tag\", secondary=tasks_tags, single_parent=True,\n                        backref=\"task\", lazy=\"subquery\")\n    _options = Column(\"options\", String(255), nullable=True)\n    platform = Column(String(255), nullable=True)\n    memory = Column(Boolean, nullable=False, default=False)\n    enforce_timeout = Column(Boolean, nullable=False, default=False)\n    clock = Column(DateTime(timezone=False),\n                   default=datetime.now,\n                   nullable=False)\n    added_on = Column(DateTime(timezone=False),\n                      default=datetime.now,\n                      nullable=False)\n    started_on = Column(DateTime(timezone=False), nullable=True)\n    completed_on = Column(DateTime(timezone=False), nullable=True)\n    status = Column(Enum(TASK_PENDING, TASK_RUNNING, TASK_COMPLETED,\n                         TASK_REPORTED, TASK_RECOVERED, TASK_FAILED_ANALYSIS,\n                         TASK_FAILED_PROCESSING, TASK_FAILED_REPORTING, name=\"status_type\"),\n                    server_default=TASK_PENDING,\n                    nullable=False)\n    sample_id = Column(Integer, ForeignKey(\"samples.id\"), nullable=True)\n    processing = Column(String(16), nullable=True)\n    route = Column(String(16), nullable=True)\n    sample = relationship(\"Sample\", backref=\"tasks\")\n    guest = relationship(\"Guest\", uselist=False, backref=\"tasks\", cascade=\"save-update, delete\")\n    errors = relationship(\"Error\", backref=\"tasks\", cascade=\"save-update, delete\")\n\n    def duration(self):\n        if self.started_on and self.completed_on:\n            return (self.completed_on - self.started_on).seconds\n        return -1\n\n    @hybrid_property\n    def options(self):\n        if not self._options:\n            return {}\n        return parse_options(self._options)\n\n    @options.setter\n    def options(self, value):\n        self._options = value\n\n    def to_dict(self):\n        \"\"\"Converts object to dict.\n\n        :return: dict\n        \"\"\"\n        d = Dictionary()\n        for column in self.__table__.columns:\n            value = getattr(self, column.name)\n            d[column.name] = value\n\n        # Tags are a relation so no column to iterate.\n        d[\"tags\"] = [tag.name for tag in self.tags]\n        d[\"duration\"] = self.duration()\n        d[\"guest\"] = {}\n\n        if self.guest:\n            # Get machine description.\n            d[\"guest\"] = machine = self.guest.to_dict()\n            # Remove superfluous fields.\n            del machine[\"task_id\"]\n            del machine[\"id\"]\n\n        return d\n\n    def to_json(self):\n        \"\"\"Converts object to JSON.\n\n        :return: JSON data\n        \"\"\"\n        return json_encode(self.to_dict())\n\n    def __init__(self, target=None):\n        self.target = target\n\n    def __repr__(self):\n        return \"<Task('{0}','{1}')>\".format(self.id, self.target)\n\nclass AlembicVersion(Base):\n    \"\"\"Table used to pinpoint actual database schema release.\"\"\"\n    __tablename__ = \"alembic_version\"\n\n    version_num = Column(String(32), nullable=False, primary_key=True)\n\nclass Database(object):\n    \"\"\"Analysis queue database.\n\n    :note: This class handles the creation of the database user for internal queue\n    management. It also provides some functions for interacting with it.\n    \"\"\"\n    __metaclass__ = Singleton\n\n    def __init__(self, dsn=None, schema_check=True, echo=False):\n        \"\"\"\n        :param dsn: database connection string.\n        :param schema_check: disable or enable the db schema version check.\n        :param echo: echo sql queries.\n        \"\"\"\n        self._lock = SuperLock()\n        cfg = Config()\n\n        if dsn:\n            self._connect_database(dsn)\n        elif hasattr(cfg, \"database\") and cfg.database.connection:\n            self._connect_database(cfg.database.connection)\n        else:\n            db_file = os.path.join(CUCKOO_ROOT, \"db\", \"cuckoo.db\")\n            if not os.path.exists(db_file):\n                db_dir = os.path.dirname(db_file)\n                if not os.path.exists(db_dir):\n                    try:\n                        create_folder(folder=db_dir)\n                    except CuckooOperationalError as e:\n                        raise CuckooDatabaseError(\"Unable to create database directory: {0}\".format(e))\n\n            self._connect_database(\"sqlite:///%s\" % db_file)\n\n        # Disable SQL logging. Turn it on for debugging.\n        self.engine.echo = echo\n\n        # Connection timeout.\n        if hasattr(cfg, \"database\") and cfg.database.timeout:\n            self.engine.pool_timeout = cfg.database.timeout\n        else:\n            self.engine.pool_timeout = 60\n\n        # Let's emit a warning just in case.\n        if not hasattr(cfg, \"database\"):\n            log.warning(\"It appears you don't have a valid `database` \"\n                        \"section in conf/cuckoo.conf, using sqlite3 instead.\")\n\n        # Create schema.\n        try:\n            Base.metadata.create_all(self.engine)\n        except SQLAlchemyError as e:\n            raise CuckooDatabaseError(\"Unable to create or connect to database: {0}\".format(e))\n\n        # Get db session.\n        self.Session = sessionmaker(bind=self.engine)\n\n        # Deal with schema versioning.\n        # TODO: it's a little bit dirty, needs refactoring.\n        tmp_session = self.Session()\n        if not tmp_session.query(AlembicVersion).count():\n            # Set database schema version.\n            tmp_session.add(AlembicVersion(version_num=SCHEMA_VERSION))\n            try:\n                tmp_session.commit()\n            except SQLAlchemyError as e:\n                raise CuckooDatabaseError(\"Unable to set schema version: {0}\".format(e))\n                tmp_session.rollback()\n            finally:\n                tmp_session.close()\n        else:\n            # Check if db version is the expected one.\n            last = tmp_session.query(AlembicVersion).first()\n            tmp_session.close()\n            if last.version_num != SCHEMA_VERSION and schema_check:\n                raise CuckooDatabaseError(\n                    \"DB schema version mismatch: found %s, expected %s. \"\n                    \"Try to apply all migrations (cd utils/db_migration/ && \"\n                    \"alembic upgrade head).\" %\n                    (last.version_num, SCHEMA_VERSION)\n                )\n\n    def __del__(self):\n        \"\"\"Disconnects pool.\"\"\"\n        self.engine.dispose()\n\n    def _connect_database(self, connection_string):\n        \"\"\"Connect to a Database.\n\n        :param connection_string: Connection string specifying the database\n        \"\"\"\n        try:\n            # TODO: this is quite ugly, should improve.\n            if connection_string.startswith(\"sqlite\"):\n                # Using \"check_same_thread\" to disable sqlite safety check on multiple threads.\n                self.engine = create_engine(connection_string, connect_args={\"check_same_thread\": False})\n            elif connection_string.startswith(\"postgres\"):\n                # Disabling SSL mode to avoid some errors using sqlalchemy and multiprocesing.\n                # See: http://www.postgresql.org/docs/9.0/static/libpq-ssl.html#LIBPQ-SSL-SSLMODE-STATEMENTS\n                self.engine = create_engine(connection_string, connect_args={\"sslmode\": \"disable\"})\n            else:\n                self.engine = create_engine(connection_string)\n        except ImportError as e:\n            lib = e.message.split()[-1]\n            raise CuckooDependencyError(\n                \"Missing database driver, unable to import %s (install with \"\n                \"`pip install %s`)\" % (lib, lib)\n            )\n\n    def _get_or_create(self, session, model, **kwargs):\n        \"\"\"Get an ORM instance or create it if not exist.\n\n        :param session: SQLAlchemy session object\n        :param model: model to query\n        :return: row instance\n        \"\"\"\n        instance = session.query(model).filter_by(**kwargs).first()\n        return instance or model(**kwargs)\n\n    @classlock\n    def drop(self):\n        \"\"\"Drop all tables.\"\"\"\n        try:\n            Base.metadata.drop_all(self.engine)\n        except SQLAlchemyError as e:\n            raise CuckooDatabaseError(\"Unable to create or connect to database: {0}\".format(e))\n\n    @classlock\n    def clean_machines(self):\n        \"\"\"Clean old stored machines and related tables.\"\"\"\n        # Secondary table.\n        # TODO: this is better done via cascade delete.\n        self.engine.execute(machines_tags.delete())\n\n        session = self.Session()\n        try:\n            session.query(Machine).delete()\n            session.commit()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error cleaning machines: {0}\".format(e))\n            session.rollback()\n        finally:\n            session.close()\n\n    @classlock\n    def add_machine(self, name, label, ip, platform, options, tags, interface,\n                    snapshot, resultserver_ip, resultserver_port):\n        \"\"\"Add a guest machine.\n\n        :param name: machine id\n        :param label: machine label\n        :param ip: machine IP address\n        :param platform: machine supported platform\n        :param tags: list of comma separated tags\n        :param interface: sniffing interface for this machine\n        :param snapshot: snapshot name to use instead of the current one, if configured\n        :param resultserver_ip: IP address of the Result Server\n        :param resultserver_port: port of the Result Server\n        \"\"\"\n        session = self.Session()\n        machine = Machine(name=name,\n                          label=label,\n                          ip=ip,\n                          platform=platform,\n                          options=options,\n                          interface=interface,\n                          snapshot=snapshot,\n                          resultserver_ip=resultserver_ip,\n                          resultserver_port=resultserver_port)\n\n        # Deal with tags format (i.e., foo,bar,baz)\n        if tags:\n            for tag in tags.split(\",\"):\n                if tag.strip():\n                    tag = self._get_or_create(session, Tag, name=tag.strip())\n                    machine.tags.append(tag)\n        session.add(machine)\n\n        try:\n            session.commit()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error adding machine: {0}\".format(e))\n            session.rollback()\n        finally:\n            session.close()\n\n    @classlock\n    def set_status(self, task_id, status):\n        \"\"\"Set task status.\n\n        :param task_id: task identifier\n        :param status: status string\n        :return: operation status\n        \"\"\"\n        session = self.Session()\n        try:\n            row = session.query(Task).get(task_id)\n            if not row:\n                return\n\n            row.status = status\n\n            if status == TASK_RUNNING:\n                row.started_on = datetime.now()\n            elif status == TASK_COMPLETED:\n                row.completed_on = datetime.now()\n\n            session.commit()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error setting status: {0}\".format(e))\n            session.rollback()\n        finally:\n            session.close()\n\n    @classlock\n    def set_route(self, task_id, route):\n        \"\"\"Set the taken route of this task.\n\n        :param task_id: task identifier\n        :param route: route string\n        :return: operation status\n        \"\"\"\n        session = self.Session()\n        try:\n            row = session.query(Task).get(task_id)\n            if not row:\n                return\n\n            row.route = route\n            session.commit()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error setting route: {0}\".format(e))\n            session.rollback()\n        finally:\n            session.close()\n\n    @classlock\n    def fetch(self, machine=None, service=True):\n        \"\"\"Fetches a task waiting to be processed and locks it for running.\n\n        :return: None or task\n        \"\"\"\n        session = self.Session()\n        try:\n            q = session.query(Task).filter_by(status=TASK_PENDING)\n\n            if machine:\n                q = q.filter_by(machine=machine)\n\n            if not service:\n                q = q.filter(not_(Task.tags.any(name=\"service\")))\n\n            row = q.order_by(Task.priority.desc(), Task.added_on).first()\n            if row:\n                self.set_status(task_id=row.id, status=TASK_RUNNING)\n                session.refresh(row)\n\n            return row\n        except SQLAlchemyError as e:\n            log.debug(\"Database error fetching task: {0}\".format(e))\n            session.rollback()\n        finally:\n            session.close()\n\n    @classlock\n    def guest_start(self, task_id, name, label, manager):\n        \"\"\"Logs guest start.\n\n        :param task_id: task identifier\n        :param name: vm name\n        :param label: vm label\n        :param manager: vm manager\n        :return: guest row id\n        \"\"\"\n        session = self.Session()\n        guest = Guest(name, label, manager)\n        try:\n            guest.status = \"init\"\n            session.query(Task).get(task_id).guest = guest\n            session.commit()\n            session.refresh(guest)\n            return guest.id\n        except SQLAlchemyError as e:\n            log.debug(\"Database error logging guest start: {0}\".format(e))\n            session.rollback()\n            return None\n        finally:\n            session.close()\n\n    @classlock\n    def guest_get_status(self, task_id):\n        \"\"\"Logs guest start.\n\n        :param task_id: task id\n        :return: guest status\n        \"\"\"\n        session = self.Session()\n        try:\n            guest = session.query(Guest).filter_by(task_id=task_id).first()\n            return guest.status if guest else None\n        except SQLAlchemyError as e:\n            log.debug(\"Database error logging guest start: {0}\".format(e))\n            session.rollback()\n            return\n        finally:\n            session.close()\n\n    @classlock\n    def guest_set_status(self, task_id, status):\n        \"\"\"Logs guest start.\n\n        :param task_id: task identifier\n        :param status: status\n        \"\"\"\n        session = self.Session()\n        try:\n            guest = session.query(Guest).filter_by(task_id=task_id).first()\n            guest.status = status\n            session.commit()\n            session.refresh(guest)\n        except SQLAlchemyError as e:\n            log.debug(\"Database error logging guest start: {0}\".format(e))\n            session.rollback()\n            return None\n        finally:\n            session.close()\n\n    @classlock\n    def guest_remove(self, guest_id):\n        \"\"\"Removes a guest start entry.\"\"\"\n        session = self.Session()\n        try:\n            guest = session.query(Guest).get(guest_id)\n            session.delete(guest)\n            session.commit()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error logging guest remove: {0}\".format(e))\n            session.rollback()\n            return None\n        finally:\n            session.close()\n\n    @classlock\n    def guest_stop(self, guest_id):\n        \"\"\"Logs guest stop.\n\n        :param guest_id: guest log entry id\n        \"\"\"\n        session = self.Session()\n        try:\n            guest = session.query(Guest).get(guest_id)\n            guest.status = \"stopped\"\n            guest.shutdown_on = datetime.now()\n            session.commit()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error logging guest stop: {0}\".format(e))\n            session.rollback()\n        except TypeError:\n            log.warning(\"Data inconsistency in guests table detected, it might be a crash leftover. Continue\")\n            session.rollback()\n        finally:\n            session.close()\n\n    @classlock\n    def list_machines(self, locked=False):\n        \"\"\"Lists virtual machines.\n\n        :return: list of virtual machines\n        \"\"\"\n        session = self.Session()\n        try:\n            if locked:\n                machines = session.query(Machine).options(joinedload(\"tags\")).filter_by(locked=True).all()\n            else:\n                machines = session.query(Machine).options(joinedload(\"tags\")).all()\n            return machines\n        except SQLAlchemyError as e:\n            log.debug(\"Database error listing machines: {0}\".format(e))\n            return []\n        finally:\n            session.close()\n\n    @classlock\n    def lock_machine(self, label=None, platform=None, tags=None):\n        \"\"\"Places a lock on a free virtual machine.\n\n        :param label: optional virtual machine label\n        :param platform: optional virtual machine platform\n        :param tags: optional tags required (list)\n        :return: locked machine\n        \"\"\"\n        session = self.Session()\n\n        # Preventive checks.\n        if label and platform:\n            # Wrong usage.\n            log.error(\"You can select machine only by label or by platform.\")\n            return None\n        elif label and tags:\n            # Also wrong usage.\n            log.error(\"You can select machine only by label or by tags.\")\n            return None\n\n        try:\n            machines = session.query(Machine)\n            if label:\n                machines = machines.filter_by(label=label)\n            if platform:\n                machines = machines.filter_by(platform=platform)\n            if tags:\n                for tag in tags:\n                    machines = machines.filter(Machine.tags.any(name=tag))\n\n            # Check if there are any machines that satisfy the\n            # selection requirements.\n            if not machines.count():\n                raise CuckooOperationalError(\"No machines match selection criteria.\")\n\n            # Get the first free machine.\n            machine = machines.filter_by(locked=False).first()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error locking machine: {0}\".format(e))\n            session.close()\n            return None\n\n        if machine:\n            machine.locked = True\n            machine.locked_changed_on = datetime.now()\n            try:\n                session.commit()\n                session.refresh(machine)\n            except SQLAlchemyError as e:\n                log.debug(\"Database error locking machine: {0}\".format(e))\n                session.rollback()\n                return None\n            finally:\n                session.close()\n\n        return machine\n\n    @classlock\n    def unlock_machine(self, label):\n        \"\"\"Remove lock form a virtual machine.\n\n        :param label: virtual machine label\n        :return: unlocked machine\n        \"\"\"\n        session = self.Session()\n        try:\n            machine = session.query(Machine).filter_by(label=label).first()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error unlocking machine: {0}\".format(e))\n            session.close()\n            return None\n\n        if machine:\n            machine.locked = False\n            machine.locked_changed_on = datetime.now()\n            try:\n                session.commit()\n                session.refresh(machine)\n            except SQLAlchemyError as e:\n                log.debug(\"Database error locking machine: {0}\".format(e))\n                session.rollback()\n                return None\n            finally:\n                session.close()\n\n        return machine\n\n    @classlock\n    def count_machines_available(self):\n        \"\"\"How many virtual machines are ready for analysis.\n\n        :return: free virtual machines count\n        \"\"\"\n        session = self.Session()\n        try:\n            machines_count = session.query(Machine).filter_by(locked=False).count()\n            return machines_count\n        except SQLAlchemyError as e:\n            log.debug(\"Database error counting machines: {0}\".format(e))\n            return 0\n        finally:\n            session.close()\n\n    @classlock\n    def get_available_machines(self):\n        \"\"\"  Which machines are available\n\n        :return: free virtual machines\n        \"\"\"\n        session = self.Session()\n        try:\n            machines = session.query(Machine).options(joinedload(\"tags\")).filter_by(locked=False).all()\n            return machines\n        except SQLAlchemyError as e:\n            log.debug(\"Database error getting available machines: {0}\".format(e))\n            return []\n        finally:\n            session.close()\n\n    @classlock\n    def set_machine_status(self, label, status):\n        \"\"\"Set status for a virtual machine.\n\n        :param label: virtual machine label\n        :param status: new virtual machine status\n        \"\"\"\n        session = self.Session()\n        try:\n            machine = session.query(Machine).filter_by(label=label).first()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error setting machine status: {0}\".format(e))\n            session.close()\n            return\n\n        if machine:\n            machine.status = status\n            machine.status_changed_on = datetime.now()\n            try:\n                session.commit()\n                session.refresh(machine)\n            except SQLAlchemyError as e:\n                log.debug(\"Database error setting machine status: {0}\".format(e))\n                session.rollback()\n            finally:\n                session.close()\n        else:\n            session.close()\n\n    @classlock\n    def add_error(self, message, task_id):\n        \"\"\"Add an error related to a task.\n\n        :param message: error message\n        :param task_id: ID of the related task\n        \"\"\"\n        session = self.Session()\n        error = Error(message=message, task_id=task_id)\n        session.add(error)\n        try:\n            session.commit()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error adding error log: {0}\".format(e))\n            session.rollback()\n        finally:\n            session.close()\n\n    # The following functions are mostly used by external utils.\n\n    @classlock\n    def add(self, obj, timeout=0, package=\"\", options=\"\", priority=1,\n            custom=\"\", owner=\"\", machine=\"\", platform=\"\", tags=None,\n            memory=False, enforce_timeout=False, clock=None, category=None):\n        \"\"\"Add a task to database.\n\n        :param obj: object to add (File or URL).\n        :param timeout: selected timeout.\n        :param options: analysis options.\n        :param priority: analysis priority.\n        :param custom: custom options.\n        :param owner: task owner.\n        :param machine: selected machine.\n        :param platform: platform.\n        :param tags: optional tags that must be set for machine selection\n        :param memory: toggle full memory dump.\n        :param enforce_timeout: toggle full timeout execution.\n        :param clock: virtual machine clock time\n        :return: cursor or None.\n        \"\"\"\n        session = self.Session()\n\n        # Convert empty strings and None values to a valid int\n        if not timeout:\n            timeout = 0\n        if not priority:\n            priority = 1\n\n        if isinstance(obj, File):\n            sample = Sample(md5=obj.get_md5(),\n                            crc32=obj.get_crc32(),\n                            sha1=obj.get_sha1(),\n                            sha256=obj.get_sha256(),\n                            sha512=obj.get_sha512(),\n                            file_size=obj.get_size(),\n                            file_type=obj.get_type(),\n                            ssdeep=obj.get_ssdeep())\n            session.add(sample)\n\n            try:\n                session.commit()\n            except IntegrityError:\n                session.rollback()\n                try:\n                    sample = session.query(Sample).filter_by(md5=obj.get_md5()).first()\n                except SQLAlchemyError as e:\n                    log.debug(\"Error querying sample for hash: {0}\".format(e))\n                    session.close()\n                    return None\n            except SQLAlchemyError as e:\n                log.debug(\"Database error adding task: {0}\".format(e))\n                session.close()\n                return None\n\n            task = Task(obj.file_path)\n            task.sample_id = sample.id\n        elif isinstance(obj, URL):\n            task = Task(obj.url)\n        else:\n            task = Task(\"none\")\n\n        task.category = category\n        task.timeout = timeout\n        task.package = package\n        task.options = options\n        task.priority = priority\n        task.custom = custom\n        task.owner = owner\n        task.machine = machine\n        task.platform = platform\n        task.memory = memory\n        task.enforce_timeout = enforce_timeout\n\n        # Deal with tags format (i.e., foo,bar,baz)\n        if tags:\n            for tag in tags.split(\",\"):\n                tag = self._get_or_create(session, Tag, name=tag.strip())\n                task.tags.append(tag)\n\n        if clock:\n            if isinstance(clock, str) or isinstance(clock, unicode):\n                try:\n                    task.clock = datetime.strptime(clock, \"%m-%d-%Y %H:%M:%S\")\n                except ValueError:\n                    log.warning(\"The date you specified has an invalid format, using current timestamp.\")\n                    task.clock = datetime.now()\n            else:\n                task.clock = clock\n\n        session.add(task)\n\n        try:\n            session.commit()\n            task_id = task.id\n        except SQLAlchemyError as e:\n            log.debug(\"Database error adding task: {0}\".format(e))\n            session.rollback()\n            return None\n        finally:\n            session.close()\n\n        return task_id\n\n    def add_path(self, file_path, timeout=0, package=\"\", options=\"\",\n                 priority=1, custom=\"\", owner=\"\", machine=\"\", platform=\"\",\n                 tags=None, memory=False, enforce_timeout=False, clock=None):\n        \"\"\"Add a task to database from file path.\n\n        :param file_path: sample path.\n        :param timeout: selected timeout.\n        :param options: analysis options.\n        :param priority: analysis priority.\n        :param custom: custom options.\n        :param owner: task owner.\n        :param machine: selected machine.\n        :param platform: platform.\n        :param tags: Tags required in machine selection\n        :param memory: toggle full memory dump.\n        :param enforce_timeout: toggle full timeout execution.\n        :param clock: virtual machine clock time\n        :return: cursor or None.\n        \"\"\"\n        if not file_path or not os.path.exists(file_path):\n            log.warning(\"File does not exist: %s.\", file_path)\n            return None\n\n        # Convert empty strings and None values to a valid int\n        if not timeout:\n            timeout = 0\n        if not priority:\n            priority = 1\n\n        return self.add(File(file_path), timeout, package, options, priority,\n                        custom, owner, machine, platform, tags, memory,\n                        enforce_timeout, clock, \"file\")\n\n    def add_url(self, url, timeout=0, package=\"\", options=\"\", priority=1,\n                custom=\"\", owner=\"\", machine=\"\", platform=\"\", tags=None,\n                memory=False, enforce_timeout=False, clock=None):\n        \"\"\"Add a task to database from url.\n\n        :param url: url.\n        :param timeout: selected timeout.\n        :param options: analysis options.\n        :param priority: analysis priority.\n        :param custom: custom options.\n        :param owner: task owner.\n        :param machine: selected machine.\n        :param platform: platform.\n        :param tags: tags for machine selection\n        :param memory: toggle full memory dump.\n        :param enforce_timeout: toggle full timeout execution.\n        :param clock: virtual machine clock time\n        :return: cursor or None.\n        \"\"\"\n\n        # Convert empty strings and None values to a valid int\n        if not timeout:\n            timeout = 0\n        if not priority:\n            priority = 1\n\n        return self.add(URL(url), timeout, package, options, priority,\n                        custom, owner, machine, platform, tags, memory,\n                        enforce_timeout, clock, \"url\")\n\n    def add_baseline(self, timeout=0, owner=\"\", machine=\"\", memory=False):\n        \"\"\"Add a baseline task to database.\n\n        :param timeout: selected timeout.\n        :param owner: task owner.\n        :param machine: selected machine.\n        :param memory: toggle full memory dump.\n        :return: cursor or None.\n        \"\"\"\n        return self.add(None, timeout=timeout or 0, priority=999, owner=owner,\n                        machine=machine, memory=memory, category=\"baseline\")\n\n    def add_service(self, timeout, owner, tags):\n        \"\"\"Add a service task to database.\n\n        :param timeout: selected timeout.\n        :param owner: task owner.\n        :param tags: task tags.\n        :return: cursor or None.\n        \"\"\"\n        return self.add(None, timeout=timeout, priority=999, owner=owner,\n                        tags=tags, category=\"service\")\n\n    @classlock\n    def reschedule(self, task_id, priority=None):\n        \"\"\"Reschedule a task.\n\n        :param task_id: ID of the task to reschedule.\n        :return: ID of the newly created task.\n        \"\"\"\n        task = self.view_task(task_id)\n        if not task:\n            return\n\n        if task.category == \"file\":\n            add = self.add_path\n        elif task.category == \"url\":\n            add = self.add_url\n        else:\n            return\n\n        # Change status to recovered.\n        session = self.Session()\n        session.query(Task).get(task_id).status = TASK_RECOVERED\n        try:\n            session.commit()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error rescheduling task: {0}\".format(e))\n            session.rollback()\n            return False\n        finally:\n            session.close()\n\n        # Normalize tags.\n        if task.tags:\n            tags = \",\".join(tag.name for tag in task.tags)\n        else:\n            tags = task.tags\n\n        # Assign a new priority.\n        if priority:\n            task.priority = priority\n\n        options = emit_options(task.options)\n        return add(task.target, task.timeout, task.package, options,\n                   task.priority, task.custom, task.owner, task.machine,\n                   task.platform, tags, task.memory, task.enforce_timeout,\n                   task.clock)\n\n    def list_tasks(self, limit=None, details=True, category=None, owner=None,\n                   offset=None, status=None, sample_id=None, not_status=None,\n                   completed_after=None, order_by=None):\n        \"\"\"Retrieve list of task.\n\n        :param limit: specify a limit of entries.\n        :param details: if details about must be included\n        :param category: filter by category\n        :param owner: task owner\n        :param offset: list offset\n        :param status: filter by task status\n        :param sample_id: filter tasks for a sample\n        :param not_status: exclude this task status from filter\n        :param completed_after: only list tasks completed after this timestamp\n        :param order_by: definition which field to sort by\n        :return: list of tasks.\n        \"\"\"\n        session = self.Session()\n        try:\n            search = session.query(Task)\n\n            if status:\n                search = search.filter_by(status=status)\n            if not_status:\n                search = search.filter(Task.status != not_status)\n            if category:\n                search = search.filter_by(category=category)\n            if owner:\n                search = search.filter_by(owner=owner)\n            if details:\n                search = search.options(joinedload(\"guest\"), joinedload(\"errors\"), joinedload(\"tags\"))\n            if sample_id is not None:\n                search = search.filter_by(sample_id=sample_id)\n            if completed_after:\n                search = search.filter(Task.completed_on > completed_after)\n\n            if order_by is not None:\n                search = search.order_by(order_by)\n            else:\n                search = search.order_by(Task.added_on.desc())\n\n            tasks = search.limit(limit).offset(offset).all()\n            return tasks\n        except SQLAlchemyError as e:\n            log.debug(\"Database error listing tasks: {0}\".format(e))\n            return []\n        finally:\n            session.close()\n\n    @classlock\n    def count_tasks(self, status=None):\n        \"\"\"Count tasks in the database\n\n        :param status: apply a filter according to the task status\n        :return: number of tasks found\n        \"\"\"\n        session = self.Session()\n        try:\n            if status:\n                tasks_count = session.query(Task).filter_by(status=status).count()\n            else:\n                tasks_count = session.query(Task).count()\n            return tasks_count\n        except SQLAlchemyError as e:\n            log.debug(\"Database error counting tasks: {0}\".format(e))\n            return 0\n        finally:\n            session.close()\n\n    @classlock\n    def view_task(self, task_id, details=True):\n        \"\"\"Retrieve information on a task.\n\n        :param task_id: ID of the task to query.\n        :return: details on the task.\n        \"\"\"\n        session = self.Session()\n        try:\n            if details:\n                task = session.query(Task).options(joinedload(\"guest\"), joinedload(\"errors\"), joinedload(\"tags\")).get(task_id)\n            else:\n                task = session.query(Task).get(task_id)\n        except SQLAlchemyError as e:\n            log.debug(\"Database error viewing task: {0}\".format(e))\n            return None\n        else:\n            if task:\n                session.expunge(task)\n            return task\n        finally:\n            session.close()\n\n    @classlock\n    def delete_task(self, task_id):\n        \"\"\"Delete information on a task.\n\n        :param task_id: ID of the task to query.\n        :return: operation status.\n        \"\"\"\n        session = self.Session()\n        try:\n            task = session.query(Task).get(task_id)\n            session.delete(task)\n            session.commit()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error deleting task: {0}\".format(e))\n            session.rollback()\n            return False\n        finally:\n            session.close()\n        return True\n\n    @classlock\n    def view_sample(self, sample_id):\n        \"\"\"Retrieve information on a sample given a sample id.\n\n        :param sample_id: ID of the sample to query.\n        :return: details on the sample used in sample: sample_id.\n        \"\"\"\n        session = self.Session()\n        try:\n            sample = session.query(Sample).get(sample_id)\n        except AttributeError:\n            return None\n        except SQLAlchemyError as e:\n            log.debug(\"Database error viewing task: {0}\".format(e))\n            return None\n        else:\n            if sample:\n                session.expunge(sample)\n        finally:\n            session.close()\n\n        return sample\n\n    @classlock\n    def find_sample(self, md5=None, sha256=None):\n        \"\"\"Search samples by MD5.\n\n        :param md5: md5 string\n        :return: matches list\n        \"\"\"\n        session = self.Session()\n        try:\n            if md5:\n                sample = session.query(Sample).filter_by(md5=md5).first()\n            elif sha256:\n                sample = session.query(Sample).filter_by(sha256=sha256).first()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error searching sample: {0}\".format(e))\n            return None\n        else:\n            if sample:\n                session.expunge(sample)\n        finally:\n            session.close()\n        return sample\n\n    @classlock\n    def count_samples(self):\n        \"\"\"Counts the amount of samples in the database.\"\"\"\n        session = self.Session()\n        try:\n            sample_count = session.query(Sample).count()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error counting samples: {0}\".format(e))\n            return 0\n        finally:\n            session.close()\n        return sample_count\n\n    @classlock\n    def view_machine(self, name):\n        \"\"\"Show virtual machine.\n\n        :params name: virtual machine name\n        :return: virtual machine's details\n        \"\"\"\n        session = self.Session()\n        try:\n            machine = session.query(Machine).options(joinedload(\"tags\")).filter_by(name=name).first()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error viewing machine: {0}\".format(e))\n            return None\n        else:\n            if machine:\n                session.expunge(machine)\n        finally:\n            session.close()\n        return machine\n\n    @classlock\n    def view_machine_by_label(self, label):\n        \"\"\"Show virtual machine.\n\n        :params label: virtual machine label\n        :return: virtual machine's details\n        \"\"\"\n        session = self.Session()\n        try:\n            machine = session.query(Machine).options(joinedload(\"tags\")).filter_by(label=label).first()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error viewing machine by label: {0}\".format(e))\n            return None\n        else:\n            if machine:\n                session.expunge(machine)\n        finally:\n            session.close()\n        return machine\n\n    @classlock\n    def view_errors(self, task_id):\n        \"\"\"Get all errors related to a task.\n\n        :param task_id: ID of task associated to the errors\n        :return: list of errors.\n        \"\"\"\n        session = self.Session()\n        try:\n            errors = session.query(Error).filter_by(task_id=task_id).all()\n        except SQLAlchemyError as e:\n            log.debug(\"Database error viewing errors: {0}\".format(e))\n            return []\n        finally:\n            session.close()\n        return errors\n\n    def processing_get_task(self, instance):\n        \"\"\"Get an available task for processing.\"\"\"\n        session = self.Session()\n\n        # Please feel free to sqlalchemize the following query, but I didn't\n        # get that far. This seems to be doing a fine job for avoiding race\n        # conditions - especially with the session.commit() thing. But any\n        # improvements are welcome.\n        # TODO We can get rid of the `processing` column once again by\n        # introducing a \"reporting\" status, but this requires annoying\n        # database migrations, so leaving that for another day.\n        query = \"\"\"\n            UPDATE tasks SET processing = :instance\n            WHERE id IN (\n                SELECT id FROM tasks\n                WHERE status = :status AND processing IS NULL\n                LIMIT 1 FOR UPDATE\n            )\n            RETURNING id\n        \"\"\"\n\n        try:\n            params = {\n                \"instance\": instance,\n                \"status\": TASK_COMPLETED,\n            }\n            task = session.execute(query, params).first()\n            session.commit()\n            return task[0] if task else None\n        except SQLAlchemyError as e:\n            log.debug(\"Database error getting new processing tasks: %s\", e)\n        finally:\n            session.close()\n"
  },
  {
    "path": "lib/cuckoo/core/guest.py",
    "content": "# coding=utf-8\n# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport datetime\nimport io\nimport json\nimport os\nimport time\nimport socket\nimport logging\nimport requests\nimport xmlrpclib\n\nfrom zipfile import ZipFile, ZIP_STORED\n\nfrom lib.cuckoo.common.config import Config, parse_options\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\nfrom lib.cuckoo.common.constants import CUCKOO_GUEST_PORT, CUCKOO_GUEST_INIT\nfrom lib.cuckoo.common.constants import CUCKOO_GUEST_COMPLETED\nfrom lib.cuckoo.common.constants import CUCKOO_GUEST_FAILED\nfrom lib.cuckoo.common.exceptions import CuckooGuestError\nfrom lib.cuckoo.common.utils import TimeoutServer\nfrom lib.cuckoo.core.database import Database\n\n\nlog = logging.getLogger(__name__)\ndb = Database()\n\ndef analyzer_zipfile(platform, monitor):\n    \"\"\"Creates the Zip file that is sent to the Guest.\"\"\" # why no Yara?\n    t = time.time()\n\n    zip_data = io.BytesIO()\n    zip_file = ZipFile(zip_data, \"w\", ZIP_STORED)\n\n    # Select the proper analyzer's folder according to the operating\n    # system associated with the current machine.\n    root = os.path.join(CUCKOO_ROOT, \"analyzer\", platform)\n    root_len = len(os.path.abspath(root))\n\n    if not os.path.exists(root):\n        log.error(\"No valid analyzer found at path: %s\", root)\n        return False\n\n    # Walk through everything inside the analyzer's folder and write\n    # them to the zip archive.\n    for root, dirs, files in os.walk(root):\n        archive_root = os.path.abspath(root)[root_len:]\n        for name in files:\n            path = os.path.join(root, name)\n            archive_name = os.path.join(archive_root, name)\n            zip_file.write(path, archive_name)\n\n    # Include the chosen monitoring component.\n    if platform == \"windows\":\n        dirpath = os.path.join(CUCKOO_ROOT, \"data\", \"monitor\", monitor)\n        for name in os.listdir(dirpath):\n            path = os.path.join(dirpath, name)\n            archive_name = os.path.join(\"/bin\", name)\n            zip_file.write(path, archive_name)\n\n    zip_file.close()\n    data = zip_data.getvalue()\n\n    if time.time() - t > 10:\n        log.warning(\n            \"It took more than 10 seconds to build the Analyzer Zip for the \"\n            \"Guest. This might be a serious performance penalty. Is your \"\n            \"analyzer/windows/ directory bloated with unnecessary files?\"\n        )\n\n    return data\n\nclass OldGuestManager(object):\n    \"\"\"Old and deprecated Guest Manager.\n\n    :Note: This class handles the communications with the old agent running in the\n    virtual machine.\n    :param ip: guest's IP address.\n    :param platform: guest's operating system type.\n    \"\"\"\n\n    def __init__(self, vm_id, ip, platform, task_id):\n        \"\"\"\n        :param ip: guest's IP address.\n        :param platform: guest's operating system type.\n        \"\"\"\n        self.id = vm_id\n        self.ip = ip\n        self.platform = platform\n        self.task_id = task_id\n\n        self.cfg = Config()\n\n        # initialized in start_analysis so we can update the critical timeout\n        # TODO, pull options parameter into __init__ so we can do this here\n        self.timeout = None\n        self.server = None\n\n    def wait(self, status):\n        \"\"\"Waiting for status.\n\n        :param status: status.\n        :return: always True.\n        \"\"\"\n        log.debug(\"%s: waiting for status 0x%.04x\", self.id, status)\n\n        end = time.time() + self.timeout\n        self.server._set_timeout(self.timeout)\n\n        while db.guest_get_status(self.task_id) == \"starting\":\n            # Check if we've passed the timeout.\n            if time.time() > end:\n                raise CuckooGuestError(\"{0}: the guest initialization hit the \"\n                                       \"critical timeout, analysis \"\n                                       \"aborted.\".format(self.id))\n\n            try:\n                # If the server returns the given status, break the loop\n                # and return.\n                if self.server.get_status() == status:\n                    log.debug(\"%s: status ready\", self.id)\n                    break\n            except:\n                pass\n\n            log.debug(\"%s: not ready yet\", self.id)\n            time.sleep(1)\n\n        self.server._set_timeout(None)\n        return True\n\n    def upload_analyzer(self, monitor):\n        \"\"\"Upload analyzer to guest.\n\n        :return: operation status.\n        \"\"\"\n        zip_data = analyzer_zipfile(self.platform, monitor)\n\n        log.debug(\n            \"Uploading analyzer to guest (id=%s, ip=%s, monitor=%s, size=%d)\",\n            self.id, self.ip, monitor, len(zip_data)\n        )\n\n        # Send the zip containing the analyzer to the agent running inside\n        # the guest.\n        try:\n            self.server.add_analyzer(xmlrpclib.Binary(zip_data))\n        except socket.timeout:\n            raise CuckooGuestError(\"{0}: guest communication timeout: unable \"\n                                   \"to upload agent, check networking or try \"\n                                   \"to increase timeout\".format(self.id))\n\n    def start_analysis(self, options, monitor):\n        \"\"\"Start analysis.\n\n        :param options: options.\n        :return: operation status.\n        \"\"\"\n        # TODO Deal with unicode URLs, should probably try URL encoding.\n        # Unicode files are being taken care of.\n\n        self.timeout = options[\"timeout\"] + self.cfg.timeouts.critical\n\n        url = \"http://{0}:{1}\".format(self.ip, CUCKOO_GUEST_PORT)\n        self.server = TimeoutServer(url, allow_none=True,\n                                    timeout=self.timeout)\n\n        try:\n            # Wait for the agent to respond. This is done to check the\n            # availability of the agent and verify that it's ready to receive\n            # data.\n            self.wait(CUCKOO_GUEST_INIT)\n\n            # Invoke the upload of the analyzer to the guest.\n            self.upload_analyzer(monitor)\n\n            # Give the analysis options to the guest, so it can generate the\n            # analysis.conf inside the guest.\n            try:\n                self.server.add_config(options)\n            except:\n                raise CuckooGuestError(\"{0}: unable to upload config to \"\n                                       \"analysis machine\".format(self.id))\n\n            # If the target of the analysis is a file, upload it to the guest.\n            if options[\"category\"] == \"file\":\n                try:\n                    file_data = open(options[\"target\"], \"rb\").read()\n                except (IOError, OSError) as e:\n                    raise CuckooGuestError(\"Unable to read {0}, error: \"\n                                           \"{1}\".format(options[\"target\"], e))\n\n                data = xmlrpclib.Binary(file_data)\n\n                try:\n                    self.server.add_malware(data, options[\"file_name\"])\n                except Exception as e:\n                    raise CuckooGuestError(\"{0}: unable to upload malware to \"\n                                           \"analysis machine: {1}\".format(self.id, e))\n\n            # Launch the analyzer.\n            pid = self.server.execute()\n            log.debug(\"%s: analyzer started with PID %d\", self.id, pid)\n        # If something goes wrong when establishing the connection, raise an\n        # exception and abort the analysis.\n        except (socket.timeout, socket.error):\n            raise CuckooGuestError(\"{0}: guest communication timeout, check \"\n                                   \"networking or try to increase \"\n                                   \"timeout\".format(self.id))\n\n    def wait_for_completion(self):\n        \"\"\"Wait for analysis completion.\n\n        :return: operation status.\n        \"\"\"\n        log.debug(\"%s: waiting for completion\", self.id)\n\n        end = time.time() + self.timeout\n        self.server._set_timeout(self.timeout)\n\n        while db.guest_get_status(self.task_id) == \"running\":\n            time.sleep(1)\n\n            # If the analysis hits the critical timeout, just return straight\n            # away and try to recover the analysis results from the guest.\n            if time.time() > end:\n                raise CuckooGuestError(\"The analysis hit the critical timeout, terminating.\")\n\n            try:\n                status = self.server.get_status()\n            except Exception as e:\n                log.debug(\"%s: error retrieving status: %s\", self.id, e)\n                continue\n\n            # React according to the returned status.\n            if status == CUCKOO_GUEST_COMPLETED:\n                log.info(\"%s: analysis completed successfully\", self.id)\n                break\n            elif status == CUCKOO_GUEST_FAILED:\n                error = self.server.get_error()\n                if not error:\n                    error = \"unknown error\"\n\n                raise CuckooGuestError(\"Analysis failed: {0}\".format(error))\n            else:\n                log.debug(\"%s: analysis not completed yet (status=%s)\",\n                          self.id, status)\n\n        self.server._set_timeout(None)\n\nclass GuestManager(object):\n    \"\"\"This class represents the new Guest Manager. It operates on the new\n    Cuckoo Agent which features a more abstract but more feature-rich API.\"\"\"\n\n    def __init__(self, vmid, ipaddr, platform, task_id):\n        self.vmid = vmid\n        self.ipaddr = ipaddr\n        self.port = CUCKOO_GUEST_PORT\n        self.platform = platform\n        self.task_id = task_id\n        self.cfg = Config()\n        self.timeout = None\n\n        # Just in case we have an old agent inside the Virtual Machine. This\n        # allows us to remain backwards compatible (for now).\n        self.old = OldGuestManager(vmid, ipaddr, platform, task_id)\n        self.is_old = False\n\n        # We maintain the path of the Cuckoo Analyzer on the host.\n        self.analyzer_path = None\n        self.environ = {}\n\n        self.options = {}\n\n\n\n    def get(self, method, *args, **kwargs):\n        \"\"\"Simple wrapper around requests.get().\"\"\"\n        do_raise = kwargs.pop(\"do_raise\", True)\n        url = \"http://%s:%s%s\" % (self.ipaddr, self.port, method)\n        session = requests.Session()\n        session.trust_env = False\n        session.proxies = None\n\n        try:\n            r = session.get(url, *args, **kwargs)\n        except requests.ConnectionError:\n            raise CuckooGuestError(\n                \"Cuckoo Agent failed without error status, please try \"\n                \"upgrading to the latest version of agent.py (>= 0.10) and \"\n                \"notify us if the issue persists.\"\n            )\n\n        #r.raise_for_status() # 判断返回的Response类型状态是不是200\n        return r\n\n    def post(self, method, *args, **kwargs):\n        \"\"\"Simple wrapper around requests.post().\"\"\"\n        url = \"http://%s:%s%s\" % (self.ipaddr, self.port, method)\n        session = requests.Session()\n        session.trust_env = False\n        session.proxies = None\n\n        try:\n            r = session.post(url, *args, **kwargs)\n        except requests.ConnectionError:\n            raise CuckooGuestError(\n                \"Cuckoo Agent failed without error status, please try \"\n                \"upgrading to the latest version of agent.py (>= 0.10) and \"\n                \"notify us if the issue persists.\"\n            )\n\n        r.raise_for_status()\n        return r\n\n    def wait_available(self):\n        \"\"\"Wait until the Virtual Machine is available for usage.\"\"\"\n        end = time.time() + self.timeout\n\n        while db.guest_get_status(self.task_id) == \"starting\":\n            try:\n                socket.create_connection((self.ipaddr, self.port), 1).close()\n                break\n            except socket.timeout:\n                log.debug(\"%s: not ready yet\", self.vmid)\n            except socket.error:\n                log.debug(\"%s: not ready yet\", self.vmid)\n                time.sleep(1)\n\n            if time.time() > end:\n                raise CuckooGuestError(\n                    \"%s: the guest initialization hit the critical timeout, \"\n                    \"analysis aborted.\" % self.vmid\n                )\n\n    def query_environ(self):\n        \"\"\"Query the environment of the Agent in the Virtual Machine.\"\"\"\n        self.environ = self.get(\"/environ\").json()[\"environ\"]\n\n    def determine_analyzer_path(self):\n        \"\"\"Determine the path of the analyzer. Basically creating a temporary\n        directory in the systemdrive, i.e., C:\\\\.\"\"\"\n        #systemdrive = \"%s\\\\\" % self.environ[\"SYSTEMDRIVE\"]\n\n        #r = self.post(\"/mkdtemp\", data={\"dirpath\": systemdrive})\n        #self.analyzer_path = r.json()[\"dirpath\"]\n        systemdrive = self.determine_system_drive()\n\n        options = parse_options(self.options[\"options\"])\n        if options.get(\"analpath\"):\n            dirpath = systemdrive + options[\"analpath\"]\n            r = self.post(\"/mkdir\", data={\"dirpath\": dirpath})\n            self.analyzer_path = dirpath\n        else:\n            r = self.post(\"/mkdtemp\", data={\"dirpath\": systemdrive})\n            self.analyzer_path = r.json()[\"dirpath\"]\n\n    def determine_system_drive(self):\n        if self.platform == \"windows\":\n            return \"%s/\" % self.environ[\"SYSTEMDRIVE\"]\n        return \"/\"\n    def determine_temp_path(self):\n        if self.platform == \"windows\":\n            return self.environ[\"TEMP\"]\n        return \"/tmp\"\n\n    def upload_analyzer(self, monitor):\n        \"\"\"Upload the analyzer to the Virtual Machine.\"\"\"\n        zip_data = analyzer_zipfile(self.platform, monitor)\n\n        log.debug(\"Uploading analyzer to guest (id=%s, ip=%s, monitor=%s)\",\n                  self.vmid, self.ipaddr, monitor)\n\n        self.determine_analyzer_path()\n        data = {\n            \"dirpath\": self.analyzer_path,\n        }\n        self.post(\"/extract\", files={\"zipfile\": zip_data}, data=data)\n\n    def add_config(self, options):\n        \"\"\"Upload the analysis.conf for this task to the Virtual Machine.\"\"\"\n        config = [\n            \"[analysis]\",\n        ]\n        for key, value in options.items():\n            # Encode datetime objects the way xmlrpc encodes them.\n            if isinstance(value, datetime.datetime):\n                config.append(\"%s = %s\" % (key, value.strftime(\"%Y%m%dT%H:%M:%S\")))\n            else:\n                config.append(\"%s = %s\" % (key, value))\n\n        data = {\n            \"filepath\": os.path.join(self.analyzer_path, \"analysis.conf\"),\n        }\n        self.post(\"/store\", files={\"file\": \"\\n\".join(config)}, data=data)\n\n    def start_analysis(self, options, monitor):\n        \"\"\"Start the analysis by uploading all required files.\n\n        :param options: the task options\n        :param monitor: identifier of the monitor to be used.\n        \"\"\"\n        log.info(\"Starting analysis on guest (id=%s, ip=%s)\",\n                 self.vmid, self.ipaddr)\n\n        self.options = options\n        self.timeout = options[\"timeout\"] + self.cfg.timeouts.critical\n\n        # Wait for the agent to come alive.\n        self.wait_available()\n\n        # Could be beautified a bit, but basically we have to perform the\n        # same check here as we did in wait_available().\n        if db.guest_get_status(self.task_id) != \"starting\":\n            return\n\n        # Check whether this is the new Agent or the old one (by looking at\n        # the status code of the index page).\n        r = self.get(\"/\")\n        if r.status_code == 501:\n            # log.info(\"Cuckoo 2.0 features a new Agent which is more \"\n            #          \"feature-rich. It is recommended to make new Virtual \"\n            #          \"Machines with the new Agent, but for now falling back \"\n            #          \"to backwards compatibility with the old agent.\")\n            self.is_old = True\n            self.old.start_analysis(options, monitor)\n            return\n\n        if r.status_code != 200:\n            log.critical(\n                \"While trying to determine the Agent version that your VM is \"\n                \"running we retrieved an unexpected HTTP status code: %s. If \"\n                \"this is a false positive, please report this issue to the \"\n                \"Cuckoo Developers. HTTP response headers: %s\",\n                r.status_code, json.dumps(dict(r.headers)),\n            )\n            db.guest_set_status(self.task_id, \"failed\")\n            return\n\n        try:\n            status = r.json()\n            version = status.get(\"version\")\n            features = status.get(\"features\", [])\n        except:\n            log.critical(\n                \"We were unable to detect either the Old or New Agent in the \"\n                \"Guest VM, are you sure you have set it up correctly? Please \"\n                \"go through the documentation once more and otherwise inform \"\n                \"the Cuckoo Developers of your issue.\"\n            )\n            db.guest_set_status(self.task_id, \"failed\")\n            return\n\n        log.info(\"Guest is running Cuckoo Agent %s (id=%s, ip=%s)\",\n                 version, self.vmid, self.ipaddr)\n\n        # Pin the Agent to our IP address so that it is not accessible by\n        # other Virtual Machines etc\n        if \"pinning\" in features:\n            self.get(\"/pinning\")\n        # Obtain the environment variables.\n        self.query_environ()\n\n        # Upload the analyzer.\n        self.upload_analyzer(monitor)\n\n        # Pass along the analysis.conf file.\n        self.add_config(options)\n\n        \"\"\"\n        # If the target is a file, upload it to the guest.\n        if options[\"category\"] == \"file\":\n            data = {\n                \"filepath\": os.path.join(self.environ[\"TEMP\"], options[\"file_name\"]),\n            }# u'C:\\\\DOCUME~1\\\\LIZHEN~1\\\\LOCALS~1\\\\Temp/Backdoor.Win32.Agent.afxs_ed7c.exe' ??\n            files = {\n                \"file\": open(options[\"target\"], \"rb\"),\n            }\n            self.post(\"/store\", files=files, data=data)\n        \"\"\"\n\n        if options[\"category\"] == \"file\" or options[\"category\"] == \"archive\":\n            data = {\n                \"filepath\": os.path.join(\n                    self.determine_temp_path(), options[\"file_name\"]\n                ),\n            }\n            # target中存放的是样本的路径\n            files = {\n                \"file\": (\"sample.bin\", open(options[\"target\"], \"rb\")),\n            }\n            self.post(\"/store\", files=files, data=data)\n\n        if \"execpy\" in features:\n            data = {\n                \"filepath\": \"%s/analyzer.py\" % self.analyzer_path,\n                \"async\": \"yes\",\n                \"cwd\": self.analyzer_path,\n            }\n            # u'C:/tmpjr2dbp\\\\analyzer.py' ???\n            self.post(\"/execpy\", data=data)\n        else:\n            # Execute the analyzer that we just uploaded.\n            data = {\n                \"command\": \"C:\\\\Python27\\\\pythonw.exe %s\\\\analyzer.py\" % self.analyzer_path,\n                \"async\": \"yes\",\n                \"cwd\": self.analyzer_path,\n            }\n            self.post(\"/execute\", data=data)\n\n    def wait_for_completion(self):\n        '''\n        waite for the anaylzer from agent\n\n        '''\n        if self.is_old:\n            self.old.wait_for_completion()\n            return\n\n        end = time.time() + self.timeout\n\n        while db.guest_get_status(self.task_id) == \"running\":\n            count = 0\n            if count >= 8:\n                log.debug(\"%s: analysis still processing\", self.vmid)\n                count = 0\n                time.sleep(1)\n            count += 1\n            # If the analysis hits the critical timeout, just return straight\n            # away and try to recover the analysis results from the guest.\n            if time.time() > end:\n                raise CuckooGuestError(\"The analysis hit the critical timeout, terminating.\")\n\n            try:\n                status = self.get(\"/status\", timeout=5).json()\n            except Exception as e:\n                log.info(\"Virtual Machine /status failed (%r)\", e)\n                # this might fail due to timeouts or just temporary network issues\n                # thus we don't want to abort the analysis just yet and wait for things to\n                # recover\n                continue\n\n            if status[\"status\"] == \"complete\":\n                log.info(\"%s: analysis completed successfully\", self.vmid)\n                return\n            elif status[\"status\"] == \"exception\":\n                log.info(\"%s: analysis caught an exception\\n%s\",\n                         self.vmid, status[\"description\"])\n                return\n\n    @property\n    def server(self):\n        \"\"\"Currently the Physical machine manager is using GuestManager in\n        an incorrect way. This should be fixed up later but for now this\n        workaround will do.\"\"\"\n        return self.old.server\n"
  },
  {
    "path": "lib/cuckoo/core/plugins.py",
    "content": "# coding=utf-8\n# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport pkgutil\nimport importlib\nimport inspect\nimport logging\nfrom collections import defaultdict\nfrom distutils.version import StrictVersion\n\nfrom lib.cuckoo.common.abstracts import Auxiliary, Machinery, LibVirtMachinery, Processing, Detection\nfrom lib.cuckoo.common.abstracts import Report, Signature\nfrom lib.cuckoo.common.config import Config\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT, CUCKOO_VERSION\nfrom lib.cuckoo.common.exceptions import CuckooCriticalError\nfrom lib.cuckoo.common.exceptions import CuckooOperationalError\nfrom lib.cuckoo.common.exceptions import CuckooProcessingError\nfrom lib.cuckoo.common.exceptions import CuckooReportError\nfrom lib.cuckoo.common.exceptions import CuckooDependencyError\n\nlog = logging.getLogger(__name__)\n\n_modules = defaultdict(list)\n\ndef enumerate_plugins(dirpath, module_prefix, namespace, class_, attributes={}):\n    \"\"\"\n    Import plugins of type `class` located at `dirpath` into the\n    `namespace` that starts with `module_prefix`. If `dirpath` represents a\n    filepath then it is converted into its containing directory. The\n    `attributes` dictionary allows one to set extra fields for all imported\n    plugins.\n    \"\"\"\n    if os.path.isfile(dirpath):\n        dirpath = os.path.dirname(dirpath)\n\n    for fname in os.listdir(dirpath):\n        if fname.endswith(\".py\") and not fname.startswith(\"__init__\"):\n            module_name, _ = os.path.splitext(fname)\n            importlib.import_module(\"%s.%s\" % (module_prefix, module_name))\n\n    plugins = []\n    for subclass in class_.__subclasses__():\n        # Check whether this subclass belongs to the module namespace that\n        # we're currently importing. It should be noted that parent and child\n        # namespaces should fail the following if-statement.\n        if module_prefix != \".\".join(subclass.__module__.split(\".\")[:-1]):\n            continue\n\n        namespace[subclass.__name__] = subclass\n        for key, value in attributes.items():\n            setattr(subclass, key, value)\n        plugins.append(subclass)\n    return plugins\n\ndef import_package(package):\n    prefix = package.__name__ + \".\"\n    for loader, name, ispkg in pkgutil.iter_modules(package.__path__, prefix):\n        import_plugin(name)\n\ndef import_plugin(name):\n    try:\n        module = __import__(name, globals(), locals(), [\"dummy\"], -1)\n    except ImportError as e:\n        raise CuckooCriticalError(\"Unable to import plugin \"\n                                  \"\\\"{0}\\\": {1}\".format(name, e))\n    else:\n        load_plugins(module)\n\ndef load_plugins(module): # 导入插件\n\n    for name, value in inspect.getmembers(module):\n        if inspect.isclass(value):\n            if issubclass(value, Auxiliary) and value is not Auxiliary:\n                register_plugin(\"auxiliary\", value)\n            elif issubclass(value, Machinery) and value is not Machinery and value is not LibVirtMachinery:\n                register_plugin(\"machinery\", value)\n            elif issubclass(value, Processing) and value is not Processing:\n                register_plugin(\"processing\", value)\n            elif issubclass(value, Detection) and value is not Detection:\n                register_plugin(\"detection\", value)\n            elif issubclass(value, Report) and value is not Report:\n                register_plugin(\"reporting\", value)\n            elif issubclass(value, Signature) and value is not Signature:\n                register_plugin(\"signatures\", value)\n\n# 全局注册_modules\ndef register_plugin(group, name):\n    '''\n    register gobal modules\n\n    :garam group:\n    '''\n    global _modules\n    group = _modules.setdefault(group, [])\n    group.append(name)\n# _modules[group]\ndef list_plugins(group=None):\n    if group:\n        return _modules[group]\n    else:\n        return _modules\n\nclass RunAuxiliary(object):\n    \"\"\"Auxiliary modules manager.\"\"\"\n\n    def __init__(self, task, machine):\n        self.task = task\n        self.machine = machine\n        self.cfg = Config(\"auxiliary\")\n        self.enabled = []\n\n    def start(self):\n        for module in list_plugins(group=\"auxiliary\"):\n            try:\n                current = module()\n            except:\n                log.exception(\"Failed to load the auxiliary module \"\n                              \"\\\"{0}\\\":\".format(module))\n                return\n\n            module_name = inspect.getmodule(current).__name__\n            if \".\" in module_name:\n                module_name = module_name.rsplit(\".\", 1)[1]\n\n            try:\n                options = self.cfg.get(module_name)\n            except CuckooOperationalError:\n                log.debug(\"Auxiliary module %s not found in \"\n                          \"configuration file\", module_name)\n                continue\n\n            if not options.enabled:\n                continue\n\n            current.set_task(self.task)\n            current.set_machine(self.machine)\n            current.set_options(options)\n\n            try:\n                current.start()\n            except NotImplementedError:\n                pass\n            except Exception as e:\n                log.warning(\"Unable to start auxiliary module %s: %s\",\n                            module_name, e)\n            else:\n                log.debug(\"Started auxiliary module: %s\",\n                          current.__class__.__name__)\n                self.enabled.append(current)\n\n    def stop(self):\n        for module in self.enabled:\n            try:\n                module.stop()\n            except NotImplementedError:\n                pass\n            except Exception as e:\n                log.warning(\"Unable to stop auxiliary module: %s\", e)\n            else:\n                log.debug(\"Stopped auxiliary module: %s\",\n                          module.__class__.__name__)\n\nclass RunProcessing(object):\n    \"\"\"Analysis Results Processing Engine.\n\n    This class handles the loading and execution of the processing modules.\n    It executes the enabled ones sequentially and generates a dictionary which\n    is then passed over the reporting engine.\n    \"\"\"\n\n    def __init__(self, task):\n        \"\"\"\n        :param task: task dictionary of the analysis to process.\"\"\"\n        self.task = task\n        self.analysis_path = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\", str(task[\"id\"]))\n        self.baseline_path = os.path.join(CUCKOO_ROOT, \"storage\", \"baseline\")\n        self.cfg = Config(\"processing\")\n\n    def process(self, module, results):\n        \"\"\"Run a processing module.\n\n        :param module: processing module to run.\n        :param results: results dict.\n        :return: results generated by module.\n        \"\"\"\n        # Initialize the specified processing module.\n        try:\n            current = module()\n        except:\n            log.exception(\"Failed to load the processing module \"\n                          \"\\\"{0}\\\":\".format(module))\n            return None, None\n\n        # Extract the module name.\n        module_name = inspect.getmodule(current).__name__\n        if \".\" in module_name:\n            module_name = module_name.rsplit(\".\", 1)[1]\n\n        try:\n            options = self.cfg.get(module_name)\n        except CuckooOperationalError:\n            log.debug(\"Processing module %s not found in configuration file\",\n                      module_name)\n            return None, None\n\n        # If the processing module is disabled in the config, skip it.\n        if not options.enabled:\n            return None, None\n\n        # Give it the path to the baseline directory.\n        current.set_baseline(self.baseline_path)\n        # Give it the path to the analysis results.\n        current.set_path(self.analysis_path)\n        # Give it the analysis task object.\n        current.set_task(self.task)\n        # Give it the options from the relevant processing.conf section.\n        current.set_options(options)\n        # Give the results that we have obtained so far.\n        current.set_results(results)\n\n        try:\n            # Run the processing module and retrieve the generated data to be\n            # appended to the general results container.\n            data = current.run()\n\n            log.debug(\"Executed processing module \\\"%s\\\" on analysis at \"\n                      \"\\\"%s\\\"\", current.__class__.__name__, self.analysis_path)\n\n            # If succeeded, return they module's key name and the data.\n            return current.key, data\n        except CuckooDependencyError as e:\n            log.warning(\"The processing module \\\"%s\\\" has missing dependencies: %s\", current.__class__.__name__, e)\n        except CuckooProcessingError as e:\n            log.warning(\"The processing module \\\"%s\\\" returned the following \"\n                        \"error: %s\", current.__class__.__name__, e)\n        except:\n            log.exception(\"Failed to run the processing module \\\"%s\\\" for task #%d:\",\n                          current.__class__.__name__, self.task[\"id\"])\n\n        return None, None\n\n    def run(self):\n        \"\"\"Run all processing modules and all signatures.\n\n        :return: processing results.\n        \"\"\"\n        # This is the results container. It's what will be used by all the\n        # reporting modules to make it consumable by humans and machines.\n        # It will contain all the results generated by every processing\n        # module available. Its structure can be observed through the JSON\n        # dump in the analysis' reports folder. (If jsondump is enabled.)\n        # We friendly call this \"fat dict\".\n        results = {\n            \"_temp\": {},\n        }\n\n        # Order modules using the user-defined sequence number.\n        # If none is specified for the modules, they are selected in\n        # alphabetical order.\n        processing_list = list_plugins(group=\"processing\")\n        # [<class 'modules.processing.analysisinfo.AnalysisInfo'>, ... <class 'modules.processing.virustotal.VirusTotal'>]\n        # If no modules are loaded, return an empty dictionary.\n        if processing_list:\n            processing_list.sort(key=lambda module: module.order)\n\n            # Run every loaded processing module.\n            for module in processing_list:\n                key, result = self.process(module, results)\n\n                # If the module provided results, append it to the fat dict.\n                if key and result:\n                    results[key] = result\n        else:\n            log.info(\"No processing modules loaded\")\n\n        results.pop(\"_temp\", None)\n\n        # Return the fat dict.\n        return results\n\nclass RunDetection(object):\n    \"\"\"\n    Analysis Results Detection Engine.\n\n    :param task: task dictionary of the analysis to detection.\n    :param results: results dict\n    \"\"\"\n\n    def __init__(self, task, results):\n\n        self.task = task\n        self.analysis_path = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\", str(task[\"id\"]))\n        self.baseline_path = os.path.join(CUCKOO_ROOT, \"storage\", \"baseline\")\n        self.cfg = Config(\"detection\")\n        self.results = results\n        self.predict = []\n\n    def process(self, module):\n        \"\"\"\n        Run a detection module.\n\n        :param module: detection module to run.\n        :param results: results dict.\n        :return: results generated by module.\n        \"\"\"\n        # Initialize the specified detection module.\n        try:\n            current = module()\n        except:\n            log.exception(\"Failed to load the detection module \"\n                          \"\\\"{0}\\\":\".format(module))\n            return None, None\n\n        # Extract the module name.\n        module_name = inspect.getmodule(current).__name__\n        if \".\" in module_name:\n            module_name = module_name.rsplit(\".\", 1)[1]\n\n        try:\n            options = self.cfg.get(module_name)\n        except CuckooOperationalError:\n            log.debug(\"Detection module %s not found in configuration file\", module_name)\n            return None, None\n\n        # If the Detection module is disabled in the config, skip it.\n        if not options.enabled:\n            return None, None\n\n        # ---- Detection module 需要的配置 ----\n        # Give it the path to the baseline directory.\n        #current.set_baseline(self.baseline_path)\n        # Give it the path to the analysis results.\n        current.set_path(self.analysis_path)\n        # Give it the analysis task object.\n        current.set_task(self.task)\n        # Give it the options from the relevant Detection.conf section.\n        current.set_options(options)\n        # Give the results that we have obtained so far.\n        current.load_instance(self.results)\n        # ---- Detection module 需要的配置 ----\n\n        try:\n            # Run the Detection module and retrieve the generated data to be\n            # appended to the general results container.\n            data = current.run()\n\n            log.debug(\"Executed Detection module \\\"%s\\\" on analysis at \"\n                      \"\\\"%s\\\"\", current.__class__.__name__, self.analysis_path)\n\n            # If succeeded, return they module's key name and the data.\n            return current.key, data\n        except CuckooDependencyError as e:\n            log.warning(\"The Detection module \\\"%s\\\" has missing dependencies: %s\", current.__class__.__name__, e)\n        except CuckooProcessingError as e:\n            log.warning(\"The Detection module \\\"%s\\\" returned the following \"\n                        \"error: %s\", current.__class__.__name__, e)\n        except:\n            log.exception(\"Failed to run the Detection module \\\"%s\\\" for task #%d:\",\n                          current.__class__.__name__, self.task[\"id\"])\n\n        return None, None\n\n    def run(self):\n        \"\"\"Run all detection modules.\n\n        :return: detection results.\n        \"\"\"\n        # This is the results container. It's what will be used by all the\n        # reporting modules to make it consumable by humans and machines.\n        # It will contain all the results generated by every processing\n        # module available. Its structure can be observed through the JSON\n        # dump in the analysis' reports folder. (If jsondump is enabled.)\n        # We friendly call this \"fat dict\".\n\n\n        # Order modules using the user-defined sequence number.\n        # If none is specified for the modules, they are selected in\n        # alphabetical order.\n        score = 0\n        detection_list = list_plugins(group=\"detection\")\n\n        # If no modules are loaded, return an empty dictionary.\n        if detection_list:\n            detection_list.sort(key=lambda module: module.order)\n            # Run every loaded detection module.\n            for module in detection_list:\n                key, predict = self.process(module)\n                if key and predict:\n                    self.predict.append({key:predict})\n                    score = predict\n\n        else:\n            log.info(\"No detection modules loaded\")\n\n        # If the module provided results, append it to the ’info‘ dict.\n        self.results[\"detection\"] = self.predict\n        if \"info\" in self.results:\n            self.results[\"info\"][\"threaten\"] = 1\n\n\nclass RunSignatures(object):\n    \"\"\"Run Signatures.\"\"\"\n\n    def __init__(self, results):\n        self.results = results\n        self.matched = []\n\n        # While developing our version is generally something along the lines\n        # of \"2.0-dev\" whereas StrictVersion() does not handle \"-dev\", so we\n        # strip that part off.\n        self.version = CUCKOO_VERSION.split(\"-\")[0]\n\n        # Gather all enabled, up-to-date, and applicable signatures.\n        self.signatures = []\n        for signature in list_plugins(group=\"signatures\"):\n            if self._should_enable_signature(signature):\n                self.signatures.append(signature(self))\n\n        # Signatures to call per API name.\n        self.api_sigs = {}\n\n    def _should_enable_signature(self, signature):\n        \"\"\"Should the given signature be enabled for this analysis?\"\"\"\n        if not signature.enabled:\n            return False\n\n        if not self.check_signature_version(signature):\n            return False\n\n        # Network and/or cross-platform signatures.\n        if not signature.platform:\n            return True\n\n        task_platform = self.results.get(\"info\", {}).get(\"platform\")\n\n        # Windows is implied when a platform has not been specified during the\n        # submission of a sample, but for other platforms the platform has to\n        # be explicitly stated.\n        if not task_platform and signature.platform == \"windows\":\n            return True\n\n        return task_platform == signature.platform\n\n    def check_signature_version(self, signature):\n        \"\"\"Check signature version.\n\n        :param current: signature class/instance to check.\n        :return: check result.\n        \"\"\"\n        # Check the minimum Cuckoo version for this signature, if provided.\n        if signature.minimum:\n            try:\n                # If the running Cuckoo is older than the required minimum\n                # version, skip this signature.\n                if StrictVersion(self.version) < StrictVersion(signature.minimum):\n                    log.debug(\"You are running an older incompatible version \"\n                              \"of Cuckoo, the signature \\\"%s\\\" requires \"\n                              \"minimum version %s.\",\n                              signature.name, signature.minimum)\n                    return False\n\n                if StrictVersion(\"1.2\") > StrictVersion(signature.minimum):\n                    log.warn(\"Cuckoo signature style has been redesigned in \"\n                             \"cuckoo 1.2. This signature is not \"\n                             \"compatible: %s.\", signature.name)\n                    return False\n\n                if StrictVersion(\"2.0\") > StrictVersion(signature.minimum):\n                    log.warn(\"Cuckoo version 2.0 features a lot of changes that \"\n                             \"render old signatures ineffective as they are not \"\n                             \"backwards-compatible. Please upgrade this \"\n                             \"signature: %s.\", signature.name)\n                    return False\n\n                if hasattr(signature, \"run\"):\n                    log.warn(\"This signatures features one or more deprecated \"\n                             \"functions which indicates that it is very likely \"\n                             \"an old-style signature. Please upgrade this \"\n                             \"signature: %s.\", signature.name)\n                    return False\n\n            except ValueError:\n                log.debug(\"Wrong minor version number in signature %s\",\n                          signature.name)\n                return False\n\n        # Check the maximum version of Cuckoo for this signature, if provided.\n        if signature.maximum:\n            try:\n                # If the running Cuckoo is newer than the required maximum\n                # version, skip this signature.\n                if StrictVersion(self.version) > StrictVersion(signature.maximum):\n                    log.debug(\"You are running a newer incompatible version \"\n                              \"of Cuckoo, the signature \\\"%s\\\" requires \"\n                              \"maximum version %s.\",\n                              signature.name, signature.maximum)\n                    return False\n            except ValueError:\n                log.debug(\"Wrong major version number in signature %s\",\n                          signature.name)\n                return False\n\n        return True\n\n    def call_signature(self, signature, handler, *args, **kwargs):\n        \"\"\"Wrapper to call into 3rd party signatures. This wrapper yields the\n        event to the signature and handles matched signatures recursively.\"\"\"\n        try:\n            if handler(*args, **kwargs):\n                signature.matched = True\n                for sig in self.signatures:\n                    self.call_signature(sig, sig.on_signature, signature)\n        except NotImplementedError:\n            return False\n        except:\n            log.exception(\"Failed to run '%s' of the %s signature\",\n                          handler.__name__, signature.name)\n        return True\n\n    def init_api_sigs(self, apiname, category):\n        \"\"\"Initialize a list of signatures for which we should trigger its\n        on_call method for this particular API name and category.\"\"\"\n        self.api_sigs[apiname] = []\n\n        for sig in self.signatures:\n            if sig.filter_apinames and apiname not in sig.filter_apinames:\n                continue\n\n            if sig.filter_categories and category not in sig.filter_categories:\n                continue\n\n            self.api_sigs[apiname].append(sig)\n\n    def yield_calls(self, proc):\n        \"\"\"Yield calls of interest to each interested signature.\"\"\"\n        for idx, call in enumerate(proc.get(\"calls\", [])):\n\n            # Initialize a list of signatures to call for this API call.\n            if call[\"api\"] not in self.api_sigs:\n                self.init_api_sigs(call[\"api\"], call.get(\"category\"))\n\n            # See the following SO answer on why we're using reversed() here.\n            # http://stackoverflow.com/a/10665800\n            for sig in reversed(self.api_sigs[call[\"api\"]]):\n                sig.cid, sig.call = idx, call\n                if self.call_signature(sig, sig.on_call, call, proc) is False:\n                    self.api_sigs[call[\"api\"]].remove(sig)\n\n    def run(self):\n        \"\"\"Run signatures.\"\"\"\n        # Allow signatures to initialize themselves.\n        for signature in self.signatures:\n            signature.init()\n\n        log.debug(\"Running %d signatures\", len(self.signatures))\n\n        # Iterate calls and tell interested signatures about them.\n        for proc in self.results.get(\"behavior\", {}).get(\"processes\", []):\n\n            # Yield the new process event.\n            for sig in self.signatures:\n                sig.pid = proc[\"pid\"]\n                self.call_signature(sig, sig.on_process, proc)\n\n            self.yield_calls(proc)\n\n        # Yield completion events to each signature.\n        for sig in self.signatures:\n            self.call_signature(sig, sig.on_complete)\n\n        score = 0\n        for signature in self.signatures:\n            if signature.matched:\n                log.debug(\"Analysis matched signature: %s\", signature.name)\n                self.matched.append(signature.results())\n                score += signature.severity\n\n        # Sort the matched signatures by their severity level and put them\n        # into the results dictionary.\n        self.matched.sort(key=lambda key: key[\"severity\"])\n        self.results[\"signatures\"] = self.matched\n        if \"info\" in self.results:\n            self.results[\"info\"][\"score\"] = score / 5.0\n\nclass RunReporting(object):\n    \"\"\"Reporting Engine.\n\n    This class handles the loading and execution of the enabled reporting\n    modules. It receives the analysis results dictionary from the Processing\n    Engine and pass it over to the reporting modules before executing them.\n    \"\"\"\n\n    def __init__(self, task, results):\n        \"\"\"\n        :param analysis_path: analysis folder path.\"\"\"\n        self.task = task\n        self.results = results\n        self.analysis_path = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\", str(task[\"id\"]))\n        self.cfg = Config(\"reporting\")\n\n    def process(self, module):\n        \"\"\"Run a single reporting module.\n\n        :param module: reporting module.\n        :param results: results results from analysis.\n        \"\"\"\n        # Initialize current reporting module.\n        try:\n            current = module()\n        except:\n            log.exception(\"Failed to load the reporting module \\\"{0}\\\":\".format(module))\n            return\n\n        # Extract the module name.\n        module_name = inspect.getmodule(current).__name__\n        if \".\" in module_name:\n            module_name = module_name.rsplit(\".\", 1)[1]\n\n        try:\n            options = self.cfg.get(module_name)\n        except CuckooOperationalError:\n            log.debug(\"Reporting module %s not found in configuration file\", module_name)\n            return\n\n        # If the reporting module is disabled in the config, skip it.\n        if not options.enabled:\n            return\n\n        # Give it the path to the analysis results folder.\n        current.set_path(self.analysis_path)\n        # Give it the analysis task object.\n        current.set_task(self.task)\n        # Give it the the relevant reporting.conf section.\n        current.set_options(options)\n        # Load the content of the analysis.conf file.\n        current.cfg = Config(cfg=current.conf_path)\n\n        try:\n            current.run(self.results)\n            log.debug(\"Executed reporting module \\\"%s\\\"\", current.__class__.__name__)\n        except CuckooDependencyError as e:\n            log.warning(\"The reporting module \\\"%s\\\" has missing dependencies: %s\", current.__class__.__name__, e)\n        except CuckooReportError as e:\n            log.warning(\"The reporting module \\\"%s\\\" returned the following error: %s\", current.__class__.__name__, e)\n        except:\n            log.exception(\"Failed to run the reporting module \\\"%s\\\":\", current.__class__.__name__)\n\n    def run(self):\n        \"\"\"Generates all reports.\n\n        :raise CuckooReportError: if a report module fails.\n        \"\"\"\n        # In every reporting module you can specify a numeric value that\n        # represents at which position that module should be executed among\n        # all the available ones. It can be used in the case where a\n        # module requires another one to be already executed beforehand.\n        reporting_list = list_plugins(group=\"reporting\")\n\n        # Return if no reporting modules are loaded.\n        if reporting_list:\n            reporting_list.sort(key=lambda module: module.order)\n\n            # Run every loaded reporting module.\n            for module in reporting_list:\n                self.process(module)\n        else:\n            log.info(\"No reporting modules loaded\")\n"
  },
  {
    "path": "lib/cuckoo/core/resultserver.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\nfrom __future__ import print_function\n\nimport errno\nimport json\nimport os\nimport socket\nimport select\nimport logging\nimport datetime\nimport SocketServer\nimport threading\n\nfrom lib.cuckoo.common.abstracts import ProtocolHandler\nfrom lib.cuckoo.common.config import Config\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\nfrom lib.cuckoo.common.exceptions import CuckooOperationalError\nfrom lib.cuckoo.common.exceptions import CuckooCriticalError\nfrom lib.cuckoo.common.exceptions import CuckooResultError\nfrom lib.cuckoo.common.netlog import BsonParser\nfrom lib.cuckoo.common.utils import create_folder, Singleton\n\n\n\nlog = logging.getLogger(__name__)\n\nBUFSIZE = 16 * 1024\n\nclass Disconnect(Exception):\n    pass\n\nclass ResultServer(SocketServer.ThreadingTCPServer, object):\n    \"\"\"Result server. Singleton!\n\n    This class handles results coming back from the analysis machines.\n    \"\"\"\n\n    __metaclass__ = Singleton\n\n    allow_reuse_address = True\n    daemon_threads = True\n\n    def __init__(self, *args, **kwargs):\n        self.cfg = Config()\n        self.analysistasks = {}\n        self.analysishandlers = {}\n\n        ip = self.cfg.resultserver.ip\n        self.port = int(self.cfg.resultserver.port)\n        while True:\n            try:\n                server_addr = ip, self.port\n                SocketServer.ThreadingTCPServer.__init__(\n                    self, server_addr, ResultHandler, *args, **kwargs\n                )\n            except Exception as e:\n                if e.errno == errno.EADDRINUSE:\n                    if self.cfg.resultserver.get(\"force_port\"):\n                        raise CuckooCriticalError(\n                            \"Cannot bind ResultServer on port %d, \"\n                            \"bailing.\" % self.port\n                        )\n                    else:\n                        log.warning(\"Cannot bind ResultServer on port %s, \"\n                                    \"trying another port.\", self.port)\n                        self.port += 1\n                elif e.errno == errno.EADDRNOTAVAIL:\n                    raise CuckooCriticalError(\n                        \"Unable to bind ResultServer on %s:%s %s. This \"\n                        \"usually happens when you start Cuckoo without \"\n                        \"bringing up the virtual interface associated with \"\n                        \"the ResultServer IP address. Please refer to \"\n                        \"http://docs.cuckoosandbox.org/en/latest/faq/#troubles-problem\"\n                        \" for more information.\" % (ip, self.port, e)\n                    )\n                else:\n                    raise CuckooCriticalError(\n                        \"Unable to bind ResultServer on %s:%s: %s\" %\n                        (ip, self.port, e)\n                    )\n            else:\n                log.debug(\"ResultServer running on %s:%s.\", ip, self.port)\n                self.servethread = threading.Thread(target=self.serve_forever)\n                self.servethread.setDaemon(True)\n                self.servethread.start()\n                break\n\n    def add_task(self, task, machine):\n        \"\"\"Register a task/machine with the ResultServer.\"\"\"\n        self.analysistasks[machine.ip] = task, machine\n        self.analysishandlers[task.id] = []\n\n    def del_task(self, task, machine):\n        \"\"\"Delete ResultServer state and wait for pending RequestHandlers.\"\"\"\n        x = self.analysistasks.pop(machine.ip, None)\n        if not x:\n            log.warning(\"ResultServer did not have %s in its task info.\",\n                        machine.ip)\n        handlers = self.analysishandlers.pop(task.id, None)\n        for h in handlers:\n            h.end_request.set()\n            h.done_event.wait()\n\n    def register_handler(self, handler):\n        \"\"\"Register a RequestHandler so that we can later wait for it.\"\"\"\n        task, machine = self.get_ctx_for_ip(handler.client_address[0])\n        if not task or not machine:\n            return False\n\n        self.analysishandlers[task.id].append(handler)\n\n    def get_ctx_for_ip(self, ip):\n        \"\"\"Return state for this IP's task.\"\"\"\n        x = self.analysistasks.get(ip)\n        if not x:\n            log.critical(\"ResultServer unable to map ip to context: %s.\", ip)\n            return None, None\n\n        return x\n\n    def build_storage_path(self, ip):\n        \"\"\"Initialize analysis storage folder.\"\"\"\n        task, machine = self.get_ctx_for_ip(ip)\n        if not task or not machine:\n            return\n\n        return os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\", str(task.id))\n\nclass ResultHandler(SocketServer.BaseRequestHandler):\n    \"\"\"Result handler.\n\n    This handler speaks our analysis log network protocol.\n    \"\"\"\n\n    def setup(self):\n        self.rawlogfd = None\n        self.protocol = None\n        self.startbuf = \"\"\n        self.end_request = threading.Event()\n        self.done_event = threading.Event()\n        self.pid, self.ppid, self.procname = None, None, None\n        self.server.register_handler(self)\n\n        if hasattr(select, \"poll\"):\n            self.poll = select.poll()\n            self.poll.register(self.request, select.POLLIN)\n        else:\n            self.poll = None\n\n    def finish(self):\n        self.done_event.set()\n\n        if self.protocol:\n            self.protocol.close()\n        if self.rawlogfd:\n            self.rawlogfd.close()\n\n    def wait_sock_or_end(self):\n        while True:\n            if self.end_request.isSet():\n                return False\n\n            if self.poll:\n                if self.poll.poll(1000):\n                    return True\n            else:\n                rs, _, _ = select.select([self.request], [], [], 1)\n                if rs:\n                    return True\n\n    def seek(self, pos):\n        pass\n\n    def read(self, length):\n        buf = \"\"\n        while len(buf) < length:\n            if not self.wait_sock_or_end():\n                raise Disconnect()\n            tmp = self.request.recv(length-len(buf))\n            if not tmp:\n                raise Disconnect()\n            buf += tmp\n\n        if isinstance(self.protocol, BsonParser):\n            if self.rawlogfd:\n                self.rawlogfd.write(buf)\n            else:\n                self.startbuf += buf\n        return buf\n\n    def read_any(self):\n        if not self.wait_sock_or_end():\n            raise Disconnect()\n        tmp = self.request.recv(BUFSIZE)\n        if not tmp:\n            raise Disconnect()\n        return tmp\n\n    def read_newline(self, strip=False):\n        buf = \"\"\n        while \"\\n\" not in buf:\n            buf += self.read(1)\n\n        if strip:\n            buf = buf.strip()\n\n        return buf\n\n    def negotiate_protocol(self):\n        protocol = self.read_newline(strip=True)\n\n        # Command with version number.\n        if \" \" in protocol:\n            command, version = protocol.split()\n            version = int(version)\n        else:\n            command, version = protocol, None\n\n        if command == \"BSON\":\n            self.protocol = BsonParser(self, version)\n        elif command == \"FILE\":\n            self.protocol = FileUpload(self, version)\n        elif command == \"LOG\":\n            self.protocol = LogHandler(self, version)\n        else:\n            raise CuckooOperationalError(\n                \"Netlog failure, unknown protocol requested.\"\n            )\n\n        self.protocol.init()\n\n    def handle(self):\n        ip, port = self.client_address\n        self.connect_time = datetime.datetime.now()\n\n        self.storagepath = self.server.build_storage_path(ip)\n        if not self.storagepath:\n            return\n\n        # Create all missing folders for this analysis.\n        self.create_folders() # folders = \"shots\", \"files\", \"logs\", \"buffer\"\n\n        try:\n            # Initialize the protocol handler class for this connection.\n            self.negotiate_protocol()\n\n            for event in self.protocol:\n                if isinstance(self.protocol, BsonParser) and event[\"type\"] == \"process\":\n                    self.open_process_log(event)\n\n        except CuckooResultError as e:\n            log.warning(\n                \"ResultServer connection stopping because of \"\n                \"CuckooResultError: %s.\", e\n            )\n        except (Disconnect, socket.error):\n            pass\n        except:\n            log.exception(\"FIXME - exception in resultserver connection %s\",\n                          self.client_address)\n\n    def open_process_log(self, event):\n        pid = event[\"pid\"]\n        ppid = event[\"ppid\"]\n        procname = event[\"process_name\"]\n\n        if self.pid is not None:\n            log.debug(\n                \"ResultServer got a new process message but already \"\n                \"has pid %d ppid %s procname %s.\", pid, ppid, procname\n            )\n            raise CuckooResultError(\n                \"ResultServer connection state inconsistent.\"\n            )\n\n        # Only report this process when we're tracking it.\n        if event[\"track\"]:\n            log.debug(\n                \"New process (pid=%s, ppid=%s, name=%s)\",\n                pid, ppid, procname\n            )\n\n        filepath = os.path.join(self.storagepath, \"logs\", \"%s.bson\" % pid)\n        self.rawlogfd = open(filepath, \"wb\")\n        self.rawlogfd.write(self.startbuf)\n\n        self.pid, self.ppid, self.procname = pid, ppid, procname\n\n    def create_folders(self):\n        folders = \"shots\", \"files\", \"logs\", \"buffer\"\n\n        for folder in folders:\n            try:\n                create_folder(self.storagepath, folder=folder)\n            except CuckooOperationalError:\n                log.error(\"Unable to create folder %s\" % folder)\n                return False\n\nclass FileUpload(ProtocolHandler):\n    RESTRICTED_DIRECTORIES = \"reports/\",\n    lock = threading.Lock()\n\n    def init(self):\n        self.upload_max_size = \\\n            self.handler.server.cfg.resultserver.upload_max_size\n        self.storagepath = self.handler.storagepath\n        self.fd = None\n\n        self.filelog = os.path.join(self.handler.storagepath, \"files.json\")\n\n    def __iter__(self):\n        # Read until newline for file path, e.g.,\n        # shots/0001.jpg or files/9498687557/libcurl-4.dll.bin\n\n        dump_path = self.handler.read_newline(strip=True).replace(\"\\\\\", \"/\")\n\n        if self.version >= 2:\n            filepath = self.handler.read_newline(strip=True)\n            pids = map(int, self.handler.read_newline(strip=True).split())\n        else:\n            filepath, pids = None, []\n\n        log.debug(\"File upload request for %s\", dump_path)\n\n        dir_part, filename = os.path.split(dump_path)\n\n        if \"./\" in dump_path or not dir_part or dump_path.startswith(\"/\"):\n            raise CuckooOperationalError(\n                \"FileUpload failure, banned path: %s\" % dump_path\n            )\n\n        for restricted in self.RESTRICTED_DIRECTORIES:\n            if restricted in dir_part:\n                raise CuckooOperationalError(\n                    \"FileUpload failure, banned path.\"\n                )\n\n        try:\n            create_folder(self.storagepath, dir_part)\n        except CuckooOperationalError:\n            log.error(\"Unable to create folder %s\", dir_part)\n            return\n\n        file_path = os.path.join(self.storagepath, dump_path.strip())\n\n        if not file_path.startswith(self.storagepath):\n            raise CuckooOperationalError(\n                \"FileUpload failure, path sanitization failed.\"\n            )\n\n        if os.path.exists(file_path):\n            log.warning(\n                \"Analyzer tried to overwrite an existing file, \"\n                \"closing connection.\"\n            )\n            return\n\n        self.fd = open(file_path, \"wb\")\n        chunk = self.handler.read_any()\n        while chunk:\n            self.fd.write(chunk)\n\n            if self.fd.tell() >= self.upload_max_size:\n                log.warning(\n                    \"Uploaded file length larger than upload_max_size, \"\n                    \"stopping upload.\"\n                )\n                self.fd.write(\"... (truncated)\")\n                break\n\n            try:\n                chunk = self.handler.read_any()\n            except:\n                break\n\n        self.lock.acquire()\n\n        with open(self.filelog, \"a+b\") as f:\n            f.write(\"%s\\n\" % json.dumps({\n                \"path\": dump_path,\n                \"filepath\": filepath,\n                \"pids\": pids,\n            }))\n\n        self.lock.release()\n\n        log.debug(\"Uploaded file length: %s\", self.fd.tell())\n        return\n        yield\n\n    def close(self):\n        if self.fd:\n            self.fd.close()\n\nclass LogHandler(ProtocolHandler):\n    \"\"\"\n\n\n    \"\"\"\n    def init(self):\n        self.logpath = os.path.join(self.handler.storagepath, \"analysis.log\")\n        self.fd = self._open()\n        log.debug(\"LogHandler for live analysis.log initialized.\")\n\n    def __iter__(self):\n        if not self.fd:\n            return\n\n        while True:\n            try:\n                buf = self.handler.read_newline(strip=False)\n            except Disconnect:\n                break\n\n            if not buf:\n                break\n\n            self.fd.write(buf)\n            self.fd.flush()\n\n        return\n        yield\n\n    def close(self):\n        if self.fd:\n            self.fd.close()\n\n    def _open(self):\n        if not os.path.exists(self.logpath):\n            return open(self.logpath, \"wb\")\n\n        log.debug(\"Log analysis.log already existing, appending data.\")\n        fd = open(self.logpath, \"ab\")\n\n        # add a fake log entry, saying this had to be re-opened\n        #  use the same format as the default logger, in case anyone wants to parse this\n        #  2015-02-23 12:05:05,092 [lib.api.process] DEBUG: Using QueueUserAPC injection.\n        now = datetime.datetime.now()\n        print >>fd, \"\\n%s,%03.0f [lib.core.resultserver] WARNING: This log file was re-opened, log entries will be appended.\" % (\n            now.strftime(\"%Y-%m-%d %H:%M:%S\"), now.microsecond / 1000.0\n        )\n\n        return fd\n"
  },
  {
    "path": "lib/cuckoo/core/rooter.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport json\nimport logging\nimport os.path\nimport socket\nimport tempfile\nimport threading\n\nfrom lib.cuckoo.common.config import Config\n\ncfg = Config()\nlog = logging.getLogger(__name__)\nunixpath = tempfile.mktemp()\nlock = threading.Lock()\n\nvpns = {}\n\ndef rooter(command, *args, **kwargs):\n    if not os.path.exists(cfg.cuckoo.rooter):\n        log.critical(\"Unable to passthrough root command (%s) as the rooter \"\n                     \"unix socket doesn't exist.\", command)\n        return\n\n    lock.acquire()\n\n    s = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)\n\n    if os.path.exists(unixpath):\n        os.remove(unixpath)\n\n    s.bind(unixpath)\n\n    try:\n        s.connect(cfg.cuckoo.rooter)\n    except socket.error as e:\n        log.critical(\"Unable to passthrough root command as we're unable to \"\n                     \"connect to the rooter unix socket: %s.\", e)\n        return\n\n    s.send(json.dumps({\n        \"command\": command,\n        \"args\": args,\n        \"kwargs\": kwargs,\n    }))\n\n    ret = json.loads(s.recv(0x10000))\n\n    lock.release()\n\n    if ret[\"exception\"]:\n        log.warning(\"Rooter returned error: %s\", ret[\"exception\"])\n\n    return ret[\"output\"]\n"
  },
  {
    "path": "lib/cuckoo/core/scheduler.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport time\nimport shutil\nimport logging\nimport threading\nimport Queue\n\nfrom lib.cuckoo.common.config import Config, emit_options\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\nfrom lib.cuckoo.common.exceptions import CuckooMachineError, CuckooGuestError\nfrom lib.cuckoo.common.exceptions import CuckooOperationalError\nfrom lib.cuckoo.common.exceptions import CuckooCriticalError\nfrom lib.cuckoo.common.objects import File\nfrom lib.cuckoo.common.utils import create_folder\nfrom lib.cuckoo.core.database import Database, TASK_COMPLETED, TASK_REPORTED\nfrom lib.cuckoo.core.guest import GuestManager\nfrom lib.cuckoo.core.plugins import list_plugins, RunAuxiliary, RunProcessing\nfrom lib.cuckoo.core.plugins import RunDetection, RunSignatures, RunReporting\nfrom lib.cuckoo.core.resultserver import ResultServer\nfrom lib.cuckoo.core.rooter import rooter, vpns\n\nlog = logging.getLogger(__name__)\n\nmachinery = None\nmachine_lock = None\nlatest_symlink_lock = threading.Lock()\n\nactive_analysis_count = 0\n\nclass AnalysisManager(threading.Thread):\n    \"\"\"Analysis Manager.\n\n    :Note: This class handles the full analysis process for a given task. It takes\n    care of selecting the analysis machine, preparing the configuration and\n    interacting with the guest agent and analyzer components to launch and\n    complete the analysis and store, process and report its results.\n    \"\"\"\n\n    def __init__(self, task_id, error_queue):\n        \"\"\":param task: task object containing the details for the analysis.\"\"\"\n        threading.Thread.__init__(self)\n\n        self.errors = error_queue\n        self.cfg = Config()\n        self.storage = \"\"\n        self.binary = \"\"\n        self.storage_binary = \"\"\n        self.machine = None\n\n        self.db = Database()\n        self.task = self.db.view_task(task_id)\n\n        self.interface = None\n        self.rt_table = None\n\n    def init_storage(self):\n        \"\"\"Initialize analysis storage folder.\"\"\"\n        self.storage = os.path.join(CUCKOO_ROOT,\n                                    \"storage\",\n                                    \"analyses\",\n                                    str(self.task.id))\n\n        # If the analysis storage folder already exists, we need to abort the\n        # analysis or previous results will be overwritten and lost.\n        if os.path.exists(self.storage):\n            log.error(\"Analysis results folder already exists at path \\\"%s\\\",\"\n                      \" analysis aborted\", self.storage)\n            return False\n\n        # If we're not able to create the analysis storage folder, we have to\n        # abort the analysis.\n        try:\n            create_folder(folder=self.storage)\n        except CuckooOperationalError:\n            log.error(\"Unable to create analysis folder %s\", self.storage)\n            return False\n\n        return True\n\n    def check_file(self):\n        \"\"\"Checks the integrity of the file to be analyzed.\"\"\"\n        sample = self.db.view_sample(self.task.sample_id)\n\n        sha256 = File(self.task.target).get_sha256()\n        if sha256 != sample.sha256:\n            log.error(\"Target file has been modified after submission: \\\"%s\\\"\", self.task.target)\n            return False\n\n        return True\n\n    def store_file(self):\n        \"\"\"Store a copy of the file being analyzed.\"\"\"\n        if not os.path.exists(self.task.target):\n            log.error(\"The file to analyze does not exist at path \\\"%s\\\", \"\n                      \"analysis aborted\", self.task.target)\n            return False\n\n        sha256 = File(self.task.target).get_sha256()\n        self.binary = os.path.join(CUCKOO_ROOT, \"storage\", \"binaries\", sha256)\n\n        if os.path.exists(self.binary):\n            log.info(\"File already exists at \\\"%s\\\"\", self.binary)\n        else:\n            # TODO: do we really need to abort the analysis in case we are not\n            # able to store a copy of the file?\n            try:\n                shutil.copy(self.task.target, self.binary)\n            except (IOError, shutil.Error) as e:\n                log.error(\"Unable to store file from \\\"%s\\\" to \\\"%s\\\", \"\n                          \"analysis aborted\", self.task.target, self.binary)\n                return False\n\n        try:\n            self.storage_binary = os.path.join(self.storage, \"binary\")\n\n            if hasattr(os, \"symlink\"):\n                os.symlink(self.binary, self.storage_binary)\n            else:\n                shutil.copy(self.binary, self.storage_binary)\n        except (AttributeError, OSError) as e:\n            log.error(\"Unable to create symlink/copy from \\\"%s\\\" to \"\n                      \"\\\"%s\\\": %s\", self.binary, self.storage, e)\n\n        return True\n\n    def store_task_info(self):\n        \"\"\"grab latest task from db (if available) and update self.task\"\"\"\n        dbtask = self.db.view_task(self.task.id)\n        self.task = dbtask.to_dict()\n\n        task_info_path = os.path.join(self.storage, \"task.json\")\n        open(task_info_path, \"w\").write(dbtask.to_json())\n\n    def acquire_machine(self):\n        \"\"\"Acquire an analysis machine from the pool of available ones.\"\"\"\n        machine = None\n\n        # Start a loop to acquire the a machine to run the analysis on.\n        while True:\n            machine_lock.acquire()\n\n            # In some cases it's possible that we enter this loop without\n            # having any available machines. We should make sure this is not\n            # such case, or the analysis task will fail completely.\n            if not machinery.availables():\n                machine_lock.release()\n                time.sleep(1)\n                continue\n\n            # If the user specified a specific machine ID, a platform to be\n            # used or machine tags acquire the machine accordingly.\n            machine = machinery.acquire(machine_id=self.task.machine,\n                                        platform=self.task.platform,\n                                        tags=self.task.tags)\n\n            # If no machine is available at this moment, wait for one second\n            # and try again.\n            if not machine:\n                machine_lock.release()\n                log.debug(\"Task #%d: no machine available yet\", self.task.id)\n                time.sleep(1)\n            else:\n                log.info(\"Task #%d: acquired machine %s (label=%s)\",\n                         self.task.id, machine.name, machine.label)\n                break\n\n        self.machine = machine\n\n    def build_options(self):\n        \"\"\"Generate analysis options.\n\n        :return: options dict.\n        \"\"\"\n        options = {}\n\n        if self.task.category == \"file\":\n            options[\"file_name\"] = File(self.task.target).get_name()\n            options[\"file_type\"] = File(self.task.target).get_type()\n            options[\"pe_exports\"] = \\\n                \",\".join(File(self.task.target).get_exported_functions())\n\n            package, activity = File(self.task.target).get_apk_entry()\n            self.task.options[\"apk_entry\"] = \"%s:%s\" % (package, activity)\n\n        options[\"id\"] = self.task.id\n        options[\"ip\"] = self.machine.resultserver_ip\n        options[\"port\"] = self.machine.resultserver_port\n        options[\"category\"] = self.task.category\n        options[\"target\"] = self.task.target\n        options[\"package\"] = self.task.package\n        options[\"options\"] = emit_options(self.task.options)\n        options[\"enforce_timeout\"] = self.task.enforce_timeout\n        options[\"clock\"] = self.task.clock\n        options[\"terminate_processes\"] = self.cfg.cuckoo.terminate_processes\n\n        if not self.task.timeout:\n            options[\"timeout\"] = self.cfg.timeouts.default\n        else:\n            options[\"timeout\"] = self.task.timeout\n\n        # copy in other analyzer specific options, TEMPORARY (most likely)\n        vm_options = getattr(machinery.options, self.machine.name)\n        for k in vm_options:\n            if k.startswith(\"analyzer_\"):\n                options[k] = vm_options[k]\n\n        return options\n\n    def route_network(self):\n        \"\"\"Enable network routing if desired.\"\"\"\n        # Determine the desired routing strategy (none, internet, VPN).\n        route = self.task.options.get(\"route\", self.cfg.routing.route)\n\n        if route == \"none\":\n            self.interface = None\n            self.rt_table = None\n        elif route == \"internet\" and self.cfg.routing.internet != \"none\":\n            self.interface = self.cfg.routing.internet\n            self.rt_table = self.cfg.routing.rt_table\n        elif route in vpns:\n            self.interface = vpns[route].interface\n            self.rt_table = vpns[route].rt_table\n        else:\n            log.warning(\"Unknown network routing destination specified, \"\n                        \"ignoring routing for this analysis: %r\", route)\n            self.interface = None\n            self.rt_table = None\n\n        # Check if the network interface is still available. If a VPN dies for\n        # some reason, its tunX interface will no longer be available.\n        if self.interface and not rooter(\"nic_available\", self.interface):\n            log.error(\n                \"The network interface '%s' configured for this analysis is \"\n                \"not available at the moment, switching to route=none mode.\",\n                self.interface\n            )\n            route = \"none\"\n            self.task.options[\"route\"] = \"none\"\n            self.interface = None\n            self.rt_table = None\n\n        if self.interface:\n            rooter(\"forward_enable\", self.machine.interface,\n                   self.interface, self.machine.ip)\n\n        if self.rt_table:\n            rooter(\"srcroute_enable\", self.rt_table, self.machine.ip)\n\n        # Propagate the taken route to the database.\n        self.db.set_route(self.task.id, route)\n\n    def unroute_network(self):\n        if self.interface:\n            rooter(\"forward_disable\", self.machine.interface,\n                   self.interface, self.machine.ip)\n\n        if self.rt_table:\n            rooter(\"srcroute_disable\", self.rt_table, self.machine.ip)\n\n    def wait_finish(self):\n        \"\"\"Some VMs don't have an actual agent. Mainly those that are used as\n        assistance for an analysis through the services auxiliary module. This\n        method just waits until the analysis is finished rather than actively\n        trying to engage with the Cuckoo Agent.\"\"\"\n        self.db.guest_set_status(self.task.id, \"running\")\n        while self.db.guest_get_status(self.task.id) == \"running\":\n            time.sleep(1)\n\n    def guest_manage(self, options):\n        # Handle a special case where we're creating a baseline report of this\n        # particular virtual machine - a report containing all the results\n        # that are gathered if no additional samples are ran in the VM. These\n        # results, such as loaded drivers and opened sockets in volatility, or\n        # DNS requests to hostnames related to Microsoft Windows, etc may be\n        # omitted or at the very least given less priority when creating a\n        # report for an analysis that ran on this VM later on.\n        if self.task.category == \"baseline\":\n            time.sleep(options[\"timeout\"])\n        else:\n            # Initialize the guest manager.\n            guest = GuestManager(self.machine.name, self.machine.ip,\n                                 self.machine.platform, self.task.id)\n\n            # Start the analysis.\n            self.db.guest_set_status(self.task.id, \"starting\")\n            monitor = self.task.options.get(\"monitor\", \"latest\")\n            guest.start_analysis(options, monitor)\n\n            # In case the Agent didn't respond and we force-quit the analysis\n            # at some point while it was still starting the analysis the state\n            # will be \"stop\" (or anything but \"running\", really).\n            if self.db.guest_get_status(self.task.id) == \"starting\":\n                self.db.guest_set_status(self.task.id, \"running\")\n                guest.wait_for_completion()\n\n            self.db.guest_set_status(self.task.id, \"stopping\")\n\n    def launch_analysis(self):\n        \"\"\"Start analysis.\"\"\"\n        succeeded = False\n\n        target = self.task.target\n        if self.task.category == \"file\":\n            target = os.path.basename(target)\n\n        log.info(\"Starting analysis of %s \\\"%s\\\" (task #%d, options \\\"%s\\\")\",\n                 self.task.category.upper(), target, self.task.id,\n                 emit_options(self.task.options))\n\n        # Initialize the analysis folders.\n        if not self.init_storage():\n            return False\n\n        self.store_task_info()\n\n        if self.task.category == \"file\":\n            # Check whether the file has been changed for some unknown reason.\n            # And fail this analysis if it has been modified.\n            if not self.check_file():\n                return False\n\n            # Store a copy of the original file.\n            if not self.store_file():\n                return False\n\n        # Acquire analysis machine.\n        try:\n            self.acquire_machine()\n        except CuckooOperationalError as e:\n            machine_lock.release()\n            log.error(\"Cannot acquire machine: {0}\".format(e))\n            return False\n\n        # At this point we can tell the ResultServer about it.\n        try:\n            ResultServer().add_task(self.task, self.machine)\n        except Exception as e:\n            machinery.release(self.machine.label)\n            self.errors.put(e)\n\n        aux = RunAuxiliary(task=self.task, machine=self.machine)\n        aux.start()\n\n        # Generate the analysis configuration file.\n        options = self.build_options()\n\n        try:\n            unlocked = False\n            self.interface = None\n\n            # Mark the selected analysis machine in the database as started.\n            guest_log = self.db.guest_start(self.task.id,\n                                            self.machine.name,\n                                            self.machine.label,\n                                            machinery.__class__.__name__)\n            # Start the machine.\n            machinery.start(self.machine.label, self.task)\n\n            # Enable network routing.\n            self.route_network()\n\n            # By the time start returns it will have fully started the Virtual\n            # Machine. We can now safely release the machine lock.\n            machine_lock.release()\n            unlocked = True\n\n            # Run and manage the components inside the guest unless this\n            # machine has the \"noagent\" option specified (please refer to the\n            # wait_finish() function for more details on this function).\n            if \"noagent\" not in self.machine.options:\n                self.guest_manage(options)\n            else:\n                self.wait_finish()\n\n            succeeded = True\n        except CuckooMachineError as e:\n            if not unlocked:\n                machine_lock.release()\n            log.error(str(e), extra={\"task_id\": self.task.id})\n            log.critical(\n                \"A critical error has occurred trying to use the machine \"\n                \"with name %s during an analysis due to which it is no \"\n                \"longer in a working state, please report this issue and all \"\n                \"of the related environment details to the developers so we \"\n                \"can improve this situation. (Note that before we would \"\n                \"simply remove this VM from doing any more analyses, but as \"\n                \"all the VMs will eventually be depleted that way, hopefully \"\n                \"we'll find a better solution now).\", self.machine.name,\n            )\n        except CuckooGuestError as e:\n            if not unlocked:\n                machine_lock.release()\n            log.error(str(e), extra={\"task_id\": self.task.id})\n        finally:\n            # Stop Auxiliary modules.\n            aux.stop()\n\n            # Take a memory dump of the machine before shutting it off.\n            if self.cfg.cuckoo.memory_dump or self.task.memory:\n                try:\n                    dump_path = os.path.join(self.storage, \"memory.dmp\")\n                    machinery.dump_memory(self.machine.label, dump_path)\n                except NotImplementedError:\n                    log.error(\"The memory dump functionality is not available \"\n                              \"for the current machine manager.\")\n                except CuckooMachineError as e:\n                    log.error(e)\n\n            try:\n                # Stop the analysis machine.\n                machinery.stop(self.machine.label)\n            except CuckooMachineError as e:\n                log.warning(\"Unable to stop machine %s: %s\",\n                            self.machine.label, e)\n\n            # Mark the machine in the database as stopped. Unless this machine\n            # has been marked as dead, we just keep it as \"started\" in the\n            # database so it'll not be used later on in this session.\n            self.db.guest_stop(guest_log)\n\n            # After all this, we can make the ResultServer forget about the\n            # internal state for this analysis task.\n            ResultServer().del_task(self.task, self.machine)\n\n            # Drop the network routing rules if any.\n            self.unroute_network()\n\n            try:\n                # Release the analysis machine. But only if the machine has\n                # not turned dead yet.\n                machinery.release(self.machine.label)\n            except CuckooMachineError as e:\n                log.error(\"Unable to release machine %s, reason %s. \"\n                          \"You might need to restore it manually.\",\n                          self.machine.label, e)\n\n        return succeeded\n\n    def process_results(self):\n        \"\"\"Process the analysis results and generate the enabled reports.\"\"\"\n        results = RunProcessing(task=self.task).run()\n        RunSignatures(results=results).run()\n        RunDetection(task=self.task, results=results).run()\n        RunReporting(task=self.task, results=results).run()\n\n        # If the target is a file and the user enabled the option,\n        # delete the original copy.\n        if self.task.category == \"file\" and self.cfg.cuckoo.delete_original:\n            if not os.path.exists(self.task.target):\n                log.warning(\"Original file does not exist anymore: \\\"%s\\\": \"\n                            \"File not found.\", self.task.target)\n            else:\n                try:\n                    os.remove(self.task.target)\n                except OSError as e:\n                    log.error(\"Unable to delete original file at path \"\n                              \"\\\"%s\\\": %s\", self.task.target, e)\n\n        # If the target is a file and the user enabled the delete copy of\n        # the binary option, then delete the copy.\n        if self.task.category == \"file\" and self.cfg.cuckoo.delete_bin_copy:\n            if not os.path.exists(self.binary):\n                log.warning(\"Copy of the original file does not exist anymore: \\\"%s\\\": File not found\", self.binary)\n            else:\n                try:\n                    os.remove(self.binary)\n                except OSError as e:\n                    log.error(\"Unable to delete the copy of the original file at path \\\"%s\\\": %s\", self.binary, e)\n            # Check if the binary in the analysis directory is an invalid symlink. If it is, delete it.\n            if os.path.islink(self.storage_binary) and not os.path.exists(self.storage_binary):\n                try:\n                    os.remove(self.storage_binary)\n                except OSError as e:\n                    log.error(\"Unable to delete symlink to the binary copy at path \\\"%s\\\": %s\", self.storage_binary, e)\n\n        log.info(\"Task #%d: reports generation completed (path=%s)\",\n                 self.task.id, self.storage)\n\n        return True\n\n    def run(self):\n        \"\"\"Run manager thread.\"\"\"\n        global active_analysis_count\n        active_analysis_count += 1\n        try:\n            self.launch_analysis()\n\n            self.db.set_status(self.task.id, TASK_COMPLETED)\n\n            log.debug(\"Released database task #%d\", self.task.id)\n\n            if self.cfg.cuckoo.process_results:\n                # this updates self.task so processing gets the latest and greatest\n                self.store_task_info()\n\n                self.process_results()\n                self.db.set_status(self.task.id, TASK_REPORTED)\n\n            # We make a symbolic link (\"latest\") which links to the latest\n            # analysis - this is useful for debugging purposes. This is only\n            # supported under systems that support symbolic links.\n            if hasattr(os, \"symlink\"):\n                latest = os.path.join(CUCKOO_ROOT, \"storage\",\n                                      \"analyses\", \"latest\")\n\n                # First we have to remove the existing symbolic link, then we\n                # have to create the new one.\n                # Deal with race conditions using a lock.\n                latest_symlink_lock.acquire()\n                try:\n                    # As per documentation, lexists() returns True for dead\n                    # symbolic links.\n                    if os.path.lexists(latest):\n                        os.remove(latest)\n\n                    os.symlink(self.storage, latest)\n                except OSError as e:\n                    log.warning(\"Error pointing latest analysis symlink: %s\" % e)\n                finally:\n                    latest_symlink_lock.release()\n\n            # overwrite task.json so we have the latest data inside\n            self.store_task_info()\n            log.info(\"Task #%d: analysis procedure completed\", self.task.id)\n        except:\n            log.exception(\"Failure in AnalysisManager.run\")\n\n        active_analysis_count -= 1\n\nclass Scheduler(object):\n    \"\"\"Tasks Scheduler.\n\n    :note: This class is responsible for the main execution loop of the tool. It\n    prepares the analysis machines and keep waiting and loading for new\n    analysis tasks.Whenever a new task is available, it launches AnalysisManager which will\n    take care of running the full analysis process and operating with the\n    assigned analysis machine.\n    \"\"\"\n    def __init__(self, maxcount=None):\n        self.running = True\n        self.cfg = Config()\n        self.db = Database()\n        self.maxcount = maxcount\n        self.total_analysis_count = 0\n\n    def initialize(self):\n        \"\"\"Initialize the machine manager.\"\"\"\n        global machinery, machine_lock\n\n        machinery_name = self.cfg.cuckoo.machinery\n\n        max_vmstartup_count = self.cfg.cuckoo.max_vmstartup_count\n        if max_vmstartup_count:\n            machine_lock = threading.Semaphore(max_vmstartup_count)\n        else:\n            machine_lock = threading.Lock()\n\n        log.info(\"Using \\\"%s\\\" as machine manager\", machinery_name)\n\n        # Get registered class name. Only one machine manager is imported,\n        # therefore there should be only one class in the list.\n        plugin = list_plugins(\"machinery\")[0]\n        # Initialize the machine manager.\n        machinery = plugin()\n\n        # Find its configuration file.\n        conf = os.path.join(CUCKOO_ROOT, \"conf\", \"%s.conf\" % machinery_name)\n\n        if not os.path.exists(conf):\n            raise CuckooCriticalError(\"The configuration file for machine \"\n                                      \"manager \\\"{0}\\\" does not exist at path:\"\n                                      \" {1}\".format(machinery_name, conf))\n\n        # Provide a dictionary with the configuration options to the\n        # machine manager instance.\n        machinery.set_options(Config(machinery_name))\n\n        # Initialize the machine manager.\n        try:\n            machinery.initialize(machinery_name)\n        except CuckooMachineError as e:\n            raise CuckooCriticalError(\"Error initializing machines: %s\" % e)\n\n        # At this point all the available machines should have been identified\n        # and added to the list. If none were found, Cuckoo needs to abort the\n        # execution.\n        if not len(machinery.machines()):\n            raise CuckooCriticalError(\"No machines available.\")\n        else:\n            log.info(\"Loaded %s machine/s\", len(machinery.machines()))\n\n        if len(machinery.machines()) > 1 and self.db.engine.name == \"sqlite\":\n            log.warning(\"As you've configured Cuckoo to execute parallel \"\n                        \"analyses, we recommend you to switch to a MySQL or\"\n                        \"a PostgreSQL database as SQLite might cause some \"\n                        \"issues.\")\n\n        if len(machinery.machines()) > 4 and self.cfg.cuckoo.process_results:\n            log.warning(\"When running many virtual machines it is recommended \"\n                        \"to process the results in a separate process.py to \"\n                        \"increase throughput and stability. Please read the \"\n                        \"documentation about the `Processing Utility`.\")\n\n        # Drop all existing packet forwarding rules for each VM. Just in case\n        # Cuckoo was terminated for some reason and various forwarding rules\n        # have thus not been dropped yet.\n        for machine in machinery.machines():\n            if not machine.interface:\n                log.info(\"Unable to determine the network interface for VM \"\n                         \"with name %s, Cuckoo will not be able to give it \"\n                         \"full internet access or route it through a VPN! \"\n                         \"Please define a default network interface for the \"\n                         \"machinery or define a network interface for each \"\n                         \"VM.\", machine.name)\n                continue\n\n            # Drop forwarding rule to each VPN.\n            for vpn in vpns.values():\n                rooter(\"forward_disable\", machine.interface,\n                       vpn.interface, machine.ip)\n\n            # Drop forwarding rule to the internet / dirty line.\n            if self.cfg.routing.internet != \"none\":\n                rooter(\"forward_disable\", machine.interface,\n                       self.cfg.routing.internet, machine.ip)\n\n    def stop(self):\n        \"\"\"Stop scheduler.\"\"\"\n        self.running = False\n        # Shutdown machine manager (used to kill machines that still alive).\n        machinery.shutdown()\n\n    def start(self):\n        \"\"\"Start scheduler.\"\"\"\n        self.initialize()\n\n        log.info(\"Waiting for analysis tasks.\")\n\n        # Message queue with threads to transmit exceptions (used as IPC).\n        errors = Queue.Queue()\n\n        # Command-line overrides the configuration file.\n        if self.maxcount is None:\n            self.maxcount = self.cfg.cuckoo.max_analysis_count\n\n        # This loop runs forever.\n        while self.running:\n            time.sleep(1)\n\n            # Wait until the machine lock is not locked. This is only the case\n            # when all machines are fully running, rather that about to start\n            # or still busy starting. This way we won't have race conditions\n            # with finding out there are no available machines in the analysis\n            # manager or having two analyses pick the same machine.\n            if not machine_lock.acquire(False):\n                continue\n\n            machine_lock.release()\n\n            # If not enough free disk space is available, then we print an\n            # error message and wait another round (this check is ignored\n            # when the freespace configuration variable is set to zero).\n            if self.cfg.cuckoo.freespace:\n                # Resolve the full base path to the analysis folder, just in\n                # case somebody decides to make a symbolic link out of it.\n                dir_path = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\")\n\n                # TODO: Windows support\n                if hasattr(os, \"statvfs\"):\n                    dir_stats = os.statvfs(dir_path)\n\n                    # Calculate the free disk space in megabytes.\n                    space_available = dir_stats.f_bavail * dir_stats.f_frsize\n                    space_available /= 1024 * 1024\n\n                    if space_available < self.cfg.cuckoo.freespace:\n                        log.error(\"Not enough free disk space! (Only %d MB!)\",\n                                  space_available)\n                        continue\n\n            # Have we limited the number of concurrently executing machines?\n            if self.cfg.cuckoo.max_machines_count:\n                # Are too many running?\n                if len(machinery.running()) >= self.cfg.cuckoo.max_machines_count:\n                    continue\n\n            # If no machines are available, it's pointless to fetch for\n            # pending tasks. Loop over.\n            if not machinery.availables():\n                continue\n\n            # Exits if max_analysis_count is defined in the configuration\n            # file and has been reached.\n            if self.maxcount and self.total_analysis_count >= self.maxcount:\n                if active_analysis_count <= 0:\n                    log.debug(\"Reached max analysis count, exiting.\")\n                    self.stop()\n                continue\n\n            # Fetch a pending analysis task.\n            # TODO This fixes only submissions by --machine, need to add\n            # other attributes (tags etc).\n            # TODO We should probably move the entire \"acquire machine\" logic\n            # from the Analysis Manager to the Scheduler and then pass the\n            # selected machine onto the Analysis Manager instance.\n            task, available = None, False\n            for machine in self.db.get_available_machines():\n                task = self.db.fetch(machine=machine.name)\n                if task:\n                    break\n\n                if machine.is_analysis():\n                    available = True\n\n            # We only fetch a new task if at least one of the available\n            # machines is not a \"service\" machine (again, please refer to the\n            # services auxiliary module for more information on service VMs).\n            if not task and available:\n                task = self.db.fetch(service=False)\n\n            if task:\n                log.debug(\"Processing task #%s\", task.id)\n                self.total_analysis_count += 1\n\n                # Initialize and start the analysis manager.\n                analysis = AnalysisManager(task.id, errors)\n                analysis.daemon = True\n                analysis.start()\n\n            # Deal with errors.\n            try:\n                raise errors.get(block=False)\n            except Queue.Empty:\n                pass\n\n        log.debug(\"End of analyses.\")\n"
  },
  {
    "path": "lib/cuckoo/core/startup.py",
    "content": "# coding=utf-8\n# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport shutil\nimport sys\nimport copy\nimport json\nimport socket\nimport urllib\nimport urllib2\nimport logging\nimport logging.handlers\nfrom distutils.version import LooseVersion\n\nfrom lib.cuckoo.common.colors import red, green, yellow, cyan\nfrom lib.cuckoo.common.config import Config\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT, CUCKOO_VERSION\nfrom lib.cuckoo.common.exceptions import CuckooStartupError, CuckooDatabaseError\nfrom lib.cuckoo.common.exceptions import CuckooOperationalError\nfrom lib.cuckoo.common.utils import create_folders\nfrom lib.cuckoo.core.database import Database, TASK_RUNNING\nfrom lib.cuckoo.core.database import TASK_FAILED_ANALYSIS, TASK_PENDING\nfrom lib.cuckoo.core.plugins import import_plugin, import_package, list_plugins\nfrom lib.cuckoo.core.rooter import rooter, vpns\n\ntry:\n    import pwd\n    HAVE_PWD = True\nexcept ImportError:\n    HAVE_PWD = False\n\nlog = logging.getLogger()\n\ndef check_python_version():\n    \"\"\"Checks if Python version is supported by Cuckoo.\n\n    :raise CuckooStartupError: if version is not supported.\n    \"\"\"\n    if sys.version_info[:2] != (2, 7):\n        raise CuckooStartupError(\"You are running an incompatible version \"\n                                 \"of Python, please use 2.7\")\n\n\ndef check_working_directory():\n    \"\"\"Checks if working directories are ready.\n\n    :raise CuckooStartupError: if directories are not properly configured.\n    \"\"\"\n    if not os.path.exists(CUCKOO_ROOT):\n        raise CuckooStartupError(\"You specified a non-existing root \"\n                                 \"directory: {0}\".format(CUCKOO_ROOT))\n\n    cwd = os.path.join(os.getcwd(), \"cuckoo.py\")\n    if not os.path.exists(cwd):\n        raise CuckooStartupError(\"You are not running Cuckoo from it's \"\n                                 \"root directory\")\n\n\ndef check_configs():\n    \"\"\"\n    Checks if config files exist.\n\n    :raise CuckooStartupError: if config files do not exist.\n    \"\"\"\n    configs = (\n        \"auxiliary.conf\", \"avd.conf\", \"cuckoo.conf\", \"cuckooml.conf\",\n        \"esx.conf\", \"kvm.conf\", \"memory.conf\", \"physical.conf\",\"detection.conf\",\n        \"processing.conf\", \"qemu.conf\", \"reporting.conf\", \"virtualbox.conf\",\n        \"vmware.conf\", \"vpn.conf\", \"vsphere.conf\", \"xenserver.conf\",\n    )\n\n    for config in [os.path.join(CUCKOO_ROOT, \"conf\", f) for f in configs]:\n        if not os.path.exists(config):\n            raise CuckooStartupError(\"Config file does not exist at \"\n                                     \"path: {0}\".format(config))\n\n    return True\n\n# 添加样本分析目录\ndef create_structure():\n    \"\"\"Creates Cuckoo directories.\"\"\"\n    folders = [\n        \"log\",\n        \"storage\",\n        os.path.join(\"storage\", \"analyses\"),\n        os.path.join(\"storage\", \"binaries\"),\n        os.path.join(\"storage\", \"baseline\"),\n    ]\n\n    try:\n        create_folders(root=CUCKOO_ROOT, folders=folders)\n    except CuckooOperationalError as e:\n        raise CuckooStartupError(e)\n\ndef check_version():\n    \"\"\"Checks version of Cuckoo.\"\"\"\n    cfg = Config()\n\n    if not cfg.cuckoo.version_check:\n        return\n\n    print(\" Checking for updates...\")\n\n    url = \"http://api.cuckoosandbox.org/checkversion.php\"\n    data = urllib.urlencode({\"version\": CUCKOO_VERSION})\n\n    try:\n        request = urllib2.Request(url, data)\n        response = urllib2.urlopen(request)\n    except (urllib2.URLError, urllib2.HTTPError):\n        print(red(\" Failed! \") + \"Unable to establish connection.\\n\")\n        return\n\n    try:\n        response_data = json.loads(response.read())\n    except ValueError:\n        print(red(\" Failed! \") + \"Invalid response.\\n\")\n        return\n\n    stable_version = response_data[\"current\"]\n\n    if CUCKOO_VERSION.endswith(\"-dev\"):\n        print(yellow(\" You are running a development version! Current stable is {}.\".format(\n            stable_version)))\n    else:\n        if LooseVersion(CUCKOO_VERSION) < LooseVersion(stable_version):\n            msg = \"Cuckoo Sandbox version {} is available now.\".format(\n                stable_version)\n\n            print(red(\" Outdated! \") + msg)\n        else:\n            print(green(\" Good! \") + \"You have the latest version \"\n                                     \"available.\\n\")\n\nclass DatabaseHandler(logging.Handler):\n    \"\"\"Logging to database handler.\n    Used to log errors related to tasks in database.\n    \"\"\"\n\n    def emit(self, record):\n        if hasattr(record, \"task_id\"):\n            db = Database()\n            db.add_error(record.msg, int(record.task_id))\n\nclass ConsoleHandler(logging.StreamHandler):\n    \"\"\"Logging to console handler.\"\"\"\n\n    def emit(self, record):\n        colored = copy.copy(record)\n\n        if record.levelname == \"WARNING\":\n            colored.msg = yellow(record.msg)\n        elif record.levelname == \"ERROR\" or record.levelname == \"CRITICAL\":\n            colored.msg = red(record.msg)\n        else:\n            if \"analysis procedure completed\" in record.msg:\n                colored.msg = cyan(record.msg)\n            else:\n                colored.msg = record.msg\n\n        logging.StreamHandler.emit(self, colored)\n\ndef init_logging():\n    \"\"\"Initializes logging.\"\"\"\n    formatter = logging.Formatter(\"%(asctime)s [%(name)s] %(levelname)s: %(message)s\")\n\n    fh = logging.handlers.WatchedFileHandler(os.path.join(CUCKOO_ROOT, \"log\", \"cuckoo.log\"))\n    fh.setFormatter(formatter)\n    log.addHandler(fh)\n\n    ch = ConsoleHandler()\n    ch.setFormatter(formatter)\n    log.addHandler(ch)\n\n    dh = DatabaseHandler()\n    dh.setLevel(logging.ERROR)\n    log.addHandler(dh)\n\n    log.setLevel(logging.INFO)\n\ndef init_console_logging():\n    \"\"\"Initializes logging only to console.\"\"\"\n    formatter = logging.Formatter(\"%(asctime)s [%(name)s] %(levelname)s: %(message)s\")\n\n    ch = ConsoleHandler()\n    ch.setFormatter(formatter)\n    log.addHandler(ch)\n\n    log.setLevel(logging.INFO)\n#\ndef init_tasks():\n    \"\"\"Check tasks and reschedule uncompleted ones.\"\"\"\n    db = Database()\n    cfg = Config()\n\n    log.debug(\"Checking for locked tasks..\")\n    for task in db.list_tasks(status=TASK_RUNNING):\n        if cfg.cuckoo.reschedule:\n            task_id = db.reschedule(task.id)\n            log.info(\n                \"Rescheduled task with ID %s and target %s: task #%s\",\n                task.id, task.target, task_id\n            )\n        else:\n            db.set_status(task.id, TASK_FAILED_ANALYSIS)\n            log.info(\"Updated running task ID {0} status to failed_analysis\".format(task.id))\n\n    log.debug(\"Checking for pending service tasks..\")\n    for task in db.list_tasks(status=TASK_PENDING, category=\"service\"):\n        db.set_status(task.id, TASK_FAILED_ANALYSIS)\n\ndef delete_file(*rel_path):\n    filepath = os.path.join(CUCKOO_ROOT, *rel_path)\n    if not os.path.exists(filepath):\n        return\n\n    try:\n        os.unlink(filepath)\n    except Exception as e:\n        log.warning(\n            \"Unable to remove old %s leftover file from before you updated \"\n            \"your Cuckoo setup to the latest version: %s.\",\n            os.path.join(*rel_path), e\n        )\n\n# 初始化功能模块 class modules\ndef init_modules(machinery=True):\n    \"\"\"Initializes plugins.\"\"\"\n\n    log.debug(\"Importing modules...\")\n\n    # Import all auxiliary modules.\n    import modules.auxiliary\n    import_package(modules.auxiliary)\n\n    # Import all processing modules.\n    import modules.processing\n    import_package(modules.processing)\n\n    # ToDo:Import all processing modules.\n    import modules.detection\n    import_package(modules.detection)\n\n    # Import all signatures.\n    import modules.signatures\n    import_package(modules.signatures)\n\n    delete_file(\"modules\", \"reporting\", \"maec40.pyc\")\n    delete_file(\"modules\", \"reporting\", \"maec41.pyc\")\n    delete_file(\"modules\", \"reporting\", \"mmdef.pyc\")\n\n    # Import all reporting modules.\n    import modules.reporting\n    import_package(modules.reporting)\n\n    # Import machine manager.\n    if machinery:\n        import_plugin(\"modules.machinery.\" + Config().cuckoo.machinery)\n\n    for category, entries in list_plugins().items():\n        log.debug(\"Imported \\\"%s\\\" modules:\", category)\n\n        for entry in entries:\n            if entry == entries[-1]:\n                log.debug(\"\\t `-- %s\", entry.__name__)\n            else:\n                log.debug(\"\\t |-- %s\", entry.__name__)\n\ndef init_yara():\n    \"\"\"Generates index for yara signatures.\"\"\"\n    log.debug(\"Initializing Yara...\")\n\n    # Generate root directory for yara rules.\n    yara_root = os.path.join(CUCKOO_ROOT, \"data\", \"yara\")\n\n    # We divide yara rules in three categories.\n    categories = [\"binaries\", \"urls\", \"memory\"]\n    generated = []\n    # Loop through all categories.\n    for category in categories:\n        # Check if there is a directory for the given category.\n        category_root = os.path.join(yara_root, category)\n        if not os.path.exists(category_root):\n            continue\n\n        # Check if the directory contains any rules.\n        signatures = []\n        for entry in os.listdir(category_root):\n            if entry.endswith(\".yara\") or entry.endswith(\".yar\"):\n                signatures.append(os.path.join(category_root, entry))\n\n        if not signatures:\n            continue\n\n        # Generate path for the category's index file.\n        index_name = \"index_{0}.yar\".format(category)\n        index_path = os.path.join(yara_root, index_name)\n\n        # Create index file and populate it.\n        with open(index_path, \"w\") as index_handle:\n            for signature in signatures:\n                index_handle.write(\"include \\\"{0}\\\"\\n\".format(signature))\n\n        generated.append(index_name)\n\n    for entry in generated:\n        if entry == generated[-1]:\n            log.debug(\"\\t `-- %s\", entry)\n        else:\n            log.debug(\"\\t |-- %s\", entry)\n\ndef init_binaries():\n    \"\"\"Inform the user about the need to periodically look for new analyzer\n    binaries. These include the Windows monitor etc.\"\"\"\n    monitor = os.path.join(CUCKOO_ROOT, \"data\", \"monitor\", \"latest\")\n\n    # Checks whether the \"latest\" symlink is available as well as whether\n    # it points to an existing directory.\n    if not os.path.exists(monitor):\n        raise CuckooStartupError(\n            \"The binaries used for Windows analysis are updated regularly, \"\n            \"independently from the release line. It appears that you're \"\n            \"not up-to-date. This can happen when you've just installed \"\n            \"Cuckoo or when you've updated your Cuckoo version by pulling \"\n            \"the latest changes from our Git repository. In order to get \"\n            \"up-to-date, please run the following \"\n            \"command: `./utils/community.py -wafb monitor` or \"\n            \"`./utils/community.py -waf` if you'd also like to download \"\n            \"over 300 Cuckoo signatures.\"\n        )\n\ndef init_rooter():\n    \"\"\"If required, check whether the rooter is running and whether we can\n    connect to it.\"\"\"\n    cuckoo = Config()\n\n    # The default configuration doesn't require the rooter to be ran.\n    if not Config(\"vpn\").vpn.enabled and cuckoo.routing.route == \"none\":\n        return\n\n    cuckoo = Config()\n    s = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)\n\n    try:\n        s.connect(cuckoo.cuckoo.rooter)\n    except socket.error as e:\n        if e.strerror == \"No such file or directory\":\n            raise CuckooStartupError(\n                \"The rooter is required but it is either not running or it \"\n                \"has been configured to a different Unix socket path. \"\n                \"(In order to disable the use of rooter, please set route \"\n                \"and internet to none in cuckoo.conf and enabled to no in \"\n                \"vpn.conf).\"\n            )\n\n        if e.strerror == \"Connection refused\":\n            raise CuckooStartupError(\n                \"The rooter is required but we can't connect to it as the \"\n                \"rooter is not actually running. \"\n                \"(In order to disable the use of rooter, please set route \"\n                \"and internet to none in cuckoo.conf and enabled to no in \"\n                \"vpn.conf).\"\n            )\n\n        if e.strerror == \"Permission denied\":\n            raise CuckooStartupError(\n                \"The rooter is required but we can't connect to it due to \"\n                \"incorrect permissions. Did you assign it the correct group? \"\n                \"(In order to disable the use of rooter, please set route \"\n                \"and internet to none in cuckoo.conf and enabled to no in \"\n                \"vpn.conf).\"\n            )\n\n        raise CuckooStartupError(\"Unknown rooter error: %s\" % e)\n\n    # Do not forward any packets unless we have explicitly stated so.\n    rooter(\"forward_drop\")\n\ndef init_routing():\n    \"\"\"Initialize and check whether the routing information is correct.\"\"\"\n    cuckoo = Config()\n    vpn = Config(\"vpn\")\n\n    # Check whether all VPNs exist if configured and make their configuration\n    # available through the vpns variable. Also enable NAT on each interface.\n    if vpn.vpn.enabled:\n        for name in vpn.vpn.vpns.split(\",\"):\n            name = name.strip()\n            if not name:\n                continue\n\n            if not hasattr(vpn, name):\n                raise CuckooStartupError(\n                    \"Could not find VPN configuration for %s\" % name\n                )\n\n            entry = vpn.get(name)\n\n            if not rooter(\"nic_available\", entry.interface):\n                raise CuckooStartupError(\n                    \"The network interface that has been configured for \"\n                    \"VPN %s is not available.\" % entry.name\n                )\n\n            if not rooter(\"rt_available\", entry.rt_table):\n                raise CuckooStartupError(\n                    \"The routing table that has been configured for \"\n                    \"VPN %s is not available.\" % entry.name\n                )\n\n            vpns[entry.name] = entry\n\n            # Disable & enable NAT on this network interface. Disable it just\n            # in case we still had the same rule from a previous run.\n            rooter(\"disable_nat\", entry.interface)\n            rooter(\"enable_nat\", entry.interface)\n\n            # Populate routing table with entries from main routing table.\n            if cuckoo.routing.auto_rt:\n                rooter(\"flush_rttable\", entry.rt_table)\n                rooter(\"init_rttable\", entry.rt_table, entry.interface)\n\n    # Check whether the default VPN exists if specified.\n    if cuckoo.routing.route not in (\"none\", \"internet\"):\n        if not vpn.vpn.enabled:\n            raise CuckooStartupError(\n                \"A VPN has been configured as default routing interface for \"\n                \"VMs, but VPNs have not been enabled in vpn.conf\"\n            )\n\n        if cuckoo.routing.route not in vpns:\n            raise CuckooStartupError(\n                \"The VPN defined as default routing target has not been \"\n                \"configured in vpn.conf.\"\n            )\n\n    # Check whether the dirty line exists if it has been defined.\n    if cuckoo.routing.internet != \"none\":\n        if not rooter(\"nic_available\", cuckoo.routing.internet):\n            raise CuckooStartupError(\n                \"The network interface that has been configured as dirty \"\n                \"line is not available.\"\n            )\n\n        if not rooter(\"rt_available\", cuckoo.routing.rt_table):\n            raise CuckooStartupError(\n                \"The routing table that has been configured for dirty \"\n                \"line interface is not available.\"\n            )\n\n        # Disable & enable NAT on this network interface. Disable it just\n        # in case we still had the same rule from a previous run.\n        rooter(\"disable_nat\", cuckoo.routing.internet)\n        rooter(\"enable_nat\", cuckoo.routing.internet)\n\n        # Populate routing table with entries from main routing table.\n        if cuckoo.routing.auto_rt:\n            rooter(\"flush_rttable\", cuckoo.routing.rt_table)\n            rooter(\"init_rttable\", cuckoo.routing.rt_table,\n                   cuckoo.routing.internet)\n\ndef cuckoo_clean():\n    \"\"\"Clean up cuckoo setup.\n    It deletes logs, all stored data from file system and configured\n    databases (SQL and MongoDB).\n    \"\"\"\n    # Init logging.\n    # This need to init a console logger handler, because the standard\n    # logger (init_logging()) logs to a file which will be deleted.\n    create_structure()\n    init_console_logging()\n\n    # Initialize the database connection.\n    try:\n        db = Database(schema_check=False)\n    except CuckooDatabaseError as e:\n        # If something is screwed due to incorrect database migrations or bad\n        # database SqlAlchemy would be unable to connect and operate.\n        log.warning(\"Error connecting to database: it is suggested to check \"\n                    \"the connectivity, apply all migrations if needed or purge \"\n                    \"it manually. Error description: %s\", e)\n    else:\n        # Drop all tables.\n        db.drop()\n\n    # Check if MongoDB reporting is enabled and drop that if it is.\n    cfg = Config(\"reporting\")\n    if cfg.mongodb and cfg.mongodb.enabled:\n        from pymongo import MongoClient\n        host = cfg.mongodb.get(\"host\", \"127.0.0.1\")\n        port = cfg.mongodb.get(\"port\", 27017)\n        mdb = cfg.mongodb.get(\"db\", \"cuckoo\")\n        try:\n            conn = MongoClient(host, port)\n            conn.drop_database(mdb)\n            conn.close()\n        except:\n            log.warning(\"Unable to drop MongoDB database: %s\", mdb)\n\n    # Paths to clean.\n    paths = [\n        os.path.join(CUCKOO_ROOT, \"db\"),\n        os.path.join(CUCKOO_ROOT, \"log\"),\n        os.path.join(CUCKOO_ROOT, \"storage\"),\n    ]\n\n    # Delete various directories.\n    for path in paths:\n        if os.path.isdir(path):\n            try:\n                shutil.rmtree(path)\n            except (IOError, OSError) as e:\n                log.warning(\"Error removing directory %s: %s\", path, e)\n\n    # Delete all compiled Python objects (\"*.pyc\").\n    for dirpath, dirnames, filenames in os.walk(CUCKOO_ROOT):\n        for fname in filenames:\n            if not fname.endswith(\".pyc\"):\n                continue\n\n            # We don't want to delete the Android's Agent .pyc files (as we\n            # don't ship the original .py files and thus they're critical).\n            if \"agent/android/python_agent\" in dirpath.replace(\"\\\\\", \"/\"):\n                continue\n\n            path = os.path.join(dirpath, fname)\n\n            try:\n                os.unlink(path)\n            except (IOError, OSError) as e:\n                log.warning(\"Error removing file %s: %s\", path, e)\n\ndef drop_privileges(username):\n    \"\"\"Drops privileges to selected user.\n\n    :param username: drop privileges to this username\n    \"\"\"\n    if not HAVE_PWD:\n        sys.exit(\"Unable to import pwd required for dropping \"\n                 \"privileges (`pip install pwd`)\")\n\n    try:\n        user = pwd.getpwnam(username)\n        os.setgroups((user.pw_gid,))\n        os.setgid(user.pw_gid)\n        os.setuid(user.pw_uid)\n        os.putenv(\"HOME\", user.pw_dir)\n    except KeyError:\n        sys.exit(\"Invalid user specified to drop privileges to: %s\" % user)\n    except OSError as e:\n        sys.exit(\"Failed to drop privileges to %s: %s\" % (username, e))\n"
  },
  {
    "path": "modules/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "modules/auxiliary/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "modules/auxiliary/mitm.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport os.path\nimport subprocess\nimport threading\n\nfrom lib.cuckoo.common.abstracts import Auxiliary\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\n\nlog = logging.getLogger(__name__)\nPORTS = []\nPORT_LOCK = threading.Lock()\n\nclass MITM(Auxiliary):\n    \"\"\"Use mitmproxy Tools\"\"\"\n\n    def __init__(self):\n        Auxiliary.__init__(self)\n        self.proc = None\n\n    def start(self):\n        '''\n        Start mitmdump tools\n\n        '''\n        mitmdump = self.options.get(\"mitmdump\", \"/usr/local/bin/mitmdump\")\n        port_base = int(self.options.get(\"port_base\", 50000))\n        script = self.options.get(\"script\", \"data/mitm.py\")\n        certificate = self.options.get(\"certificate\", \"bin/cert.p12\")\n\n        outpath = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\",\n                               \"%d\" % self.task.id, \"dump.mitm\")\n\n        if not os.path.exists(mitmdump):\n            log.error(\"Mitmdump does not exist at path \\\"%s\\\", man in the \"\n                      \"middle interception aborted.\", mitmdump)\n            return\n\n        if not os.path.exists(script):\n            log.error(\"Mitmdump script file does not exist at path \\\"%s\\\", \"\n                      \"man in the middle interception aborted.\", script)\n            return\n\n        cert_path = os.path.join(\"analyzer\", \"windows\", certificate)\n        if not os.path.exists(cert_path):\n            log.error(\"Mitmdump root certificate not found at path \\\"%s\\\" \"\n                      \"(real path \\\"%s\\\"), man in the middle interception \"\n                      \"aborted.\", certificate, cert_path)\n            return\n\n        PORT_LOCK.acquire()\n\n        for port in xrange(port_base, port_base + 512):\n            if port not in PORTS:\n                self.port = port\n                break\n\n        PORTS.append(self.port)\n\n        PORT_LOCK.release()\n\n        args = [\n            mitmdump, \"-q\",\n            \"-s\", \"\\\"%s\\\" %s\" % (script, self.task.options.get(\"mitm\", \"\")),\n            \"-p\", \"%d\" % self.port,\n            \"-w\", outpath\n        ]\n\n        mitmlog = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\",\n                               \"%d\" % self.task.id, \"mitm.log\")\n\n        mitmerr = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\",\n                               \"%d\" % self.task.id, \"mitm.err\")\n\n        self.proc = subprocess.Popen(args,\n                                     stdout=open(mitmlog, \"wb\"),\n                                     stderr=open(mitmerr, \"wb\"))\n\n        if \"cert\" in self.task.options:\n            log.warning(\"A root certificate has been provided for this task, \"\n                        \"however, this is overridden by the mitm auxiliary \"\n                        \"module.\")\n\n        self.task.options[\"cert\"] = certificate\n\n        if \"proxy\" in self.task.options:\n            log.warning(\"A proxy has been provided for this task, however, \"\n                        \"this is overridden by the mitm auxiliary module.\")\n\n        # We are using the resultserver IP address as address for the host\n        # where our mitmdump instance is running. TODO Is this correct?\n        self.task.options[\"proxy\"] = \\\n            \"%s:%d\" % (self.machine.resultserver_ip, port)\n\n        log.info(\"Started mitm interception with PID %d (ip=%s, port=%d).\",\n                 self.proc.pid, self.machine.resultserver_ip, self.port)\n\n    def stop(self):\n        '''\n        stop mitmdump tools\n        '''\n        if self.proc and not self.proc.poll():\n            try:\n                self.proc.terminate()\n                PORTS.remove(self.port)\n            except:\n                try:\n                    if not self.proc.poll():\n                        log.debug(\"Killing mitmdump\")\n                        self.proc.kill()\n                        PORTS.remove(self.port)\n                except OSError as e:\n                    log.debug(\"Error killing mitmdump: %s. Continue\", e)\n                except Exception as e:\n                    log.exception(\"Unable to stop mitmdump with pid %d: %s\",\n                                  self.proc.pid, e)\n"
  },
  {
    "path": "modules/auxiliary/services.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport time\n\nfrom lib.cuckoo.common.abstracts import Auxiliary\nfrom lib.cuckoo.common.config import Config\nfrom lib.cuckoo.core.database import Database\n\nlog = logging.getLogger(__name__)\ncfg = Config()\ndb = Database()\n\nclass Services(Auxiliary):\n    \"\"\"Allows one or more additional VMs to be run next to an analysis. Either\n    as global services (which are generally never rebooted) or on a\n    per-analysis basis.\"\"\"\n\n    def start_service(self, service):\n        \"\"\"Start a VM containing one or more services.\"\"\"\n        # We give all services a total of 5 minutes to boot up before\n        # starting the actual analysis.\n        timeout = self.task.timeout or cfg.timeouts.default\n        timeout += 300\n        tags = \"service,%s\" % service\n\n        return db.add_service(timeout, self.task.owner, tags)\n\n    def stop_service(self, task_id):\n        \"\"\"Stop a VM containing one or more services.\"\"\"\n        db.guest_set_status(task_id, \"stop\")\n\n    def start(self):\n        self.tasks = []\n\n        if self.task.category == \"service\":\n            return\n\n        # Have to explicitly enable services.\n        if not self.task.options.get(\"services\"):\n            return\n\n        for service in self.options.get(\"services\", \"\").split(\",\"):\n            service = service.strip()\n            if not service:\n                continue\n\n            task_id = self.start_service(service)\n            self.tasks.append((task_id, service))\n\n            log.info(\"Started service %s #%d for task #%d\",\n                     service, task_id, self.task.id)\n\n        # Wait until each service is either starting to run, running, or for\n        # some reason stopped.\n        wait_states = \"starting\", \"running\", \"stopping\"\n        for task_id, service in self.tasks:\n            while db.guest_get_status(task_id) not in wait_states:\n                time.sleep(1)\n\n        # Wait an additional timeout before starting the actual analysis.\n        timeout = self.options.get(\"timeout\")\n        if isinstance(timeout, int):\n            time.sleep(timeout)\n\n    def stop(self):\n        if self.task.category == \"service\":\n            return\n\n        for task_id, service in self.tasks:\n            log.info(\"Stopping service %s #%d for task #%d\",\n                     service, task_id, self.task.id)\n            self.stop_service(task_id)\n"
  },
  {
    "path": "modules/auxiliary/sniffer.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport getpass\nimport logging\nimport subprocess\n\nfrom lib.cuckoo.common.abstracts import Auxiliary\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT, CUCKOO_GUEST_PORT\n\nlog = logging.getLogger(__name__)\n\nclass Sniffer(Auxiliary):\n    \"\"\"\n    Sniffer use tcpdump tools\n    \"\"\"\n    def __init__(self):\n        Auxiliary.__init__(self)\n        self.proc = None\n\n    def start(self):\n        '''\n        Start tcpdump tools\n        '''\n        if not self.machine.interface:\n            log.error(\"Network interface not defined, network capture aborted\")\n            return\n\n        # Handle special pcap dumping options.\n        if \"nictrace\" in self.machine.options:\n            return\n\n        tcpdump = self.options.get(\"tcpdump\", \"/usr/sbin/tcpdump\")\n        bpf = self.options.get(\"bpf\", \"\")\n        file_path = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\",\n                                 \"%s\" % self.task.id, \"dump.pcap\")\n\n        if not os.path.exists(tcpdump):\n            log.error(\"Tcpdump does not exist at path \\\"%s\\\", network \"\n                      \"capture aborted\", tcpdump)\n            return\n\n        # TODO: this isn't working. need to fix.\n        # mode = os.stat(tcpdump)[stat.ST_MODE]\n        # if (mode & stat.S_ISUID) == 0:\n        #    log.error(\"Tcpdump is not accessible from this user, \"\n        #              \"network capture aborted\")\n        #    return\n\n        pargs = [\n            tcpdump, \"-U\", \"-q\", \"-s\", \"0\", \"-n\",\n            \"-i\", self.machine.interface,\n        ]\n\n        # Trying to save pcap with the same user which cuckoo is running.\n        try:\n            user = getpass.getuser()\n            pargs.extend([\"-Z\", user])\n        except:\n            pass\n\n        pargs.extend([\"-w\", file_path])\n        pargs.extend([\"host\", self.machine.ip])\n\n        if self.task.options.get(\"sniffer.debug\") != \"1\":\n            # Do not capture Agent traffic.\n            pargs.extend([\n                \"and\", \"not\", \"(\",\n                \"dst\", \"host\", self.machine.ip, \"and\",\n                \"dst\", \"port\", str(CUCKOO_GUEST_PORT),\n                \")\", \"and\", \"not\", \"(\",\n                \"src\", \"host\", self.machine.ip, \"and\",\n                \"src\", \"port\", str(CUCKOO_GUEST_PORT),\n                \")\",\n            ])\n\n            # Do not capture ResultServer traffic.\n            pargs.extend([\n                \"and\", \"not\", \"(\",\n                \"dst\", \"host\", self.machine.resultserver_ip, \"and\",\n                \"dst\", \"port\", self.machine.resultserver_port,\n                \")\", \"and\", \"not\", \"(\",\n                \"src\", \"host\", self.machine.resultserver_ip, \"and\",\n                \"src\", \"port\", self.machine.resultserver_port,\n                \")\",\n            ])\n\n            if bpf:\n                pargs.extend([\"and\", \"(\", bpf, \")\"])\n\n        try:\n            self.proc = subprocess.Popen(pargs)\n        except (OSError, ValueError):\n            log.exception(\n                \"Failed to start sniffer (interface=%s, host=%s, pcap=%s)\",\n                self.machine.interface, self.machine.ip, file_path,\n            )\n            return\n\n        log.info(\n            \"Started sniffer with PID %d (interface=%s, host=%s, pcap=%s)\",\n            self.proc.pid, self.machine.interface, self.machine.ip, file_path,\n        )\n\n    def stop(self):\n        \"\"\"\n        Stop sniffing.\n\n        :return: operation status.\n        \"\"\"\n        if self.proc and not self.proc.poll():\n            try:\n                self.proc.terminate()\n            except:\n                try:\n                    if not self.proc.poll():\n                        log.debug(\"Killing sniffer\")\n                        self.proc.kill()\n                except OSError as e:\n                    log.debug(\"Error killing sniffer: %s. Continue\", e)\n                    pass\n                except Exception as e:\n                    log.exception(\"Unable to stop the sniffer with pid %d: %s\",\n                                  self.proc.pid, e)\n"
  },
  {
    "path": "modules/detection/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "modules/detection/apistats.py",
    "content": "# coding=utf-8\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Bold-Falcon - https://github.com/PowerLZY/Bold-Falcon\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os.path\nimport pickle\nfrom sklearn.externals import joblib\n\nfrom lib.cuckoo.common.abstracts import Detection\nfrom lib.cuckoo.common.exceptions import CuckooDetectionError\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\n\nclass Apistats(Detection):\n    \"\"\"Use Apistats features and XGBoots model\"\"\"\n\n    def load_features(self, key):\n        \"\"\"\n        Feature Engineering:apistats to vector by standard.txt\n        \"\"\"\n\n        # 特征工程 -> 保存pandas\n        # The first stage is to load the data from the directory holding all the JSONs\n        # Then we extract all the relevant information from the loaded samples.\n        strings =' '.join(self.binaries.features[key])\n        try:\n            self.tfidf_features = self.vectorizer.fit_transform(strings)\n        except:\n            raise CuckooDetectionError(\"The Detection module strings_ngarm has missing load_features!\")\n\n\n    def load_model(self):\n        \"\"\"\n        load XGBoots Pre training model\n        \"\"\"\n        try:\n            vectorizer_pth = os.path.join(CUCKOO_ROOT, \"data\", \"models\", \"strings_ngram\", \"tfidf_model\")\n            self.vectorizer = pickle.load(open(vectorizer_pth, \"rb\"))\n\n            model_pth = os.path.join(CUCKOO_ROOT, \"data\", \"models\", \"strings_ngram\", \"XGB_model.pkl\")\n            self.XGBoost = joblib.load(open(model_pth, \"rb\"))\n        except:\n            raise CuckooDetectionError(\"The Detection module strings_ngarm has missing load_model!\")\n\n    def predict(self):\n        try:\n            y_pred = self.XGBoost.predict(self.tfidf_features)\n        except:\n            raise CuckooDetectionError(\"The Detection module strings_ngarm has missing predict!\")\n        return y_pred\n\n\n    def run(self):\n        \"\"\"\n        Run model with apistats\n\n        :return: predict.\n        \"\"\"\n        self.key = \"apistats\"\n        self.features_type = \"behavior\"\n        result = None\n\n        \"\"\"\n        if self.task[\"category\"] == \"file\":\n            features not in json \n            if not os.path.exists(self.file_path):\n                raise CuckooDetectionError(\"Sample file doesn't exist: \\\"%s\\\"\" % self.file_path)\n\n            try:\n                data = open(self.file_path, \"r\").read()\n            except (IOError, OSError) as e:\n                raise CuckooDetectionError(\"Error opening file %s\" % e)\n        \"\"\"\n        # 特征提取 apistats dict\n        self.binaries.feature_dynamic_windowsapi()\n        # 导入模型（特征工程+预测模型）\n        self.load_model()\n        # 特征工程\n        self.load_features(\"api_stats\")\n        # 模型预测\n        result = self.predict()\n\n        return result\n\n"
  },
  {
    "path": "modules/detection/malconv.py",
    "content": "# coding=utf-8\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Bold-Falcon - https://github.com/PowerLZY/Bold-Falcon\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os.path\nimport numpy as np\n\nfrom model import *\nfrom lib.cuckoo.common.abstracts import Detection\nfrom lib.cuckoo.common.exceptions import CuckooDetectionError\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.utils.data import Dataset\nfrom torch.autograd import Variable\n\n\nclass MalConv(Detection):\n    \"\"\"\n    Providing the raw bytes from a file as input to a convolutional neural network\n    which then classifies the given binary as either malicious or benign\n    \"\"\"\n\n    def load_model(self):\n        '''\n        load model with pretrained_malconv.pth\n\n        :return: MalConv model\n        '''\n        try:\n            madel_path = os.path.join(CUCKOO_ROOT, \"data\", \"models\", \"MalConv\", \"pretrained_malconv.pth\")\n            model = PreMalConv()\n            model.load_state_dict(torch.load(madel_path, map_location='cpu'))\n        except:\n            raise CuckooDetectionError(\"The Detection module malconv has missing load_model!\")\n\n        return model\n\n    def run(self):\n        \"\"\"\n        Run extract of printable strings with Ngram into XGBoost model.\n\n        :return: predict 结果.\n        \"\"\"\n        self.key = \"MalConv\"\n        self.features_type = \"static\"\n        result = None\n\n\n        #if self.task[\"category\"] == \"file\":\n        \"\"\"\n            features not in json \n            if not os.path.exists(self.file_path):\n                raise CuckooDetectionError(\"Sample file doesn't exist: \\\"%s\\\"\" % self.file_path)\n\n            try:\n                data = open(self.file_path, \"r\").read()\n            except (IOError, OSError) as e:\n                raise CuckooDetectionError(\"Error opening file %s\" % e)\n        \"\"\"\n        # 导入报告内的特征\n        sample = self.binaries.load_binaries(self.file_path)\n        exe_input = torch.from_numpy(sample).unsqueeze(0)\n        exe_input = Variable(exe_input.long(), requires_grad=False)\n        # 导入模型（特征工程+预测模型）\n        model = self.load_model()\n        model.eval()\n        # 模型预测\n        result = model(exe_input)\n\n        return np.float(result.detach().cpu().numpy()[0,0])\n\n\nclass PreMalConv(nn.Module):\n    \"\"\"\n    Architecture implementation.\n    \"\"\"\n\n    def __init__(self, input_length=2 ** 20, window_size=500):\n        super(PreMalConv, self).__init__()\n\n        self.embedding_1 = nn.Embedding(257, 8, padding_idx=0)\n\n        self.conv1d_1 = nn.Conv1d(8, 128, window_size, stride=window_size, bias=True)\n        self.conv1d_2 = nn.Conv1d(8, 128, window_size, stride=window_size, bias=True)\n\n        self.pooling = nn.MaxPool1d(int(input_length / window_size))\n\n        self.dense_1 = nn.Linear(128, 128)\n        self.dense_2 = nn.Linear(128, 1)\n\n        self.sigmoid = nn.Sigmoid()\n\n    def forward(self, x):\n\n        x = self.embedding_1(x)\n        # Channel first\n        x = torch.transpose(x, -1, -2)\n\n        cnn_value = self.conv1d_1(x)\n        cnn_value = torch.relu(cnn_value)\n        gating_weight = self.sigmoid(self.conv1d_2(x))\n\n        x = cnn_value * gating_weight\n\n        global_max_pooling1d_1 = F.max_pool1d(input=x, kernel_size=x.size()[2:])\n        global_max_pooling1d_1_flatten = global_max_pooling1d_1.view(global_max_pooling1d_1.size(0), -1)\n\n        x = torch.relu(self.dense_1(global_max_pooling1d_1_flatten))\n        dense_1_activation = torch.relu(x)\n        dense_2 = self.dense_2(x)\n        dense_2_activation = torch.sigmoid(dense_2)\n\n        return dense_2_activation\n\n\nclass ExeDataset(Dataset):\n    '''\n    Dataset preparation\n    '''\n    def __init__(self, fp_list, data_path, label_list = None, first_n_byte=2000000):\n        \"\"\"\n            Dataset preparation\n\n            Parameters\n            ----------\n            fp_list : list\n                file name list\n            data_path : str\n                dataset path\n            label_list : list\n                label list\n            first_n_byte : int, optional, default 2000000\n                the max raw bytes\n        \"\"\"\n        self.fp_list = fp_list\n        self.data_path = data_path\n        self.label_list = label_list\n        self.first_n_byte = first_n_byte\n        # ToDo: 自动载入数据\n\n    def __len__(self):\n        \"\"\"\n        返回数据集item数\n        \"\"\"\n        return len(self.fp_list)\n\n    def __getitem__(self, idx):\n        \"\"\"\n        返回一条训练数据，并将其转换成tensor\n        \"\"\"\n        try:\n            with open(self.data_path + self.fp_list[idx],'rb') as f:\n                tmp = [i+1 for i in f.read()[:self.first_n_byte]] # index 0 will be special padding index 每个值加一\n                tmp = tmp+[0]*(self.first_n_byte-len(tmp))\n        except:\n            with open(self.data_path + self.fp_list[idx].lower(),'rb') as f:\n                tmp = [i+1 for i in f.read()[:self.first_n_byte]]\n                tmp = tmp+[0]*(self.first_n_byte-len(tmp))\n            return np.array(tmp), np.array([self.label_list[idx]])\n"
  },
  {
    "path": "modules/detection/model.py",
    "content": "# coding=utf-8\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Bold-Falcon - https://github.com/PowerLZY/Bold-Falcon\n# See the file 'docs/LICENSE' for copying permission.\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.utils.data import Dataset\n\nclass MalConv(nn.Module):\n\n\tdef __init__(self,input_length=2000000,window_size=500):\n\t\tsuper(MalConv, self).__init__()\n\n\t\tself.embed = nn.Embedding(257, 8, padding_idx=0)\n\n\t\tself.conv_1 = nn.Conv1d(4, 128, window_size, stride=window_size, bias=True)\n\t\tself.conv_2 = nn.Conv1d(4, 128, window_size, stride=window_size, bias=True)\n\n\t\tself.BatchNorm1d = nn.BatchNorm1d(128)\n\n\t\tself.pooling = nn.MaxPool1d(int(input_length/window_size))\n\n\t\tself.fc_1 = nn.Linear(128,128)\n\t\tself.fc_2 = nn.Linear(128,1)\n\n\t\t#self.BatchNorm1d = nn.BatchNorm1d(128)\n\n\t\tself.sigmoid = nn.Sigmoid()\n\n\t\t#self.softmax = nn.Softmax()\n\n\n\tdef forward(self,x):\n\t\tx = self.embed(x)\n\t\t# Channel first\n\t\tx = torch.transpose(x,-1,-2)\n\n\t\tcnn_value = self.conv_1(x.narrow(-2, 0, 4))\n\t\tcnn_value = self.BatchNorm1d(cnn_value)\n\t\tgating_weight = self.sigmoid(self.conv_2(x.narrow(-2, 4, 4)))\n\n\t\tx = cnn_value * gating_weight\n\t\tx = self.pooling(x)\n\n\t\tx = x.view(-1,128)\n\t\tx = self.fc_1(x)\n\t\tx = self.BatchNorm1d(x)\n\t\tx = self.fc_2(x)\n\t\t#x = self.sigmoid(x)\n\n\t\treturn x\n\nclass PreMalConv(nn.Module):\n\t\"\"\"\n\tArchitecture implementation.\n\n\n\tdef __init__(self, pretrained_path=None, embedding_size=8, max_input_size=2 ** 20):\n\t\tsuper(MalConv, self).__init__(embedding_size, max_input_size, 256, False)\n\t\tself.embedding_1 = nn.Embedding(num_embeddings=257, embedding_dim=embedding_size)\n\t\tself.conv1d_1 = nn.Conv1d(in_channels=embedding_size, out_channels=128, kernel_size=(500,), stride=(500,),\n\t\t\t\t\t\t\t\t  groups=1, bias=True)\n\t\tself.conv1d_2 = nn.Conv1d(in_channels=embedding_size, out_channels=128, kernel_size=(500,), stride=(500,),\n\t\t\t\t\t\t\t\t  groups=1, bias=True)\n\t\tself.dense_1 = nn.Linear(in_features=128, out_features=128, bias=True)\n\t\tself.dense_2 = nn.Linear(in_features=128, out_features=1, bias=True)\n\t\"\"\"\n\n\tdef __init__(self, input_length=2 ** 20, window_size=500):\n\t\tsuper(PreMalConv, self).__init__()\n\n\t\tself.embedding_1 = nn.Embedding(257, 8, padding_idx=0)\n\n\t\tself.conv1d_1 = nn.Conv1d(8, 128, window_size, stride=window_size, bias=True)\n\t\tself.conv1d_2 = nn.Conv1d(8, 128, window_size, stride=window_size, bias=True)\n\n\t\tself.pooling = nn.MaxPool1d(int(input_length / window_size))\n\n\t\tself.dense_1 = nn.Linear(128, 128)\n\t\tself.dense_2 = nn.Linear(128, 1)\n\n\t\tself.sigmoid = nn.Sigmoid()\n\n\n\n\tdef forward(self, x):\n\t\tx = self.embedding_1(x)\n\t\t# Channel first\n\t\tx = torch.transpose(x, -1, -2)\n\n\t\tcnn_value = self.conv1d_1(x)\n\t\tcnn_value = torch.relu(cnn_value)\n\t\tgating_weight = self.sigmoid(self.conv1d_2(x))\n\n\t\tx = cnn_value * gating_weight\n\n\t\tglobal_max_pooling1d_1 = F.max_pool1d(input=x, kernel_size=x.size()[2:])\n\t\tglobal_max_pooling1d_1_flatten = global_max_pooling1d_1.view(global_max_pooling1d_1.size(0), -1)\n\n\t\tx = torch.relu(self.dense_1(global_max_pooling1d_1_flatten))\n\t\tdense_1_activation = torch.relu(x)\n\t\tdense_2 = self.dense_2(x)\n\t\tdense_2_activation = torch.sigmoid(dense_2)\n\n\t\treturn dense_2_activation\n\n\nclass ExeDataset(Dataset):\n\t'''\n\tDataset preparation\n\t'''\n\tdef __init__(self, fp_list, data_path, label_list = None, first_n_byte=2000000):\n\t\tself.fp_list = fp_list\n\t\tself.data_path = data_path\n\t\tself.label_list = label_list\n\t\tself.first_n_byte = first_n_byte\n\t\t# ToDo: 自动载入数据\n\n\tdef __len__(self):\n\t\t\"\"\"\n\t\t返回数据集item数\n\t\t\"\"\"\n\t\treturn len(self.fp_list)\n\n\tdef __getitem__(self, idx):\n\t\t\"\"\"\n\t\t返回一条训练数据，并将其转换成tensor\n\t\t\"\"\"\n\t\ttry:\n\t\t\twith open(self.data_path + self.fp_list[idx],'rb') as f:\n\t\t\t\ttmp = [i+1 for i in f.read()[:self.first_n_byte]] # index 0 will be special padding index 每个值加一\n\t\t\t\ttmp = tmp+[0]*(self.first_n_byte-len(tmp))\n\t\texcept:\n\t\t\twith open(self.data_path + self.fp_list[idx].lower(),'rb') as f:\n\t\t\t\ttmp = [i+1 for i in f.read()[:self.first_n_byte]]\n\t\t\t\ttmp = tmp+[0]*(self.first_n_byte-len(tmp))\n\t\t\treturn np.array(tmp), np.array([self.label_list[idx]])\n\n"
  },
  {
    "path": "modules/detection/strings.py",
    "content": "# coding=utf-8\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Bold-Falcon - https://github.com/PowerLZY/Bold-Falcon\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os.path\nimport pickle\n\nfrom lib.cuckoo.common.abstracts import Detection\nfrom lib.cuckoo.common.exceptions import CuckooDetectionError\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\n\nimport numpy as np\nimport pandas as pd\nfrom xgboost import XGBClassifier\nfrom sklearn.externals import joblib\nfrom sklearn.feature_extraction.text import TfidfVectorizer\n\nclass Strings_ngram(Detection):\n    \"\"\"Use String features with TFIDF with XGBoost \"\"\"\n\n    def load_features(self, key):\n        \"\"\"\n        Input string into TFIDF model for processing\n\n        :return tfidf_features: processing results\n        \"\"\"\n        # The first stage is to load the data from the directory holding all the JSONs\n        # Then we extract all the relevant information from the loaded samples.\n        strings =' '.join(self.binaries.features[key])\n        try:\n            tfidf_features = self.vectorizer.fit_transform(strings)\n        except:\n            raise CuckooDetectionError(\"The Detection module strings_ngarm has missing load_features!\")\n\n        return tfidf_features\n\n    def load_model(self):\n        \"\"\"\n        load TFIDF and XBG model\n        \"\"\"\n        try:\n            vectorizer_pth = os.path.join(CUCKOO_ROOT, \"data\", \"models\", \"strings_ngram\", \"tfidf_model\")\n            self.vectorizer = pickle.load(open(vectorizer_pth, \"rb\"))\n\n            model_pth = os.path.join(CUCKOO_ROOT, \"data\", \"models\", \"strings_ngram\", \"XGB_model.pkl\")\n            self.XGBoost = joblib.load(open(model_pth, \"rb\"))\n        except:\n            raise CuckooDetectionError(\"The Detection module strings_ngarm has missing load_model!\")\n\n    def predict(self):\n        '''\n        predict results\n        '''\n        try:\n            y_pred = self.XGBoost.predict(self.tfidf_features)\n        except:\n            raise CuckooDetectionError(\"The Detection module strings_ngarm has missing predict!\")\n        return y_pred\n\n\n    def run(self):\n        \"\"\"\n        Run extract of printable strings with Ngram into XGBoost model.\n\n        :return: predict.\n        \"\"\"\n        self.key = \"strings_ngram\"\n        self.features_type = \"static\"\n        result = None\n\n        \"\"\"\n        if self.task[\"category\"] == \"file\":\n            features not in json \n            if not os.path.exists(self.file_path):\n                raise CuckooDetectionError(\"Sample file doesn't exist: \\\"%s\\\"\" % self.file_path)\n\n            try:\n                data = open(self.file_path, \"r\").read()\n            except (IOError, OSError) as e:\n                raise CuckooDetectionError(\"Error opening file %s\" % e)\n        \"\"\"\n        # 特征提取\n        self.binaries.feature_static_string()\n        # 导入模型（特征工程+预测模型）\n        self.load_model()\n        # 特征工程\n        tfidf_features = self.load_features(\"strings\")\n        # 模型预测\n        result = self.predict(tfidf_features)\n\n        return result\n\n"
  },
  {
    "path": "modules/machinery/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "modules/machinery/avd.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nimport logging\nimport os\nimport subprocess\nimport time\nimport shutil\nimport shlex\n\nfrom lib.cuckoo.common.abstracts import Machinery\nfrom lib.cuckoo.common.exceptions import CuckooCriticalError\nfrom lib.cuckoo.core.resultserver import ResultServer\n\nlog = logging.getLogger(__name__)\n\nclass Avd(Machinery):\n    \"\"\"Virtualization layer for Android Emulator.\"\"\"\n\n    def _initialize_check(self):\n        \"\"\"Runs all checks when a machine manager is initialized.\n        @raise CuckooMachineError: if the android emulator is not found.\n        \"\"\"\n        self.emulator_processes = {}\n\n        if not self.options.avd.emulator_path:\n            raise CuckooCriticalError(\"emulator path missing, \"\n                                      \"please add it to the config file\")\n\n        if not os.path.exists(self.options.avd.emulator_path):\n            raise CuckooCriticalError(\"emulator not found at \"\n                                      \"specified path \\\"%s\\\"\" %\n                                      self.options.avd.emulator_path)\n\n        if not self.options.avd.adb_path:\n            raise CuckooCriticalError(\"adb path missing, \"\n                                      \"please add it to the config file\")\n\n        if not os.path.exists(self.options.avd.adb_path):\n            raise CuckooCriticalError(\"adb not found at \"\n                                      \"specified path \\\"%s\\\"\" %\n                                      self.options.avd.adb_path)\n\n        if not self.options.avd.avd_path:\n            raise CuckooCriticalError(\"avd path missing, \"\n                                      \"please add it to the config file\")\n\n        if not os.path.exists(self.options.avd.avd_path):\n            raise CuckooCriticalError(\"avd not found at \"\n                                      \"specified path \\\"%s\\\"\" %\n                                      self.options.avd.avd_path)\n\n        if not self.options.avd.reference_machine:\n            raise CuckooCriticalError(\"reference machine path missing, \"\n                                      \"please add it to the config file\")\n\n        machine_path = os.path.join(self.options.avd.avd_path,\n                                    self.options.avd.reference_machine)\n        if not os.path.exists(\"%s.avd\" % machine_path) or \\\n                not os.path.exists(\"%s.ini\" % machine_path):\n            raise CuckooCriticalError(\"reference machine not found at \"\n                                      \"specified path \\\"%s\\\"\" % machine_path)\n\n    def start(self, label, task):\n        \"\"\"Start a virtual machine.\n        @param label: virtual machine name.\n        @param task: task object.\n        @raise CuckooMachineError: if unable to start.\n        \"\"\"\n        log.debug(\"Starting vm %s\" % label)\n\n        self.duplicate_reference_machine(label)\n        self.start_emulator(label, task)\n        self.port_forward(label)\n        self.start_agent(label)\n\n    def stop(self, label):\n        \"\"\"Stops a virtual machine.\n        @param label: virtual machine name.\n        @raise CuckooMachineError: if unable to stop.\n        \"\"\"\n        log.debug(\"Stopping vm %s\" % label)\n        self.stop_emulator(label)\n\n    def _list(self):\n        \"\"\"Lists virtual machines installed.\n        @return: virtual machine names list.\n        \"\"\"\n        return self.options.avd.machines\n\n    def _status(self, label):\n        \"\"\"Gets current status of a vm.\n        @param label: virtual machine name.\n        @return: status string.\n        \"\"\"\n        log.debug(\"Getting status for %s\" % label)\n\n    def duplicate_reference_machine(self, label):\n        \"\"\"Creates a new emulator based on a reference one.\"\"\"\n        reference_machine = self.options.avd.reference_machine\n        log.debug(\"Duplicate Reference Machine '{0}'.\".format(reference_machine))\n\n        # Clean/delete if new emulator already exists.\n        self.delete_old_emulator(label)\n\n        avd_config_file = os.path.join(self.options.avd.avd_path, reference_machine+\".ini\")\n        new_config_file = os.path.join(self.options.avd.avd_path, label+\".ini\")\n        reference_avd_path = os.path.join(self.options.avd.avd_path, reference_machine+\".avd/\")\n        new_avd_path = os.path.join(self.options.avd.avd_path, label+\".avd/\")\n        hw_qemu_config_file = os.path.join(new_avd_path, \"hardware-qemu.ini\")\n\n        # First we copy the template.\n        log.debug(\"Copy AVD reference config file '{0}' in '{1}'...\".format(avd_config_file, new_config_file))\n        shutil.copyfile(avd_config_file, new_config_file)\n\n        # Copy the internal files of the reference avd.\n        log.debug(\"Duplicate the AVD internal content from '{0}' in '{1}'...\".format(reference_avd_path, new_avd_path))\n        cmd = \"cp -R {0} {1}\".format(reference_avd_path, new_avd_path)\n        OSCommand.executeCommand(cmd)\n\n        # Than adapt the content of the copied files.\n        self.replace_content_in_file(new_config_file, reference_machine, label)\n        self.replace_content_in_file(hw_qemu_config_file, reference_machine, label)\n\n        # self.state = AVDEmulator.STATE_PREPARED\n        # todo:will see\n\n    def delete_old_emulator(self, label):\n        \"\"\"Deletes any trace of an emulator that would have the same name as\n        the one of the current emulator.\"\"\"\n        old_emulator_config_file = os.path.join(self.options.avd.avd_path,\n                                                \"%s.ini\" % label)\n\n        if os.path.exists(old_emulator_config_file):\n            log.debug(\"Deleting old emulator config file '{0}'\".format(old_emulator_config_file))\n            os.remove(old_emulator_config_file)\n\n        old_emulator_path = os.path.join(self.options.avd.avd_path, label+\".avd/\")\n        if os.path.isdir(old_emulator_path):\n            log.debug(\"Deleting old emulator FS '{0}'\".format(old_emulator_path))\n            shutil.rmtree(old_emulator_path)\n\n    def replace_content_in_file(self, fileName, contentToReplace, replacementContent):\n        \"\"\"Replaces the specified motif by a specified value in the specified\n        file.\n        \"\"\"\n\n        log.debug(\"Replacing '{0}' with '{1}' in '{2}'\".format(contentToReplace, replacementContent, fileName))\n        newLines = []\n        with open(fileName, 'r') as fd:\n            lines = fd.readlines()\n            for line in lines:\n                newLines.append(line.replace(contentToReplace, replacementContent))\n\n        with open(fileName, 'w') as fd:\n            fd.writelines(newLines)\n\n    def start_emulator(self, label, task):\n        \"\"\"Starts the emulator.\"\"\"\n        emulator_port = self.options.get(label)[\"emulator_port\"]\n\n        cmd = [\n            self.options.avd.emulator_path,\n            \"@%s\" % label,\n            \"-no-snapshot-save\",\n            \"-netspeed\",\n            \"full\",\n            \"-netdelay\",\n            \"none\",\n            \"-port\",\n            \"%s\" % emulator_port,\n            \"-tcpdump\",\n            self.pcap_path(task.id),\n        ]\n\n        # In headless mode we remove the skin, audio, and window support.\n        if self.options.avd.mode == \"headless\":\n            cmd += [\"-no-skin\", \"-no-audio\", \"-no-window\"]\n\n        # If a proxy address has been provided for this analysis, then we have\n        # to pass the proxy address along to the emulator command. The\n        # mitmproxy instance is not located at the resultserver's IP address\n        # though, so we manually replace the IP address by localhost.\n        if \"proxy\" in task.options:\n            _, port = task.options[\"proxy\"].split(\":\")\n            cmd += [\"-http-proxy\", \"http://127.0.0.1:%s\" % port]\n\n        self.emulator_processes[label] = OSCommand.executeAsyncCommand(cmd)\n        time.sleep(10)\n        # if not self.__checkADBRecognizeEmu(label):\n        self.restart_adb_server()\n        # Waits for device to be ready.\n        self.wait_for_device_ready(label)\n\n    def stop_emulator(self, label):\n        \"\"\"Stop the emulator.\"\"\"\n        emulator_port = str(self.options.get(label)[\"emulator_port\"])\n        log.info(\"Stopping AVD listening on port {0}\".format(emulator_port))\n\n        # Kill process.\n        cmd = [\n            self.options.avd.adb_path,\n            \"-s\", \"emulator-%s\" % emulator_port,\n            \"emu\", \"kill\",\n        ]\n        OSCommand.executeCommand(cmd)\n\n        time.sleep(1)\n        if label in self.emulator_processes:\n            try:\n                self.emulator_processes[label].kill()\n            except Exception as e:\n                log.warning(e)\n\n            del self.emulator_processes[label]\n\n    def wait_for_device_ready(self, label):\n        \"\"\"Analyzes the emulator and returns when it's ready.\"\"\"\n\n        emulator_port = str(self.options.get(label)[\"emulator_port\"])\n        adb = self.options.avd.adb_path\n\n        log.debug(\"Waiting for device emulator-\"+emulator_port+\" to be ready.\")\n        cmd = [\n            adb,\n            \"-s\", \"emulator-%s\" % emulator_port,\n            \"wait-for-device\",\n        ]\n        OSCommand.executeCommand(cmd)\n\n        log.debug(\"Waiting for the emulator to be ready\")\n        log.debug(\" - (dev.bootcomplete)\")\n        ready = False\n        while not ready:\n            cmd = [\n                adb,\n                \"-s\", \"emulator-%s\" % emulator_port,\n                \"shell\", \"getprop\", \"dev.bootcomplete\",\n            ]\n            result = OSCommand.executeCommand(cmd)\n            if result is not None and result.strip() == \"1\":\n                ready = True\n            else:\n                time.sleep(1)\n\n        log.debug(\"- (sys_bootcomplete)\")\n        ready = False\n        while not ready:\n            cmd = [\n                adb,\n                \"-s\", \"emulator-%s\" % emulator_port,\n                \"shell\", \"getprop\", \"sys.boot_completed\",\n            ]\n            result = OSCommand.executeCommand(cmd)\n            if result is not None and result.strip() == \"1\":\n                ready = True\n            else:\n                time.sleep(1)\n\n        log.debug(\" - (init.svc.bootanim)\")\n        ready = False\n        while not ready:\n            cmd = [\n                adb,\n                \"-s\", \"emulator-%s\" % emulator_port,\n                \"shell\", \"getprop\", \"init.svc.bootanim\",\n            ]\n            result = OSCommand.executeCommand(cmd)\n            if result is not None and result.strip() == \"stopped\":\n                ready = True\n            else:\n                time.sleep(1)\n\n        time.sleep(5)\n        log.debug(\"Emulator emulator-\"+emulator_port+\" is ready !\")\n\n    def port_forward(self, label):\n        cmd = [\n            self.options.avd.adb_path,\n            \"-s\", \"emulator-%s\" % self.options.get(label)[\"emulator_port\"],\n            \"forward\", \"tcp:8000\", \"tcp:8000\",\n        ]\n        OSCommand.executeAsyncCommand(cmd)\n\n    def start_agent(self, label):\n        cmd = [\n            self.options.avd.adb_path,\n            \"-s\", \"emulator-%s\" % self.options.get(label)[\"emulator_port\"],\n            \"shell\", \"/data/local/agent.sh\",\n        ]\n        OSCommand.executeAsyncCommand(cmd)\n\n    def check_adb_recognize_emulator(self, label):\n        \"\"\"Checks that ADB recognizes the emulator. Returns True if device is\n        recognized by ADB, False otherwise.\n        \"\"\"\n        log.debug(\"Checking if ADB recognizes emulator...\")\n\n        cmd = [self.options.avd.adb_path, \"devices\"]\n        output = OSCommand.executeCommand(cmd)\n\n        emu = \"emulator-%s\" % self.options.get(label)[\"emulator_port\"]\n        if emu in output:\n            log.debug(\"Emulator has been found!\")\n            return True\n\n        log.debug(\"Emulator has not been found.\")\n        return False\n\n    def restart_adb_server(self):\n        \"\"\"Restarts ADB server. This function is not used because we have to\n        verify we don't have multiple devices.\n        \"\"\"\n        log.debug(\"Restarting ADB server...\")\n\n        cmd = [self.options.avd.adb_path, \"kill-server\"]\n        OSCommand.executeCommand(cmd)\n        log.debug(\"ADB server has been killed.\")\n\n        cmd = [self.options.avd.adb_path, \"start-server\"]\n        OSCommand.executeCommand(cmd)\n        log.debug(\"ADB server has been restarted.\")\n\n    def get_task_id(self, label):\n        analysistasks = ResultServer().analysistasks\n        for task_ip in analysistasks:\n            if analysistasks[task_ip][1].label is label:\n                return analysistasks[task_ip][0].id\n\n        return None\n\nclass OSCommand(object):\n    \"\"\"Tool class that provides common methods to execute commands on the OS.\"\"\"\n\n    @staticmethod\n    def executeAsyncCommand(commandAndArgs):\n        return subprocess.Popen(commandAndArgs, stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n\n    @staticmethod\n    def executeCommand(commandAndArgs):\n        if isinstance(commandAndArgs, str):\n            commandAndArgs = shlex.split(commandAndArgs)\n\n        try:\n            return subprocess.check_output(commandAndArgs, stderr=subprocess.STDOUT)\n        except Exception:\n            return None\n"
  },
  {
    "path": "modules/machinery/esx.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2013 Christopher Schmitt <cschmitt@tankbusta.net>\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport libvirt\n\nfrom lib.cuckoo.common.abstracts import LibVirtMachinery\nfrom lib.cuckoo.common.exceptions import CuckooCriticalError\nfrom lib.cuckoo.common.exceptions import CuckooMachineError\n\nclass ESX(LibVirtMachinery):\n    \"\"\"Virtualization layer for ESXi/ESX based on python-libvirt.\"\"\"\n\n    def _initialize_check(self):\n        \"\"\"Runs all checks when a machine manager is initialized.\n        @raise CuckooMachineError: if configuration is invalid\n        \"\"\"\n        if not self.options.esx.dsn:\n            raise CuckooMachineError(\"ESX(i) DSN is missing, please add it to the config file\")\n        if not self.options.esx.username:\n            raise CuckooMachineError(\"ESX(i) username is missing, please add it to the config file\")\n        if not self.options.esx.password:\n            raise CuckooMachineError(\"ESX(i) password is missing, please add it to the config file\")\n\n        self.dsn = self.options.esx.dsn\n        self.global_conn = self._global_connect()\n        super(ESX, self)._initialize_check()\n\n    def _auth_callback(self, credentials, user_data):\n        for credential in credentials:\n            if credential[0] == libvirt.VIR_CRED_AUTHNAME:\n                credential[4] = self.options.esx.username\n            elif credential[0] == libvirt.VIR_CRED_NOECHOPROMPT:\n                credential[4] = self.options.esx.password\n            else:\n                raise CuckooCriticalError(\"ESX machinery did not recieve an object to inject a username or password into\")\n\n        return 0\n\n    def _connect(self):\n        \"\"\"Return the already-connected single connection handle if set, otherwise set it.\"\"\"\n        if self.global_conn is None:\n            self.global_conn = self._global_connect()\n        return self.global_conn\n\n    def _global_connect(self):\n        \"\"\"Set the single connection handle.\"\"\"\n        try:\n            self.auth = [[libvirt.VIR_CRED_AUTHNAME, libvirt.VIR_CRED_NOECHOPROMPT], self._auth_callback, None]\n            return libvirt.openAuth(self.dsn, self.auth, 0)\n        except libvirt.libvirtError as libvex:\n            raise CuckooCriticalError(\"libvirt returned an exception on connection: %s\" % libvex)\n\n    def _disconnect(self, conn):\n        \"\"\"Using one global connection we now disconnect in the destructor, ignore requests to disconnect.\"\"\"\n        pass\n\n    def __del__(self):\n        self.global_conn.close()\n"
  },
  {
    "path": "modules/machinery/kvm.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom lib.cuckoo.common.abstracts import LibVirtMachinery\n\nclass KVM(LibVirtMachinery):\n    \"\"\"Virtualization layer for KVM based on python-libvirt.\"\"\"\n\n    # Set KVM connection string.\n    dsn = \"qemu:///system\"\n"
  },
  {
    "path": "modules/machinery/physical.py",
    "content": "# Copyright (C) 2012-2014 The MITRE Corporation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport socket\nimport logging\nimport xmlrpclib\nimport subprocess\n\nlog = logging.getLogger(__name__)\n\ntry:\n    import bs4\n    import requests\n    import wakeonlan.wol\n    HAVE_FOG = True\nexcept ImportError:\n    HAVE_FOG = False\n    log.critical(\n        \"The bs4, requests, and wakeonlan Python libraries are required for \"\n        \"proper FOG integration with Cuckoo (please install them through \"\n        \"`pip install bs4 requests wakeonlan`).\"\n    )\n\nfrom lib.cuckoo.common.abstracts import Machinery\nfrom lib.cuckoo.common.constants import CUCKOO_GUEST_PORT\nfrom lib.cuckoo.common.exceptions import CuckooCriticalError\nfrom lib.cuckoo.common.exceptions import CuckooMachineError\nfrom lib.cuckoo.common.utils import TimeoutServer\n\nclass Physical(Machinery):\n    \"\"\"Manage physical sandboxes.\"\"\"\n\n    # Physical machine states.\n    RUNNING = \"running\"\n    STOPPED = \"stopped\"\n    ERROR = \"error\"\n\n    def _initialize_check(self):\n        \"\"\"Ensures that credentials have been entered into the config file.\n        @raise CuckooCriticalError: if no credentials were provided or if\n            one or more physical machines are offline.\n        \"\"\"\n        # TODO This should be moved to a per-machine thing.\n        if not self.options.physical.user or not self.options.physical.password:\n            raise CuckooCriticalError(\n                \"Physical machine credentials are missing, please add it to \"\n                \"the Physical machinery configuration file.\"\n            )\n\n        self.fog_init()\n\n        for machine in self.machines():\n            status = self._status(machine.label)\n            if status == self.STOPPED:\n                # Send a Wake On Lan message (if we're using FOG).\n                self.wake_on_lan(machine.label)\n            elif status == self.ERROR:\n                raise CuckooMachineError(\n                    \"Unknown error occurred trying to obtain the status of \"\n                    \"physical machine %s. Please turn it on and check the \"\n                    \"Cuckoo Agent.\" % machine.label\n                )\n\n    def _get_machine(self, label):\n        \"\"\"Retrieve all machine info given a machine's name.\n        @param label: machine name.\n        @return: machine dictionary (id, ip, platform, ...).\n        @raises CuckooMachineError: if no machine is available with the given label.\n        \"\"\"\n        for m in self.machines():\n            if label == m.label:\n                return m\n\n        raise CuckooMachineError(\"No machine with label: %s.\" % label)\n\n    def start(self, label, task):\n        \"\"\"Start a physical machine.\n        @param label: physical machine name.\n        @param task: task object.\n        @raise CuckooMachineError: if unable to start.\n        \"\"\"\n        # Check to ensure a given machine is running\n        log.debug(\"Checking if machine %r is running.\", label)\n        status = self._status(label)\n        if status == self.RUNNING:\n            log.debug(\"Machine already running: %s.\", label)\n        elif status == self.STOPPED:\n            self._wait_status(label, self.RUNNING)\n        else:\n            raise CuckooMachineError(\"Error occurred while starting: \"\n                                     \"%s (STATUS=%s)\" % (label, status))\n\n    def stop(self, label):\n        \"\"\"Stops a physical machine.\n        @param label: physical machine name.\n        @raise CuckooMachineError: if unable to stop.\n        \"\"\"\n        # Since we are 'stopping' a physical machine, it must\n        # actually be rebooted to kick off the re-imaging process.\n        creds = \"%s%%%s\" % (\n            self.options.physical.user, self.options.physical.password\n        )\n\n        if self._status(label) == self.RUNNING:\n            log.debug(\"Rebooting machine: %s.\", label)\n            machine = self._get_machine(label)\n\n            args = [\n                \"net\", \"rpc\", \"shutdown\", \"-I\", machine.ip,\n                \"-U\", creds, \"-r\", \"-f\", \"--timeout=5\"\n            ]\n            output = subprocess.check_output(args)\n\n            if \"Shutdown of remote machine succeeded\" not in output:\n                raise CuckooMachineError(\"Unable to initiate RPC request\")\n            else:\n                log.debug(\"Reboot success: %s.\" % label)\n\n            # Deploy a clean image through FOG, assuming we're using FOG.\n            self.fog_queue_task(label)\n\n    def _list(self):\n        \"\"\"Lists physical machines installed.\n        @return: physical machine names list.\n        \"\"\"\n        active_machines = []\n        for machine in self.machines():\n            if self._status(machine.label) == self.RUNNING:\n                active_machines.append(machine.label)\n\n        return active_machines\n\n    def _status(self, label):\n        \"\"\"Gets current status of a physical machine.\n        @param label: physical machine name.\n        @return: status string.\n        \"\"\"\n        # For physical machines, the agent can either be contacted or not.\n        # However, there is some information to be garnered from potential\n        # exceptions.\n        log.debug(\"Getting status for machine: %s.\", label)\n        machine = self._get_machine(label)\n\n        # The status is only used to determine whether the Guest is running\n        # or whether it is in a stopped status, therefore the timeout can most\n        # likely be fairly arbitrary. TODO This is a temporary fix as it is\n        # not compatible with the new Cuckoo Agent, but it will have to do.\n        url = \"http://{0}:{1}\".format(machine.ip, CUCKOO_GUEST_PORT)\n        server = TimeoutServer(url, allow_none=True, timeout=60)\n\n        try:\n            status = server.get_status()\n        except xmlrpclib.Fault as e:\n            # Contacted Agent, but it threw an error.\n            log.debug(\"Agent error: %s (%s) (Error: %s).\",\n                      machine.id, machine.ip, e)\n            return self.ERROR\n        except socket.error as e:\n            # Could not contact agent.\n            log.debug(\"Agent unresponsive: %s (%s) (Error: %s).\",\n                      machine.id, machine.ip, e)\n            return self.STOPPED\n        except Exception as e:\n            # TODO Handle this better.\n            log.debug(\"Received unknown exception: %s.\", e)\n            return self.ERROR\n\n        # If the agent responded successfully, then the physical machine\n        # is running\n        if status:\n            return self.RUNNING\n\n        return self.ERROR\n\n    def fog_query(self, uri, data={}):\n        \"\"\"Wrapper around requests for simplifying FOG API access. Assuming\n        you can call what FOG is providing an API.\"\"\"\n        url = \"http://%s/fog/management/index.php?%s\" % (\n            self.options.fog.hostname, uri,\n        )\n\n        data.update({\n            \"uname\": self.options.fog.username,\n            \"upass\": self.options.fog.password,\n        })\n\n        return requests.post(url, data=data)\n\n    def fog_init(self):\n        \"\"\"Initiate by indexing FOG regarding all available machines.\"\"\"\n        self.fog_machines = {}\n        if not HAVE_FOG or self.options.fog.hostname == \"none\":\n            return\n\n        # TODO Handle exceptions such as not being able to connect.\n        r = self.fog_query(\"node=tasks&sub=listhosts\")\n\n        # Parse the HTML.\n        b = bs4.BeautifulSoup(r.content, \"html.parser\")\n        if not b.find_all(\"table\"):\n            raise CuckooCriticalError(\n                \"The supplied FOG username and/or password do not allow us \"\n                \"to login into FOG, please configure the correct credentials.\"\n            )\n\n        # Mapping for physical machine hostnames to their mac address and uri\n        # for \"downloading\" a safe image onto the host. Great piece of FOG API\n        # usage here.\n        for row in b.find_all(\"table\")[0].find_all(\"tr\")[1:]:\n            hostname, macaddr, download, upload, advanced = row.find_all(\"td\")\n            self.fog_machines[hostname.text] = (\n                macaddr.text, next(download.children).attrs[\"href\"][1:],\n            )\n\n        # Check whether all our machines are available on FOG.\n        for machine in self.machines():\n            if machine.label not in self.fog_machines:\n                raise CuckooMachineError(\n                    \"The physical machine %s has not been defined in FOG, \"\n                    \"please investigate and configure the configuration \"\n                    \"correctly.\" % machine.label\n                )\n\n    def fog_queue_task(self, hostname):\n        \"\"\"Queues a task with FOG to deploy the given machine after reboot.\"\"\"\n        if hostname in self.fog_machines:\n            macaddr, download = self.fog_machines[hostname]\n            self.fog_query(download)\n\n    def wake_on_lan(self, hostname):\n        \"\"\"Start a machine that's currently shutdown.\"\"\"\n        if hostname in self.fog_machines:\n            macaddr, download = self.fog_machines[hostname]\n            wakeonlan.wol.send_magic_packet(macaddr)\n"
  },
  {
    "path": "modules/machinery/qemu.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport time\nimport logging\nimport subprocess\nimport os.path\n\nfrom lib.cuckoo.common.abstracts import Machinery\nfrom lib.cuckoo.common.exceptions import CuckooCriticalError\nfrom lib.cuckoo.common.exceptions import CuckooMachineError\n\nlog = logging.getLogger(__name__)\n\n# this whole semi-hardcoded commandline thing is not the best\n#  but in the config files we can't do arrays etc so we'd have to parse the\n#  configured commandlines somehow and then fill in some more things\n#  anyways, if someone has a cleaner suggestion for this, let me know\n#  -> for now, just modify this to your needs\nQEMU_ARGS = {\n    \"default\": {\n        \"cmdline\": [\"qemu-system-x86_64\", \"-display\", \"none\"],\n        \"params\": {\n            \"memory\": \"512M\",\n            \"mac\": \"52:54:00:12:34:56\",\n            \"kernel\": \"{imagepath}/vmlinuz\",\n        },\n    },\n    \"mipsel\": {\n        \"cmdline\": [\n            \"qemu-system-mipsel\", \"-display\", \"none\", \"-M\", \"malta\", \"-m\", \"{memory}\",\n            \"-kernel\", \"{kernel}\",\n            \"-hda\", \"{snapshot_path}\",\n            \"-append\", \"root=/dev/sda1 console=tty0\",\n            \"-netdev\", \"tap,id=net_{vmname},ifname=tap_{vmname}\",\n            \"-device\", \"e1000,netdev=net_{vmname},mac={mac}\",  # virtio-net-pci doesn't work here\n        ],\n        \"params\": {\n            \"kernel\": \"{imagepath}/vmlinux-3.2.0-4-4kc-malta-mipsel\",\n        }\n    },\n    \"mips\": {\n        \"cmdline\": [\n            \"qemu-system-mips\", \"-display\", \"none\", \"-M\", \"malta\", \"-m\", \"{memory}\",\n            \"-kernel\", \"{kernel}\",\n            \"-hda\", \"{snapshot_path}\",\n            \"-append\", \"root=/dev/sda1 console=tty0\",\n            \"-netdev\", \"tap,id=net_{vmname},ifname=tap_{vmname}\",\n            \"-device\", \"e1000,netdev=net_{vmname},mac={mac}\",  # virtio-net-pci doesn't work here\n        ],\n        \"params\": {\n            \"kernel\": \"{imagepath}/vmlinux-3.2.0-4-4kc-malta-mips\",\n        }\n    },\n    \"armwrt\": {\n        \"cmdline\": [\n            \"qemu-system-arm\", \"-display\", \"none\", \"-M\", \"realview-eb-mpcore\", \"-m\", \"{memory}\",\n            \"-kernel\", \"{kernel}\",\n            \"-drive\", \"if=sd,cache=unsafe,file={snapshot_path}\",\n            \"-append\", \"console=ttyAMA0 root=/dev/mmcblk0 rootwait\",\n            \"-net\", \"tap,ifname=tap_{vmname}\", \"-net\", \"nic,macaddr={mac}\",  # this by default needs /etc/qemu-ifup to add the tap to the bridge, slightly awkward\n        ],\n        \"params\": {\n            \"kernel\": \"{imagepath}/openwrt-realview-vmlinux.elf\",\n        }\n    },\n    \"arm\": {\n        \"cmdline\": [\n            \"qemu-system-arm\", \"-display\", \"none\", \"-M\", \"versatilepb\", \"-m\", \"{memory}\",\n            \"-kernel\", \"{kernel}\", \"-initrd\", \"{initrd}\",\n            \"-hda\", \"{snapshot_path}\",\n            \"-append\", \"root=/dev/sda1\",\n            \"-net\", \"tap,ifname=tap_{vmname}\", \"-net\", \"nic,macaddr={mac}\",  # this by default needs /etc/qemu-ifup to add the tap to the bridge, slightly awkward\n        ],\n        \"params\": {\n            \"memory\": \"256M\",  # 512 didn't work for some reason\n            \"kernel\": \"{imagepath}/vmlinuz-3.2.0-4-versatile-arm\",\n            \"initrd\": \"{imagepath}/initrd-3.2.0-4-versatile-arm\",\n        }\n    },\n    \"x64\": {\n        \"cmdline\": [\n            \"qemu-system-x86_64\", \"-display\", \"none\", \"-m\", \"{memory}\",\n            \"-hda\", \"{snapshot_path}\",\n            \"-net\", \"tap,ifname=tap_{vmname}\", \"-net\", \"nic,macaddr={mac}\",  # this by default needs /etc/qemu-ifup to add the tap to the bridge, slightly awkward\n        ],\n        \"params\": {\n            \"memory\": \"1024M\",\n        }\n    },\n}\n\nclass QEMU(Machinery):\n    \"\"\"Virtualization layer for QEMU (non-KVM).\"\"\"\n\n    # VM states.\n    RUNNING = \"running\"\n    STOPPED = \"stopped\"\n    ERROR = \"machete\"\n\n    def __init__(self):\n        super(QEMU, self).__init__()\n        self.state = {}\n\n    def _initialize_check(self):\n        \"\"\"Runs all checks when a machine manager is initialized.\n        @raise CuckooMachineError: if QEMU binary is not found.\n        \"\"\"\n        # VirtualBox specific checks.\n        if not self.options.qemu.path:\n            raise CuckooCriticalError(\"QEMU binary path missing, \"\n                                      \"please add it to the config file\")\n        if not os.path.exists(self.options.qemu.path):\n            raise CuckooCriticalError(\"QEMU binary not found at \"\n                                      \"specified path \\\"%s\\\"\" %\n                                      self.options.qemu.path)\n\n        self.qemu_dir = os.path.dirname(self.options.qemu.path)\n        self.qemu_img = os.path.join(self.qemu_dir, \"qemu-img\")\n\n    def start(self, label, task):\n        \"\"\"Start a virtual machine.\n        @param label: virtual machine label.\n        @param task: task object.\n        @raise CuckooMachineError: if unable to start.\n        \"\"\"\n        log.debug(\"Starting vm %s\" % label)\n\n        vm_info = self.db.view_machine_by_label(label)\n        vm_options = getattr(self.options, vm_info.name)\n\n        snapshot_path = os.path.join(os.path.dirname(vm_options.image), vm_info.name) + \".qcow2\"\n        if os.path.exists(snapshot_path):\n            os.remove(snapshot_path)\n\n        # make sure we use a new harddisk layer by creating a new qcow2 with backing file\n        try:\n            proc = subprocess.Popen([self.qemu_img, \"create\", \"-f\", \"qcow2\", \"-b\", vm_options.image, snapshot_path],\n                                    stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n            output, err = proc.communicate()\n            if err:\n                raise OSError(err)\n        except OSError as e:\n            raise CuckooMachineError(\"QEMU failed starting the machine: %s\" % e)\n\n        vm_arch = getattr(vm_options, \"arch\", \"default\")\n        arch_config = dict(QEMU_ARGS[vm_arch])\n        cmdline = arch_config[\"cmdline\"]\n        params = dict(QEMU_ARGS[\"default\"][\"params\"])\n        params.update(QEMU_ARGS[vm_arch][\"params\"])\n\n        params.update({\n            \"imagepath\": os.path.dirname(vm_options.image),\n            \"snapshot_path\": snapshot_path,\n            \"vmname\": vm_info.name,\n        })\n\n        # allow some overrides from the vm specific options\n        # also do another round of parameter formatting\n        for var in [\"mac\", \"kernel\", \"initrd\"]:\n            val = getattr(vm_options, var, params.get(var, None))\n            if not val:\n                continue\n            params[var] = val.format(**params)\n\n        # magic arg building\n        final_cmdline = [i.format(**params) for i in cmdline]\n\n        log.debug(\"Executing QEMU %r\", final_cmdline)\n\n        try:\n            proc = subprocess.Popen(final_cmdline, stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n            self.state[vm_info.name] = proc\n        except OSError as e:\n            raise CuckooMachineError(\"QEMU failed starting the machine: %s\" % e)\n\n    def stop(self, label):\n        \"\"\"Stops a virtual machine.\n        @param label: virtual machine label.\n        @raise CuckooMachineError: if unable to stop.\n        \"\"\"\n        log.debug(\"Stopping vm %s\" % label)\n\n        vm_info = self.db.view_machine_by_label(label)\n\n        if self._status(vm_info.name) == self.STOPPED:\n            raise CuckooMachineError(\"Trying to stop an already stopped vm %s\" % label)\n\n        proc = self.state.get(vm_info.name, None)\n        proc.kill()\n\n        stop_me = 0\n        while proc.poll() is None:\n            if stop_me < int(self.options_globals.timeouts.vm_state):\n                time.sleep(1)\n                stop_me += 1\n            else:\n                log.debug(\"Stopping vm %s timeouted. Killing\" % label)\n                proc.terminate()\n                time.sleep(1)\n\n        # if proc.returncode != 0 and stop_me < int(self.options_globals.timeouts.vm_state):\n        #     log.debug(\"QEMU exited with error powering off the machine\")\n\n        self.state[vm_info.name] = None\n\n    def _status(self, name):\n        \"\"\"Gets current status of a vm.\n        @param name: virtual machine name.\n        @return: status string.\n        \"\"\"\n        p = self.state.get(name, None)\n        if p is not None:\n            return self.RUNNING\n        return self.STOPPED\n"
  },
  {
    "path": "modules/machinery/virtualbox.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport re\nimport time\nimport logging\nimport subprocess\nimport os.path\n\nfrom lib.cuckoo.common.abstracts import Machinery\nfrom lib.cuckoo.common.exceptions import CuckooCriticalError\nfrom lib.cuckoo.common.exceptions import CuckooMachineError\n\nlog = logging.getLogger(__name__)\n\nclass VirtualBox(Machinery):\n    \"\"\"Virtualization layer for VirtualBox.\"\"\"\n\n    # VM states.\n    SAVED = \"saved\"\n    RUNNING = \"running\"\n    POWEROFF = \"poweroff\"\n    ABORTED = \"aborted\"\n    ERROR = \"machete\"\n\n    def _initialize_check(self):\n        \"\"\"\n        Runs all checks when a machine manager is initialized.\n\n        :raise CuckooMachineError: if VBoxManage is not found.\n        \"\"\"\n        # VirtualBox specific checks.\n        if not self.options.virtualbox.path:\n            raise CuckooCriticalError(\"VirtualBox VBoxManage path missing, \"\n                                      \"please add it to the config file\")\n        if not os.path.exists(self.options.virtualbox.path):\n            raise CuckooCriticalError(\"VirtualBox VBoxManage not found at \"\n                                      \"specified path \\\"%s\\\"\" %\n                                      self.options.virtualbox.path)\n\n        # Base checks.\n        super(VirtualBox, self)._initialize_check()\n\n    def start(self, label, task):\n        \"\"\"\n        Start a virtual machine.\n\n        :param label: virtual machine name.\n        :param task: task object.\n        :raise CuckooMachineError: if unable to start.\n        \"\"\"\n        log.debug(\"Starting vm %s\" % label)\n\n        if self._status(label) == self.RUNNING:\n            raise CuckooMachineError(\"Trying to start an already \"\n                                     \"started vm %s\" % label)\n\n        machine = self.db.view_machine_by_label(label)\n        virtualbox_args = [self.options.virtualbox.path, \"snapshot\", label]\n        if machine.snapshot:\n            log.debug(\"Using snapshot {0} for virtual machine \"\n                      \"{1}\".format(machine.snapshot, label))\n            virtualbox_args.extend([\"restore\", machine.snapshot])\n        else:\n            log.debug(\"Using current snapshot for virtual machine \"\n                      \"{0}\".format(label))\n            virtualbox_args.extend([\"restorecurrent\"])\n\n        try:\n            if subprocess.call(virtualbox_args,\n                               stdout=subprocess.PIPE,\n                               stderr=subprocess.PIPE,\n                               close_fds=True):\n                raise CuckooMachineError(\"VBoxManage exited with error \"\n                                         \"restoring the machine's snapshot\")\n        except OSError as e:\n            raise CuckooMachineError(\"VBoxManage failed restoring the \"\n                                     \"machine: %s\" % e)\n\n        self._wait_status(label, self.SAVED)\n\n        try:\n            proc = subprocess.Popen([self.options.virtualbox.path,\n                                     \"startvm\",\n                                     label,\n                                     \"--type\",\n                                     self.options.virtualbox.mode],\n                                    stdout=subprocess.PIPE,\n                                    stderr=subprocess.PIPE,\n                                    close_fds=True)\n            output, err = proc.communicate()\n            if err:\n                raise OSError(err)\n        except OSError as e:\n            raise CuckooMachineError(\"VBoxManage failed starting the machine \"\n                                     \"in %s mode: %s\" %\n                                     (self.options.virtualbox.mode.upper(), e))\n\n        self._wait_status(label, self.RUNNING)\n\n        # Handle network dumping through the internal VirtualBox functionality.\n        if \"nictrace\" in machine.options:\n            self.dump_pcap(label, task)\n\n    def dump_pcap(self, label, task):\n        \"\"\"Dump the pcap for this analysis through the VirtualBox integrated\n        nictrace functionality. This is useful in scenarios where multiple\n        Virtual Machines are talking with each other in the same subnet (which\n        you normally don't see when tcpdump'ing on the gatway).\"\"\"\n        try:\n            args = [\n                self.options.virtualbox.path,\n                \"controlvm\", label,\n                \"nictracefile1\", self.pcap_path(task.id),\n            ]\n            subprocess.check_call(args)\n        except subprocess.CalledProcessError as e:\n            log.critical(\"Unable to set NIC tracefile (pcap file): %s\", e)\n            return\n\n        try:\n            args = [\n                self.options.virtualbox.path,\n                \"controlvm\", label,\n                \"nictrace1\", \"on\",\n            ]\n            subprocess.check_call(args)\n        except subprocess.CalledProcessError as e:\n            log.critical(\"Unable to enable NIC tracing (pcap file): %s\", e)\n            return\n\n    def stop(self, label):\n        \"\"\"Stops a virtual machine.\n\n        :param label: virtual machine name.\n        :raise CuckooMachineError: if unable to stop.\n        \"\"\"\n        log.debug(\"Stopping vm %s\" % label)\n\n        if self._status(label) in [self.POWEROFF, self.ABORTED]:\n            raise CuckooMachineError(\"Trying to stop an already stopped \"\n                                     \"vm %s\" % label)\n\n        try:\n            proc = subprocess.Popen([self.options.virtualbox.path,\n                                     \"controlvm\", label, \"poweroff\"],\n                                    stdout=subprocess.PIPE,\n                                    stderr=subprocess.PIPE,\n                                    close_fds=True)\n            # Sometimes VBoxManage stucks when stopping vm so we needed\n            # to add a timeout and kill it after that.\n            stop_me = 0\n            while proc.poll() is None:\n                if stop_me < int(self.options_globals.timeouts.vm_state):\n                    time.sleep(1)\n                    stop_me += 1\n                else:\n                    log.debug(\"Stopping vm %s timeouted. Killing\" % label)\n                    proc.terminate()\n\n            if proc.returncode != 0 and \\\n                    stop_me < int(self.options_globals.timeouts.vm_state):\n                log.debug(\"VBoxManage exited with error \"\n                          \"powering off the machine\")\n        except OSError as e:\n            raise CuckooMachineError(\"VBoxManage failed powering off the \"\n                                     \"machine: %s\" % e)\n        self._wait_status(label, [self.POWEROFF, self.ABORTED, self.SAVED])\n\n    def _list(self):\n        \"\"\"Lists virtual machines installed.\n\n        :return: virtual machine names list.\n        \"\"\"\n        try:\n            proc = subprocess.Popen([self.options.virtualbox.path,\n                                     \"list\", \"vms\"],\n                                    stdout=subprocess.PIPE,\n                                    stderr=subprocess.PIPE,\n                                    close_fds=True)\n            output, _ = proc.communicate()\n        except OSError as e:\n            raise CuckooMachineError(\"VBoxManage error listing \"\n                                     \"installed machines: %s\" % e)\n\n        machines = []\n        for line in output.split(\"\\n\"):\n            try:\n                label = line.split('\"')[1]\n                if label == \"<inaccessible>\":\n                    log.warning(\"Found an inaccessible virtual machine, \"\n                                \"please check its state.\")\n                else:\n                    machines.append(label)\n            except IndexError:\n                continue\n\n        return machines\n\n    def _status(self, label):\n        \"\"\"Gets current status of a vm.\n\n        :param label: virtual machine name.\n        :return: status string.\n        \"\"\"\n        log.debug(\"Getting status for %s\" % label)\n        status = None\n        try:\n            proc = subprocess.Popen([self.options.virtualbox.path,\n                                     \"showvminfo\",\n                                     label,\n                                     \"--machinereadable\"],\n                                    stdout=subprocess.PIPE,\n                                    stderr=subprocess.PIPE,\n                                    close_fds=True)\n            output, err = proc.communicate()\n\n            if proc.returncode != 0:\n                # It's quite common for virtualbox crap utility to exit with:\n                # VBoxManage: error: Details: code E_ACCESSDENIED (0x80070005)\n                # So we just log to debug this.\n                log.debug(\"VBoxManage returns error checking status for \"\n                          \"machine %s: %s\", label, err)\n                status = self.ERROR\n        except OSError as e:\n            log.warning(\"VBoxManage failed to check status for machine %s: %s\",\n                        label, e)\n            status = self.ERROR\n        if not status:\n            for line in output.split(\"\\n\"):\n                state = re.match(r'VMState=\"(\\w+)\"', line, re.M | re.I)\n                if state:\n                    status = state.group(1)\n                    log.debug(\"Machine %s status %s\" % (label, status))\n                    status = status.lower()\n        # Report back status.\n        if status:\n            self.set_status(label, status)\n            return status\n        else:\n            raise CuckooMachineError(\"Unable to get status for %s\" % label)\n\n    def dump_memory(self, label, path):\n        \"\"\"Takes a memory dump.\n\n        :param path: path to where to store the memory dump.\n        \"\"\"\n\n        try:\n            proc = subprocess.Popen([self.options.virtualbox.path, \"-v\"],\n                                    stdout=subprocess.PIPE,\n                                    stderr=subprocess.PIPE,\n                                    close_fds=True)\n            output, err = proc.communicate()\n\n            if proc.returncode != 0:\n                # It's quite common for virtualbox crap utility to exit with:\n                # VBoxManage: error: Details: code E_ACCESSDENIED (0x80070005)\n                # So we just log to debug this.\n                log.debug(\"VBoxManage returns error checking status for \"\n                          \"machine %s: %s\", label, err)\n        except OSError as e:\n            raise CuckooMachineError(\"VBoxManage failed return it's version: %s\" % (e))\n\n        if output[:1] == str(5):\n            # VirtualBox version 5.x\n            dumpcmd = \"dumpvmcore\"\n        else:\n            # VirtualBox version 4.x\n            dumpcmd = \"dumpguestcore\"\n\n        try:\n            subprocess.call([self.options.virtualbox.path, \"debugvm\",\n                             label, dumpcmd, \"--filename\", path],\n                            stdout=subprocess.PIPE,\n                            stderr=subprocess.PIPE,\n                            close_fds=True)\n            log.info(\"Successfully generated memory dump for virtual machine \"\n                     \"with label %s to path %s\", label, path)\n        except OSError as e:\n            raise CuckooMachineError(\"VBoxManage failed to take a memory \"\n                                     \"dump of the machine with label %s: %s\" %\n                                     (label, e))\n"
  },
  {
    "path": "modules/machinery/vmware.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file was originally produced by Mike Tu.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport glob\nimport logging\nimport subprocess\nimport os.path\nimport shutil\nimport time\n\nfrom lib.cuckoo.common.abstracts import Machinery\nfrom lib.cuckoo.common.exceptions import CuckooMachineError\n\nlog = logging.getLogger(__name__)\n\nclass VMware(Machinery):\n    \"\"\"\n    Virtualization layer for VMware Workstation using vmrun utility.\n    \"\"\"\n    LABEL = \"vmx_path\"\n\n    def _initialize_check(self):\n        \"\"\"\n        Check for configuration file and vmware setup.\n        \n        :raise CuckooMachineError: if configuration is missing or wrong.\n        \"\"\"\n        if not self.options.vmware.path:\n            raise CuckooMachineError(\"VMware vmrun path missing, \"\n                                     \"please add it to vmware.conf\")\n\n        if not os.path.exists(self.options.vmware.path):\n            raise CuckooMachineError(\"VMware vmrun not found in \"\n                                     \"specified path %s\" %\n                                     self.options.vmware.path)\n        # Consistency checks.\n        for machine in self.machines():\n            vmx_path = machine.label\n\n            snapshot = self._snapshot_from_vmx(vmx_path)\n            self._check_vmx(vmx_path)\n            self._check_snapshot(vmx_path, snapshot)\n\n        # Base checks.\n        super(VMware, self)._initialize_check()\n\n    def _check_vmx(self, vmx_path):\n        \"\"\"Checks whether a vmx file exists and is valid.\n\n        :param vmx_path: path to vmx file\n        :raise CuckooMachineError: if file not found or not ending with .vmx\n        \"\"\"\n        if not vmx_path.endswith(\".vmx\"):\n            raise CuckooMachineError(\"Wrong configuration: vm path not \"\n                                     \"ending with .vmx: %s)\" % vmx_path)\n\n        if not os.path.exists(vmx_path):\n            raise CuckooMachineError(\"Vm file %s not found\" % vmx_path)\n\n    def _check_snapshot(self, vmx_path, snapshot):\n        \"\"\"Checks snapshot existance.\n\n        :param vmx_path: path to vmx file\n        :param snapshot: snapshot name\n        :raise CuckooMachineError: if snapshot not found\n        \"\"\"\n        try:\n            p = subprocess.Popen([self.options.vmware.path,\n                                  \"listSnapshots\", vmx_path],\n                                 stdout=subprocess.PIPE,\n                                 stderr=subprocess.PIPE)\n            output, _ = p.communicate()\n            output = output.decode(\"utf-8\")\n        except OSError as e:\n            raise CuckooMachineError(\"Unable to get snapshot list for %s. \"\n                                     \"Reason: %s\" % (vmx_path, e))\n        else:\n            if output:\n                return snapshot in output\n            else:\n                raise CuckooMachineError(\"Unable to get snapshot list for %s. \"\n                                         \"No output from \"\n                                         \"`vmrun listSnapshots`\" % vmx_path)\n\n    def start(self, vmx_path, task):\n        \"\"\"Start a virtual machine.\n\n        :param vmx_path: path to vmx file.\n        :param task: task object.\n        :raise CuckooMachineError: if unable to start.\n        \"\"\"\n        snapshot = self._snapshot_from_vmx(vmx_path)\n\n        # Preventive check\n        if self._is_running(vmx_path):\n            raise CuckooMachineError(\"Machine %s is already running\" %\n                                     vmx_path)\n\n        self._revert(vmx_path, snapshot)\n\n        time.sleep(3)\n\n        log.debug(\"Starting vm %s\" % vmx_path)\n        try:\n            p = subprocess.Popen([self.options.vmware.path,\n                                  \"start\", vmx_path,\n                                  self.options.vmware.mode],\n                                 stdout=subprocess.PIPE,\n                                 stderr=subprocess.PIPE)\n            if self.options.vmware.mode.lower() == \"gui\":\n                output, _ = p.communicate()\n                if output:\n                    raise CuckooMachineError(\"Unable to start machine \"\n                                             \"%s: %s\" % (vmx_path, output))\n        except OSError as e:\n            mode = self.options.vmware.mode.upper()\n            raise CuckooMachineError(\"Unable to start machine %s in %s \"\n                                     \"mode: %s\" % (vmx_path, mode, e))\n\n    def stop(self, vmx_path):\n        \"\"\"Stops a virtual machine.\n\n        :param vmx_path: path to vmx file\n        :raise CuckooMachineError: if unable to stop.\n        \"\"\"\n        log.debug(\"Stopping vm %s\" % vmx_path)\n        if self._is_running(vmx_path):\n            try:\n                if subprocess.call([self.options.vmware.path,\n                                    \"stop\", vmx_path, \"hard\"],\n                                   stdout=subprocess.PIPE,\n                                   stderr=subprocess.PIPE):\n                    raise CuckooMachineError(\"Error shutting down \"\n                                             \"machine %s\" % vmx_path)\n            except OSError as e:\n                raise CuckooMachineError(\"Error shutting down machine \"\n                                         \"%s: %s\" % (vmx_path, e))\n        else:\n            log.warning(\"Trying to stop an already stopped machine: %s\",\n                        vmx_path)\n\n    def _revert(self, vmx_path, snapshot):\n        \"\"\"Revets machine to snapshot.\n\n        :param vmx_path: path to vmx file\n        :param snapshot: snapshot name\n        :raise CuckooMachineError: if unable to revert\n        \"\"\"\n        log.debug(\"Revert snapshot for vm %s\" % vmx_path)\n        try:\n            if subprocess.call([self.options.vmware.path,\n                                \"revertToSnapshot\", vmx_path, snapshot],\n                               stdout=subprocess.PIPE,\n                               stderr=subprocess.PIPE):\n                raise CuckooMachineError(\"Unable to revert snapshot for \"\n                                         \"machine %s: vmrun exited with \"\n                                         \"error\" % vmx_path)\n        except OSError as e:\n            raise CuckooMachineError(\"Unable to revert snapshot for \"\n                                     \"machine %s: %s\" % (vmx_path, e))\n\n    def _is_running(self, vmx_path):\n        \"\"\"Checks if virtual machine is running.\n\n        :param vmx_path: path to vmx file\n        :return: running status\n        \"\"\"\n        try:\n            p = subprocess.Popen([self.options.vmware.path, \"list\"],\n                                 stdout=subprocess.PIPE,\n                                 stderr=subprocess.PIPE)\n            output, error = p.communicate()\n        except OSError as e:\n            raise CuckooMachineError(\"Unable to check running status for %s. \"\n                                     \"Reason: %s\" % (vmx_path, e))\n        else:\n            if output:\n                return vmx_path in output\n            else:\n                raise CuckooMachineError(\"Unable to check running status \"\n                                         \"for %s. No output from \"\n                                         \"`vmrun list`\" % vmx_path)\n\n    def _snapshot_from_vmx(self, vmx_path):\n        \"\"\"Get snapshot for a given vmx file.\n\n        :param vmx_path: configuration option from config file\n        \"\"\"\n        vm_info = self.db.view_machine_by_label(vmx_path)\n        return vm_info.snapshot\n\n    def dump_memory(self, vmx_path, path):\n        \"\"\"Take a memory dump of the machine.\"\"\"\n        if not os.path.exists(vmx_path):\n            raise CuckooMachineError(\"Can't find .vmx file {0}. Ensure to configure a fully qualified path in vmware.conf (key = vmx_path)\".format(vmx_path))\n\n        try:\n            subprocess.call([self.options.vmware.path, \"snapshot\",\n                             vmx_path, \"memdump\"],\n                            stdout=subprocess.PIPE,\n                            stderr=subprocess.PIPE)\n        except OSError as e:\n            raise CuckooMachineError(\"vmrun failed to take a memory dump of the machine with label %s: %s\" % (vmx_path, e))\n\n        vmwarepath, _ = os.path.split(vmx_path)\n        latestvmem = max(glob.iglob(os.path.join(vmwarepath, \"*.vmem\")),\n                         key=os.path.getctime)\n\n        # We need to move the snapshot to the current analysis directory as\n        # vmware doesn't support an option for the destination path :-/\n        shutil.move(latestvmem, path)\n\n        # Old snapshot can be deleted, as it isn't needed any longer.\n        try:\n            subprocess.call([self.options.vmware.path, \"deleteSnapshot\",\n                             vmx_path, \"memdump\"],\n                            stdout=subprocess.PIPE,\n                            stderr=subprocess.PIPE)\n        except OSError as e:\n            raise CuckooMachineError(\"vmrun failed to delete the temporary snapshot in %s: %s\" % (vmx_path, e))\n\n        log.info(\"Successfully generated memory dump for virtual machine with label %s \", vmx_path)\n"
  },
  {
    "path": "modules/machinery/vsphere.py",
    "content": "# Copyright (C) 2015 eSentire, Inc (jacob.gajek@esentire.com).\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport requests\nimport logging\nimport time\nimport random\nimport re\n\nfrom datetime import datetime, timedelta\n\nfrom lib.cuckoo.common.abstracts import Machinery\nfrom lib.cuckoo.common.exceptions import CuckooMachineError\nfrom lib.cuckoo.common.exceptions import CuckooDependencyError\nfrom lib.cuckoo.common.exceptions import CuckooCriticalError\n\ntry:\n    from pyVim.connect import SmartConnection\n    HAVE_PYVMOMI = True\nexcept ImportError:\n    HAVE_PYVMOMI = False\n\nlog = logging.getLogger(__name__)\nlogging.getLogger(\"requests\").setLevel(logging.WARNING)\n\n\nclass vSphere(Machinery):\n    \"\"\"vSphere/ESXi machinery class based on pyVmomi Python SDK.\"\"\"\n\n    # VM states\n    RUNNING = \"poweredOn\"\n    POWEROFF = \"poweredOff\"\n    SUSPENDED = \"suspended\"\n    ABORTED = \"aborted\"\n\n    def __init__(self):\n        if not HAVE_PYVMOMI:\n            raise CuckooDependencyError(\"Couldn't import pyVmomi. Please install \"\n                                        \"using 'pip install --upgrade pyvmomi'\")\n\n        super(vSphere, self).__init__()\n\n    def _initialize(self, module_name):\n        \"\"\"Read configuration.\n        @param module_name: module name.\n        \"\"\"\n        super(vSphere, self)._initialize(module_name)\n\n        # Initialize random number generator\n        random.seed()\n\n    def _initialize_check(self):\n        \"\"\"Runs checks against virtualization software when a machine manager\n        is initialized.\n        @raise CuckooCriticalError: if a misconfiguration or unsupported state\n                                    is found.\n        \"\"\"\n        self.connect_opts = {}\n\n        if self.options.vsphere.host:\n            self.connect_opts[\"host\"] = self.options.vsphere.host\n        else:\n            raise CuckooCriticalError(\"vSphere host address setting not found, \"\n                                      \"please add it to the config file.\")\n\n        if self.options.vsphere.port:\n            self.connect_opts[\"port\"] = self.options.vsphere.port\n        else:\n            raise CuckooCriticalError(\"vSphere port setting not found, \"\n                                      \"please add it to the config file.\")\n\n        if self.options.vsphere.user:\n            self.connect_opts[\"user\"] = self.options.vsphere.user\n        else:\n            raise CuckooCriticalError(\"vSphere username setting not found, \"\n                                      \"please add it to the config file.\")\n\n        if self.options.vsphere.pwd:\n            self.connect_opts[\"pwd\"] = self.options.vsphere.pwd\n        else:\n            raise CuckooCriticalError(\"vSphere password setting not found, \"\n                                      \"please add it to the config file.\")\n\n        # Verify that connect options are valid\n        try:\n            with SmartConnection(**self.connect_opts):\n                pass\n        except Exception as e:\n            raise CuckooCriticalError(\"Couldn't connect to vSphere host: {0}\"\n                                      .format(e))\n\n        # Check that a snapshot is configured for each machine\n        # and that it was taken in a powered-on state\n        with SmartConnection(**self.connect_opts) as conn:\n            for machine in self.machines():\n                if not machine.snapshot:\n                    raise CuckooCriticalError(\"Snapshot name not specified \"\n                                              \"for machine {0}, please add \"\n                                              \"it to the config file.\"\n                                              .format(machine.label))\n                vm = self._get_virtual_machine_by_label(conn, machine.label)\n                if not vm:\n                    raise CuckooCriticalError(\"Unable to find machine {0} \"\n                                              \"on vSphere host, please \"\n                                              \"update your configuration.\"\n                                              .format(machine.label))\n                state = self._get_snapshot_power_state(vm, machine.snapshot)\n                if state != self.RUNNING:\n                    raise CuckooCriticalError(\"Snapshot for machine {0} not \"\n                                              \"in powered-on state, please \"\n                                              \"create one.\"\n                                              .format(machine.label))\n\n        super(vSphere, self)._initialize_check()\n\n    def start(self, label, task):\n        \"\"\"Start a machine.\n        @param label: machine name.\n        @param task: task object.\n        @raise CuckooMachineError: if unable to start machine.\n        \"\"\"\n        name = self.db.view_machine_by_label(label).snapshot\n        with SmartConnection(**self.connect_opts) as conn:\n            vm = self._get_virtual_machine_by_label(conn, label)\n            if vm:\n                self._revert_snapshot(vm, name)\n            else:\n                raise CuckooMachineError(\"Machine {0} not found on host\"\n                                         .format(label))\n\n    def stop(self, label):\n        \"\"\"Stop a machine.\n        @param label: machine name.\n        @raise CuckooMachineError: if unable to stop machine\n        \"\"\"\n        with SmartConnection(**self.connect_opts) as conn:\n            vm = self._get_virtual_machine_by_label(conn, label)\n            if vm:\n                self._stop_virtual_machine(vm)\n            else:\n                raise CuckooMachineError(\"Machine {0} not found on host\"\n                                         .format(label))\n\n    def dump_memory(self, label, path):\n        \"\"\"Take a memory dump of a machine.\n        @param path: path to where to store the memory dump\n        @raise CuckooMachineError: if error taking the memory dump\n        \"\"\"\n        name = \"cuckoo_memdump_{0}\".format(random.randint(100000, 999999))\n        with SmartConnection(**self.connect_opts) as conn:\n            vm = self._get_virtual_machine_by_label(conn, label)\n            if vm:\n                self._create_snapshot(vm, name)\n                self._download_snapshot(conn, vm, name, path)\n                self._delete_snapshot(vm, name)\n            else:\n                raise CuckooMachineError(\"Machine {0} not found on host\"\n                                         .format(label))\n\n    def _list(self):\n        \"\"\"List virtual machines on vSphere host\"\"\"\n        with SmartConnection(**self.connect_opts) as conn:\n            vmlist = [vm.summary.config.name for vm in\n                      self._get_virtual_machines(conn)]\n\n        return vmlist\n\n    def _status(self, label):\n        \"\"\"Get power state of vm from vSphere host.\n        @param label: virtual machine name\n        @raise CuckooMachineError: if error getting status or machine not found\n        \"\"\"\n        with SmartConnection(**self.connect_opts) as conn:\n            vm = self._get_virtual_machine_by_label(conn, label)\n            if not vm:\n                raise CuckooMachineError(\"Machine {0} not found on server\"\n                                         .format(label))\n\n            status = vm.runtime.powerState\n            self.set_status(label, status)\n            return status\n\n    def _get_virtual_machines(self, conn):\n        \"\"\"Iterate over all VirtualMachine managed objects on vSphere host\"\"\"\n        def traverseVMFolders(conn, nodes):\n            for node in nodes:\n                if hasattr(node, \"childEntity\"):\n                    for child in traverseVMFolders(conn, node.childEntity):\n                        yield child\n                else:\n                    yield node\n\n        fldr = [ce.vmFolder for ce in conn.content.rootFolder.childEntity\n                if hasattr(ce, \"vmFolder\")]\n\n        for vm in traverseVMFolders(conn, fldr):\n            yield vm\n\n    def _get_virtual_machine_by_label(self, conn, label):\n        \"\"\"Return the named VirtualMachine managed object\"\"\"\n        vg = (vm for vm in self._get_virtual_machines(conn)\n              if vm.summary.config.name == label)\n        return next(vg, None)\n\n    def _get_snapshot_by_name(self, vm, name):\n        \"\"\"Return the named VirtualMachineSnapshot managed object for\n           a virtual machine\"\"\"\n        root = vm.snapshot.rootSnapshotList\n        sg = (ss.snapshot for ss in self._traverseSnapshots(root)\n              if ss.name == name)\n        return next(sg, None)\n\n    def _get_snapshot_power_state(self, vm, name):\n        \"\"\"Return the power state for a named VirtualMachineSnapshot object\"\"\"\n        root = vm.snapshot.rootSnapshotList\n        sg = (ss.state for ss in self._traverseSnapshots(root)\n              if ss.name == name)\n        return next(sg, None)\n\n    def _create_snapshot(self, vm, name):\n        \"\"\"Create named snapshot of virtual machine\"\"\"\n        log.info(\"Creating snapshot {0} for machine {1}\"\n                 .format(name, vm.summary.config.name))\n        task = vm.CreateSnapshot_Task(name=name,\n                                      description=\"Created by Cuckoo sandbox\",\n                                      memory=True,\n                                      quiesce=False)\n        try:\n            self._wait_task(task)\n        except CuckooMachineError as e:\n            raise CuckooMachineError(\"CreateSnapshot: {0}\".format(e))\n\n    def _delete_snapshot(self, vm, name):\n        \"\"\"Remove named snapshot of virtual machine\"\"\"\n        snapshot = self._get_snapshot_by_name(vm, name)\n        if snapshot:\n            log.info(\"Removing snapshot {0} for machine {1}\"\n                     .format(name, vm.summary.config.name))\n            task = snapshot.RemoveSnapshot_Task(removeChildren=True)\n            try:\n                self._wait_task(task)\n            except CuckooMachineError as e:\n                log.error(\"RemoveSnapshot: {0}\".format(e))\n        else:\n            raise CuckooMachineError(\"Snapshot {0} for machine {1} not found\"\n                                     .format(name, vm.summary.config.name))\n\n    def _revert_snapshot(self, vm, name):\n        \"\"\"Revert virtual machine to named snapshot\"\"\"\n        snapshot = self._get_snapshot_by_name(vm, name)\n        if snapshot:\n            log.info(\"Reverting machine {0} to snapshot {1}\"\n                     .format(vm.summary.config.name, name))\n            task = snapshot.RevertToSnapshot_Task()\n            try:\n                self._wait_task(task)\n            except CuckooMachineError as e:\n                raise CuckooMachineError(\"RevertToSnapshot: {0}\".format(e))\n        else:\n            raise CuckooMachineError(\"Snapshot {0} for machine {1} not found\"\n                                     .format(name, vm.summary.config.name))\n\n    def _download_snapshot(self, conn, vm, name, path):\n        \"\"\"Download snapshot file from host to local path\"\"\"\n\n        # Get filespec to .vmsn file of named snapshot\n        snapshot = self._get_snapshot_by_name(vm, name)\n        if not snapshot:\n            raise CuckooMachineError(\"Snapshot {0} for machine {1} not found\"\n                                     .format(name, vm.summary.config.name))\n\n        sg = (s.dataKey for s in vm.layoutEx.snapshot if s.key == snapshot)\n        datakey = next(sg, None)\n        fg = (f.name for f in vm.layoutEx.file if f.key == datakey)\n        filespec = next(fg, None)\n\n        log.info(\"Downloading memory dump {0} to {1}\".format(filespec, path))\n\n        # Parse filespec to get datastore and file path\n        datastore, filepath = re.match(r\"\\[([^\\]]*)\\] (.*)\", filespec).groups()\n\n        # Construct URL request\n        params = {\"dsName\": datastore}\n        headers = {\"Cookie\": conn._stub.cookie}\n        url = \"https://{0}:{1}/folder/{2}\".format(self.connect_opts[\"host\"],\n                                                  self.connect_opts[\"port\"],\n                                                  filepath)\n\n        # Stream download to specified local path\n        try:\n            response = requests.get(url, params=params, headers=headers,\n                                    verify=False, stream=True)\n\n            with open(path, \"wb\") as localfile:\n                for chunk in response.iter_content(16*1024):\n                    localfile.write(chunk)\n        except:\n            raise CuckooMachineError(\"Error downloading memory dump {0}\"\n                                     .format(filespec))\n\n    def _stop_virtual_machine(self, vm):\n        \"\"\"Power off a virtual machine\"\"\"\n        log.info(\"Powering off virtual machine {0}\".format(vm.summary.config.name))\n        task = vm.PowerOffVM_Task()\n        try:\n            self._wait_task(task)\n        except CuckooMachineError as e:\n            log.error(\"PowerOffVM: {0}\".format(e))\n\n    def _wait_task(self, task):\n        \"\"\"Wait for a task to complete with timeout\"\"\"\n        limit = timedelta(seconds=int(self.options_globals.timeouts.vm_state))\n        start = datetime.utcnow()\n\n        while True:\n            if task.info.state == \"error\":\n                raise CuckooMachineError(\"Task error\")\n\n            if task.info.state == \"success\":\n                break\n\n            if datetime.utcnow() - start > limit:\n                raise CuckooMachineError(\"Task timed out\")\n\n            time.sleep(1)\n\n    def _traverseSnapshots(self, root):\n        \"\"\"Recursive depth-first traversal of snapshot tree\"\"\"\n        for node in root:\n            if len(node.childSnapshotList) > 0:\n                for child in self._traverseSnapshots(node.childSnapshotList):\n                    yield child\n            yield node\n"
  },
  {
    "path": "modules/machinery/xenserver.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\n\"\"\"\nXenServer machinery.\n\"\"\"\n\nimport threading\nimport logging\n\nfrom lib.cuckoo.common.abstracts import Machinery\nfrom lib.cuckoo.common.exceptions import CuckooMachineError\nfrom lib.cuckoo.common.exceptions import CuckooDependencyError\n\ntry:\n    import XenAPI\n    HAVE_XENAPI = True\nexcept ImportError:\n    HAVE_XENAPI = False\n\nlog = logging.getLogger(__name__)\n\nclass XenServerMachinery(Machinery):\n    \"\"\"Virtualization layer for XenServer using the XenAPI XML-RPC interface.\"\"\"\n\n    LABEL = \"uuid\"\n\n    # Power States.\n    RUNNING = \"Running\"\n    PAUSED = \"Paused\"\n    POWEROFF = \"Halted\"\n    ABORTED = \"Suspended\"\n\n    def _initialize_check(self):\n        \"\"\"Check XenServer configuration, initialize a Xen API connection, and\n        verify machine validity.\n        \"\"\"\n        self._sessions = {}\n\n        if not HAVE_XENAPI:\n            raise CuckooDependencyError(\"Unable to import XenAPI\")\n\n        if not self.options.xenserver.user:\n            raise CuckooMachineError(\"XenServer username missing, please add \"\n                                     \"it to xenserver.conf.\")\n\n        if not self.options.xenserver.password:\n            raise CuckooMachineError(\"XenServer password missing, please add \"\n                                     \"it to xenserver.conf\")\n\n        if not self.options.xenserver.url:\n            raise CuckooMachineError(\"XenServer url missing, please add it to \"\n                                     \"xenserver.conf\")\n\n        self._make_xenapi_session()\n\n        for machine in self.machines():\n            uuid = machine.label\n            (ref, vm) = self._check_vm(uuid)\n\n            if machine.snapshot:\n                self._check_snapshot(uuid, machine.snapshot)\n            else:\n                self._check_disks_reset(vm)\n\n        super(XenServerMachinery, self)._initialize_check()\n\n    @property\n    def session(self):\n        tid = threading.current_thread().ident\n        sess = self._sessions.get(tid, None)\n        if sess is None:\n            sess = self._make_xenapi_session(tid)\n        return sess\n\n    def _make_xenapi_session(self, tid=None):\n        tid = tid or threading.current_thread().ident\n        try:\n            sess = XenAPI.Session(self.options.xenserver.url)\n        except:\n            raise CuckooMachineError(\"Could not connect to XenServer: invalid \"\n                                     \"or incorrect url, please ensure the url \"\n                                     \"is correct in xenserver.conf\")\n\n        try:\n            sess.xenapi.login_with_password(\n                self.options.xenserver.user, self.options.xenserver.password\n            )\n        except:\n            raise CuckooMachineError(\"Could not connect to XenServer: \"\n                                     \"incorrect credentials, please ensure \"\n                                     \"the user and password are correct in \"\n                                     \"xenserver.conf\")\n        self._sessions[tid] = sess\n        return sess\n\n    def _get_vm_ref(self, uuid):\n        \"\"\"Get a virtual machine reference.\n        @param uuid: vm uuid\n        \"\"\"\n        return self.session.xenapi.VM.get_by_uuid(uuid.lower())\n\n    def _get_vm_record(self, ref):\n        \"\"\"Get the virtual machine record.\n        @param ref: vm reference\n        \"\"\"\n        return self.session.xenapi.VM.get_record(ref)\n\n    def _get_vm_power_state(self, ref):\n        \"\"\"Get the virtual machine power state.\n        @param ref: vm reference\n        \"\"\"\n        return self.session.xenapi.VM.get_power_state(ref)\n\n    def _check_vm(self, uuid):\n        \"\"\"Check vm existence and validity.\n        @param uuid: vm uuid\n        \"\"\"\n        try:\n            ref = self._get_vm_ref(uuid)\n            vm = self._get_vm_record(ref)\n        except XenAPI.Failure as e:\n            raise CuckooMachineError(\"Vm not found: %s: %s\"\n                                     % (uuid, e.details[0]))\n\n        if vm[\"is_a_snapshot\"]:\n            raise CuckooMachineError(\"Vm is a snapshot: %s\" % uuid)\n\n        if vm[\"is_a_template\"]:\n            raise CuckooMachineError(\"Vm is a template: %s\" % uuid)\n\n        if vm[\"is_control_domain\"]:\n            raise CuckooMachineError(\"Vm is a control domain: %s\" % uuid)\n\n        return (ref, vm)\n\n    def _check_snapshot(self, vm_uuid, snapshot_uuid):\n        \"\"\"Check snapshot existence and that the snapshot is of the specified\n        vm uuid.\n        @param vm_uuid: vm uuid\n        @param snapshot_uuid: snapshot uuid\n        \"\"\"\n        try:\n            snapshot_ref = self._get_vm_ref(snapshot_uuid)\n            snapshot = self._get_vm_record(snapshot_ref)\n        except:\n            raise CuckooMachineError(\"Snapshot not found: %s\" % snapshot_uuid)\n\n        if not snapshot[\"is_a_snapshot\"]:\n            raise CuckooMachineError(\"Invalid snapshot: %s\" % snapshot_uuid)\n\n        try:\n            parent = self._get_vm_record(snapshot[\"snapshot_of\"])\n        except:\n            raise CuckooMachineError(\"Invalid snapshot: %s\" % snapshot_uuid)\n\n        parent_uuid = parent[\"uuid\"]\n        if parent_uuid != vm_uuid:\n            raise CuckooMachineError(\"Snapshot does not belong to specified \"\n                                     \"vm: %s\" % snapshot_uuid)\n\n    def _check_disks_reset(self, vm):\n        \"\"\"Check whether each attached disk is set to reset on boot.\n        @param vm: vm record\n        \"\"\"\n        for ref in vm[\"VBDs\"]:\n            try:\n                vbd = self.session.xenapi.VBD.get_record(ref)\n            except:\n                log.warning(\"Invalid VBD for vm %s: %s\", vm[\"uuid\"], ref)\n                continue\n\n            if vbd[\"type\"] == \"Disk\":\n                vdi_ref = vbd[\"VDI\"]\n                try:\n                    vdi = self.session.xenapi.VDI.get_record(vdi_ref)\n                except:\n                    log.warning(\"Invalid VDI for vm %s: %s\", vm[\"uuid\"],\n                                vdi_ref)\n                    continue\n\n                if vdi[\"on_boot\"] != \"reset\" and vdi[\"read_only\"] is False:\n                    raise CuckooMachineError(\n                        \"Vm %s contains invalid VDI %s: disk is not reset on \"\n                        \"boot. Please set the on-boot parameter to 'reset'.\"\n                        % (vm[\"uuid\"], vdi[\"uuid\"]))\n\n    def _snapshot_from_vm_uuid(self, uuid):\n        \"\"\"Get the snapshot uuid from a virtual machine.\n        @param uuid: vm uuid\n        \"\"\"\n        machine = self.db.view_machine_by_label(uuid)\n        return machine.snapshot\n\n    def _is_halted(self, vm):\n        \"\"\"Checks if the virtual machine is running.\n        @param uuid: vm uuid\n        \"\"\"\n        return vm[\"power_state\"] == \"Halted\"\n\n    def start(self, label, task):\n        \"\"\"Start a virtual machine.\n        @param label: vm uuid\n        @param task: task object.\n        \"\"\"\n        vm_ref = self._get_vm_ref(label)\n        vm = self._get_vm_record(vm_ref)\n\n        if not self._is_halted(vm):\n            raise CuckooMachineError(\"Vm is already running: %s\", label)\n\n        snapshot = self._snapshot_from_vm_uuid(label)\n        if snapshot:\n            snapshot_ref = self._get_vm_ref(snapshot)\n            try:\n                log.debug(\"Reverting vm %s to snapshot %s\", label, snapshot)\n                self.session.xenapi.VM.revert(snapshot_ref)\n                log.debug(\"Revert completed for vm %s\", label)\n            except XenAPI.Failure as e:\n                raise CuckooMachineError(\"Unable to revert vm %s: %s\"\n                                         % (label, e.details[0]))\n\n            try:\n                log.debug(\"Resuming reverted vm %s\", label)\n                self.session.xenapi.VM.resume(vm_ref, False, False)\n            except XenAPI.Failure as e:\n                raise CuckooMachineError(\"Unable to resume vm %s: %s\"\n                                         % (label, e.details[0]))\n        else:\n            log.debug(\"No snapshot found for vm, booting: %s\", label)\n            try:\n                self.session.xenapi.VM.start(vm_ref, False, False)\n            except XenAPI.Failure as e:\n                raise CuckooMachineError(\"Unable to start vm %s: %s\"\n                                         % (label, e.details[0]))\n\n        log.debug(\"Started vm: %s\", label)\n\n    def stop(self, label=None):\n        \"\"\"Stop a virtual machine.\n        @param label: vm uuid\n        \"\"\"\n        ref = self._get_vm_ref(label)\n        vm = self._get_vm_record(ref)\n        if self._is_halted(vm):\n            log.warning(\"Trying to stop an already stopped machine: %s\", label)\n        else:\n            try:\n                self.session.xenapi.VM.hard_shutdown(ref)\n            except XenAPI.Failure as e:\n                raise CuckooMachineError(\"Error shutting down virtual machine:\"\n                                         \" %s: %s\" % (label, e.details[0]))\n\n    def _list(self):\n        \"\"\"List available virtual machines.\n        @raise CuckooMachineError: if unable to list virtual machines.\n        \"\"\"\n        try:\n            vm_list = []\n            for ref in self.session.xenapi.VM.get_all():\n                vm = self._get_vm_record(ref)\n                vm_list.append(vm['uuid'])\n        except:\n            raise CuckooMachineError(\"Cannot list domains\")\n        else:\n            return vm_list\n\n    def _status(self, label):\n        \"\"\"Gets current status of a vm.\n        @param label: virtual machine uuid\n        @return: status string.\n        \"\"\"\n        ref = self._get_vm_ref(label)\n        state = self._get_vm_power_state(ref)\n        return state\n"
  },
  {
    "path": "modules/processing/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "modules/processing/analysisinfo.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport logging\n\nfrom lib.cuckoo.core.database import Database, Task\nfrom lib.cuckoo.common.abstracts import Processing\nfrom lib.cuckoo.common.constants import CUCKOO_VERSION\nfrom lib.cuckoo.common.config import emit_options\nfrom lib.cuckoo.common.objects import File\nfrom lib.cuckoo.common.utils import json_decode\n\nlog = logging.getLogger(__name__)\n\nclass AnalysisInfo(Processing):\n    \"\"\"General information about analysis session.\"\"\"\n\n    def run(self):\n        \"\"\"\n        Run information gathering.\n\n        :return: information dict.\n        \"\"\"\n        self.key = \"info\"\n\n        db = Database()\n        dbtask = db.view_task(self.task[\"id\"], details=True)\n\n        if dbtask:\n            task = dbtask.to_dict()\n        else:\n            # task is gone from the database\n            if os.path.isfile(self.taskinfo_path):\n                # we've got task.json, so grab info from there\n                task = json_decode(open(self.taskinfo_path).read())\n            else:\n                # we don't have any info on the task :(\n                emptytask = Task()\n                emptytask.id = self.task[\"id\"]\n                task = emptytask.to_dict()\n\n        return dict(\n            version=CUCKOO_VERSION,\n            started=task[\"started_on\"],\n            ended=task.get(\"completed_on\", \"none\"),\n            duration=task.get(\"duration\", -1),\n            id=int(task[\"id\"]),\n            category=task[\"category\"],\n            custom=task[\"custom\"],\n            owner=task[\"owner\"],\n            machine=task[\"guest\"],\n            package=task[\"package\"],\n            platform=task[\"platform\"],\n            options=emit_options(task[\"options\"]),\n            route=task[\"route\"],\n        )\n\nclass MetaInfo(Processing):\n    \"\"\"General information about the task and output files (memory dumps, etc).\"\"\"\n\n    def run(self):\n        \"\"\"Run information gathering.\n\n        :return: information dict.\n        \"\"\"\n        self.key = \"metadata\"\n\n        def reformat(x):\n            # kinda ugly absolute -> relative\n            relpath = x[len(self.analysis_path):].lstrip(\"/\")\n\n            dirname = os.path.dirname(relpath)\n            basename = os.path.basename(relpath)\n            return dict(dirname=dirname or \"\",\n                        basename=basename,\n                        sha256=File(x).get_sha256())\n\n        meta = {\n            \"output\": {},\n        }\n\n        if os.path.exists(self.pcap_path):\n            meta[\"output\"][\"pcap\"] = reformat(self.pcap_path)\n\n        infos = [\n            (self.pmemory_path, \"memdumps\"),\n            (self.buffer_path, \"buffers\"),\n            (self.dropped_path, \"dropped\"),\n        ]\n\n        for path, key in infos:\n            if os.path.exists(path):\n                contents = os.listdir(path)\n                if contents:\n                    meta[\"output\"][key] = [reformat(os.path.join(path, i)) for i in contents]\n\n        return meta\n"
  },
  {
    "path": "modules/processing/apkinfo.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nimport hashlib\nimport os\nimport logging\n\nfrom zipfile import BadZipfile\n\nfrom lib.cuckoo.common.objects import File\nfrom lib.cuckoo.common.abstracts import Processing\nfrom lib.cuckoo.common.exceptions import CuckooProcessingError\n\ntry:\n    from androguard.core.bytecodes.apk import APK\n    from androguard.core.bytecodes.dvm import DalvikVMFormat\n    from androguard.core.analysis.analysis import uVMAnalysis\n    from androguard.core.analysis import analysis\n    HAVE_ANDROGUARD = True\nexcept ImportError:\n    HAVE_ANDROGUARD = False\n\nlog = logging.getLogger(__name__)\n\nclass ApkInfo(Processing):\n    \"\"\"Static android information about analysis session.\"\"\"\n\n    def check_size(self, file_list):\n        for file in file_list:\n            if \"classes.dex\" in file[\"name\"]:\n                if(\"decompilation_threshold\" in self.options):\n                    if file[\"size\"] < self.options.decompilation_threshold:\n                        return True\n                    else:\n                        return False\n                else:\n                    return True\n        return False\n\n    def _apk_files(self, apk):\n        \"\"\"Returns a list of files in the APK.\"\"\"\n        ret = []\n        for fname, filetype in apk.get_files_types().items():\n            buf = apk.zip.read(fname)\n            ret.append({\n                \"name\": fname,\n                \"md5\": hashlib.md5(buf).hexdigest(),\n                \"size\": len(buf),\n                \"type\": filetype,\n            })\n        return ret\n\n    def run(self):\n        \"\"\"Run androguard to extract static android information\n                @return: list of static features\n        \"\"\"\n        self.key = \"apkinfo\"\n        apkinfo = {}\n\n        if \"file\" not in self.task[\"category\"] or not HAVE_ANDROGUARD:\n            return\n\n        f = File(self.task[\"target\"])\n        if f.get_name().endswith((\".zip\", \".apk\")) or \"zip\" in f.get_type():\n            if not os.path.exists(self.file_path):\n                raise CuckooProcessingError(\"Sample file doesn't exist: \\\"%s\\\"\" % self.file_path)\n\n            try:\n                a = APK(self.file_path)\n                if a.is_valid_APK():\n                    manifest = {}\n                    apkinfo[\"files\"] = self._apk_files(a)\n                    manifest[\"package\"] = a.get_package()\n                    # manifest[\"permissions\"]=a.get_details_permissions_new()\n                    manifest[\"main_activity\"] = a.get_main_activity()\n                    manifest[\"activities\"] = a.get_activities()\n                    manifest[\"services\"] = a.get_services()\n                    manifest[\"receivers\"] = a.get_receivers()\n                    # manifest[\"receivers_actions\"]=a.get__extended_receivers()\n                    manifest[\"providers\"] = a.get_providers()\n                    manifest[\"libraries\"] = a.get_libraries()\n                    apkinfo[\"manifest\"] = manifest\n                    # apkinfo[\"certificate\"] = a.get_certificate()\n                    static_calls = {}\n                    if self.check_size(apkinfo[\"files\"]):\n                        vm = DalvikVMFormat(a.get_dex())\n                        vmx = uVMAnalysis(vm)\n\n                        static_calls[\"all_methods\"] = self.get_methods(vmx)\n                        static_calls[\"is_native_code\"] = analysis.is_native_code(vmx)\n                        static_calls[\"is_dynamic_code\"] = analysis.is_dyn_code(vmx)\n                        static_calls[\"is_reflection_code\"] = analysis.is_reflection_code(vmx)\n\n                        # static_calls[\"dynamic_method_calls\"]= analysis.get_show_DynCode(vmx)\n                        # static_calls[\"reflection_method_calls\"]= analysis.get_show_ReflectionCode(vmx)\n                        # static_calls[\"permissions_method_calls\"]= analysis.get_show_Permissions(vmx)\n                        # static_calls[\"crypto_method_calls\"]= analysis.get_show_CryptoCode(vmx)\n                        # static_calls[\"native_method_calls\"]= analysis.get_show_NativeMethods(vmx)\n                    else:\n                        log.warning(\"Dex size bigger than: %s\",\n                                    self.options.decompilation_threshold)\n                    apkinfo[\"static_method_calls\"] = static_calls\n            except (IOError, OSError, BadZipfile) as e:\n                raise CuckooProcessingError(\"Error opening file %s\" % e)\n\n        return apkinfo\n\n    def get_methods(self, vmx):\n        methods = []\n        for i in vmx.get_methods():\n            method = {}\n            i.create_tags()\n            if not i.tags.empty():\n                proto = i.method.proto.replace(\"(\", \"\").replace(\";\", \"\")\n                protos = proto.split(\")\")\n                params = protos[0].split(\" \")\n                method[\"class\"] = i.method.get_class_name().replace(\";\", \"\")\n                method[\"name\"] = i.method.name\n                if params and params[0]:\n                    method[\"params\"] = params\n                method[\"return\"] = protos[1]\n                methods.append(method)\n        return methods\n"
  },
  {
    "path": "modules/processing/baseline.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport json\nimport logging\nimport os.path\n\nfrom lib.cuckoo.common.abstracts import Processing\n\nlog = logging.getLogger(__name__)\n\nclass Baseline(Processing):\n    \"\"\"Reduces Baseline results from gathered information.\"\"\"\n    order = 2\n\n    def deep_tuple(self, o, bl=None):\n        if isinstance(o, (tuple, list)):\n            r = []\n            for x in o:\n                r.append(self.deep_tuple(x))\n            return tuple(r)\n\n        if isinstance(o, dict):\n            r = []\n            for k, v in sorted(o.items()):\n                if bl and k in bl:\n                    continue\n                r.append((k, self.deep_tuple(v)))\n            return tuple(r)\n\n        return o\n\n    def normalize(self, plugin, o):\n        plugins = {\n            \"pslist\": [\"num_threads\", \"num_handles\"],\n        }\n        return self.deep_tuple(o, plugins.get(plugin))\n\n    def memory(self, baseline, report):\n        \"\"\"Finds the differences between the analysis report and the baseline\n        report. Puts the differences into the baseline part of the report and\n        also marks the existing rows with a `class_` attribute.\"\"\"\n        results = {}\n\n        for plugin in baseline.keys() + report.keys():\n            results[plugin] = {\n                \"config\": {},\n                \"data\": [],\n            }\n\n        # TODO Support having more keys in one report than the other.\n        for plugin in set(baseline.keys() + report.keys()):\n            lr = [self.normalize(plugin, x) for x in report[plugin][\"data\"]]\n            lb = [self.normalize(plugin, x) for x in baseline[plugin][\"data\"]]\n            sr, sb = set(lr), set(lb)\n\n            # Baseline vs Analysis. These events were no longer present\n            # after the analysis.\n            for row in sb.difference(sr):\n                row = baseline[plugin][\"data\"][lb.index(row)]\n                row[\"class_\"] = \"warning\"\n                results[plugin][\"data\"].append(row)\n                report[plugin][\"data\"].append(row)\n\n            # Analysis vs Baseline. These events were added during\n            # the analysis.\n            for row in sr.difference(sb):\n                row = report[plugin][\"data\"][lr.index(row)]\n                row[\"class_\"] = \"danger\"\n                results[plugin][\"data\"].append(row)\n\n        return results\n\n    def store_baseline(self, machine, baseline):\n        \"\"\"Store a new baseline report for a particular VM.\"\"\"\n        results = {\n            \"memory\": self.results.get(\"memory\", {}),\n        }\n\n        with open(baseline, \"wb\") as report:\n            json.dump(results, report, indent=4, encoding=\"latin-1\")\n\n    def run(self):\n        self.key = \"baseline\"\n\n        machine = self.results.get(\"info\", {}).get(\"machine\", {})\n        if not machine or not machine.get(\"name\"):\n            log.warning(\"Unable to run baseline processing module as we did \"\n                        \"not find the name of the Virtual Machine.\")\n            return\n\n        machine = machine[\"name\"]\n        baseline = os.path.join(self.baseline_path, \"%s.json\" % machine)\n\n        # If this task has the baseline category then we're creating a new\n        # baseline report for a VM (and store it right away).\n        if self.task[\"category\"] == \"baseline\":\n            self.store_baseline(machine, baseline)\n            return\n\n        if not os.path.exists(baseline):\n            log.info(\"Could not find a baseline report for machine '%s', \"\n                     \"skipping it.\", machine)\n            return\n\n        try:\n            self.baseline = json.load(open(baseline, \"rb\"))\n        except Exception as e:\n            log.warning(\"Baseline report for machine '%s' seems corrupted, \"\n                        \"skipping baseline processing: %s.\", machine, e)\n            return\n\n        results = {}\n\n        if \"memory\" in self.results:\n            results[\"memory\"] = \\\n                self.memory(self.baseline[\"memory\"], self.results[\"memory\"])\n\n        return results\n"
  },
  {
    "path": "modules/processing/behavior.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport collections\nimport logging\nimport os\n\nfrom lib.cuckoo.common.abstracts import Processing, BehaviorHandler\nfrom lib.cuckoo.common.config import Config\n\nfrom .platform.windows import WindowsMonitor\nfrom .platform.linux import LinuxSystemTap\n\nlog = logging.getLogger(__name__)\n\nclass Summary(BehaviorHandler):\n    \"\"\"Generates overview summary information (not split by process).\"\"\"\n\n    key = \"summary\"\n    event_types = [\"generic\"]\n\n    def __init__(self, *args, **kwargs):\n        super(Summary, self).__init__(*args, **kwargs)\n        self.results = collections.defaultdict(set)\n\n    def handle_event(self, event):\n        self.results[event[\"category\"]].add(event[\"value\"])\n\n    def run(self):\n        for key, value in self.results.items():\n            self.results[key] = list(value)\n        return self.results\n\nclass Anomaly(BehaviorHandler):\n    \"\"\"Anomaly detected during analysis.\n\n    :note: For example: a malware tried to remove Cuckoo's hooks.\n    \"\"\"\n\n    key = \"anomaly\"\n    event_types = [\"anomaly\"]\n\n    def __init__(self, *args, **kwargs):\n        super(Anomaly, self).__init__(*args, **kwargs)\n        self.anomalies = []\n\n    def handle_event(self, call):\n        \"\"\"Process API calls.\n\n        :param call: API call object\n        :param process: process object\n        \"\"\"\n        category, funcname, message = None, None, None\n        for row in call[\"arguments\"]:\n            if row[\"name\"] == \"Subcategory\":\n                category = row[\"value\"]\n            if row[\"name\"] == \"FunctionName\":\n                funcname = row[\"value\"]\n            if row[\"name\"] == \"Message\":\n                message = row[\"value\"]\n\n        self.anomalies.append(dict(\n            # name=process[\"process_name\"],\n            # pid=process[\"process_id\"],\n            category=category,\n            funcname=funcname,\n            message=message,\n        ))\n\n    def run(self):\n        \"\"\"Fetch all anomalies.\"\"\"\n        return self.anomalies\n\nclass ProcessTree(BehaviorHandler):\n    \"\"\"Generates process tree.\"\"\"\n\n    key = \"processtree\"\n    event_types = [\"process\"]\n\n    def __init__(self, *args, **kwargs):\n        super(ProcessTree, self).__init__(*args, **kwargs)\n        self.processes = {}\n\n    def handle_event(self, process):\n        if process[\"pid\"] in self.processes:\n            log.warning(\n                \"Found the same process identifier twice, this \"\n                \"shouldn't happen!\"\n            )\n            return\n\n        self.processes[process[\"pid\"]] = {\n            \"pid\": process[\"pid\"],\n            \"ppid\": process[\"ppid\"],\n            \"process_name\": process[\"process_name\"],\n            \"command_line\": process.get(\"command_line\"),\n            \"first_seen\": process[\"first_seen\"],\n            \"children\": [],\n            \"track\": process.get(\"track\", True),\n        }\n\n    def run(self):\n        root = {\"children\": []}\n\n        for p in self.processes.values():\n            self.processes.get(p[\"ppid\"], root)[\"children\"].append(p)\n\n        return root[\"children\"]\n\nclass GenericBehavior(BehaviorHandler):\n    \"\"\"Generates summary information.\"\"\"\n\n    key = \"generic\"\n    event_types = [\"process\", \"generic\"]\n\n    def __init__(self, *args, **kwargs):\n        super(GenericBehavior, self).__init__(*args, **kwargs)\n        self.processes = {}\n\n    def handle_process_event(self, process):\n        if process[\"pid\"] in self.processes:\n            return\n\n        self.processes[process[\"pid\"]] = {\n            \"pid\": process[\"pid\"],\n            \"ppid\": process[\"ppid\"],\n            \"process_name\": process[\"process_name\"],\n            \"process_path\": process[\"process_path\"],\n            \"first_seen\": process[\"first_seen\"],\n            \"summary\": collections.defaultdict(set),\n        }\n\n    def handle_generic_event(self, event):\n        if event[\"pid\"] in self.processes:\n            # TODO: rewrite / generalize / more flexible\n            pid, category = event[\"pid\"], event[\"category\"]\n            self.processes[pid][\"summary\"][category].add(event[\"value\"])\n        else:\n            log.warning(\"Generic event for unknown process id %u\", event[\"pid\"])\n\n    def run(self):\n        for process in self.processes.values():\n            for key, value in process[\"summary\"].items():\n                process[\"summary\"][key] = list(value)\n\n        return self.processes.values()\n\nclass ApiStats(BehaviorHandler):\n    \"\"\"Counts API calls.\"\"\"\n    key = \"apistats\"\n    event_types = [\"apicall\"]\n\n    def __init__(self, *args, **kwargs):\n        super(ApiStats, self).__init__(*args, **kwargs)\n        self.processes = collections.defaultdict(lambda: collections.defaultdict(lambda: 0))\n\n    def handle_event(self, event):\n        self.processes[\"%d\" % event[\"pid\"]][event[\"api\"]] += 1\n\n    def run(self):\n        return self.processes\n\nclass PlatformInfo(BehaviorHandler):\n    \"\"\"Provides information about the platform for the collected behavior.\n\n    :Note: Not sure if this is really needed, as probably all the info is in the results[\"info\"] area.\n    \"\"\"\n    key = \"platform\"\n\n    # self.results = {\n    #     \"name\": \"windows\",\n    #     \"architecture\": \"unknown\", # look this up in the task / vm info?\n    #     \"source\": [\"monitor\", \"windows\"],\n    # }\n\nclass BehaviorAnalysis(Processing):\n    \"\"\"Behavior Analyzer.\n    \"\"\"\n\n    \"\"\"\n    The behavior key in the results dict will contain both default content keys\n    that contain generic / abstracted analysis info, available on any platform,\n    as well as platform / analyzer specific output.\n\n    Typically the analyzer behavior contains some sort of \"process\" separation as\n    we're tracking different processes in most cases.\n\n    So this looks roughly like this:\n    \"behavior\": {\n        \"generic\": {\n            \"processes\": [\n                {\n                    \"pid\": x,\n                    \"ppid\": y,\n                    \"calls\": [\n                        {\n                            \"function\": \"foo\",\n                            \"arguments\": {\n                                \"a\": 1,\n                                \"b\": 2,\n                            },\n                        },\n                        ...\n                    ]\n                },\n                ...\n            ]\n        }\n        \"summary\": {\n            \"\n        }\n        \"platform\": {\n            \"name\": \"windows\",\n            \"architecture\": \"x86\",\n            \"source\": [\"monitor\", \"windows\"],\n            ...\n        }\n    }\n    \"\"\"\n\n    key = \"behavior\"\n\n    def _enum_logs(self):\n        \"\"\"Enumerate all behavior logs.\"\"\"\n        if not os.path.exists(self.logs_path):\n            log.warning(\"Analysis results folder does not exist at path %r.\", self.logs_path)\n            return\n\n        logs = os.listdir(self.logs_path)\n        if not logs:\n            log.warning(\"Analysis results folder does not contain any behavior log files.\")\n            return\n\n        for fname in logs:\n            path = os.path.join(self.logs_path, fname)\n            if not os.path.isfile(path):\n                log.warning(\"Behavior log file %r is not a file.\", fname)\n                continue\n\n            analysis_size_limit = self.cfg.processing.analysis_size_limit\n            if analysis_size_limit and \\\n                    os.stat(path).st_size > analysis_size_limit:\n                # This needs to be a big alert.\n                log.critical(\"Behavior log file %r is too big, skipped.\", fname)\n                continue\n\n            yield path\n\n    def run(self):\n        \"\"\"\n        Run analysis.\n\n        :return: results dict.\n        \"\"\"\n        self.cfg = Config()\n        self.state = {}\n\n        # these handlers will be present for any analysis, regardless of platform/format\n        handlers = [\n            GenericBehavior(self),\n            ProcessTree(self),\n            Summary(self),\n            Anomaly(self),\n            ApiStats(self),\n\n            # platform specific stuff\n            WindowsMonitor(self),\n            LinuxSystemTap(self),\n        ]\n\n        # doesn't really work if there's no task, let's rely on the file name for now\n        # # certain handlers only makes sense for a specific platform\n        # # this allows us to use the same filenames/formats without confusion\n        # if self.task.machine.platform == \"windows\":\n        #     handlers += [\n        #         WindowsMonitor(self),\n        #     ]\n        # elif self.task.machine.platform == \"linux\":\n        #     handlers += [\n        #         LinuxSystemTap(self),\n        #     ]\n\n        # create a lookup map\n        interest_map = {}\n        for h in handlers:\n            for event_type in h.event_types:\n                if event_type not in interest_map:\n                    interest_map[event_type] = []\n\n                # If available go for the specific event type handler rather\n                # than the generic handle_event.\n                if hasattr(h, \"handle_%s_event\" % event_type):\n                    fn = getattr(h, \"handle_%s_event\" % event_type)\n                    interest_map[event_type].append(fn)\n                elif h.handle_event not in interest_map[event_type]:\n                    interest_map[event_type].append(h.handle_event)\n\n        # Each log file should be parsed by one of the handlers. This handler\n        # then yields every event in it which are forwarded to the various\n        # behavior/analysis/etc handlers.\n        for path in self._enum_logs():\n            for handler in handlers:\n                # ... whether it is responsible\n                if not handler.handles_path(path):\n                    continue\n\n                # ... and then let it parse the file\n                for event in handler.parse(path):\n                    # pass down the parsed message to interested handlers\n                    for hhandler in interest_map.get(event[\"type\"], []):\n                        res = hhandler(event)\n                        # We support one layer of \"generating\" new events,\n                        # which we'll pass on again (in case the handler\n                        # returns some).\n                        if not res:\n                            continue\n\n                        for subevent in res:\n                            for hhandler2 in interest_map.get(subevent[\"type\"], []):\n                                hhandler2(subevent)\n\n        behavior = {}\n\n        for handler in handlers:\n            try:\n                r = handler.run()\n                if not r:\n                    continue\n\n                behavior[handler.key] = r\n            except:\n                log.exception(\"Failed to run partial behavior class \\\"%s\\\"\", handler.key)\n\n        return behavior\n"
  },
  {
    "path": "modules/processing/buffer.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\n\nfrom lib.cuckoo.common.abstracts import Processing\nfrom lib.cuckoo.common.objects import File\n\nclass DroppedBuffer(Processing):\n    \"\"\"Dropped buffer analysis.\"\"\"\n\n    def run(self):\n        \"\"\"\n        Run analysis.\n        :return: list of dropped files with related information.\n        \"\"\"\n        self.key = \"buffer\"\n        dropped_files = []\n\n        for dir_name, dir_names, file_names in os.walk(self.buffer_path):\n            for file_name in file_names:\n                file_path = os.path.join(dir_name, file_name)\n                file_info = File(file_path=file_path).get_all()\n                dropped_files.append(file_info)\n\n        return dropped_files\n"
  },
  {
    "path": "modules/processing/cuckooml.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport collections\nimport datetime\nimport itertools\nimport json\nimport os\nimport re\nimport sys\nimport time\nfrom lib.cuckoo.common.config import Config\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\nfrom math import log\n\ntry:\n    import matplotlib.pyplot as plt\n    import numpy as np\n    import pandas as pd\n    import seaborn as sns\n    from hdbscan import HDBSCAN\n    from sklearn import metrics\n    from sklearn.cluster import DBSCAN\n    from sklearn.manifold import TSNE\nexcept ImportError, e:\n    print >> sys.stderr, \"Some of the packages required by CuckooML are not \\\n        available.\"\n    print >> sys.stderr, e\n\ndef init_cuckooml():\n    \"\"\"Initialise CuckooML analysis with default parameters.\"\"\"\n    cfg = Config(\"cuckooml\")\n\n    # Load reports for clustering\n    loader = Loader()\n    loader.load_binaries(CUCKOO_ROOT + \"/\" + cfg.cuckooml.data_directory)\n\n    # Get features dictionaries\n    simple_features_dict = loader.get_simple_features()\n    features_dict = loader.get_features()\n    labels_dict = loader.get_labels()\n\n    # Transform them into proper features\n    ml = ML()\n    ml.load_simple_features(simple_features_dict)\n    ml.load_features(features_dict)\n    ml.load_labels(labels_dict)\n\n    simple_features = ml.simple_features\n    features_nominal = ml.feature_category(\":count:\", complement=True)\n    features_numerical = ml.feature_category(\":count:\")\n\n    if cfg.cuckooml.clustering:\n        # Select features\n        selected_features = []\n        sf = [i.strip() for i in cfg.cuckooml.features.split(\",\")]\n        if \"simple\" in sf:\n            selected_features.append(simple_features)\n        if \"nominal\" in sf:\n            selected_features.append(features_nominal)\n        if \"numerical\" in sf:\n            selected_features.append(features_numerical)\n\n        # Apply filters to selected datasets\n        filters = [i.strip() for i in cfg.cuckooml.features_filter.split(\",\")]\n\n        # Check whether features and filters dimension agrees\n        if len(filters) != len(selected_features):\n            print >> sys.stderr, \"Number of *filters* and *selected_features* \\\n                does not agree.\"\n            sys.exit(1)\n\n        data = []\n        for f, d in itertools.izip(filters, selected_features):\n            if f == \"log_bin\":\n                data.append(d.applymap(ml.__log_bin))\n            elif f == \"filter_dataset\":\n                data.append(ml.filter_dataset(d))\n            elif f == \"none\":\n                data.append(d)\n\n        data = pd.concat(data, axis=1)\n\n        # Parse clustering parameters\n        cl_args = \\\n            [i for i in cfg.cuckooml.clustering_parameters.split(\",\")]\n\n        # Select clustering algorithm\n        cls_alg = cfg.cuckooml.clustering_algorithm.lower()\n        if cls_alg == \"hdbscan\":\n            cl_args= [int(i) for i in cl_args]\n            ml.cluster_hdbscan(data, *cl_args)\n        elif cls_alg == \"dbscan\":\n            cl_args= [int(i) for i in cl_args]\n            ml.cluster_dbscan(data, *cl_args)\n\n        # Save clustering fit\n        clf = {}\n        clf[\"clustering+noise\"] = ml.assess_clustering( \\\n                                      ml.clustering[cls_alg][\"clustering\"], \\\n                                      ml.labels, data, discard_noise=False)\n        print \"Clustering fit:\"\n        clf[\"clustering\"] = ml.assess_clustering( \\\n                                ml.clustering[cls_alg][\"clustering\"], \\\n                                ml.labels, data, discard_noise=True)\n        pd.DataFrame(clf).to_csv(\"clustering_fit.csv\", encoding=\"utf-8\")\n\n        # Save clustering results to csv\n        print \"Clustering results saved to `clustering_results.csv`\"\n        ml.clustering[cls_alg][\"clustering\"].to_csv(\"clustering_results.csv\", \\\n                                                    encoding=\"utf-8\")\n        print \"Cluster label distribution saved to \\\n               `cluster_label_distribution.csv`\"\n        ml.clustering_label_distribution(ml.clustering[cls_alg][\"clustering\"], \\\n                                         ml.labels, plot=False)\\\n            .to_csv(\"cluster_label_distribution.csv\", encoding=\"utf-8\")\n\n    # Save abnormal behaviour stats?\n    if cfg.cuckooml.abnormal_behaviour:\n        print \"Abnormal behaviour will be saved to `abnormal_behaviour.csv`\"\n        ml.detect_abnormal_behaviour(features_numerical, figures=False).to_csv(\\\n            \"abnormal_behaviour.csv\", encoding=\"utf-8\")\n\n    if cfg.cuckooml.anomalies_detection:\n        ad = pd.DataFrame(ml.clustering[cls_alg][\"clustering\"][\"label\"])\n        ad.columns = [\"cluster\"]\n        ad_dict = ml.anomaly_detection()\n        for i in ad_dict:\n            if isinstance(ad_dict[i], list):\n                ad[i] = pd.Series([1]*len(ad_dict[i]), index=ad_dict[i])\n            elif isinstance(ad_dict[i], dict):\n                in_list = []\n                for j in ad_dict[i]:\n                    in_list += ad_dict[i][j]\n                ad[i] = pd.Series([1]*len(in_list), index=in_list)\n        print \"Saving anomaly detection results as `anomalies.csv`\"\n        ad.to_csv(\"anomalies.csv\", encoding=\"utf-8\")\n\n\n    if cfg.cuckooml.compare_new_samples:\n        test_location = CUCKOO_ROOT + \"/\" + cfg.cuckooml.test_directory\n\n        new_sample = None\n        if os.path.isdir(test_location):\n            new_sample = Loader()\n            new_sample.load_binaries(test_location)\n        elif os.path.isfile(test_location):\n            new_sample = Instance()\n            new_sample.load_json(test_location)\n            new_sample.label_sample()\n            new_sample.extract_features()\n            new_sample.extract_basic_features()\n        else:\n            print >> sys.stderr, \"Indicated sample(s) to compare with do(es) \\\n                not exist\"\n\n        # Compare new sample(s)\n        if new_sample is not None:\n            ml.compare_sample(new_sample).to_csv(\"test_samples.csv\", \\\n                                                encoding=\"utf-8\")\n\n    if cfg.cuckooml.clustering and cfg.cuckooml.save_clustering_results:\n        if cfg.cuckooml.clustering_results_directory:\n            ml.save_clustering_results(loader, CUCKOO_ROOT+\"/\"+cfg.cuckooml.\\\n                                       clustering_results_directory)\n        else:\n            ml.save_clustering_results(loader)\n\n\nclass ML(object):\n    \"\"\"Feature formatting and machine learning for Cuckoo analysed binaries.\n    All functions marked with asterisk (*) were inspired by code distributed\n    with \"Back to the Future: Malware Detection with Temporally Consistent\n    Labels\" by Brad Miller at al.\"\"\"\n    SIMPLE_CATEGORIES = {\n        \"properties\":[\n            \"has_authenticode\",\n            \"has_pdb\",\n            \"pe_features\",\n            \"packer_upx\",\n            \"has_wmi\"\n        ],\n        \"behaviour\":[\n            \"dumped_buffer2\",\n            \"suspicious_process\",\n            \"persistence_autorun\",\n            \"raises_exception\",\n            \"sniffer_winpcap\",\n            \"injection_runpe\",\n            \"dumped_buffer\",\n            \"exec_crash\",\n            \"creates_service\",\n            \"allocates_rwx\"\n        ],\n        \"exploration\":[\n            \"recon_fingerprint\",\n            \"antidbg_windows\",\n            \"locates_sniffer\"\n        ],\n        \"mutex\":[\n            \"ardamax_mutexes\",\n            \"rat_xtreme_mutexes\",\n            \"bladabindi_mutexes\"\n        ],\n        \"networking\":[\n            \"network_bind\",\n            \"networkdyndns_checkip\",\n            \"network_http\",\n            \"network_icmp\",\n            \"recon_checkip\",\n            \"dns_freehosting_domain\",\n            \"dns_tld_pw\",\n            \"dns_tld_ru\"\n        ],\n        \"filesystem\":[\n            \"modifies_files\",\n            \"packer_polymorphic\",\n            \"creates_exe\",\n            \"creates_doc\"\n        ],\n        \"security\":[\n            \"rat_xtreme\",\n            \"disables_security\",\n            \"trojan_redosru\",\n            \"worm_renocide\",\n            \"antivirus_virustotal\"\n        ],\n        \"virtualisation\":[\n            \"antivm_vbox_files\",\n            \"antivm_generic_bios\",\n            \"antivm_vmware_keys\",\n            \"antivm_generic_services\",\n            \"antivm_vmware_files\",\n            \"antivm_sandboxie\",\n            \"antivm_vbox_keys\",\n            \"antivm_generic_scsi\",\n            \"antivm_vmware_in_instruction\",\n            \"antivm_generic_disk\",\n            \"antivm_virtualpc\"\n        ],\n        \"sanbox\":[\n            \"antisandbox_unhook\",\n            \"antisandbox_mouse_hook\",\n            \"antisandbox_foregroundwindows\",\n            \"antisandbox_productid\",\n            \"antisandbox_idletime\",\n            \"antisandbox_sleep\"\n        ],\n        \"infostealer\":[\n            \"infostealer_browser\",\n            \"infostealer_mail\",\n            \"infostealer_keylogger\",\n            \"infostealer_ftp\",\n        ],\n        \"ransomware\":[\n            \"ransomware_files\",\n            \"ransomware_bcdedit\"\n        ]\n    }\n\n    CATEGORIES = {\n        \"static\":{\n            \":meta:\":[\n                \"\",\n                \"size\",\n                \"timestamp\"\n            ],\n            \":sign:\":[\n                \"\",\n                \"signed\"\n            ],\n            \":heur:\":[\n                \"\"\n            ],\n            \":pack:\":[\n                \"\"\n            ],\n            \":pef:\":[\n                \"lang:\"\n            ],\n            \":simp:\":[\n                \"\",\n                \"count\"\n            ]\n        },\n        \"dynamic\":{\n            \":dimp:\":[\n                \"\",\n                \"proc:\",\n                \"mutex:\"\n            ],\n            \":file:\":{\n              \"touch:\":[\n                  \"\"\n              ],\n                \"count:\":[\n                    \"\",\n                    \"all\",\n                    \"read\",\n                    \"written\",\n                    \"deleted\",\n                    \"copied\",\n                    \"renamed\",\n                    \"opened\",\n                    \"exists\",\n                    \"failed\"\n                ]\n            },\n            \":net:\":[\n                \"\"\n            ],\n            \":reg:\":[\n                \"\",\n                \"write:\",\n                \"del:\"\n            ],\n            \":win:\":[\n                \"\"\n            ]\n        },\n        \"counts\":{\n            \":count:\":{\n                \"lang\":[\"\"],\n                \"simp\":[\n                    \"\",\n                    \":\"\n                ],\n                \"proc\":[\"\"],\n                \"dimp\":[\"\"],\n                \"file:\":[\n                    \"\",\n                    \"all\",\n                    \"read\",\n                    \"written\",\n                    \"deleted\",\n                    \"copied\",\n                    \"renamed\",\n                    \"opened\",\n                    \"exists\",\n                    \"failed\"\n                ],\n                \"tcp\":[\"\"],\n                \"udp\":[\"\"],\n                \"dns\":[\"\"],\n                \"http\":[\"\"],\n                \"reg:\":[\n                    \"\",\n                    \"write\",\n                    \"del\"\n                ],\n                \"wapi\":[\"\"]\n            }\n        }\n    }\n\n    PATTERNS = [r\"Armadillo\", r\"PECompact\", r\"ASPack\", r\"ASProtect\",\n        r\"Upack\", r\"U(PX|px)\", r\"FSG\", r\"BobSoft Mini Delphi\",\n        r\"InstallShield 2000\", r\"InstallShield Custom\",\n        r\"Xtreme\\-Protector\", r\"Crypto\\-Lock\", r\"MoleBox\", r\"Dev\\-C\\+\\+\",\n        r\"StarForce\", r\"Wise Installer Stub\", r\"SVK Protector\",\n        r\"eXPressor\", r\"EXECryptor\", r\"N(s|S)Pac(k|K)\", r\"KByS\",\n        r\"themida\", r\"Packman\", r\"EXE Shield\", r\"WinRAR 32-bit SFX\",\n        r\"WinZip 32-bit SFX\", r\"Install Stub 32-bit\", r\"P(E|e)tite\",\n        r\"PKLITE32\", r\"y(o|0)da's (Protector|Crypter)\", r\"Ste@lth PE\",\n        r\"PE\\-Armor\", r\"KGB SFX\", r\"tElock\", r\"PEBundle\", r\"Crunch\\/PE\",\n        r\"Obsidium\", r\"nPack\", r\"PEX\", r\"PE Diminisher\",\n        r\"North Star PE Shrinker\", r\"PC Guard for Win32\", r\"W32\\.Jeefo\",\n        r\"MEW [0-9]+\", r\"InstallAnywhere\", r\"Anskya Binder\",\n        r\"BeRoEXEPacker\", r\"NeoLite\", r\"SVK\\-Protector\",\n        r\"Ding Boy's PE\\-lock Phantasm\", r\"hying's PEArmor\", r\"E language\",\n        r\"NSIS Installer\", r\"Video\\-Lan\\-Client\", r\"EncryptPE\",\n        r\"HASP HL Protection\", r\"PESpin\", r\"CExe\", r\"UG2002 Cruncher\",\n        r\"ACProtect\", r\"Thinstall\", r\"DBPE\", r\"XCR\", r\"PC Shrinker\",\n        r\"AH(p|P)ack\", r\"ExeShield Protector\",\n        r\"\\* \\[MSLRH\\]\", r\"XJ \\/ XPAL\", r\"Krypton\", r\"Stealth PE\",\n        r\"Goats Mutilator\", r\"PE\\-PACK\", r\"RCryptor\", r\"\\* PseudoSigner\",\n        r\"Shrinker\", r\"PC-Guard\", r\"PELOCKnt\", r\"WinZip \\(32\\-bit\\)\",\n        r\"EZIP\", r\"PeX\", r\"PE( |\\-)Crypt\", r\"E(XE|xe)()?Stealth\",\n        r\"ShellModify\", r\"Macromedia Windows Flash Projector\\/Player\",\n        r\"WARNING ->\", r\"PE Protector\", r\"Software Compress\",\n        r\"PE( )?Ninja\", r\"Feokt\", r\"RLPack\",\n        r\"Nullsoft( PIMP)? Install System\", r\"SDProtector Pro Edition\",\n        r\"VProtector\", r\"WWPack32\", r\"CreateInstall Stub\", r\"ORiEN\",\n        r\"dePACK\", r\"ENIGMA Protector\", r\"MicroJoiner\", r\"Virogen Crypt\",\n        r\"SecureEXE\", r\"PCShrink\", r\"WinZip Self\\-Extractor\",\n        r\"PEiD\\-Bundle\", r\"DxPack\", r\"Freshbind\", r\"kkrunchy\"]\n\n    def __init__(self, context=\"standalone\"):\n        \"\"\"The context variable defines type of operation for the functions\n        using visualisations. *standalone* saves figures as files, *notebook*\n        displays them.\"\"\"\n        self.context = context\n        self.labels = None\n        self.simple_features = None\n        self.simple_features_description = {}\n        self.features = None\n        self.clustering = {}\n\n\n    def __log_bin(self, value, base=3):\n        \"\"\"Return a logarithmic bin of given value. * \"\"\"\n        if value is None:\n            return None\n\n        # Add base -1 to count so that 0 is in its own bin\n        if value < 0:\n            value = 0\n        return int(log(value + base - 1, base))\n\n\n    def __normalise_string(self, string):\n        \"\"\"Get lower case string representation. * \"\"\"\n        if string is None:\n            return None\n\n        return string.lower()\n\n\n    def __simplify_string(self, string, distinguish_voyels=False):\n        \"\"\"Returns a simplified representation of the string where characters\n        are mapped to their representatives. * \"\"\"\n        if string is None:\n            return None\n\n        nums = re.compile(r\"[0-9]\")\n        caps = re.compile(r\"[A-Z]\")\n        smal = re.compile(r\"[a-z]\")\n        caps_c = re.compile(r\"[QWRTPSDFGHJKLZXCVBNM]\")\n        caps_v = re.compile(r\"[EYUIOA]\")\n        smal_c = re.compile(r\"[qwrtpsdfghjklzxcvbnm]\")\n        smal_v = re.compile(r\"[eyuioa]\")\n\n        string = nums.sub('0', string)\n\n        if distinguish_voyels:\n            string = caps_c.sub('B', string)\n            string = caps_v.sub('A', string)\n            string = smal_c.sub('b', string)\n            string = smal_v.sub('a', string)\n            return string\n\n        string = caps.sub('A', string)\n        string = smal.sub('a', string)\n        return string\n\n\n    def __n_grams(self, string, n=3, reorder=False):\n        \"\"\"Returns a *set* of n-grams. If the iterable is smaller than n, it is\n        returned itself. * \"\"\"\n        if string is None:\n            return None\n\n        if len(string) <= n:\n            if reorder:\n                return set([\"\".join(sorted(string))])\n            return set([string])\n\n        ngrams = set()\n        for i in range(0, len(string) - n + 1):\n            if reorder:\n                ngrams.add(\"\".join(sorted(string[i:i+n])))\n            else:\n                ngrams.add(string[i:i+n])\n\n        return ngrams\n\n\n    def __handle_string(self, string):\n        \"\"\"Apply normalisation, simplification and n-gram extraction to a\n        string. If the string is missing (None) return empty list.\"\"\"\n        handled = self.__n_grams(\n                   self.__simplify_string(\n                       self.__normalise_string(string)\n                   )\n               )\n        if handled is None:\n            return []\n        else:\n            return handled\n\n\n    def extract_labels(self, labels):\n        \"\"\"Extract labels into pandas data frame.\"\"\"\n        return pd.DataFrame(labels, index=[\"label\"]).T\n\n\n    def load_labels(self, labels):\n        \"\"\"Load labels into pandas data frame.\"\"\"\n        self.labels = self.extract_labels(labels)\n\n\n    def extract_simple_features(self, simple_features):\n        \"\"\"Extract simple features form an external object into pandas data\n        frame.\"\"\"\n        simple_features = pd.DataFrame(simple_features).T\n        simple_features.fillna(False, inplace=True)\n        # Convert to bool: True/False\n        simple_features = simple_features.astype(bool)\n        # Change to int: 1/0\n        simple_features = simple_features.astype(int)\n\n        # Aggregate features descriptions\n        simple_features_description = {}\n        for binary in simple_features:\n            for token in simple_features[binary]:\n                if token not in simple_features_description:\n                    simple_features_description[token] = \\\n                        simple_features[binary][token]\n\n        return simple_features, simple_features_description\n\n\n    def load_simple_features(self, simple_features):\n        \"\"\"Load simple features form an external object into pandas data\n        frame.\"\"\"\n        self.simple_features , self.simple_features_description = \\\n            self.extract_simple_features(simple_features)\n\n\n    def export_simple_dataset(self, filename=\"simple_dataset.csv\"):\n        \"\"\"Export a dataset consisting of malware labels and *simple* features\n        to CSV formatted file.\"\"\"\n        # Check if data and labels are loaded\n        if self.simple_features is None:\n            print \"Please load simple features first.\"\n            return\n\n        if self.labels is None:\n            print \"Please load labels first.\"\n            return\n\n        simple_dataset = pd.concat([self.simple_features, self.labels], axis=1)\n        simple_dataset.to_csv(filename)\n\n\n    def simple_feature_category(self, category=\"properties\"):\n        \"\"\"Get simple feature data frame containing only features form selected\n        category.\"\"\"\n        if self.simple_features is None:\n            print \"Simple features are not loaded. Please load them before \\\n                   extracting categories.\"\n            return None\n\n        return self.simple_features.loc[:, self.SIMPLE_CATEGORIES[category]]\n\n\n    def extract_features(self, features, include_API_calls=False, \\\n                      include_API_calls_count=False):\n        \"\"\"Extract features form an external object into pandas data frame.\"\"\"\n        my_features = {}\n        for i in features:\n            my_features[i] = {}\n\n            # Exponentially bin the binary size and timestamp\n            my_features[i][\":meta:size\"] = self.__log_bin(features[i][\"size\"])\n            my_features[i][\":meta:timestamp\"] = \\\n                self.__log_bin(features[i][\"timestamp\"])\n\n            # Handle ExifTool output\n            exif = [\"FileDescription\", \"OriginalFilename\", \"magic_byte\"]\n            for e in exif:\n                for j in self.__handle_string(features[i][e]):\n                    my_features[i][\":meta:\" + j] = 1\n\n            # Is the binary signed?\n            my_features[i][\":sign:signed\"] = int(features[i][\"signed\"])\n            # And other signature features\n            signature = [\"Comments\", \"ProductName\", \"LegalCopyright\",\n                         \"InternalName\", \"CompanyName\"]\n            for s in signature:\n                for j in self.__handle_string(features[i][s]):\n                    my_features[i][\":sign:\" + j] = 1\n\n            # Extract packer\n            regexps = [re.compile(pattern) for pattern in self.PATTERNS]\n            if features[i][\"packer\"] is not None:\n                for packer in features[i][\"packer\"]:\n                    for regexp in regexps:\n                        if regexp.search(packer):\n                            my_features[i][\":pack:\" + regexp.pattern] = 1\n                            break\n\n            # Vectorise PEFs\n            for j in features[i][\"languages\"]:\n                j_norm = self.__normalise_string(j)\n                my_features[i][\":pef:lang:\" + j_norm] = 1\n            # Get number of languages\n            my_features[i][\":count:lang\"] = len(features[i][\"languages\"])\n            # TODO: handle *section_attrs* and *resource_attrs*\n\n            # Categorise static imports\n            # TODO: use binning for this count\n            my_features[i][\":simp:count\"] = \\\n                features[i][\"static_imports\"][\"count\"]\n            static_imports_dlls = features[i][\"static_imports\"].keys()\n            static_imports_dlls.remove(\"count\")\n            # Count static imports\n            my_features[i][\":count:simp\"] = len(static_imports_dlls)\n            for j in static_imports_dlls:\n                my_features[i][\":simp:\" + j] = 1\n                # TODO: include API calls?\n                if include_API_calls:\n                    for k in features[i][\"static_imports\"][j]:\n                        my_features[i][\":simp:\" + j + \":\" + k] = 1\n                # Count static imports API calls\n                if include_API_calls_count:\n                    my_features[i][\":count:simp:\" + j] = \\\n                        len(features[i][\"static_imports\"][j])\n\n            # Categorise dynamic imports\n            if features[i][\"mutex\"] is not None:\n                for mutex in features[i][\"mutex\"]:\n                    for j in self.__handle_string(mutex):\n                        my_features[i][\":dimp:mutex:\" + j] = 1\n                # Count mutexes\n                my_features[i][\":count:mutex\"] = len(features[i][\"mutex\"])\n            for process in features[i][\"processes\"]:\n                my_features[i][\":dimp:proc:\" + process] = 1\n            # Count processes\n            my_features[i][\":count:proc\"] = len(features[i][\"processes\"])\n            for di in features[i][\"dynamic_imports\"]:\n                my_features[i][\":dimp:\" + di] = 1\n            # Count dynamic imports\n            my_features[i][\":count:dimp\"] = \\\n                len(features[i][\"dynamic_imports\"])\n\n            # File operations\n            # TODO: tell apart different file operations by prefixing\n            # Files touched\n            touch = [\"file_read\", \"file_written\", \"file_deleted\", \"file_copied\",\n                     \"file_renamed\"]\n            for t in touch:\n                for f in features[i][t]:\n                    my_features[i][\":file:touch:\" + f] = 1\n            # TODO: better binning (linear not logarithmic)\n            # File numbers\n            operation_number = [(\"all\", \"files_operations\"),\n                                (\"read\", \"files_read\"),\n                                (\"written\", \"files_written\"),\n                                (\"deleted\", \"files_deleted\"),\n                                (\"copied\", \"files_copied\"),\n                                (\"renamed\", \"files_renamed\"),\n                                (\"opened\", \"files_opened\"),\n                                (\"exists\", \"files_exists\"),\n                                (\"failed\", \"files_failed\")]\n            for o in operation_number:\n                my_features[i][\":file:count:\" + o[0]] = \\\n                    self.__log_bin(features[i][o[1]])\n                my_features[i][\":count:file:\" + o[0]] = \\\n                    features[i][o[1]]\n\n            # Networking\n            # TODO: include subnets\n            # TODO: tell apart type of connection: prefix features with \"tcp\",\n            #       \"udp\", \"dns\"\n            for tcp in features[i][\"tcp\"]:\n                my_features[i][\":net:\" + tcp] = 1\n            for udp in features[i][\"udp\"]:\n                my_features[i][\":net:\" + udp] = 1\n            for dns in features[i][\"dns\"]:\n                my_features[i][\":net:\" + dns] = 1\n                for j in features[i][\"dns\"][dns]:\n                    my_features[i][\":net:\" + j] = 1\n            for http in features[i][\"http\"]:\n                my_features[i][\":net:\" + features[i][\"http\"][http][\"host\"]] \\\n                    = 1\n            # Count tcp addresses\n            my_features[i][\":count:tcp\"] = len(features[i][\"tcp\"])\n            # Count udp addresses\n            my_features[i][\":count:udp\"] = len(features[i][\"udp\"])\n            # Count dns addresses\n            my_features[i][\":count:dns\"] = len(features[i][\"dns\"])\n            # Count http addresses\n            my_features[i][\":count:http\"] = len(features[i][\"http\"])\n\n            # Register operations\n            for rw in features[i][\"regkey_written\"]:\n                my_features[i][\":reg:write:\" + rw] = 1\n            # Count register keys written\n            my_features[i][\":count:reg:write\"] = \\\n                len(features[i][\"regkey_written\"])\n            for rd in features[i][\"regkey_deleted\"]:\n                my_features[i][\":reg:del:\" + rd] = 1\n            # Count register keys written\n            my_features[i][\":count:reg:del\"] = \\\n                len(features[i][\"regkey_deleted\"])\n\n            # Windows API\n            # TODO: better binning (linear not logarithmic)\n            for wapi in features[i][\"api_stats\"]:\n                my_features[i][\":win:\" + wapi] = \\\n                    self.__log_bin(features[i][\"api_stats\"][wapi])\n            # Count Windows API calls\n            my_features[i][\":count:wapi\"] = len(features[i][\"api_stats\"])\n\n        # Make Pandas DataFrame from the dictionary\n        features_pd = pd.DataFrame(my_features).T\n        # TODO: the operation below cannot tell apart missing vales and None\n        features_pd.fillna(0, inplace=True)\n        return features_pd\n\n\n    def load_features(self, features, include_API_calls=False, \\\n                      include_API_calls_count=False):\n        \"\"\"Load features form an external object into pandas data frame.\"\"\"\n        self.features = self.extract_features(features, include_API_calls,\n                                              include_API_calls_count)\n\n\n    def export_dataset(self, filename=\"dataset.csv\"):\n        \"\"\"Export a dataset consisting of malware labels and features to CSV\n        formatted file.\"\"\"\n        # Check if data and labels are loaded\n        if self.features is None:\n            print \"Please load features first.\"\n            return\n\n        if self.labels is None:\n            print \"Please load labels first.\"\n            return\n\n        dataset = pd.concat([self.features, self.labels], axis=1)\n        dataset.to_csv(filename, encoding='utf-8')\n\n\n    def feature_category(self, category=\"static\", complement=False):\n        \"\"\"Get feature data frame containing only features form selected\n        category (or their complement).\"\"\"\n        def pull_names(obj, prefix=\"\"):\n            ret = []\n            if isinstance(obj, dict):\n                if prefix: ret.append(prefix)\n                for key in obj:\n                    ret += pull_names(obj[key], prefix + key)\n                return ret\n            elif isinstance(obj, list):\n                for i in obj:\n                    ret.append(prefix + i)\n                return ret\n\n        if self.features is None:\n            print \"Features are not loaded. Please load them before extracting \\\n                   categories.\"\n            return None\n\n        # Pull all possible categories\n        categories = self.CATEGORIES.keys()\n        for cat in self.CATEGORIES:\n            categories += pull_names(self.CATEGORIES[cat])\n\n        # Check if chosen category is available\n        if category not in categories:\n            print \"Chosen category:\", category, \"is not available.\\n\\\n                   please choose one of the following:\"\n            print \", \".join(categories)\n            return None\n\n        # Get a list of specified prefixes\n        if category == \"static\" or category == \"dynamic\" or category == \"count\":\n            category = pull_names(category)\n        else:\n            category = [category]\n\n        extract = []\n        # TODO: what if we want exact match but most starts with word\n        for col in self.features:\n            for c in category:\n                if complement and not col.startswith(c):\n                    extract.append(col)\n                elif not complement and col.startswith(c):\n                    extract.append(col)\n\n        return self.features.loc[:, extract]\n\n\n    def filter_dataset(self, dataset=None, feature_coverage=0.1,\n                       complement=False):\n        \"\"\"Prune features that are useless.\"\"\"\n        if dataset is None:\n            dataset = self.features.copy()\n\n        # Remove sparse features\n        row_count = dataset.shape[0]\n        remove_features = []\n        for col in dataset:\n            zero_count = 0.0\n            for row in dataset[col]:\n                if not row:\n                    zero_count += 1\n            # XOR\n            if complement != (row_count-zero_count)/row_count<feature_coverage:\n                remove_features.append(col)\n        dataset.drop(remove_features, axis=1, inplace=True)\n\n        return dataset\n\n\n    def detect_abnormal_behaviour(self, count_dataset=None, figures=True):\n        \"\"\"Detect samples that behave significantly different than others.\"\"\"\n        if count_dataset is None:\n            # Pull all count features\n            count_features = self.feature_category(\":count:\")\n            meta_size = self.feature_category(\":meta:size\")\n            simp_count = self.feature_category(\":simp:count\")\n            count_dataset = pd.concat([count_features, meta_size, \\\n                                      simp_count], axis=1)\n\n        if not figures:\n            ret = {}\n        for f in count_dataset:\n            # Produce boxplots\n            if figures:\n                sns.boxplot(count_dataset[f])\n                sns.swarmplot(count_dataset[f], color=\".25\")\n                plt.title(\"Abnormal behaviour detection for \" + f)\n                if self.context == \"notebook\":\n                    plt.show()\n                else:\n                    plt.savefig(\"abnormal_behaviour_\" + f.replace(\":\", \"_\") + \\\n                                \".png\")\n                    plt.close()\n\n            # Get list of local outliers\n            f_1_quartile = count_dataset[f].quantile(0.25)\n            f_3_quartile = count_dataset[f].quantile(0.75)\n            f_IQR = f_3_quartile - f_1_quartile\n            f_outliers = []\n            f_suspected_outliers = []\n            for s in count_dataset[f].index:\n                if count_dataset[f][s] > f_3_quartile+3*f_IQR or \\\n                        count_dataset[f][s] < f_1_quartile-3*f_IQR:\n                    f_outliers.append(s)\n                    continue\n                if count_dataset[f][s] > f_3_quartile+1.5*f_IQR or \\\n                        count_dataset[f][s] < f_1_quartile-1.5*f_IQR:\n                    f_suspected_outliers.append(s)\n            if figures:\n                print f\n                print \"Outliers: \", \", \".join(f_outliers)\n                print \"Suspected outliers: \", \", \".join(f_suspected_outliers)\n                print \"------------------------------------------------------------\"\n            else:\n                ret[f] = {\"outliers\": f_outliers,\n                          \"suspect_outliers\": f_suspected_outliers}\n        if not figures:\n            return pd.DataFrame(ret).T\n\n\n    def visualise_data(self, data=None, labels=None, learning_rate=200,\n                       fig_name=\"custom\"):\n        \"\"\"Create t-Distributed Stochastic Neighbor Embedding for features and\n        labels to help inspect the data.\"\"\"\n        if data is None:\n            data = self.features\n        if labels is None:\n            labels = self.labels\n\n        tsne = TSNE(learning_rate=learning_rate)\n        tsne_fit = tsne.fit_transform(data)\n        tsne_df = pd.DataFrame(tsne_fit, index=data.index, columns=['0', '1'])\n        tsne_dfl = pd.concat([tsne_df, labels], axis=1)\n\n        sns.lmplot(\"0\", \"1\", data=tsne_dfl, fit_reg=False, hue=\"label\",\n                   scatter_kws={\"marker\":\"D\", \"s\":50}, legend_out=True)\n        plt.title(fig_name + \" (lr:\" + str(learning_rate) + \")\")\n        if self.context == \"notebook\":\n            plt.show()\n        else:\n            plt.savefig(fig_name + \"_\" + str(learning_rate) + \".png\",\n                        bbox_inches='tight', pad_inches=1.)\n            plt.close()\n\n\n    def save_dataset(self, filename=\"custom_dataset.csv\", features=None, \\\n                     labels=None):\n        \"\"\"Export a dataset to CSV formatted file.\"\"\"\n        # Check if data and labels are loaded\n        if features is None:\n            print \"You must indicate data to be saved.\"\n            return\n\n        if labels is None:\n            print \"You didn't indicate labels to be used. Internal labels will \\\n                   be used.\"\n            if self.labels is None:\n                print \"Internal labels not available.\"\n                return\n            else:\n                labels = self.labels\n\n        dataset = pd.concat([features, labels], axis=1)\n        dataset.to_csv(filename, encoding='utf-8')\n\n\n    def cluster_dbscan(self, features=None, eps=20.0, min_samples=5, dry=False):\n        \"\"\"Do *dbscan* clustering and return \"\"\"\n        if features is None:\n            print \"You didn't indicate features to be used. Internal features \\\n                will be used.\"\n            if self.features is None:\n                print \"Internal features not available.\"\n                return\n            else:\n                features = self.features\n\n        dbscan = DBSCAN(eps=eps, min_samples=min_samples).fit(features)\n\n        # TODO: Allow storing multiple clustering results based on parameters\n        if dry:\n            return {\n                \"eps\":eps,\n                \"min_samples\":min_samples,\n                \"clustering\":pd.DataFrame(dbscan.labels_, index=features.index,\n                                        columns=[\"label\"])\n            }\n        else:\n            # if \"dbscan\" not in self.clustering:\n                # self.clustering[\"dbscan\"] = {}\n            # clustering_hash = \"eps:%f&min_samples:%d\" % (eps, min_samples)\n            self.clustering[\"dbscan\"] = {\n            # self.clustering[\"dbscan\"][clustering_hash] = {\n                \"eps\":eps,\n                \"min_samples\":min_samples,\n                \"clustering\":pd.DataFrame(dbscan.labels_, index=features.index,\n                                        columns=[\"label\"])\n            }\n\n\n    def cluster_hdbscan(self, features=None, min_samples=1, \\\n                        min_cluster_size=6, dry=False):\n        \"\"\"Do *hdbscan* clustering and return \"\"\"\n        if features is None:\n            print \"You didn't indicate features to be used. Internal features \\\n                will be used.\"\n            if self.features is None:\n                print \"Internal features not available.\"\n                return\n            else:\n                features = self.features\n\n        hdbscan = HDBSCAN(min_samples=min_samples, \\\n                          min_cluster_size=min_cluster_size)\n        hdbscan_fit = hdbscan.fit(features)\n        hdbscan_stats = np.column_stack([hdbscan_fit.labels_,\n                                         hdbscan_fit.probabilities_,\n                                         hdbscan_fit.outlier_scores_])\n\n        # TODO: Allow storing multiple clustering results based on parameters\n        if dry:\n            return {\n                \"min_samples\":min_samples,\n                \"min_cluster_size\":min_cluster_size,\n                \"clustering\":pd.DataFrame(hdbscan_stats, index=features.index,\n                                          columns=[\"label\", \"probability\",\n                                                   \"outlier_score\"])\n            }\n        else:\n            # if \"hdbscan\" not in self.clustering:\n                # self.clustering[\"hdbscan\"] = {}\n            # clustering_hash = \"min_samples:%s&min_cluster_size:%d\" % \\\n                # (min_samples, min_cluster_size)\n            # self.clustering[\"hdbscan\"][clustering_hash] = {\n            self.clustering[\"hdbscan\"] = {\n                \"min_samples\":min_samples,\n                \"min_cluster_size\":min_cluster_size,\n                \"clustering\":pd.DataFrame(hdbscan_stats, index=features.index,\n                                          columns=[\"label\", \"probability\",\n                                                   \"outlier_score\"])\n            }\n\n\n    def save_clustering_results(self, loader, save_location=\"\"):\n        \"\"\"Update JSONs report files with clustering results\"\"\"\n        # TODO: Allow storing multiple clustering results based on parameters\n        hdbscan_root = [\"info\", \"clustering\", \"hdbscan\"]\n        hdbscan_paths = {\"label\":\"clusterID\",\n                         \"probability\":\"clusterProbability\",\n                         \"outlier_score\":\"outlierScore\"}\n        if \"hdbscan\" in self.clustering:\n            loader.update_binaries(self.clustering[\"hdbscan\"][\"clustering\"],\n                                   hdbscan_root, hdbscan_paths)\n            loader.update_binaries(self.clustering[\"hdbscan\"][\"min_samples\"],\n                                   hdbscan_root, \"min_samples\")\n            loader.update_binaries(\n                self.clustering[\"hdbscan\"][\"min_cluster_size\"], hdbscan_root,\n                \"min_cluster_size\")\n\n        dbscan_root = [\"info\", \"clustering\", \"dbscan\"]\n        dbscan_paths = {\"label\":\"clusterID\"}\n        if \"dbscan\" in self.clustering:\n            loader.update_binaries(self.clustering[\"dbscan\"][\"clustering\"],\n                                   dbscan_root, dbscan_paths)\n            loader.update_binaries(self.clustering[\"dbscan\"][\"eps\"],\n                                   dbscan_root, \"eps\")\n            loader.update_binaries(self.clustering[\"dbscan\"][\"min_samples\"],\n                                   dbscan_root, \"min_samples\")\n\n        loader.save_binaries(save_location)\n\n\n    def anomaly_detection(self, samples=None, labels=None,\n                          probability_threshold=0.9, outlier_threshold=0.5,\n                          homogeneity_threshold=0.2):\n        \"\"\"Detect anomalies in clustering using samples classified as noise and\n        low probability cluster membership.\"\"\"\n        if \"hdbscan\" not in self.clustering:\n            print \"Soft clustering is needed for *anomaly detection*.\", \\\n                \"Currently only *HDBSCAN* is supported.\"\n            return\n\n        if labels is None:\n            labels = self.labels\n        if samples is None:\n            samples = self.clustering[\"hdbscan\"][\"clustering\"]\n        sample = samples.copy()\n        sample.rename(columns={\"label\": \"cluster\"}, inplace=True)\n        sample = pd.concat([sample, labels], axis=1)\n\n        anomalies = {}\n\n        anomalies[\"outliers\"] = sample[sample.cluster == -1].index.tolist()\n        # TODO: cluster ID and samples most similar to given outlier\n\n        # Clustered as X but below threshold\n        anomalies[\"low_probability\"] = \\\n            sample.loc[sample.probability < probability_threshold] \\\n                  .loc[sample.cluster != -1].index.tolist()\n\n        # High outlier score\n        anomalies[\"high_outlier_score\"] = \\\n            sample.loc[sample.outlier_score > outlier_threshold] \\\n                  .loc[sample.cluster != -1].index.tolist()\n\n        # Within cluster inconsistencies - detect non-homogeneous clusters\n        anomalies[\"homogeneity_suspects\"] = {}\n        for i in set(sample[\"cluster\"].tolist()):\n            c = collections.Counter(\n                sample[sample.cluster == i][\"label\"].tolist())\n            total = float(sum(c.values()))\n            suspicious = [j for j in c if c[j]/total < homogeneity_threshold]\n\n            anomalies[\"homogeneity_suspects\"][i] = []\n            for j in suspicious:\n                anomalies[\"homogeneity_suspects\"][i] += \\\n                    sample.loc[sample.cluster == i].loc[sample.label == j] \\\n                    .index.tolist()\n\n        return anomalies\n\n\n    def compare_sample(self, sample, amend=False):\n        \"\"\"Compare new sample with current clustering.\"\"\"\n        if isinstance(sample, Instance):\n            # Retrieve cluster ID\n            # TODO: this alters cluster structure-retraining needs to be removed\n            features = self.extract_features({\"?\"+sample.name: sample.features})\n            # simple_features = self.extract_simple_features(\n                # {\"?\"+sample.name: sample.basic_features})\n            # label = self.extract_labels({\"?\"+sample.name: sample.label})\n            extended_features = pd.concat([self.features, features])\n            extended_features.fillna(0, inplace=True)\n            clustering = self.cluster_hdbscan(features=extended_features, \\\n                                              dry=True)\n            clustering_result = clustering[\"clustering\"].loc[\"?\"+sample.name]\n\n            # TODO: return samples that are the most similar to the analysed one\n\n            # Save clustering information to the sample's JSON\n            if amend:\n                root = [\"info\", \"clustering\", \"hdbscan\"]\n                sample.update(clustering_result[\"label\"], root+[\"clusterID\"])\n                sample.update(clustering_result[\"probability\"],\n                            root+[\"clusterProbability\"])\n                sample.update(clustering_result[\"outlier_score\"],\n                            root+[\"outlierScore\"])\n                sample.update(clustering[\"min_samples\"], \"min_samples\")\n                sample.update(clustering[\"min_cluster_size\"], \\\n                              \"min_cluster_size\")\n                sample.save_json(os.path.dirname(sample.json_path)+\"/\")\n        # TODO: handle more than one test sample\n        elif isinstance(sample, Loader):\n            clustering_result = pd.DataFrame()\n\n        return clustering_result\n\n\n    def assess_clustering(self, clustering, labels, data=None,\n                          discard_noise=False):\n        \"\"\"Assess clusters fit according to variety of metrics.\"\"\"\n        def performance_metric(clustering, labels, data, noise):\n            performance_metrics = {}\n            performance_metrics[\"Adjusted Random Index\"] = \\\n                metrics.adjusted_rand_score(labels, clustering)\n            performance_metrics[\"Adjusted Mutual Information Score\"] = \\\n                metrics.adjusted_mutual_info_score(labels, clustering)\n            performance_metrics[\"Homogeneity\"] = \\\n                metrics.homogeneity_score(labels, clustering)\n            performance_metrics[\"Completeness\"] = \\\n                metrics.completeness_score(labels, clustering)\n            performance_metrics[\"V-measure\"] = \\\n                metrics.v_measure_score(labels, clustering)\n\n            if data is None or noise:\n                return performance_metrics\n            performance_metrics[\"Silhouette Coefficient\"] = \\\n                metrics.silhouette_score(data, np.array(clustering))\n\n            return performance_metrics\n\n        cluster_label = clustering[\"label\"].tolist()\n        ground_label = labels[\"label\"].tolist()\n\n        if discard_noise:\n            clustering= []\n            labels = []\n            noise_clustering = []\n            noise_labels = []\n            for c, g in itertools.izip(cluster_label, ground_label):\n                if c == -1:\n                    noise_clustering.append(c)\n                    noise_labels.append(g)\n                else:\n                    clustering.append(c)\n                    labels.append(g)\n            # print performance_metric(noise_clustering, noise_labels, \\\n            #                          data, True)\n        else:\n            clustering = cluster_label\n            labels = ground_label\n\n        return performance_metric(clustering, labels, data, discard_noise)\n\n\n    def clustering_label_distribution(self, clustering, labels, plot=False):\n        \"\"\"Get statistics about number of ground truth labels per cluster.\"\"\"\n        cluster_ids = set(clustering[\"label\"].tolist())\n        labels_ids = set(labels[\"label\"].tolist())\n        cluster_distribution = {}\n        for i in cluster_ids:\n            cluster_distribution[i] = {}\n            for j in labels_ids:\n                cluster_distribution[i][j] = 0\n\n        for i in clustering.index:\n            cluster_distribution[clustering[\"label\"][i]][labels[\"label\"][i]] \\\n                += 1\n\n        if plot:\n            for i in cluster_distribution:\n                fig = plt.figure()\n                ax = fig.add_subplot(111)\n                yticks = []\n                counter = 0\n                for j in cluster_distribution[i]:\n                    if cluster_distribution[i][j]:\n                        ax.barh(counter, cluster_distribution[i][j])\n                        counter += 1\n                        yticks.append(j)\n                yticks_range = [l+.4 for l in range(len(yticks))]\n                plt.yticks(yticks_range, yticks)\n                ax.set_ylim([0, yticks_range[-1]+.4])\n                plt.title(\"Cluster: %d\" % i)\n                if self.context == \"notebook\":\n                    plt.show()\n                else:\n                    plt.savefig(\"cluster_%d%s\" % (i, \".png\"), bbox_inches=\"tight\")\n                    plt.close()\n        else:\n            cluster_distribution = pd.DataFrame(cluster_distribution).T\n            cluster_distribution.index.name = \"cluster_id\"\n            return cluster_distribution\n\n\nclass Loader(object):\n    \"\"\"Loads instances for analysis and give possibility to extract properties\n    of interest.\"\"\"\n    def __init__(self):\n        self.binaries = {}\n        self.binaries_location = \"\"\n        self.binaries_updated = False\n\n\n    def load_binaries(self, directory):\n        \"\"\"Load all binaries' reports from given directory.\"\"\"\n        self.binaries_location = directory + \"/\"\n        for f in os.listdir(directory):\n            self.binaries[f] = Instance()\n            self.binaries[f].load_json(directory+\"/\"+f, f)\n            self.binaries[f].label_sample()\n            self.binaries[f].extract_features()\n            self.binaries[f].extract_basic_features()\n\n\n    def update_binaries(self, elements, root, locations):\n        \"\"\"Append `elements` to the loaded JSONs at given `locations`.\"\"\"\n        if isinstance(elements, pd.DataFrame) and isinstance(locations, dict):\n            self.binaries_updated = True\n            for i in elements.index:\n                for j in elements.columns:\n                    self.binaries[i].update(elements[j][i], root+[locations[j]])\n        elif isinstance(locations, str):\n            self.binaries_updated = True\n            for i in self.binaries:\n                self.binaries[i].update(elements, root+[locations])\n\n\n    def save_binaries(self, alternative_location=\"\"):\n        \"\"\"Save the binaries to given location if they have been updated.\"\"\"\n        if self.binaries_updated:\n            save_location = self.binaries_location\n            if alternative_location:\n                save_location = alternative_location\n                if save_location[-1] != \"/\":\n                    save_location += \"/\"\n\n            # Create directory if it does not exist\n            if not os.path.exists(save_location):\n                os.makedirs(save_location)\n\n            for f in self.binaries:\n                self.binaries[f].save_json(save_location)\n            self.binaries_updated = False\n        else:\n            print \"The binaries haven't been updated. No need to save them.\"\n\n\n    def get_labels(self):\n        \"\"\"Return binary labels as a labelled dictionary.\"\"\"\n        labels = {}\n        for i in self.binaries:\n            labels[i] = self.binaries[i].label\n        return labels\n\n\n    def get_features(self):\n        \"\"\"Return complex binary features as a labelled dictionary.\"\"\"\n        features = {}\n        for i in self.binaries:\n            features[i] = self.binaries[i].features\n        return features\n\n\n    def get_simple_features(self):\n        \"\"\"Return simplified binary features as a labelled dictionary.\"\"\"\n        simple_features = {}\n        for i in self.binaries:\n            simple_features[i] = self.binaries[i].basic_features\n        return simple_features\n\n\nclass Instance(object):\n    \"\"\"Machine Learning for Cuckoo.\"\"\"\n    LABEL_SIGNIFICANCE_COUNT = 5\n    POSITIVE_RATE = 2 * LABEL_SIGNIFICANCE_COUNT\n\n    def __init__(self):\n        self.json_path = \"\"\n        self.name = \"\"\n        self.report = None\n        self.total = None\n        self.positives = None\n        self.scans = None\n        self.label = None\n        self.features = {}\n        self.basic_features = {}\n\n\n    def load_json(self, json_file, name=\"unknown\"):\n        \"\"\"Load JSON formatted malware report. It can handle both a path to\n        JSON file and a dictionary object.\"\"\"\n        if isinstance(json_file, str):\n            self.json_path = json_file\n            with open(json_file, \"r\") as malware_report:\n                try:\n                    self.report = json.load(malware_report)\n                except ValueError, error:\n                    print >> sys.stderr, \"Could not load file;\", \\\n                        malware_report, \"is not a valid JSON file.\"\n                    print >> sys.stderr, \"Exception: %s\" % str(error)\n                    sys.exit(1)\n        elif isinstance(json_file, dict):\n            self.report = json_file\n        else:\n            # Unknown binary format\n            print >> sys.stderr, \"Could not load the data *\", json, \"* is of \" \\\n                \"unknown type: \", type(json), \".\"\n\n        self.name = name\n\n        # Get total and positives\n        self.total = self.report.get(\"virustotal\").get(\"total\")\n        self.positives = self.report.get(\"virustotal\").get(\"positives\")\n        # Pull all VT normalised results\n        self.scans = self.report.get(\"virustotal\").get(\"scans\")\n\n\n    def label_sample(self, external_labels=None, label_type=\"family\"):\n        \"\"\"Generate label for the loaded sample.\n        You can use platform, cve, metatype, type, and family (default).\"\"\"\n        merged_labels = []\n\n        if external_labels is None and self.scans is not None:\n            for vendor in self.scans:\n                merged_labels += self.scans[vendor][\"normalized\"][label_type]\n        elif external_labels is not None and self.scans is None:\n            merged_labels = external_labels\n\n        if not merged_labels:\n            self.label = \"none\"\n            return\n\n        # Get most common label if it has more hits than set threshold\n        labels_frequency = collections.Counter(merged_labels)\n        top_label, top_label_count = labels_frequency.most_common(1)[0]\n        if top_label_count >= self.LABEL_SIGNIFICANCE_COUNT:\n                # self.positives >= self.POSITIVE_RATE:\n            self.label = top_label.encode(\"ascii\", \"ignore\")\n        else:\n            self.label = \"none\"\n\n\n    def update(self, element, location):\n        \"\"\"Insert `element` at given `location`.\"\"\"\n        element_to_update = self.report\n        for l in location[:-1]:\n            etu = element_to_update.get(l)\n            if etu is None:\n                element_to_update[l] = {}\n                element_to_update = element_to_update.get(l)\n            else:\n                element_to_update = etu\n        element_to_update[location[-1]] = element\n\n\n    def save_json(self, root_dir):\n        \"\"\"Save JSON stored in the class to a file.\"\"\"\n        with open(root_dir+self.name, \"w\") as j_file:\n            json.dump(self.report, j_file)\n\n\n    def extract_features(self):\n        \"\"\"Extract features of the loaded sample.\"\"\"\n        self.extract_features_static()\n        self.extract_features_dynamic()\n\n\n    def extract_features_static(self):\n        \"\"\"Extract static features of the loaded sample.\"\"\"\n        self.feature_static_metadata()\n        self.feature_static_signature()\n        self.feature_static_heuristic()\n        self.feature_static_packer()\n        self.feature_static_pef()\n        self.feature_static_imports()\n\n\n    def extract_features_dynamic(self):\n        \"\"\"Extract dynamic features of the loaded sample.\"\"\"\n        self.feature_dynamic_imports()\n        self.feature_dynamic_filesystem()\n        self.feature_dynamic_network()\n        self.feature_dynamic_registry()\n        self.feature_dynamic_windowsapi()\n\n\n    def feature_static_metadata(self):\n        \"\"\"Create features form extracted binary metadata.\"\"\"\n        # Get binary size\n        self.features[\"size\"] = \\\n            self.report.get(\"target\", {}).get(\"file\", {}).get(\"size\")\n\n        # Get binary timestamp in the UNIX timestamp format\n        str_dt = self.report.get(\"static\", {}).get(\"pe_timestamp\")\n        ts = None\n        if str_dt is not None:\n            dt = datetime.datetime.strptime(str_dt, \"%Y-%m-%d %H:%M:%S\")\n            ts = int(time.mktime(dt.timetuple()))\n        self.features[\"timestamp\"] = ts\n\n        # ExifTool output\n        et_tokens = [\"FileDescription\", \"OriginalFilename\"]\n        for token in et_tokens:\n            self.features[token] = None\n        for attr in self.report.get(\"static\", {}).get(\"pe_versioninfo\", []):\n            attr_name = attr.get(\"name\")\n            if attr_name in et_tokens:\n                self.features[attr_name] = attr.get(\"value\")\n\n        # Magic byte\n        self.features[\"magic_byte\"] = \\\n            self.report.get(\"target\", {}).get(\"file\", {}).get(\"type\")\n\n\n    def feature_static_signature(self):\n        \"\"\"Create features form binary signature check.\"\"\"\n        # Check availability of digital signature\n        self.features[\"signed\"] = \\\n            bool(self.report.get(\"static\", {}).get(\"signature\", []))\n\n        # ExifTool output\n        et_tokens = [\"Comments\", \"ProductName\", \"LegalCopyright\", \\\n                     \"InternalName\", \"CompanyName\"]\n        for token in et_tokens:\n            self.features[token] = None\n        for attr in self.report.get(\"static\", {}).get(\"pe_versioninfo\", []):\n            attr_name = attr.get(\"name\")\n            if attr_name in et_tokens:\n                self.features[attr_name] = attr.get(\"value\")\n\n\n    def feature_static_heuristic(self):\n        \"\"\"Create features form results return by heuristic tools.\n        **Not available for current JSON content.**\"\"\"\n        pass\n\n\n    def feature_static_packer(self):\n        \"\"\"Create feature from information returned by packer/cryptor\n        detectors.\"\"\"\n        self.features[\"packer\"] = \\\n            self.report.get(\"static\", {}).get(\"peid_signatures\", None)\n\n\n    def feature_static_pef(self):\n        \"\"\"Create features from information derived form portable executable\n        format.\"\"\"\n        # Get resource languages\n        self.features[\"languages\"] = []\n        for d in self.report.get(\"static\", {}).get(\"pe_resources\", []):\n            lang = d.get(\"language\", False)\n            if lang:\n                if lang.startswith(\"LANG_\"):\n                    lang = lang[5:]\n                else:\n                    lang = lang\n                if lang not in self.features[\"languages\"]:\n                    self.features[\"languages\"].append(lang)\n            sublang = d.get(\"sublanguage\", False)\n            if sublang:\n                if sublang.startswith(\"SUBLANG_\"):\n                    sublang = sublang[8:]\n                else:\n                    sublang = sublang\n                if sublang not in self.features[\"languages\"]:\n                    self.features[\"languages\"].append(sublang)\n\n        # Section and resource attributes\n        self.features[\"section_attrs\"] = {}\n        for d in self.report.get(\"static\", {}).get(\"pe_sections\", []):\n            n = d.get(\"name\")\n            e = d.get(\"entropy\")\n            if n and d:\n                self.features[\"section_attrs\"][n] = e\n        self.features[\"resource_attrs\"] = {}\n        for d in self.report.get(\"static\", {}).get(\"pe_resources\", []):\n            n = d.get(\"name\")\n            f = d.get(\"filetype\")\n            if n and f:\n                self.features[\"resource_attrs\"][n] = f\n\n\n    def feature_static_imports(self):\n        \"\"\"Extract features from static imports like referenced library\n        functions.\"\"\"\n        self.features[\"static_imports\"] = {}\n\n        # Static libraries import count\n        self.features[\"static_imports\"][\"count\"] = \\\n            self.report.get(\"static\", {}).get(\"imported_dll_count\", None)\n\n        # Get all imported libraries\n        for d in self.report.get(\"static\", {}).get(\"pe_imports\", []):\n            ddl_name = d.get(\"dll\")\n            if not ddl_name:\n                continue\n            self.features[\"static_imports\"][ddl_name] = []\n            for i in d.get(\"imports\", []):\n                ref = i.get(\"name\")\n                if ref is not None:\n                    self.features[\"static_imports\"][ddl_name].append(ref)\n\n\n    def feature_dynamic_imports(self):\n        \"\"\"Extract features from dynamic imports, mutexes, and processes.\"\"\"\n        # Get mutexes\n        self.features[\"mutex\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {}).get(\"mutex\")\n\n        # Get processes names\n        self.features[\"processes\"] = []\n        for p in self.report.get(\"behavior\", {}).get(\"processes\", []):\n            p_name = p.get(\"process_name\")\n            if p_name and p_name not in self.features[\"processes\"]:\n                self.features[\"processes\"].append(p_name)\n\n        # Get dynamically loaded library names\n        self.features[\"dynamic_imports\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"dll_loaded\", [])\n\n\n    def feature_dynamic_filesystem(self):\n        \"\"\"Extract features from filesystem operations.\"\"\"\n        def flatten_list(structured):\n            \"\"\"Flatten nested list.\"\"\"\n            flat = []\n            for i in structured:\n                flat += i\n            return flat\n\n        # Get file operations and their number\n        self.features[\"file_read\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_read\", [])\n        self.features[\"files_read\"] = len(self.features[\"file_read\"])\n        self.features[\"file_written\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_written\", [])\n        self.features[\"files_written\"] = len(self.features[\"file_written\"])\n        self.features[\"file_deleted\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_deleted\", [])\n        self.features[\"files_deleted\"] = len(self.features[\"file_deleted\"])\n        self.features[\"file_copied\"] = flatten_list(\\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_copied\", [])\n                                                   )\n        self.features[\"files_copied\"] = len(\\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_copied\", [])\n                                            )\n        self.features[\"file_renamed\"] = flatten_list(\\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_moved\", [])\n                                                    )\n        self.features[\"files_renamed\"] = len(self.features[\"file_renamed\"])\n\n        # Get other file operations numbers\n        self.features[\"files_opened\"] = len(\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_opened\", [])\n        )\n        self.features[\"files_exists\"] = len(\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_exists\", [])\n        )\n        self.features[\"files_failed\"] = len(\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_failed\", [])\n        )\n\n        # Get total number of unique touched files\n        file_operations = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_read\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_written\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_deleted\", []) + \\\n            flatten_list(self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_copied\", [])) + \\\n            flatten_list(self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_moved\", [])) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_recreated\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_opened\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_exists\", []) + \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"file_failed\", [])\n        # remove duplicates\n        self.features[\"files_operations\"] = len(list(set(file_operations)))\n\n\n    def feature_dynamic_network(self):\n        \"\"\"Extract features from network operations.\"\"\"\n        # Get TCP IP addresses\n        self.features[\"tcp\"] = []\n        for c in self.report.get(\"network\", {}).get(\"tcp\", []):\n            c_dst = c.get(\"dst\")\n            if c_dst and c_dst not in self.features[\"tcp\"]:\n                self.features[\"tcp\"].append(c_dst)\n\n        # Get UDP IPs\n        self.features[\"udp\"] = []\n        for c in self.report.get(\"network\", {}).get(\"udp\", []):\n            c_dst = c.get(\"dst\")\n            if c_dst and c_dst not in self.features[\"udp\"]:\n                self.features[\"udp\"].append(c_dst)\n\n        # Get DNS queries and responses\n        self.features[\"dns\"] = {}\n        for c in self.report.get(\"network\", {}).get(\"dns\", []):\n            request = c.get(\"request\")\n            if request:\n                self.features[\"dns\"][request] = []\n            else:\n                continue\n\n            answers = c.get(\"answers\", [])\n            for a in answers:\n                a_type = a.get(\"type\")\n                a_data = a.get(\"data\")\n                if a_type == \"A\" and a_data:\n                    self.features[\"dns\"][request].append(a_data)\n\n        # Get HTTP requests: method, host, port, path\n        self.features[\"http\"] = {}\n        for c in self.report.get(\"network\", {}).get(\"http\", []):\n            c_data = c.get(\"data\")\n            if c_data:\n                self.features[\"http\"][c_data] = {}\n            else:\n                continue\n\n            c_method = c.get(\"method\")\n            if c_method:\n                self.features[\"http\"][c_data][\"method\"] = c_method\n            c_host = c.get(\"host\")\n            if c_host:\n                self.features[\"http\"][c_data][\"host\"] = c_host\n            c_port = c.get(\"port\")\n            if c_port:\n                self.features[\"http\"][c_data][\"port\"] = c_port\n\n\n    def feature_dynamic_registry(self):\n        \"\"\"Extract features from registry operations.\"\"\"\n        # Registry written\n        self.features[\"regkey_written\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"regkey_written\", [])\n        # Registry delete\n        self.features[\"regkey_deleted\"] = \\\n            self.report.get(\"behavior\", {}).get(\"summary\", {})\\\n            .get(\"regkey_deleted\", [])\n\n\n    def feature_dynamic_windowsapi(self):\n        \"\"\"Extract features from Windows API calls sequence.\"\"\"\n        self.features[\"api_stats\"] = {}\n        apistats = self.report.get(\"behavior\", {}).get(\"apistats\", {})\n        for d in apistats:\n            for e in apistats[d]:\n                if e in self.features[\"api_stats\"]:\n                    self.features[\"api_stats\"][e] += apistats[d][e]\n                else:\n                    self.features[\"api_stats\"][e] = apistats[d][e]\n\n\n    def extract_basic_features(self):\n        \"\"\"Extract very basic set of features from *signatures* JSON field.\n        These are extracted characteristics of the binary by cuckoo sandbox.\"\"\"\n        if self.basic_features:\n            self.basic_features = {}\n\n        for s in self.report.get(\"signatures\", []):\n            name = s.get(\"name\", \"\")\n            description = s.get(\"description\", \"\")\n            if name:\n                self.basic_features[name] = description\n                continue\n            if description:\n                self.basic_features[hash(description)] = description\n"
  },
  {
    "path": "modules/processing/debug.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport codecs\n\nfrom lib.cuckoo.common.abstracts import Processing\nfrom lib.cuckoo.common.exceptions import CuckooProcessingError\nfrom lib.cuckoo.core.database import Database\n\nclass Debug(Processing):\n    \"\"\"Analysis debug information.\"\"\"\n\n    def run(self):\n        \"\"\"Run debug analysis.\n\n        :return: debug information dict.\n        \"\"\"\n        self.key = \"debug\"\n        debug = {\"log\": \"\", \"errors\": []}\n\n        if os.path.exists(self.log_path):\n            try:\n                debug[\"log\"] = codecs.open(self.log_path, \"rb\", \"utf-8\").readlines()\n            except ValueError as e:\n                raise CuckooProcessingError(\"Error decoding %s: %s\" %\n                                            (self.log_path, e))\n            except (IOError, OSError) as e:\n                raise CuckooProcessingError(\"Error opening %s: %s\" %\n                                            (self.log_path, e))\n\n        for error in Database().view_errors(int(self.task[\"id\"])):\n            debug[\"errors\"].append(error.message)\n\n        if os.path.exists(self.mitmerr_path):\n            mitmerr = open(self.mitmerr_path, \"rb\").read()\n            if mitmerr:\n                debug[\"errors\"].append(mitmerr)\n\n        return debug\n"
  },
  {
    "path": "modules/processing/droidmon.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nimport json\nimport logging\nimport os\nfrom lib.cuckoo.common.abstracts import Processing\n\nlog = logging.getLogger(__name__)\n\nclass Droidmon(Processing):\n    \"\"\"Extract Dynamic API calls Info From Droidmon logs.\"\"\"\n\n    def __init__(self):\n        self.key = \"droidmon\"\n\n        self.droidmon = {}\n\n        self.droidmon[\"crypto_keys\"] = []\n        self.droidmon[\"reflection_calls\"] = set()\n        self.droidmon[\"SystemProperties\"] = set()\n        self.droidmon[\"started_activities\"] = []\n        self.droidmon[\"file_accessed\"] = set()\n        self.droidmon[\"fingerprint\"] = set()\n        self.droidmon[\"registered_receivers\"] = set()\n        self.droidmon[\"SharedPreferences\"] = []\n        self.droidmon[\"ContentResolver_queries\"] = set()\n        self.droidmon[\"ContentValues\"] = []\n        self.droidmon[\"encoded_base64\"] = []\n        self.droidmon[\"decoded_base64\"] = []\n        self.droidmon[\"commands\"] = set()\n        self.droidmon[\"commands_output\"] = set()\n        self.droidmon[\"ComponentEnabledSetting\"] = []\n        self.droidmon[\"data_leak\"] = set()\n        self.droidmon[\"events\"] = set()\n        self.droidmon[\"crypto_data\"] = []\n        self.droidmon[\"mac_data\"] = []\n        self.droidmon[\"handleReceiver\"] = []\n        self.droidmon[\"sms\"] = []\n        self.droidmon[\"killed_process\"] = []\n        self.droidmon[\"findResource\"] = []\n        self.droidmon[\"findLibrary\"] = []\n        self.droidmon[\"loadDex\"] = set()\n        self.droidmon[\"TelephonyManager_listen\"] = set()\n        self.droidmon[\"registerContentObserver\"] = set()\n        self.droidmon[\"accounts\"] = set()\n        self.droidmon[\"DexClassLoader\"] = []\n        self.droidmon[\"DexFile\"] = []\n        self.droidmon[\"PathClassLoader\"] = []\n        self.droidmon[\"loadClass\"] = set()\n        self.droidmon[\"setMobileDataEnabled\"] = set()\n        self.droidmon[\"httpConnections\"] = []\n        self.droidmon[\"error\"] = []\n        self.droidmon[\"raw\"] = []\n\n    def _handle_android_os_SystemProperties_get(self, api_call):\n        self.droidmon[\"SystemProperties\"].add(api_call[\"args\"][0])\n\n    def _handle_javax_crypto_spec_SecretKeySpec_javax_crypto_spec_SecretKeySpec(self, api_call):\n        key = api_call[\"args\"][0]\n        for current_key in self.droidmon[\"crypto_keys\"]:\n            if key in current_key[\"key\"]:\n                break\n        else:\n            self.droidmon[\"crypto_keys\"].append({\n                \"key\": api_call[\"args\"][0],\n                \"type\": api_call[\"args\"][1],\n            })\n\n    def _handle_javax_crypto_Cipher_doFinal(self, api_call):\n\n        if api_call[\"this\"][\"mode\"] == 1:\n            self.droidmon[\"crypto_data\"].append(api_call[\"args\"][0])\n        else:\n            self.droidmon[\"crypto_data\"].append(api_call[\"result\"])\n\n    def _handle_java_lang_reflect_Method_invoke(self, api_call):\n        reflection = \"\"\n        if \"hooked_class\" in api_call:\n            reflection = api_call[\"hooked_class\"]+\"->\"+api_call[\"hooked_method\"]\n        else:\n            reflection = api_call[\"hooked_method\"]\n        self.droidmon[\"reflection_calls\"].add(reflection)\n\n    def _handle_dalvik_system_BaseDexClassLoader_findResource(self, api_call):\n        self.lib_pairs(api_call, \"findResource\")\n\n    def _handle_android_app_Activity_startActivity(self, api_call):\n        self.droidmon[\"started_activities\"].append(api_call[\"args\"][0])\n\n    def _handle_java_lang_Runtime_exec(self, api_call):\n        command = api_call[\"args\"][0]\n        if type(command) is list:\n            self.droidmon[\"commands\"].add(' '.join(command))\n        else:\n            self.droidmon[\"commands\"].add(command)\n\n    def _handle_java_lang_ProcessBuilder_start(self, api_call):\n        command = api_call[\"this\"][\"command\"]\n        self.droidmon[\"commands\"].add(' '.join(command))\n\n    def _handle_libcore_io_IoBridge_open(self, api_call):\n        self.droidmon[\"file_accessed\"].add(api_call[\"args\"][0])\n\n    def _handle_android_app_ActivityThread_handleReceiver(self, api_call):\n        self.droidmon[\"handleReceiver\"].append(api_call[\"args\"][0])\n\n    def _handle_android_app_ContextImpl_registerReceiver(self, api_call):\n        for arg in api_call[\"args\"]:\n            if \"mActions\" in arg:\n                for action in arg[\"mActions\"]:\n                    self.droidmon[\"registered_receivers\"].add(action)\n\n    def _handle_android_telephony_TelephonyManager_getDeviceId(self, api_call):\n        self.droidmon[\"fingerprint\"].add(\"getDeviceId\")\n\n    def _handle_android_telephony_TelephonyManager_getNetworkOperatorName(self, api_call):\n        self.droidmon[\"fingerprint\"].add(\"getNetworkOperatorName\")\n\n    def _handle_android_telephony_TelephonyManager_getSubscriberId(self, api_call):\n        self.droidmon[\"fingerprint\"].add(\"getSubscriberId\")\n\n    def _handle_android_telephony_TelephonyManager_getLine1Number(self, api_call):\n        self.droidmon[\"fingerprint\"].add(\"getLine1Number\")\n\n    def _handle_android_telephony_TelephonyManager_getNetworkOperator(self, api_call):\n        self.droidmon[\"fingerprint\"].add(\"getNetworkOperator\")\n\n    def _handle_android_telephony_TelephonyManager_getSimOperatorName(self, api_call):\n        self.droidmon[\"fingerprint\"].add(\"getSimOperatorName\")\n\n    def _handle_android_telephony_TelephonyManager_getSimCountryIso(self, api_call):\n        self.droidmon[\"fingerprint\"].add(\"getSimCountryIso\")\n\n    def _handle_android_telephony_TelephonyManager_getSimSerialNumber(self, api_call):\n        self.droidmon[\"fingerprint\"].add(\"getSimSerialNumber\")\n\n    def _handle_android_telephony_TelephonyManager_getNetworkCountryIso(self, api_call):\n        self.droidmon[\"fingerprint\"].add(\"getNetworkCountryIso\")\n\n    def _handle_android_telephony_TelephonyManager_getDeviceSoftwareVersion(self, api_call):\n        self.droidmon[\"fingerprint\"].add(\"getDeviceSoftwareVersion\")\n\n    def _handle_android_net_wifi_WifiInfo_getMacAddress(self, api_call):\n        self.droidmon[\"fingerprint\"].add(\"getMacAddress\")\n\n    def _handle_android_app_SharedPreferencesImpl_EditorImpl_putInt(self, api_call):\n        self.droidmon[\"SharedPreferences\"].append(self.get_pair(api_call))\n\n    def _handle_android_app_SharedPreferencesImpl_EditorImpl_putString(self, api_call):\n        self.droidmon[\"SharedPreferences\"].append(self.get_pair(api_call))\n\n    def _handle_android_app_SharedPreferencesImpl_EditorImpl_putFloat(self, api_call):\n        self.droidmon[\"SharedPreferences\"].append(self.get_pair(api_call))\n\n    def _handle_android_app_SharedPreferencesImpl_EditorImpl_putBoolean(self, api_call):\n        self.droidmon[\"SharedPreferences\"].append(self.get_pair(api_call))\n\n    def _handle_android_app_SharedPreferencesImpl_EditorImpl_putLong(self, api_call):\n        self.droidmon[\"SharedPreferences\"].append(self.get_pair(api_call))\n\n    def _handle_android_content_ContentResolver_query(self, api_call):\n        self.droidmon[\"ContentResolver_queries\"].add(api_call[\"args\"][0][\"uriString\"])\n\n    def _handle_android_content_ContentValues_put(self, api_call):\n        self.droidmon[\"ContentValues\"].append(self.get_pair(api_call))\n\n    def _handle_javax_crypto_Mac_doFinal(self, api_call):\n        self.droidmon[\"mac_data\"].append(api_call[\"args\"][0])\n\n    def _handle_android_util_Base64_encodeToString(self, api_call):\n        self.droidmon[\"encoded_base64\"].append(api_call[\"args\"][0])\n\n    def _handle_android_util_Base64_encode(self, api_call):\n        self.droidmon[\"encoded_base64\"].append(api_call[\"result\"][0])\n\n    def _handle_android_app_ApplicationPackageManager_setComponentEnabledSetting(self, api_call):\n        states = {\n            \"0\": \"COMPONENT_ENABLED_STATE_DEFAULT\",\n            \"1\": \"COMPONENT_ENABLED_STATE_ENABLED\",\n            \"2\": \"COMPONENT_ENABLED_STATE_DISABLED\",\n        }\n\n        component = api_call[\"args\"][0]\n        state = api_call[\"args\"][1]\n\n        self.droidmon[\"ComponentEnabledSetting\"].append({\n            \"component_name\": component[\"mPackage\"]+\"/\"+component[\"mClass\"],\n            \"component_new_state\": states.get(state, \"\"),\n        })\n\n    def _handle_android_location_Location_getLatitude(self, api_call):\n        self.droidmon[\"data_leak\"].add(\"location\")\n\n    def _handle_android_location_Location_getLongitude(self, api_call):\n        self.droidmon[\"data_leak\"].add(\"location\")\n\n    def _handle_android_app_ApplicationPackageManager_getInstalledPackages(self, api_call):\n        self.droidmon[\"data_leak\"].add(\"getInstalledPackages\")\n\n    def _handle_dalvik_system_BaseDexClassLoader_findLibrary(self, api_call):\n        self.lib_pairs(api_call, \"findLibrary\")\n\n    def _handle_android_telephony_SmsManager_sendTextMessage(self, api_call):\n        self.droidmon[\"sms\"].append({\n            \"dest_number\": api_call[\"args\"][0],\n            \"content\": \" \".join(api_call[\"args\"][1]),\n        })\n\n    def _handle_android_util_Base64_decode(self, api_call):\n        self.droidmon[\"decoded_base64\"].append(api_call[\"result\"])\n\n    def _handle_android_telephony_TelephonyManager_listen(self, api_call):\n        description = {\n            1: \"LISTEN_SERVICE_STATE\",\n            16: \"LISTEN_CELL_LOCATION\",\n            32: \"LISTEN_CALL_STATE\",\n            64: \"LISTEN_DATA_CONNECTION_STATE\",\n            256: \"LISTEN_SIGNAL_STRENGTHS\",\n        }\n\n        event = api_call[\"args\"][1]\n        if event in description:\n            self.droidmon[\"TelephonyManager_listen\"].add(description[event])\n\n    def _handle_android_content_ContentResolver_registerContentObserver(self, api_call):\n        self.droidmon[\"registerContentObserver\"].add(api_call[\"args\"][0][\"uriString\"])\n\n    def _handle_android_content_ContentResolver_insert(self, api_call):\n        self.droidmon[\"ContentResolver_queries\"].add(api_call[\"args\"][0][\"uriString\"])\n\n    def _handle_android_accounts_AccountManager_getAccountsByType(self, api_call):\n        self.droidmon[\"accounts\"].add(api_call[\"args\"][0])\n        self.droidmon[\"data_leak\"].add(\"getAccounts\")\n\n    def _handle_dalvik_system_BaseDexClassLoader_findResources(self, api_call):\n        self.lib_pairs(api_call, \"findResource\")\n\n    def _handle_android_accounts_AccountManager_getAccounts(self, api_call):\n        self.droidmon[\"data_leak\"].add(\"getAccounts\")\n\n    def _handle_android_telephony_SmsManager_sendMultipartTextMessage(self, api_call):\n        self.droidmon[\"sms\"].append({\n            \"dest_number\": api_call[\"args\"][0],\n            \"content\": api_call[\"args\"][2],\n        })\n\n    def _handle_android_content_ContentResolver_delete(self, api_call):\n        self.droidmon[\"ContentResolver_queries\"].add(api_call[\"args\"][0][\"uriString\"])\n\n    def _handle_android_media_AudioRecord_startRecording(self, api_call):\n        self.droidmon[\"events\"].add(\"mediaRecorder\")\n\n    def _handle_android_media_MediaRecorder_start(self, api_call):\n        self.droidmon[\"events\"].add(\"mediaRecorder\")\n\n    def _handle_android_content_BroadcastReceiver_abortBroadcast(self, api_call):\n        self.droidmon[\"events\"].add(\"abortBroadcast\")\n\n    def _handle_dalvik_system_DexFile_loadDex(self, api_call):\n        self.droidmon[\"loadDex\"].add(api_call[\"args\"][0])\n\n    def _handle_dalvik_system_DexClass_dalvik_system_DexClassLoader(self, api_call):\n        self.droidmon[\"DexClassLoader\"].append(api_call[\"args\"])\n\n    def _handle_dalvik_system_DexFile_dalvik_system_DexFile(self, api_call):\n        self.droidmon[\"DexFile\"].append(api_call[\"args\"])\n\n    def _handle_dalvik_system_PathClassLoader_dalvik_system_PathClassLoader(self, api_call):\n        self.droidmon[\"PathClassLoader\"].append(api_call[\"args\"])\n\n    def _handle_android_app_ActivityManager_killBackgroundProcesses(self, api_call):\n        self.droidmon[\"killed_process\"].append(api_call[\"args\"][0])\n\n    def _handle_android_os_Process_killProcess(self, api_call):\n        self.droidmon[\"killed_process\"].append(api_call[\"args\"][0])\n\n    def _handle_android_net_ConnectivityManager_setMobileDataEnabled(self, api_call):\n        self.droidmon[\"setMobileDataEnabled\"].append(api_call[\"args\"][0])\n\n    def _handle_org_apache_http_impl_client_AbstractHttpClient_execute(self, api_call):\n        json = {}\n        if type(api_call[\"args\"][0]) is dict:\n            json[\"request\"] = api_call[\"args\"][1]\n        else:\n            json[\"request\"] = api_call[\"args\"][0]\n        json[\"response\"] = api_call[\"result\"]\n        self.droidmon[\"httpConnections\"].append(json)\n\n    def _handle_java_net_URL_openConnection(self, api_call):\n        if(\"file:\" in api_call[\"this\"] or \"jar:\" in api_call[\"this\"]):\n            return\n\n        json = {}\n        if api_call[\"result\"] != \"\":\n            json[\"request\"] = api_call[\"result\"][\"request_method\"] + \" \" + api_call[\"this\"] + \" \" + api_call[\"result\"][\"version\"]\n            json[\"response\"] = api_call[\"result\"][\"version\"] + \" \" + str(api_call[\"result\"][\"response_code\"]) + \" \" + api_call[\"result\"][\"response_message\"]\n        else:\n            json[\"request\"] = \"GET \" + api_call[\"this\"] + \" HTTP/1.1\"\n            json[\"response\"] = \"\"\n        self.droidmon[\"httpConnections\"].append(json)\n\n    def _handle_dalvik_system_DexFile_loadClass(self, api_call):\n        self.droidmon[\"loadClass\"].add(api_call[\"args\"][0])\n\n    def _handle_java_io_FileOutputStream_write(self, api_call):\n        # self.droidmon[\"command_objects\"].append(api_call)\n        commands = api_call[\"buffer\"].split('\\n')\n        for command in commands:\n            self.droidmon[\"commands\"].add(command)\n\n    def _handle_java_io_FileInputStream_read(self, api_call):\n        pass\n        # self.droidmon[\"command_objects\"].append(api_call)\n        self.droidmon[\"commands_output\"].add(\"read: \"+api_call[\"buffer\"])\n\n    def get_pair(self, api_call):\n        value = None\n        if len(api_call[\"args\"]) > 1:\n            value = api_call[\"args\"][1]\n\n        return {\n            \"key\": api_call[\"args\"][0],\n            \"value\": value,\n        }\n\n    def lib_pairs(self, api_call, key):\n        libname = api_call[\"args\"][0]\n        for current_key in self.droidmon[key]:\n            if libname in current_key[\"libname\"]:\n                break\n        else:\n            self.droidmon[key].append({\n                \"libname\": api_call[\"args\"][0],\n                \"result\": api_call.get(\"result\", \"\"),\n            })\n\n    def keyCleaner(self, d):\n        if type(d) is dict:\n            for key, value in d.iteritems():\n                d[key] = self.keyCleaner(value)\n                if '.' in key:\n                    d[key.replace('.', '_')] = value\n                    del(d[key])\n            return d\n        if type(d) is list:\n            return map(self.keyCleaner, d)\n        if type(d) is tuple:\n            return tuple(map(self.keyCleaner, d))\n        return d\n\n    def run(self):\n        \"\"\"Run extract of printable strings.\n        @return: list of printable strings.\n        \"\"\"\n\n        if \"file\" not in self.task[\"category\"]:\n            return self.droidmon\n\n        results = {}\n        log_path = self.logs_path + \"/droidmon.log\"\n        if not os.path.exists(log_path):\n            return results\n\n        for line in open(log_path, \"rb\"):\n            try:\n                api_call = json.loads(line)\n            except Exception:\n                self.droidmon[\"error\"].append(\"Invalid JSON line: %r\" % line)\n                continue\n\n            self.droidmon[\"raw\"].append(self.keyCleaner(api_call))\n\n            # Construct the function name of the handler for this event.\n            api = \"_handle_%s_%s\" % (api_call[\"class\"], api_call[\"method\"])\n            fn = getattr(self, api.replace(\".\", \"_\"), None)\n            if fn:\n                fn(api_call)\n            else:\n                self.droidmon[\"error\"].append(\"Unhandled: %r\" % line)\n\n        for key, value in self.droidmon.items():\n            results[key] = list(value)\n\n        return results\n"
  },
  {
    "path": "modules/processing/dropped.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport json\nimport os\n\nfrom lib.cuckoo.common.abstracts import Processing\nfrom lib.cuckoo.common.objects import File\n\nclass Dropped(Processing):\n    \"\"\"Dropped files analysis.\"\"\"\n\n    def run(self):\n        \"\"\"Run analysis.\n        \n        :return: list of dropped files with related information.\n        \"\"\"\n        self.key = \"dropped\"\n        dropped_files, meta = [], {}\n\n        if os.path.exists(self.dropped_meta_path):\n            for line in open(self.dropped_meta_path, \"rb\"):\n                entry = json.loads(line)\n                filepath = os.path.join(self.analysis_path, entry[\"path\"])\n                meta[filepath] = {\n                    \"pids\": entry[\"pids\"],\n                    \"filepath\": entry[\"filepath\"],\n                }\n\n        for dir_name, dir_names, file_names in os.walk(self.dropped_path):\n            for file_name in file_names:\n                file_path = os.path.join(dir_name, file_name)\n                file_info = File(file_path=file_path).get_all()\n                file_info.update(meta.get(file_info[\"path\"], {}))\n                dropped_files.append(file_info)\n\n        for dir_name, dir_names, file_names in os.walk(self.package_files):\n            for file_name in file_names:\n                file_path = os.path.join(dir_name, file_name)\n                file_info = File(file_path=file_path).get_all()\n                dropped_files.append(file_info)\n\n        return dropped_files\n"
  },
  {
    "path": "modules/processing/dumptls.py",
    "content": "# Copyright (C) 2010-2014 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\n\nfrom lib.cuckoo.common.abstracts import Processing\n\nlog = logging.getLogger(__name__)\n\nclass TLSMasterSecrets(Processing):\n    \"\"\"Cross-references TLS master secrets extracted from the monitor and key\n    information extracted from the PCAP to dump a master secrets file\n    compatible with, e.g., Wireshark.\"\"\"\n\n    order = 3\n    key = \"dumptls\"\n\n    def run(self):\n        metakeys = {}\n\n        # Build server random <-> session id mapping from the PCAP.\n        if \"network\" in self.results and \"tls\" in self.results[\"network\"]:\n            for row in self.results[\"network\"][\"tls\"]:\n                metakeys[row[\"server_random\"]] = row[\"session_id\"]\n\n        results = {}\n\n        # Build server random <-> master secret mapping from behavioral logs.\n        summary = self.results.get(\"behavior\", {}).get(\"summary\", {})\n        for entry in summary.get(\"tls_master\", []):\n            client_random, server_random, master_secret = entry\n\n            if server_random not in metakeys:\n                log.info(\"Was unable to extract TLS master secret for server \"\n                         \"random %s, skipping it.\", server_random)\n                continue\n\n            results[metakeys[server_random]] = master_secret\n\n        # Write the TLS master secrets file.\n        with open(self.tlsmaster_path, \"wb\") as f:\n            for session_id, master_secret in sorted(results.items()):\n                print>>f, \"RSA Session-ID:%s Master-Key:%s\" % (\n                    session_id, master_secret)\n"
  },
  {
    "path": "modules/processing/googleplay.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n# Originally contributed by Check Point Software Technologies, Ltd.\n\nimport logging\nimport os\nfrom zipfile import BadZipfile\n\nfrom lib.cuckoo.common.objects import File\nfrom lib.cuckoo.common.abstracts import Processing\nfrom lib.cuckoo.common.exceptions import CuckooProcessingError\n\ntry:\n    from androguard.core.bytecodes.apk import APK\n    HAVE_ANDROGUARD = True\nexcept ImportError:\n    HAVE_ANDROGUARD = False\n\ntry:\n    from lib.api.googleplay.googleplay import GooglePlayAPI\n    HAVE_GOOGLEPLAY = True\nexcept ImportError:\n    HAVE_GOOGLEPLAY = False\n\nlog = logging.getLogger(__name__)\n\nclass GooglePlay(Processing):\n    \"\"\"Google Play information about the analysis session\"\"\"\n\n    def run(self):\n        \"\"\"Run Google play unofficial python api the get the google play information\n        @return: list of google play features\n        \"\"\"\n        self.key = \"googleplay\"\n        googleplay = {}\n\n        if not HAVE_GOOGLEPLAY:\n            log.error(\"Unable to import the GooglePlay library, has it been \"\n                      \"installed properly?\")\n            return\n\n        if not HAVE_ANDROGUARD:\n            log.error(\"Could not find the Androguard library, please install \"\n                      \"it. (`pip install androguard`)\")\n\n        if (\"file\" not in self.task[\"category\"]):\n            return\n\n        f = File(self.task[\"target\"])\n        if f.get_name().endswith((\".zip\", \".apk\")) or \"zip\" in f.get_type():\n            if not os.path.exists(self.file_path):\n                raise CuckooProcessingError(\"Sample file doesn't exist: \\\"%s\\\"\" % self.file_path)\n\n            android_id = self.options.get(\"android_id\")\n            google_login = self.options.get(\"google_login\")\n            google_password = self.options.get(\"google_password\")\n            # auth_token = self.options.get(\"auth_token\", None)\n\n            if not android_id and not google_login and not google_password:\n                raise CuckooProcessingError(\"Google Play Credentials not configured, skip\")\n\n            try:\n                a = APK(self.file_path)\n                if a.is_valid_APK():\n                    package = a.get_package()\n                    # Connect\n                    api = GooglePlayAPI(android_id)\n                    api.login(google_login, google_password, None)\n\n                    # Get the version code and the offer type from the app details\n                    app_data = api.details(package)\n                    app_detail = app_data.docV2.details.appDetails\n\n                    if not app_detail.installationSize:\n                        return googleplay\n\n                    googleplay[\"title\"] = app_detail.title\n                    googleplay[\"app_category\"] = app_detail.appCategory._values\n                    googleplay[\"version_code\"] = app_detail.versionCode\n                    googleplay[\"app_type\"] = app_detail.appType\n                    googleplay[\"content_rating\"] = app_detail.contentRating\n                    googleplay[\"developer_email\"] = app_detail.developerEmail\n                    googleplay[\"developer_name\"] = app_detail.developerName\n                    googleplay[\"developer_website\"] = app_detail.developerWebsite\n                    googleplay[\"installation_size\"] = app_detail.installationSize\n                    googleplay[\"num_downloads\"] = app_detail.numDownloads\n                    googleplay[\"upload_date\"] = app_detail.uploadDate\n                    googleplay[\"permissions\"] = app_detail.permission._values\n            except (IOError, OSError, BadZipfile) as e:\n                raise CuckooProcessingError(\"Error opening file %s\" % e)\n\n        return googleplay\n"
  },
  {
    "path": "modules/processing/memory.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport logging\nimport time\n\nfrom lib.cuckoo.common.abstracts import Processing\nfrom lib.cuckoo.common.config import Config\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\n\ntry:\n    import volatility.conf as conf\n    import volatility.registry as registry\n    import volatility.commands as commands\n    import volatility.utils as utils\n    import volatility.plugins.malware.devicetree as devicetree\n    import volatility.plugins.malware.apihooks as apihooks\n    import volatility.plugins.getsids as sidm\n    import volatility.plugins.privileges as privm\n    import volatility.plugins.taskmods as taskmods\n    import volatility.win32.tasks as tasks\n    import volatility.obj as obj\n    import volatility.exceptions as exc\n    import volatility.plugins.filescan as filescan\n    import volatility.protos as protos\n\n    HAVE_VOLATILITY = True\n\n    # Inherit Cuckoo debugging level for Volatility commands.\n    rootlogger = logging.getLogger()\n    logging.getLogger(\"volatility.obj\").setLevel(rootlogger.level)\n    logging.getLogger(\"volatility.utils\").setLevel(rootlogger.level)\nexcept ImportError:\n    HAVE_VOLATILITY = False\n\nlog = logging.getLogger(__name__)\n\nclass VolatilityAPI(object):\n    \"\"\" Volatility API interface.\n\n    :param memdump: the memdump file path\n    :param osprofile: the profile (OS type)\n    \"\"\"\n\n    def __init__(self, memdump, osprofile=None):\n        \"\"\"\n        :param memdump: the memdump file path\n        :param osprofile: the profile (OS type)\n        \"\"\"\n        registry.PluginImporter()\n        self.memdump = memdump\n        self.osprofile = osprofile\n        self.config = None\n        self.addr_space = None\n        self.init_config()\n\n    def get_dtb(self):\n        \"\"\"Use psscan to get system dtb and apply it.\"\"\"\n        ps = filescan.PSScan(self.config)\n\n        for ep in ps.calculate():\n            if str(ep.ImageFileName) == \"System\":\n                self.config.update(\"dtb\", ep.Pcb.DirectoryTableBase)\n                return True\n\n        return False\n\n    def init_config(self):\n        \"\"\"Creates a volatility configuration.\"\"\"\n        if self.config is not None and self.addr_space is not None:\n            return self.config\n\n        self.config = conf.ConfObject()\n        self.config.optparser.set_conflict_handler(\"resolve\")\n        registry.register_global_options(self.config, commands.Command)\n        base_conf = {\n            \"profile\": \"WinXPSP2x86\",\n            \"use_old_as\": None,\n            \"kdbg\": None,\n            \"help\": False,\n            \"kpcr\": None,\n            \"tz\": None,\n            \"pid\": None,\n            \"output_file\": None,\n            \"physical_offset\": None,\n            \"conf_file\": None,\n            \"dtb\": None,\n            \"output\": None,\n            \"info\": None,\n            \"location\": \"file://\" + self.memdump,\n            \"plugins\": None,\n            \"debug\": None,\n            \"cache_dtb\": True,\n            \"filename\": None,\n            \"cache_directory\": None,\n            \"verbose\": None,\n            \"write\": False\n        }\n\n        if self.osprofile:\n            base_conf[\"profile\"] = self.osprofile\n\n        for key, value in base_conf.items():\n            self.config.update(key, value)\n\n        # Deal with Volatility support for KVM/qemu memory dump.\n        # See: #464.\n        try:\n            self.addr_space = utils.load_as(self.config)\n        except exc.AddrSpaceError:\n            if self.get_dtb():\n                self.addr_space = utils.load_as(self.config)\n            else:\n                raise\n\n        self.plugins = \\\n            registry.get_plugin_classes(commands.Command, lower=True)\n        return self.config\n\n    def pslist(self):\n        \"\"\"Volatility pslist plugin.\n\n        :see volatility/plugins/taskmods.py\n        \"\"\"\n        results = []\n\n        command = taskmods.PSList(self.config)\n        for process in command.calculate():\n            new = {\n                \"process_name\": str(process.ImageFileName),\n                \"process_id\": int(process.UniqueProcessId),\n                \"parent_id\": int(process.InheritedFromUniqueProcessId),\n                \"num_threads\": str(process.ActiveThreads),\n                \"num_handles\": str(process.ObjectTable.HandleCount),\n                \"session_id\": str(process.SessionId),\n                \"create_time\": str(process.CreateTime or \"\"),\n                \"exit_time\": str(process.ExitTime or \"\"),\n            }\n\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n    def psxview(self):\n        \"\"\"Volatility psxview plugin.\n\n        :see: volatility/plugins/malware/psxview.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"psxview\"](self.config)\n        for offset, process, ps_sources in command.calculate():\n            new = {\n                \"process_name\": str(process.ImageFileName),\n                \"process_id\": int(process.UniqueProcessId),\n                \"pslist\": str(offset in ps_sources[\"pslist\"]),\n                \"psscan\": str(offset in ps_sources[\"psscan\"]),\n                \"thrdproc\": str(offset in ps_sources[\"thrdproc\"]),\n                \"pspcid\": str(offset in ps_sources[\"pspcid\"]),\n                \"csrss\": str(offset in ps_sources[\"csrss\"]),\n                \"session\": str(offset in ps_sources[\"session\"]),\n                \"deskthrd\": str(offset in ps_sources[\"deskthrd\"]),\n            }\n\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n    def callbacks(self):\n        \"\"\"Volatility callbacks plugin.\n\n        :see: volatility/plugins/malware/callbacks.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"callbacks\"](self.config)\n        for (sym, cb, detail), mods, mod_addrs in command.calculate():\n            module = tasks.find_module(mods, mod_addrs, self.addr_space.address_mask(cb))\n\n            if module:\n                module_name = module.BaseDllName or module.FullDllName\n            else:\n                module_name = \"UNKNOWN\"\n\n            new = {\n                \"type\": str(sym),\n                \"callback\": hex(int(cb)),\n                \"module\": str(module_name),\n                \"details\": str(detail or \"-\"),\n            }\n\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n    def idt(self):\n        \"\"\"Volatility idt plugin.\n\n        :see: volatility/plugins/malware/idt.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"idt\"](self.config)\n        for n, entry, addr, module in command.calculate():\n            if module:\n                module_name = str(module.BaseDllName or \"\")\n                sect_name = command.get_section_name(module, addr)\n            else:\n                module_name = \"UNKNOWN\"\n                sect_name = ''\n\n            # The parent is IDT. The grand-parent is _KPCR.\n            cpu_number = entry.obj_parent.obj_parent.ProcessorBlock.Number\n            new = {\n                \"cpu_number\": int(cpu_number),\n                \"index\": int(n),\n                \"selector\": hex(int(entry.Selector)),\n                \"address\": hex(int(addr)),\n                \"module\": module_name,\n                \"section\": sect_name,\n            }\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n    def gdt(self):\n        \"\"\"Volatility gdt plugin.\n\n        :see: volatility/plugins/malware/idt.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"gdt\"](self.config)\n        # Comment: this code is pretty much ripped from render_text in volatility.\n        for n, entry in command.calculate():\n            selector = n * 8\n\n            # Is the entry present? This applies to all types of GDT entries\n            if entry.Present:\n                present = \"P\"\n            else:\n                present = \"Np\"\n\n            # The base, limit, and granularity is calculated differently\n            # for 32bit call gates than they are for all other types.\n            if entry.Type == \"CallGate32\":\n                base = entry.CallGate\n                limit = 0\n                granularity = \"-\"\n            else:\n                base = entry.Base\n                limit = entry.Limit\n                if entry.Granularity:\n                    granularity = \"Pg\"\n                else:\n                    granularity = \"By\"\n\n            # The parent is GDT. The grand-parent is _KPCR.\n            cpu_number = entry.obj_parent.obj_parent.ProcessorBlock.Number\n\n            new = {\n                \"cpu_number\": int(cpu_number),\n                \"selector\": hex(selector),\n                \"base\": hex(int(base)),\n                \"limit\": hex(int(limit)),\n                \"type\": str(entry.Type),\n                \"dpl\": str(entry.Dpl),\n                \"granularity\": granularity,\n                \"present\": present,\n            }\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n    def ssdt(self):\n        \"\"\"Volatility ssdt plugin.\n\n        :see: volatility/plugins/ssdt.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"ssdt\"](self.config)\n\n        # Comment: this code is pretty much ripped from render_text in volatility.\n        addr_space = self.addr_space\n        syscalls = addr_space.profile.syscalls\n        bits32 = addr_space.profile.metadata.get(\"memory_model\", \"32bit\") == \"32bit\"\n\n        for idx, table, n, vm, mods, mod_addrs in command.calculate():\n            for i in range(n):\n                if bits32:\n                    # These are absolute function addresses in kernel memory.\n                    syscall_addr = obj.Object(\"address\", table + (i * 4), vm).v()\n                else:\n                    # These must be signed long for x64 because they are RVAs relative\n                    # to the base of the table and can be negative.\n                    offset = obj.Object(\"long\", table + (i * 4), vm).v()\n                    # The offset is the top 20 bits of the 32 bit number.\n                    syscall_addr = table + (offset >> 4)\n\n                try:\n                    syscall_name = syscalls[idx][i]\n                except IndexError:\n                    syscall_name = \"UNKNOWN\"\n\n                syscall_mod = tasks.find_module(mods, mod_addrs, addr_space.address_mask(syscall_addr))\n                if syscall_mod:\n                    syscall_modname = \"{0}\".format(syscall_mod.BaseDllName)\n                else:\n                    syscall_modname = \"UNKNOWN\"\n\n                new = {\n                    \"index\": int(idx),\n                    \"table\": \"0x%x\" % int(table),\n                    \"entry\": \"{0:#06x}\".format(idx * 0x1000 + i),\n                    \"syscall_name\": syscall_name,\n                    \"syscall_addr\": \"0x%x\" % int(syscall_addr),\n                    \"syscall_modname\": syscall_modname,\n                }\n\n                if bits32 and syscall_mod is not None:\n                    ret = apihooks.ApiHooks.check_inline(\n                        va=syscall_addr, addr_space=vm,\n                        mem_start=syscall_mod.DllBase,\n                        mem_end=syscall_mod.DllBase + syscall_mod.SizeOfImage)\n\n                    # Could not analyze the memory.\n                    if ret is not None:\n                        hooked, data, dest_addr = ret\n                        if hooked:\n                            # We found a hook, try to resolve the hooker.\n                            # No mask required because we currently only work\n                            # on x86 anyway.\n                            hook_mod = tasks.find_module(mods, mod_addrs,\n                                                         dest_addr)\n                            if hook_mod:\n                                hook_name = \"{0}\".format(hook_mod.BaseDllName)\n                            else:\n                                hook_name = \"UNKNOWN\"\n\n                            # Report it now.\n                            new.update({\n                                \"hook_dest_addr\": \"{0:#x}\".format(dest_addr),\n                                \"hook_name\": hook_name,\n                            })\n\n                results.append(new)\n\n        return dict(config={}, data=results)\n\n    def timers(self):\n        \"\"\"Volatility timers plugin.\n\n        :see: volatility/plugins/malware/timers.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"timers\"](self.config)\n        for timer, module in command.calculate():\n            if timer.Header.SignalState.v():\n                signaled = \"Yes\"\n            else:\n                signaled = \"-\"\n\n            if module:\n                module_name = str(module.BaseDllName or \"\")\n            else:\n                module_name = \"UNKNOWN\"\n\n            due_time = \"{0:#010x}:{1:#010x}\".format(timer.DueTime.HighPart, timer.DueTime.LowPart)\n\n            new = {\n                \"offset\": hex(timer.obj_offset),\n                \"due_time\": due_time,\n                \"period\": int(timer.Period),\n                \"signaled\": signaled,\n                \"routine\": hex(int(timer.Dpc.DeferredRoutine)),\n                \"module\": module_name,\n            }\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n    def messagehooks(self):\n        \"\"\"Volatility messagehooks plugin.\n\n        :see: volatility/plugins/malware/messagehooks.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"messagehooks\"](self.config)\n        for winsta, atom_tables in command.calculate():\n            for desk in winsta.desktops():\n                for name, hook in desk.hooks():\n                    module = command.translate_hmod(winsta, atom_tables, hook.ihmod)\n                    new = {\n                        \"offset\": hex(int(hook.obj_offset)),\n                        \"session\": int(winsta.dwSessionId),\n                        \"desktop\": \"{0}\\\\{1}\".format(winsta.Name, desk.Name),\n                        \"thread\": \"<any>\",\n                        \"filter\": str(name),\n                        \"flags\": str(hook.flags),\n                        \"function\": hex(int(hook.offPfn)),\n                        \"module\": str(module),\n                    }\n                    results.append(new)\n\n                for thrd in desk.threads():\n                    info = \"{0} ({1} {2})\".format(\n                        thrd.pEThread.Cid.UniqueThread,\n                        thrd.ppi.Process.ImageFileName,\n                        thrd.ppi.Process.UniqueProcessId)\n\n                    for name, hook in thrd.hooks():\n                        module = command.translate_hmod(winsta, atom_tables, hook.ihmod)\n\n                        new = {\n                            \"offset\": hex(int(hook.obj_offset)),\n                            \"session\": int(winsta.dwSessionId),\n                            \"desktop\": \"{0}\\\\{1}\".format(winsta.Name, desk.Name),\n                            \"thread\": str(info),\n                            \"filter\": str(name),\n                            \"flags\": str(hook.flags),\n                            \"function\": hex(int(hook.offPfn)),\n                            \"module\": str(module),\n                        }\n                        results.append(new)\n\n        return dict(config={}, data=results)\n\n    def getsids(self):\n        \"\"\"Volatility getsids plugin.\n\n        :see: volatility/plugins/malware/getsids.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"getsids\"](self.config)\n        for task in command.calculate():\n            token = task.get_token()\n\n            if not token:\n                continue\n\n            for sid_string in token.get_sids():\n                if sid_string in sidm.well_known_sids:\n                    sid_name = \" {0}\".format(sidm.well_known_sids[sid_string])\n                else:\n                    sid_name_re = sidm.find_sid_re(sid_string, sidm.well_known_sid_re)\n                    if sid_name_re:\n                        sid_name = \" {0}\".format(sid_name_re)\n                    else:\n                        sid_name = \"\"\n\n                new = {\n                    \"filename\": str(task.ImageFileName),\n                    \"process_id\": int(task.UniqueProcessId),\n                    \"sid_string\": str(sid_string),\n                    \"sid_name\": str(sid_name),\n                }\n                results.append(new)\n\n        return dict(config={}, data=results)\n\n    def privs(self):\n        \"\"\"Volatility privs plugin.\n\n        :see: volatility/plugins/malware/privs.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"privs\"](self.config)\n\n        for task in command.calculate():\n            for value, present, enabled, default in task.get_token().privileges():\n                try:\n                    name, desc = privm.PRIVILEGE_INFO[int(value)]\n                except KeyError:\n                    continue\n\n                attributes = []\n                if present:\n                    attributes.append(\"Present\")\n                if enabled:\n                    attributes.append(\"Enabled\")\n                if default:\n                    attributes.append(\"Default\")\n\n                new = {\n                    \"process_id\": int(task.UniqueProcessId),\n                    \"filename\": str(task.ImageFileName),\n                    \"value\": int(value),\n                    \"privilege\": str(name),\n                    \"attributes\": \",\".join(attributes),\n                    \"description\": str(desc),\n                }\n                results.append(new)\n\n        return dict(config={}, data=results)\n\n    def malfind(self, dump_dir=None):\n        \"\"\"Volatility malfind plugin.\n\n        :param dump_dir: optional directory for dumps\n        :see: volatility/plugins/malware/malfind.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"malfind\"](self.config)\n        for task in command.calculate():\n            for vad, address_space in task.get_vads(vad_filter=task._injection_filter):\n                if command._is_vad_empty(vad, address_space):\n                    continue\n\n                new = {\n                    \"process_name\": str(task.ImageFileName),\n                    \"process_id\": int(task.UniqueProcessId),\n                    \"vad_start\": \"{0:#x}\".format(vad.Start),\n                    \"vad_tag\": str(vad.Tag),\n                }\n                results.append(new)\n\n                if dump_dir:\n                    filename = os.path.join(dump_dir, \"process.{0:#x}.{1:#x}.dmp\".format(task.obj_offset, vad.Start))\n                    command.dump_vad(filename, vad, address_space)\n\n        return dict(config={}, data=results)\n\n    def yarascan(self):\n        \"\"\"Volatility yarascan plugin.\n\n        :see: volatility/plugins/malware/yarascan.py\n        \"\"\"\n        results = []\n\n        ypath = os.path.join(CUCKOO_ROOT, \"data\", \"yara\", \"index_memory.yar\")\n        if not os.path.exists(ypath):\n            return dict(config={}, data=[])\n\n        self.config.update(\"YARA_FILE\", ypath)\n\n        command = self.plugins[\"yarascan\"](self.config)\n        for o, addr, hit, content in command.calculate():\n            # Comment: this code is pretty much ripped from render_text in volatility.\n            # Find out if the hit is from user or kernel mode\n            if o is None:\n                owner = \"Unknown Kernel Memory\"\n            elif o.obj_name == \"_EPROCESS\":\n                owner = \"Process {0} Pid {1}\".format(o.ImageFileName, o.UniqueProcessId)\n            else:\n                owner = \"{0}\".format(o.BaseDllName)\n\n            hexdump = \"\".join(\n                \"{0:#010x}  {1:<48}  {2}\\n\".format(addr + o, h, ''.join(c))\n                for o, h, c in utils.Hexdump(content[0:64]))\n\n            new = {\n                \"rule\": hit.rule,\n                \"owner\": owner,\n                \"hexdump\": hexdump,\n            }\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n    def apihooks(self):\n        \"\"\"Volatility apihooks plugin.\n\n        :see: volatility/plugins/malware/apihooks.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"apihooks\"](self.config)\n        for process, module, hook in command.calculate():\n            proc_name = str(process.ImageFileName) if process else ''\n            if command.whitelist(hook.hook_mode | hook.hook_type,\n                                 proc_name, hook.VictimModule,\n                                 hook.HookModule, hook.Function):\n                continue\n\n            new = {\n                \"hook_mode\": str(hook.Mode),\n                \"hook_type\": str(hook.Type),\n                \"victim_module\": str(module.BaseDllName or \"\"),\n                \"victim_function\": str(hook.Detail),\n                \"hook_address\": \"{0:#x}\".format(hook.hook_address),\n                \"hooking_module\": str(hook.HookModule)\n            }\n\n            if process:\n                new[\"process_id\"] = int(process.UniqueProcessId)\n                new[\"process_name\"] = str(process.ImageFileName)\n\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n    def dlllist(self):\n        \"\"\"Volatility dlllist plugin.\n\n        :see: volatility/plugins/taskmods.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"dlllist\"](self.config)\n        for task in command.calculate():\n            new = {\n                \"process_id\": int(task.UniqueProcessId),\n                \"process_name\": str(task.ImageFileName),\n                \"commandline\": str(task.Peb.ProcessParameters.CommandLine or \"\"),\n                \"loaded_modules\": []\n            }\n\n            for module in task.get_load_modules():\n                new[\"loaded_modules\"].append({\n                    \"dll_base\": str(module.DllBase),\n                    \"dll_size\": str(module.SizeOfImage),\n                    \"dll_full_name\": str(module.FullDllName or \"\"),\n                    \"dll_load_count\": int(module.LoadCount),\n                })\n\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n    def handles(self):\n        \"\"\"Volatility handles plugin.\n\n        :see: volatility/plugins/handles.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"handles\"](self.config)\n        for pid, handle, object_type, name in command.calculate():\n            new = {\n                \"process_id\": int(pid),\n                \"handle_value\": str(handle.HandleValue),\n                \"handle_granted_access\": str(handle.GrantedAccess),\n                \"handle_type\": str(object_type),\n                \"handle_name\": str(name)\n            }\n\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n    def ldrmodules(self):\n        \"\"\"Volatility ldrmodules plugin.\n\n        :see: volatility/plugins/malware/malfind.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"ldrmodules\"](self.config)\n        for task in command.calculate():\n            # Build a dictionary for all three PEB lists where the\n            # keys are base address and module objects are the values.\n            inloadorder = dict((mod.DllBase.v(), mod) for mod in task.get_load_modules())\n            ininitorder = dict((mod.DllBase.v(), mod) for mod in task.get_init_modules())\n            inmemorder = dict((mod.DllBase.v(), mod) for mod in task.get_mem_modules())\n\n            # Build a similar dictionary for the mapped files.\n            mapped_files = {}\n            for vad, address_space in task.get_vads(vad_filter=task._mapped_file_filter):\n                # Note this is a lot faster than acquiring the full\n                # vad region and then checking the first two bytes.\n                if obj.Object(\"_IMAGE_DOS_HEADER\", offset=vad.Start, vm=address_space).e_magic != 0x5A4D:\n                    continue\n\n                mapped_files[int(vad.Start)] = str(vad.FileObject.FileName or \"\")\n\n            # For each base address with a mapped file, print info on\n            # the other PEB lists to spot discrepancies.\n            for base in mapped_files.keys():\n                # Does the base address exist in the PEB DLL lists?\n                load_mod = inloadorder.get(base, None)\n                init_mod = ininitorder.get(base, None)\n                mem_mod = inmemorder.get(base, None)\n\n                new = {\n                    \"process_id\": int(task.UniqueProcessId),\n                    \"process_name\": str(task.ImageFileName),\n                    \"dll_base\": \"{0:#x}\".format(base),\n                    \"dll_in_load\": load_mod is not None,\n                    \"dll_in_init\": init_mod is not None,\n                    \"dll_in_mem\": mem_mod is not None,\n                    \"dll_mapped_path\": str(mapped_files[base]),\n                    \"load_full_dll_name\": \"\",\n                    \"init_full_dll_name\": \"\",\n                    \"mem_full_dll_name\": \"\"\n                }\n\n                if load_mod:\n                    new[\"load_full_dll_name\"] = str(load_mod.FullDllName)\n\n                if init_mod:\n                    new[\"init_full_dll_name\"] = str(init_mod.FullDllName)\n\n                if mem_mod:\n                    new[\"mem_full_dll_name\"] = str(mem_mod.FullDllName)\n\n                results.append(new)\n\n        return dict(config={}, data=results)\n\n    def mutantscan(self):\n        \"\"\"Volatility mutantscan plugin.\n\n        :see: volatility/plugins/filescan.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"mutantscan\"](self.config)\n        for mutant in command.calculate():\n            header = mutant.get_object_header()\n            tid = 0\n            pid = 0\n            if mutant.OwnerThread > 0x80000000:\n                thread = mutant.OwnerThread.dereference_as(\"_ETHREAD\")\n                tid = thread.Cid.UniqueThread\n                pid = thread.Cid.UniqueProcess\n\n            new = {\n                \"mutant_offset\": \"{0:#x}\".format(mutant.obj_offset),\n                \"num_pointer\": int(header.PointerCount),\n                \"num_handles\": int(header.HandleCount),\n                \"mutant_signal_state\": str(mutant.Header.SignalState),\n                \"mutant_name\": str(header.NameInfo.Name or \"\"),\n                \"process_id\": int(pid),\n                \"thread_id\": int(tid)\n            }\n\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n    def devicetree(self):\n        \"\"\"Volatility devicetree plugin.\n\n        :see: volatility/plugins/malware/devicetree.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"devicetree\"](self.config)\n        for driver_obj in command.calculate():\n            new = {\n                \"driver_offset\": \"0x{0:08x}\".format(driver_obj.obj_offset),\n                \"driver_name\": str(driver_obj.DriverName or \"\"),\n                \"devices\": []\n            }\n\n            for device in driver_obj.devices():\n                device_header = obj.Object(\n                    \"_OBJECT_HEADER\",\n                    offset=device.obj_offset - device.obj_vm.profile.get_obj_offset(\"_OBJECT_HEADER\", \"Body\"),\n                    vm=device.obj_vm,\n                    native_vm=device.obj_native_vm\n                )\n\n                device_name = str(device_header.NameInfo.Name or \"\")\n\n                new_device = {\n                    \"device_offset\": \"0x{0:08x}\".format(device.obj_offset),\n                    \"device_name\": device_name,\n                    \"device_type\": devicetree.DEVICE_CODES.get(device.DeviceType.v(), \"UNKNOWN\"),\n                    \"devices_attached\": []\n                }\n\n                new[\"devices\"].append(new_device)\n\n                level = 0\n\n                for att_device in device.attached_devices():\n                    device_header = obj.Object(\n                        \"_OBJECT_HEADER\",\n                        offset=att_device.obj_offset - att_device.obj_vm.profile.get_obj_offset(\"_OBJECT_HEADER\", \"Body\"),\n                        vm=att_device.obj_vm,\n                        native_vm=att_device.obj_native_vm\n                    )\n\n                    device_name = str(device_header.NameInfo.Name or \"\")\n                    name = (device_name + \" - \" + str(att_device.DriverObject.DriverName or \"\"))\n\n                    new_device[\"devices_attached\"].append({\n                        \"level\": level,\n                        \"attached_device_offset\": \"0x{0:08x}\".format(att_device.obj_offset),\n                        \"attached_device_name\": name,\n                        \"attached_device_type\": devicetree.DEVICE_CODES.get(att_device.DeviceType.v(), \"UNKNOWN\")\n                    })\n\n                    level += 1\n\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n    def svcscan(self):\n        \"\"\"Volatility svcscan plugin - scans for services.\n\n        :see: volatility/plugins/malware/svcscan.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"svcscan\"](self.config)\n        for rec in command.calculate():\n            new = {\n                \"service_offset\": \"{0:#x}\".format(rec.obj_offset),\n                \"service_order\": int(rec.Order),\n                \"process_id\": int(rec.Pid),\n                \"service_name\": str(rec.ServiceName.dereference()),\n                \"service_display_name\": str(rec.DisplayName.dereference()),\n                \"service_type\": str(rec.Type),\n                \"service_binary_path\": str(rec.Binary),\n                \"service_state\": str(rec.State)\n            }\n\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n    def modscan(self):\n        \"\"\"Volatility modscan plugin.\n\n        :see: volatility/plugins/modscan.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"modscan\"](self.config)\n        for ldr_entry in command.calculate():\n            new = {\n                \"kernel_module_offset\": \"{0:#x}\".format(ldr_entry.obj_offset),\n                \"kernel_module_name\": str(ldr_entry.BaseDllName or \"\"),\n                \"kernel_module_file\": str(ldr_entry.FullDllName or \"\"),\n                \"kernel_module_base\": \"{0:#x}\".format(ldr_entry.DllBase),\n                \"kernel_module_size\": int(ldr_entry.SizeOfImage),\n            }\n\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n    def imageinfo(self):\n        \"\"\"Volatility imageinfo plugin.\n\n        :see: volatility/plugins/imageinfo.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"imageinfo\"](self.config)\n        new = {}\n        for key, value in command.calculate():\n            new[key] = value\n\n        osp = new[\"Suggested Profile(s)\"].split(\",\")[0]\n        new[\"osprofile\"] = osp\n\n        results.append(new)\n\n        return dict(config={}, data=results)\n\n    def sockscan(self):\n        \"\"\"Volatility sockscan plugin.\n\n        :see: volatility/plugins/sockscan.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"sockscan\"](self.config)\n        for sock in command.calculate():\n            new = {\n                \"offset\": \"{0:#010x}\".format(sock.obj_offset),\n                \"process_id\": str(sock.Pid),\n                \"address\": str(sock.LocalIpAddress),\n                \"port\": str(sock.LocalPort),\n                \"protocol\": \"{0} ({1})\".format(sock.Protocol, protos.protos.get(sock.Protocol.v(), \"-\")),\n                \"create_time\": time.strftime(\"%Y-%m-%d %H:%M:%S\", time.gmtime(int(sock.CreateTime))),\n            }\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n    def netscan(self):\n        \"\"\"Volatility sockscan plugin.\n\n        :see: volatility/plugins/netscan.py\n        \"\"\"\n        results = []\n\n        command = self.plugins[\"netscan\"](self.config)\n        for net_obj, proto, laddr, lport, raddr, rport, state in command.calculate():\n            new = {\n                \"offset\": \"{0:#010x}\".format(net_obj.obj_offset),\n                \"process_id\": str(net_obj.Owner.UniqueProcessId),\n                \"local_address\": str(laddr),\n                \"local_port\": str(lport),\n                \"remote_address\": str(raddr),\n                \"remote_port\": str(rport),\n                \"protocol\": str(proto),\n            }\n            results.append(new)\n\n        return dict(config={}, data=results)\n\n\nclass VolatilityManager(object):\n    \"\"\"Handle several volatility results.\"\"\"\n    PLUGINS = [\n        \"pslist\",\n        \"psxview\",\n        \"callbacks\",\n        [\"idt\", \"x86\"],\n        \"ssdt\",\n        [\"gdt\", \"x86\"],\n        \"timers\",\n        \"messagehooks\",\n        \"getsids\",\n        \"privs\",\n        \"malfind\",\n        \"apihooks\",\n        \"dlllist\",\n        \"handles\",\n        \"ldrmodules\",\n        \"mutantscan\",\n        \"devicetree\",\n        \"svcscan\",\n        \"modscan\",\n        \"yarascan\",\n        [\"sockscan\", \"winxp\"],\n        [\"netscan\", \"vista\", \"win7\"],\n    ]\n\n    def __init__(self, memfile, osprofile=None):\n        self.mask_pid = []\n        self.taint_pid = set()\n        self.memfile = memfile\n\n        conf_path = os.path.join(CUCKOO_ROOT, \"conf\", \"memory.conf\")\n        if not os.path.exists(conf_path):\n            log.error(\"Configuration file {0} not found\".format(conf_path))\n            self.voptions = False\n            return\n\n        self.voptions = Config(\"memory\")\n\n        for pid in self.voptions.mask.pid_generic.split(\",\"):\n            pid = pid.strip()\n            if pid:\n                self.mask_pid.append(int(pid))\n\n        self.no_filter = not self.voptions.mask.enabled\n        if self.voptions.basic.guest_profile:\n            self.osprofile = self.voptions.basic.guest_profile\n        else:\n            self.osprofile = osprofile or self.get_osprofile()\n\n    def get_osprofile(self):\n        \"\"\"Get the OS profile\"\"\"\n        return VolatilityAPI(self.memfile).imageinfo()[\"data\"][0][\"osprofile\"]\n\n    def run(self):\n        results = {}\n\n        # Exit if options were not loaded.\n        if not self.voptions:\n            return\n\n        vol = VolatilityAPI(self.memfile, self.osprofile)\n\n        for plugin_name in self.PLUGINS:\n            if isinstance(plugin_name, list):\n                plugin_name, profiles = plugin_name[0], plugin_name[1:]\n            else:\n                profiles = []\n\n            # Some plugins can only run in certain profiles (i.e., only in\n            # Windows XP/Vista/7, or only in x86 or x64).\n            osp = self.osprofile.lower()\n            for profile in profiles:\n                if osp.startswith(profile) or osp.endswith(profile):\n                    break\n            else:\n                if profiles:\n                    continue\n\n            plugin = self.voptions.get(plugin_name)\n            if not plugin or not plugin.enabled:\n                log.debug(\"Skipping '%s' volatility module\", plugin_name)\n                continue\n\n            if plugin_name in vol.plugins:\n                log.debug(\"Executing volatility '%s' module.\", plugin_name)\n                results[plugin_name] = getattr(vol, plugin_name)()\n\n        self.find_taint(results)\n        self.cleanup()\n\n        return self.mask_filter(results)\n\n    def mask_filter(self, old):\n        \"\"\"Filter out masked stuff. Keep tainted stuff.\"\"\"\n        new = {}\n\n        for akey in old.keys():\n            new[akey] = {\"config\": old[akey][\"config\"], \"data\": []}\n            conf = getattr(self.voptions, akey, None)\n            new[akey][\"config\"][\"filter\"] = conf.filter\n            for item in old[akey][\"data\"]:\n                # TODO: need to improve this logic.\n                if not conf.filter:\n                    new[akey][\"data\"].append(item)\n                elif \"process_id\" in item and \\\n                        item[\"process_id\"] in self.mask_pid and \\\n                        item[\"process_id\"] not in self.taint_pid:\n                    pass\n                else:\n                    new[akey][\"data\"].append(item)\n        return new\n\n    def find_taint(self, res):\n        \"\"\"Find tainted items.\"\"\"\n        if \"malfind\" in res:\n            for item in res[\"malfind\"][\"data\"]:\n                self.taint_pid.add(item[\"process_id\"])\n\n    def cleanup(self):\n        \"\"\"Delete the memory dump (if configured to do so).\"\"\"\n\n        if self.voptions.basic.delete_memdump:\n            try:\n                os.remove(self.memfile)\n            except OSError:\n                log.error(\"Unable to delete memory dump file at path \\\"%s\\\" \", self.memfile)\n\nclass Memory(Processing):\n    \"\"\"Volatility Analyzer.\"\"\"\n\n    def run(self):\n        \"\"\"Run analysis.\n\n        :return: volatility results dict.\n        \"\"\"\n        self.key = \"memory\"\n\n        results = {}\n        if HAVE_VOLATILITY:\n            if self.memory_path and os.path.exists(self.memory_path):\n                try:\n                    results = VolatilityManager(self.memory_path).run()\n                except Exception:\n                    log.exception(\"Generic error executing volatility\")\n            else:\n                log.error(\"Memory dump not found: to run volatility you have to enable memory_dump\")\n        else:\n            log.error(\"Cannot run volatility module: volatility library not available\")\n\n        return results\n"
  },
  {
    "path": "modules/processing/network.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport hashlib\nimport logging\nimport json\nimport os\nimport re\nimport socket\nimport struct\nimport tempfile\nimport urlparse\n\nfrom lib.cuckoo.common.abstracts import Processing\nfrom lib.cuckoo.common.config import Config\nfrom lib.cuckoo.common.constants import LATEST_HTTPREPLAY\nfrom lib.cuckoo.common.dns import resolve\nfrom lib.cuckoo.common.irc import ircMessage\nfrom lib.cuckoo.common.objects import File\nfrom lib.cuckoo.common.utils import convert_to_printable, versiontuple\nfrom lib.cuckoo.common.exceptions import CuckooProcessingError\n\ntry:\n    import dpkt\n    HAVE_DPKT = True\nexcept ImportError:\n    HAVE_DPKT = False\n\ntry:\n    import httpreplay\n    import httpreplay.cut\n\n    # Be less verbose about httpreplay logging messages.\n    logging.getLogger(\"httpreplay\").setLevel(logging.CRITICAL)\n\n    HAVE_HTTPREPLAY = True\nexcept ImportError:\n    HAVE_HTTPREPLAY = False\n\n# Imports for the batch sort.\n# http://stackoverflow.com/questions/10665925/how-to-sort-huge-files-with-python\n# http://code.activestate.com/recipes/576755/\nimport heapq\nfrom itertools import islice\nfrom collections import namedtuple\n\nKeyed = namedtuple(\"Keyed\", [\"key\", \"obj\"])\nPacket = namedtuple(\"Packet\", [\"raw\", \"ts\"])\n\nlog = logging.getLogger(__name__)\ncfg = Config()\n\n# Urge users to upgrade to the latest version.\n_v = getattr(httpreplay, \"__version__\", None) if HAVE_HTTPREPLAY else None\nif _v and versiontuple(_v) < versiontuple(LATEST_HTTPREPLAY):\n    log.warning(\n        \"You are using version %s of HTTPReplay, rather than the latest \"\n        \"version %s, which may not handle various corner cases and/or TLS \"\n        \"cipher suites correctly. This could result in not getting all the \"\n        \"HTTP/HTTPS streams that are available or corrupt some streams that \"\n        \"were not handled correctly before. Please upgrade it to the latest \"\n        \"version (`pip install --upgrade httpreplay`).\",\n        _v, LATEST_HTTPREPLAY,\n    )\n\nclass Pcap(object):\n    \"\"\"Reads network data from PCAP file.\"\"\"\n    ssl_ports = 443,\n\n    notified_dpkt = False\n\n    def __init__(self, filepath):\n        \"\"\"\n        Creates a new instance.\n\n        :param filepath: path to PCAP file\n        \"\"\"\n        self.filepath = filepath\n\n        # List of all hosts.\n        self.hosts = []\n        # List containing all non-private IP addresses.\n        self.unique_hosts = []\n        # List of unique domains.\n        self.unique_domains = []\n        # List containing all TCP packets.\n        self.tcp_connections = []\n        self.tcp_connections_seen = set()\n        # Lookup table to identify connection requests to services or IP\n        # addresses that are no longer available.\n        self.tcp_connections_dead = {}\n        self.dead_hosts = {}\n        # List containing all UDP packets.\n        self.udp_connections = []\n        self.udp_connections_seen = set()\n        # List containing all ICMP requests.\n        self.icmp_requests = []\n        # List containing all HTTP requests.\n        self.http_requests = {}\n        # List containing all TLS/SSL3 key combinations.\n        self.tls_keys = []\n        # List containing all DNS requests.\n        self.dns_requests = {}\n        self.dns_answers = set()\n        # List containing all SMTP requests.\n        self.smtp_requests = []\n        # Reconstructed SMTP flow.\n        self.smtp_flow = {}\n        # List containing all IRC requests.\n        self.irc_requests = []\n        # Dictionary containing all the results of this processing.\n        self.results = {}\n\n    def _dns_gethostbyname(self, name):\n        \"\"\"Get host by name wrapper.\n\n        :param name: hostname.\n        :return: IP address or blank\n        \"\"\"\n        if cfg.processing.resolve_dns:\n            ip = resolve(name)\n        else:\n            ip = \"\"\n        return ip\n\n    def _is_private_ip(self, ip):\n        \"\"\"Check if the IP belongs to private network blocks.\n\n        :param ip: IP address to verify.\n        :return: boolean representing whether the IP belongs or not to\n                 a private network block.\n        \"\"\"\n        networks = [\n            \"0.0.0.0/8\",\n            \"10.0.0.0/8\",\n            \"100.64.0.0/10\",\n            \"127.0.0.0/8\",\n            \"169.254.0.0/16\",\n            \"172.16.0.0/12\",\n            \"192.0.0.0/24\",\n            \"192.0.2.0/24\",\n            \"192.88.99.0/24\",\n            \"192.168.0.0/16\",\n            \"198.18.0.0/15\",\n            \"198.51.100.0/24\",\n            \"203.0.113.0/24\",\n            \"240.0.0.0/4\",\n            \"255.255.255.255/32\",\n            \"224.0.0.0/4\"\n        ]\n\n        for network in networks:\n            try:\n                ipaddr = struct.unpack(\">I\", socket.inet_aton(ip))[0]\n\n                netaddr, bits = network.split(\"/\")\n\n                network_low = struct.unpack(\">I\", socket.inet_aton(netaddr))[0]\n                network_high = network_low | (1 << (32 - int(bits))) - 1\n\n                if ipaddr <= network_high and ipaddr >= network_low:\n                    return True\n            except:\n                continue\n\n        return False\n\n    def _add_hosts(self, connection):\n        \"\"\"Add IPs to unique list.\n\n        :param connection: connection data\n        \"\"\"\n        try:\n            # TODO: Perhaps this block should be removed.\n            # If there is a packet from a non-local IP address, which hasn't\n            # been seen before, it means that the connection wasn't initiated\n            # during the time of the current analysis.\n            if connection[\"src\"] not in self.hosts:\n                ip = convert_to_printable(connection[\"src\"])\n\n                # We consider the IP only if it hasn't been seen before.\n                if ip not in self.hosts:\n                    # If the IP is not a local one, this might be a leftover\n                    # packet as described in issue #249.\n                    if self._is_private_ip(ip):\n                        self.hosts.append(ip)\n\n            if connection[\"dst\"] not in self.hosts:\n                ip = convert_to_printable(connection[\"dst\"])\n\n                if ip not in self.hosts:\n                    self.hosts.append(ip)\n\n                    # We add external IPs to the list, only the first time\n                    # we see them and if they're the destination of the\n                    # first packet they appear in.\n                    if not self._is_private_ip(ip):\n                        self.unique_hosts.append(ip)\n        except:\n            pass\n\n    def _tcp_dissect(self, conn, data):\n        \"\"\"Runs all TCP dissectors.\n\n        :param conn: connection.\n        :param data: payload data.\n        \"\"\"\n        if self._check_http(data):\n            self._add_http(data, conn[\"dport\"])\n\n        # SMTP.\n        if conn[\"dport\"] == 25:\n            self._reassemble_smtp(conn, data)\n\n        # IRC.\n        if conn[\"dport\"] != 21 and self._check_irc(data):\n            self._add_irc(data)\n\n        # HTTPS.\n        if conn[\"dport\"] in self.ssl_ports or conn[\"sport\"] in self.ssl_ports:\n            self._https_identify(conn, data)\n\n    def _udp_dissect(self, conn, data):\n        \"\"\"Runs all UDP dissectors.\n\n        :param conn: connection.\n        :param data: payload data.\n        \"\"\"\n        # Select DNS and MDNS traffic.\n        if conn[\"dport\"] == 53 or conn[\"sport\"] == 53 or conn[\"dport\"] == 5353 or conn[\"sport\"] == 5353:\n            if self._check_dns(data):\n                self._add_dns(data)\n\n    def _check_icmp(self, icmp_data):\n        \"\"\"Checks for ICMP traffic.\n\n        :param icmp_data: ICMP data flow.\n        \"\"\"\n        try:\n            return isinstance(icmp_data, dpkt.icmp.ICMP) and \\\n                len(icmp_data.data) > 0\n        except:\n            return False\n\n    def _icmp_dissect(self, conn, data):\n        \"\"\"Runs all ICMP dissectors.\n\n        :param conn: connection.\n        :param data: payload data.\n        \"\"\"\n\n        if self._check_icmp(data):\n            # If ICMP packets are coming from the host, it probably isn't\n            # relevant traffic, hence we can skip from reporting it.\n            if conn[\"src\"] == cfg.resultserver.ip:\n                return\n\n            entry = {}\n            entry[\"src\"] = conn[\"src\"]\n            entry[\"dst\"] = conn[\"dst\"]\n            entry[\"type\"] = data.type\n\n            # Extract data from dpkg.icmp.ICMP.\n            try:\n                entry[\"data\"] = convert_to_printable(data.data.data)\n            except:\n                entry[\"data\"] = \"\"\n\n            self.icmp_requests.append(entry)\n\n    def _check_dns(self, udpdata):\n        \"\"\"Checks for DNS traffic.\n\n        :param udpdata: UDP data flow.\n        \"\"\"\n        try:\n            dpkt.dns.DNS(udpdata)\n        except:\n            return False\n\n        return True\n\n    def _add_dns(self, udpdata):\n        \"\"\"Adds a DNS data flow.\n\n        :param udpdata: UDP data flow.\n        \"\"\"\n        dns = dpkt.dns.DNS(udpdata)\n\n        # DNS query parsing.\n        query = {}\n\n        if dns.rcode == dpkt.dns.DNS_RCODE_NOERR or \\\n                dns.qr == dpkt.dns.DNS_R or \\\n                dns.opcode == dpkt.dns.DNS_QUERY or True:\n            # DNS question.\n            try:\n                q_name = dns.qd[0].name\n                q_type = dns.qd[0].type\n            except IndexError:\n                return False\n\n            # DNS RR type mapping.\n            # See: http://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-4\n            # See: https://github.com/kbandla/dpkt/blob/master/dpkt/dns.py#L42\n            query[\"request\"] = q_name\n            if q_type == dpkt.dns.DNS_A:\n                query[\"type\"] = \"A\"\n            if q_type == dpkt.dns.DNS_AAAA:\n                query[\"type\"] = \"AAAA\"\n            elif q_type == dpkt.dns.DNS_CNAME:\n                query[\"type\"] = \"CNAME\"\n            elif q_type == dpkt.dns.DNS_MX:\n                query[\"type\"] = \"MX\"\n            elif q_type == dpkt.dns.DNS_PTR:\n                query[\"type\"] = \"PTR\"\n            elif q_type == dpkt.dns.DNS_NS:\n                query[\"type\"] = \"NS\"\n            elif q_type == dpkt.dns.DNS_SOA:\n                query[\"type\"] = \"SOA\"\n            elif q_type == dpkt.dns.DNS_HINFO:\n                query[\"type\"] = \"HINFO\"\n            elif q_type == dpkt.dns.DNS_TXT:\n                query[\"type\"] = \"TXT\"\n            elif q_type == dpkt.dns.DNS_SRV:\n                query[\"type\"] = \"SRV\"\n            elif q_type == dpkt.dns.DNS_ANY:\n                # For example MDNS requests have q_type=255.\n                query[\"type\"] = \"All\"\n            else:\n                # Some requests are not parsed by dpkt.\n                query[\"type\"] = \"None\"\n\n            # DNS answer.\n            query[\"answers\"] = []\n            for answer in dns.an:\n                ans = {}\n                if answer.type == dpkt.dns.DNS_A:\n                    ans[\"type\"] = \"A\"\n                    try:\n                        ans[\"data\"] = socket.inet_ntoa(answer.rdata)\n                    except socket.error:\n                        continue\n                elif answer.type == dpkt.dns.DNS_AAAA:\n                    ans[\"type\"] = \"AAAA\"\n                    try:\n                        ans[\"data\"] = socket.inet_ntop(socket.AF_INET6,\n                                                       answer.rdata)\n                    except (socket.error, ValueError):\n                        continue\n                elif answer.type == dpkt.dns.DNS_CNAME:\n                    ans[\"type\"] = \"CNAME\"\n                    ans[\"data\"] = answer.cname\n                elif answer.type == dpkt.dns.DNS_MX:\n                    ans[\"type\"] = \"MX\"\n                    ans[\"data\"] = answer.mxname\n                elif answer.type == dpkt.dns.DNS_PTR:\n                    ans[\"type\"] = \"PTR\"\n                    ans[\"data\"] = answer.ptrname\n                elif answer.type == dpkt.dns.DNS_NS:\n                    ans[\"type\"] = \"NS\"\n                    ans[\"data\"] = answer.nsname\n                elif answer.type == dpkt.dns.DNS_SOA:\n                    ans[\"type\"] = \"SOA\"\n                    ans[\"data\"] = \",\".join([answer.mname,\n                                           answer.rname,\n                                           str(answer.serial),\n                                           str(answer.refresh),\n                                           str(answer.retry),\n                                           str(answer.expire),\n                                           str(answer.minimum)])\n                elif answer.type == dpkt.dns.DNS_HINFO:\n                    ans[\"type\"] = \"HINFO\"\n                    ans[\"data\"] = \" \".join(answer.text)\n                elif answer.type == dpkt.dns.DNS_TXT:\n                    ans[\"type\"] = \"TXT\"\n                    ans[\"data\"] = \" \".join(answer.text)\n\n                # TODO: add srv handling\n                query[\"answers\"].append(ans)\n\n            self._add_domain(query[\"request\"])\n\n            reqtuple = query[\"type\"], query[\"request\"]\n            if reqtuple not in self.dns_requests:\n                self.dns_requests[reqtuple] = query\n            else:\n                new_answers = set((i[\"type\"], i[\"data\"]) for i in query[\"answers\"]) - self.dns_answers\n                self.dns_requests[reqtuple][\"answers\"] += [dict(type=i[0], data=i[1]) for i in new_answers]\n\n        return True\n\n    def _add_domain(self, domain):\n        \"\"\"Add a domain to unique list.\n\n        :param domain: domain name.\n        \"\"\"\n        filters = [\n            \".*\\\\.windows\\\\.com$\",\n            \".*\\\\.in\\\\-addr\\\\.arpa$\"\n        ]\n\n        regexps = [re.compile(filter) for filter in filters]\n        for regexp in regexps:\n            if regexp.match(domain):\n                return\n\n        for entry in self.unique_domains:\n            if entry[\"domain\"] == domain:\n                return\n\n        self.unique_domains.append({\"domain\": domain,\n                                    \"ip\": self._dns_gethostbyname(domain)})\n\n    def _check_http(self, tcpdata):\n        \"\"\"Checks for HTTP traffic.\n\n        :param tcpdata: TCP data flow.\n        \"\"\"\n        try:\n            r = dpkt.http.Request()\n            r.method, r.version, r.uri = None, None, None\n            r.unpack(tcpdata)\n        except dpkt.dpkt.UnpackError:\n            if r.method is not None or r.version is not None or \\\n                    r.uri is not None:\n                return True\n            return False\n\n        return True\n\n    def _add_http(self, tcpdata, dport):\n        \"\"\"Adds an HTTP flow.\n\n        :param tcpdata: TCP data flow.\n        :param dport: destination port.\n        \"\"\"\n        if tcpdata in self.http_requests:\n            self.http_requests[tcpdata][\"count\"] += 1\n            return True\n\n        try:\n            http = dpkt.http.Request()\n            http.unpack(tcpdata)\n        except dpkt.dpkt.UnpackError:\n            pass\n\n        try:\n            entry = {\"count\": 1}\n\n            if \"host\" in http.headers:\n                entry[\"host\"] = convert_to_printable(http.headers[\"host\"])\n            else:\n                entry[\"host\"] = \"\"\n\n            entry[\"port\"] = dport\n\n            # Manually deal with cases when destination port is not the\n            # default one and it is not included in host header.\n            netloc = entry[\"host\"]\n            if dport != 80 and \":\" not in netloc:\n                netloc += \":\" + str(entry[\"port\"])\n\n            entry[\"data\"] = convert_to_printable(tcpdata)\n            url = urlparse.urlunparse((\"http\", netloc, http.uri,\n                                       None, None, None))\n            entry[\"uri\"] = convert_to_printable(url)\n            entry[\"body\"] = convert_to_printable(http.body)\n            entry[\"path\"] = convert_to_printable(http.uri)\n\n            if \"user-agent\" in http.headers:\n                entry[\"user-agent\"] = \\\n                    convert_to_printable(http.headers[\"user-agent\"])\n\n            entry[\"version\"] = convert_to_printable(http.version)\n            entry[\"method\"] = convert_to_printable(http.method)\n\n            self.http_requests[tcpdata] = entry\n        except Exception:\n            return False\n\n        return True\n\n    def _https_identify(self, conn, data):\n        \"\"\"Extract a combination of the Session ID, Client Random, and Server\n        Random in order to identify the accompanying master secret later.\"\"\"\n        if not hasattr(dpkt.ssl, \"TLSRecord\"):\n            if not Pcap.notified_dpkt:\n                Pcap.notified_dpkt = True\n                log.warning(\"Using an old version of dpkt that does not \"\n                            \"support TLS streams (install the latest with \"\n                            \"`pip install dpkt`)\")\n            return\n\n        try:\n            record = dpkt.ssl.TLSRecord(data)\n        except dpkt.NeedData:\n            return\n        except:\n            log.exception(\"Error reading possible TLS Record\")\n            return\n\n        # Is this a valid TLS packet?\n        if record.type not in dpkt.ssl.RECORD_TYPES:\n            return\n\n        try:\n            record = dpkt.ssl.RECORD_TYPES[record.type](record.data)\n        except dpkt.ssl.SSL3Exception:\n            return\n        except dpkt.NeedData:\n            log.exception(\"Incomplete possible TLS Handshake record found\")\n            return\n\n        # Is this a TLSv1 Handshake packet?\n        if not isinstance(record, dpkt.ssl.TLSHandshake):\n            return\n\n        # We're only interested in the TLS Server Hello packets.\n        if not isinstance(record.data, dpkt.ssl.TLSServerHello):\n            return\n\n        # Extract the server random and the session id.\n        self.tls_keys.append({\n            \"server_random\": record.data.random.encode(\"hex\"),\n            \"session_id\": record.data.session_id.encode(\"hex\"),\n        })\n\n    def _reassemble_smtp(self, conn, data):\n        \"\"\"Reassemble a SMTP flow.\n\n        :param conn: connection dict.\n        :param data: raw data.\n        \"\"\"\n        if conn[\"dst\"] in self.smtp_flow:\n            self.smtp_flow[conn[\"dst\"]] += data\n        else:\n            self.smtp_flow[conn[\"dst\"]] = data\n\n    def _process_smtp(self):\n        \"\"\"Process SMTP flow.\"\"\"\n        for conn, data in self.smtp_flow.iteritems():\n            # Detect new SMTP flow.\n            if data.startswith((\"EHLO\", \"HELO\")):\n                self.smtp_requests.append({\"dst\": conn, \"raw\": data})\n\n    def _check_irc(self, tcpdata):\n        \"\"\"\n        Checks for IRC traffic.\n\n        :param tcpdata: tcp data flow\n        \"\"\"\n        try:\n            req = ircMessage()\n        except Exception:\n            return False\n\n        return req.isthereIRC(tcpdata)\n\n    def _add_irc(self, tcpdata):\n        \"\"\"\n        Adds an IRC communication.\n\n        :param tcpdata: TCP data in flow\n        :param dport: destination port\n        \"\"\"\n\n        try:\n            reqc = ircMessage()\n            reqs = ircMessage()\n            filters_sc = [\"266\"]\n            self.irc_requests = self.irc_requests + \\\n                reqc.getClientMessages(tcpdata) + \\\n                reqs.getServerMessagesFilter(tcpdata, filters_sc)\n        except Exception:\n            return False\n\n        return True\n\n    def run(self):\n        \"\"\"Process PCAP.\n\n        :return: dict with network analysis data.\n        \"\"\"\n\n        try:\n            file = open(self.filepath, \"rb\")\n        except (IOError, OSError):\n            log.error(\"Unable to open %s\" % self.filepath)\n            return self.results\n\n        try:\n            pcap = dpkt.pcap.Reader(file)\n        except dpkt.dpkt.NeedData:\n            log.error(\"Unable to read PCAP file at path \\\"%s\\\".\",\n                      self.filepath)\n            return self.results\n        except ValueError:\n            log.error(\"Unable to read PCAP file at path \\\"%s\\\". File is \"\n                      \"corrupted or wrong format.\" % self.filepath)\n            return self.results\n\n        offset = file.tell()\n        first_ts = None\n        for ts, buf in pcap:\n            if not first_ts:\n                first_ts = ts\n\n            try:\n                ip = iplayer_from_raw(buf, pcap.datalink())\n\n                connection = {}\n                if isinstance(ip, dpkt.ip.IP):\n                    connection[\"src\"] = socket.inet_ntoa(ip.src)\n                    connection[\"dst\"] = socket.inet_ntoa(ip.dst)\n                elif isinstance(ip, dpkt.ip6.IP6):\n                    connection[\"src\"] = socket.inet_ntop(socket.AF_INET6,\n                                                         ip.src)\n                    connection[\"dst\"] = socket.inet_ntop(socket.AF_INET6,\n                                                         ip.dst)\n                else:\n                    offset = file.tell()\n                    continue\n\n                self._add_hosts(connection)\n\n                if ip.p == dpkt.ip.IP_PROTO_TCP:\n                    tcp = ip.data\n                    if not isinstance(tcp, dpkt.tcp.TCP):\n                        tcp = dpkt.tcp.TCP(tcp)\n\n                    if tcp.data:\n                        connection[\"sport\"] = tcp.sport\n                        connection[\"dport\"] = tcp.dport\n                        self._tcp_dissect(connection, tcp.data)\n\n                        src, sport, dst, dport = (connection[\"src\"], connection[\"sport\"], connection[\"dst\"], connection[\"dport\"])\n                        if not ((dst, dport, src, sport) in self.tcp_connections_seen or (src, sport, dst, dport) in self.tcp_connections_seen):\n                            self.tcp_connections.append((src, sport, dst, dport, offset, ts-first_ts))\n                            self.tcp_connections_seen.add((src, sport, dst, dport))\n                    else:\n                        ipconn = (\n                            connection[\"src\"], tcp.sport,\n                            connection[\"dst\"], tcp.dport,\n                        )\n                        seqack = self.tcp_connections_dead.get(ipconn)\n                        if seqack == (tcp.seq, tcp.ack):\n                            host = connection[\"dst\"], tcp.dport\n                            self.dead_hosts[host] = self.dead_hosts.get(host, 1) + 1\n\n                        self.tcp_connections_dead[ipconn] = tcp.seq, tcp.ack\n\n                elif ip.p == dpkt.ip.IP_PROTO_UDP:\n                    udp = ip.data\n                    if not isinstance(udp, dpkt.udp.UDP):\n                        udp = dpkt.udp.UDP(udp)\n\n                    if len(udp.data) > 0:\n                        connection[\"sport\"] = udp.sport\n                        connection[\"dport\"] = udp.dport\n                        self._udp_dissect(connection, udp.data)\n\n                        src, sport, dst, dport = (connection[\"src\"], connection[\"sport\"], connection[\"dst\"], connection[\"dport\"])\n                        if not ((dst, dport, src, sport) in self.udp_connections_seen or (src, sport, dst, dport) in self.udp_connections_seen):\n                            self.udp_connections.append((src, sport, dst, dport, offset, ts-first_ts))\n                            self.udp_connections_seen.add((src, sport, dst, dport))\n\n                elif ip.p == dpkt.ip.IP_PROTO_ICMP:\n                    icmp = ip.data\n                    if not isinstance(icmp, dpkt.icmp.ICMP):\n                        icmp = dpkt.icmp.ICMP(icmp)\n\n                    self._icmp_dissect(connection, icmp)\n\n                offset = file.tell()\n            except AttributeError:\n                continue\n            except dpkt.dpkt.NeedData:\n                continue\n            except Exception as e:\n                log.exception(\"Failed to process packet: %s\", e)\n\n        file.close()\n\n        # Post processors for reconstructed flows.\n        self._process_smtp()\n\n        # Build results dict.\n        self.results[\"hosts\"] = self.unique_hosts\n        self.results[\"domains\"] = self.unique_domains\n        self.results[\"tcp\"] = [conn_from_flowtuple(i) for i in self.tcp_connections]\n        self.results[\"udp\"] = [conn_from_flowtuple(i) for i in self.udp_connections]\n        self.results[\"icmp\"] = self.icmp_requests\n        self.results[\"http\"] = self.http_requests.values()\n        self.results[\"tls\"] = self.tls_keys\n        self.results[\"dns\"] = self.dns_requests.values()\n        self.results[\"smtp\"] = self.smtp_requests\n        self.results[\"irc\"] = self.irc_requests\n\n        self.results[\"dead_hosts\"] = []\n\n        # Report each IP/port combination as a dead host if we've had to retry\n        # at least 3 times to connect to it. TODO We should remove the IP/port\n        # combination from the list if the connection was successful later on\n        # during the analysis.\n        for (ip, port), count in self.dead_hosts.items():\n            if count > 2 and (ip, port) not in self.results[\"dead_hosts\"]:\n                self.results[\"dead_hosts\"].append((ip, port))\n\n        return self.results\n\nclass Pcap2(object):\n    \"\"\"Interprets the PCAP file through the httpreplay library which parses\n    the various protocols, decrypts and decodes them, and then provides us\n    with the high level representation of it.\"\"\"\n\n    def __init__(self, pcap_path, tlsmaster, network_path):\n        self.pcap_path = pcap_path\n        self.network_path = network_path\n\n        self.handlers = {\n            25: httpreplay.cut.smtp_handler,\n            80: httpreplay.cut.http_handler,\n            8000: httpreplay.cut.http_handler,\n            8080: httpreplay.cut.http_handler,\n            443: lambda: httpreplay.cut.https_handler(tlsmaster),\n            4443: lambda: httpreplay.cut.https_handler(tlsmaster),\n        }\n\n    def run(self):\n        results = {\n            \"http_ex\": [],\n            \"https_ex\": [],\n        }\n\n        if not os.path.exists(self.network_path):\n            os.mkdir(self.network_path)\n\n        r = httpreplay.reader.PcapReader(open(self.pcap_path, \"rb\"))\n        r.tcp = httpreplay.smegma.TCPPacketStreamer(r, self.handlers)\n\n        l = sorted(r.process(), key=lambda x: x[1])\n        for s, ts, protocol, sent, recv in l:\n            srcip, srcport, dstip, dstport = s\n\n            if protocol == \"http\" or protocol == \"https\":\n                request = sent.raw.split(\"\\r\\n\\r\\n\", 1)[0]\n                response = recv.raw.split(\"\\r\\n\\r\\n\", 1)[0]\n\n                md5 = hashlib.md5(recv.body or \"\").hexdigest()\n                sha1 = hashlib.sha1(recv.body or \"\").hexdigest()\n\n                filepath = os.path.join(self.network_path, sha1)\n                open(filepath, \"wb\").write(recv.body or \"\")\n\n                results[\"%s_ex\" % protocol].append({\n                    \"src\": srcip, \"sport\": srcport,\n                    \"dst\": dstip, \"dport\": dstport,\n                    \"protocol\": protocol,\n                    \"method\": sent.method,\n                    \"host\": sent.headers.get(\"host\", dstip),\n                    \"uri\": sent.uri,\n                    \"request\": request.decode(\"latin-1\"),\n                    \"response\": response.decode(\"latin-1\"),\n                    \"md5\": md5,\n                    \"sha1\": sha1,\n                    \"path\": filepath,\n                })\n\n        return results\n\nclass NetworkAnalysis(Processing):\n    \"\"\"Network analysis.\"\"\"\n\n    order = 2\n    key = \"network\"\n\n    def run(self):\n        results = {}\n\n        # Include any results provided by the mitm script.\n        results[\"mitm\"] = []\n        if os.path.exists(self.mitmout_path):\n            for line in open(self.mitmout_path, \"rb\"):\n                try:\n                    results[\"mitm\"].append(json.loads(line))\n                except:\n                    results[\"mitm\"].append(line)\n\n        if not os.path.exists(self.pcap_path):\n            log.warning(\"The PCAP file does not exist at path \\\"%s\\\".\",\n                        self.pcap_path)\n            return results\n\n        if os.path.getsize(self.pcap_path) == 0:\n            log.error(\"The PCAP file at path \\\"%s\\\" is empty.\" % self.pcap_path)\n            return results\n\n        # PCAP file hash.\n        if os.path.exists(self.pcap_path):\n            results[\"pcap_sha256\"] = File(self.pcap_path).get_sha256()\n\n        if not HAVE_DPKT and not HAVE_HTTPREPLAY:\n            log.error(\"Both Python HTTPReplay and Python DPKT are not \"\n                      \"installed, no PCAP analysis possible.\")\n            return results\n\n        sorted_path = self.pcap_path.replace(\"dump.\", \"dump_sorted.\")\n        if cfg.processing.sort_pcap:\n            sort_pcap(self.pcap_path, sorted_path)\n            pcap_path = sorted_path\n\n            # Sorted PCAP file hash.\n            if os.path.exists(sorted_path):\n                results[\"sorted_pcap_sha256\"] = File(sorted_path).get_sha256()\n        else:\n            pcap_path = self.pcap_path\n\n        if HAVE_DPKT:\n            results.update(Pcap(pcap_path).run())\n\n        if HAVE_HTTPREPLAY and os.path.exists(pcap_path):\n            try:\n                p2 = Pcap2(pcap_path, self.get_tlsmaster(), self.network_path)\n                results.update(p2.run())\n            except:\n                log.exception(\"Error running httpreplay-based PCAP analysis\")\n\n        return results\n\n    def get_tlsmaster(self):\n        \"\"\"Obtain the client/server random to TLS master secrets mapping that\n        we have obtained through dynamic analysis.\"\"\"\n        tlsmaster = {}\n        summary = self.results.get(\"behavior\", {}).get(\"summary\", {})\n        for entry in summary.get(\"tls_master\", []):\n            client_random, server_random, master_secret = entry\n            client_random = client_random.decode(\"hex\")\n            server_random = server_random.decode(\"hex\")\n            master_secret = master_secret.decode(\"hex\")\n            tlsmaster[client_random, server_random] = master_secret\n        return tlsmaster\n\ndef iplayer_from_raw(raw, linktype=1):\n    \"\"\"Converts a raw packet to a dpkt packet regarding of link type.\n    :param raw: raw packet\n    :param linktype: integer describing link type as expected by dpkt\n    \"\"\"\n    if linktype == 1:  # ethernet\n        try:\n            pkt = dpkt.ethernet.Ethernet(raw)\n            return pkt.data\n        except dpkt.NeedData:\n            pass\n    elif linktype == 101:  # raw\n        return dpkt.ip.IP(raw)\n    else:\n        raise CuckooProcessingError(\"unknown PCAP linktype\")\n\ndef conn_from_flowtuple(ft):\n    \"\"\"Convert the flow tuple into a dictionary (suitable for JSON)\"\"\"\n    sip, sport, dip, dport, offset, relts = ft\n    return {\"src\": sip, \"sport\": sport,\n            \"dst\": dip, \"dport\": dport,\n            \"offset\": offset, \"time\": relts}\n\n# input_iterator should be a class that also supports writing so we can use\n# it for the temp files\n# this code is mostly taken from some SO post, can't remember the url though\ndef batch_sort(input_iterator, output_path, buffer_size=32000, output_class=None):\n    \"\"\"batch sort helper with temporary files, supports sorting large stuff\"\"\"\n    if not output_class:\n        output_class = input_iterator.__class__\n\n    chunks = []\n    try:\n        while True:\n            current_chunk = list(islice(input_iterator, buffer_size))\n            if not current_chunk:\n                break\n\n            current_chunk.sort()\n            fd, filepath = tempfile.mkstemp()\n            os.close(fd)\n            output_chunk = output_class(filepath)\n            chunks.append(output_chunk)\n\n            for elem in current_chunk:\n                output_chunk.write(elem.obj)\n            output_chunk.close()\n\n        output_file = output_class(output_path)\n        for elem in heapq.merge(*chunks):\n            output_file.write(elem.obj)\n        output_file.close()\n    finally:\n        for chunk in chunks:\n            try:\n                chunk.close()\n                os.remove(chunk.name)\n            except Exception:\n                pass\n\nclass SortCap(object):\n    \"\"\"SortCap is a wrapper around the packet lib (dpkt) that allows us to sort pcaps\n    together with the batch_sort function above.\"\"\"\n\n    def __init__(self, path, linktype=1):\n        self.name = path\n        self.linktype = linktype\n        self.fd = None\n        self.ctr = 0  # counter to pass through packets without flow info (non-IP)\n        self.conns = set()\n\n    def write(self, p):\n        if not self.fd:\n            self.fd = dpkt.pcap.Writer(open(self.name, \"wb\"), linktype=self.linktype)\n        self.fd.writepkt(p.raw, p.ts)\n\n    def __iter__(self):\n        if not self.fd:\n            self.fd = dpkt.pcap.Reader(open(self.name, \"rb\"))\n            self.fditer = iter(self.fd)\n            self.linktype = self.fd.datalink()\n        return self\n\n    def close(self):\n        if self.fd:\n            self.fd.close()\n            self.fd = None\n\n    def next(self):\n        rp = next(self.fditer)\n        if rp is None:\n            return None\n\n        self.ctr += 1\n\n        ts, raw = rp\n        rpkt = Packet(raw, ts)\n\n        sip, dip, sport, dport, proto = flowtuple_from_raw(raw, self.linktype)\n\n        # check other direction of same flow\n        if (dip, sip, dport, sport, proto) in self.conns:\n            flowtuple = (dip, sip, dport, sport, proto)\n        else:\n            flowtuple = (sip, dip, sport, dport, proto)\n\n        self.conns.add(flowtuple)\n        return Keyed((flowtuple, ts, self.ctr), rpkt)\n\ndef sort_pcap(inpath, outpath):\n    \"\"\"Use SortCap class together with batch_sort to sort a pcap\"\"\"\n    inc = SortCap(inpath)\n    batch_sort(inc, outpath, output_class=lambda path: SortCap(path, linktype=inc.linktype))\n    return 0\n\ndef flowtuple_from_raw(raw, linktype=1):\n    \"\"\"Parse a packet from a pcap just enough to gain a flow description tuple\"\"\"\n    ip = iplayer_from_raw(raw, linktype)\n\n    if isinstance(ip, dpkt.ip.IP):\n        sip, dip = socket.inet_ntoa(ip.src), socket.inet_ntoa(ip.dst)\n        proto = ip.p\n\n        if proto == dpkt.ip.IP_PROTO_TCP or proto == dpkt.ip.IP_PROTO_UDP:\n            l3 = ip.data\n            sport, dport = l3.sport, l3.dport\n        else:\n            sport, dport = 0, 0\n\n    else:\n        sip, dip, proto = 0, 0, -1\n        sport, dport = 0, 0\n\n    flowtuple = (sip, dip, sport, dport, proto)\n    return flowtuple\n\ndef payload_from_raw(raw, linktype=1):\n    \"\"\"Get the payload from a packet, the data below TCP/UDP basically\"\"\"\n    ip = iplayer_from_raw(raw, linktype)\n    try:\n        return ip.data.data\n    except:\n        return \"\"\n\ndef next_connection_packets(piter, linktype=1):\n    \"\"\"Extract all packets belonging to the same flow from a pcap packet\n    iterator.\"\"\"\n    first_ft = None\n\n    for ts, raw in piter:\n        ft = flowtuple_from_raw(raw, linktype)\n        if not first_ft:\n            first_ft = ft\n\n        sip, dip, sport, dport, proto = ft\n        if not (first_ft == ft or first_ft == (dip, sip, dport, sport, proto)):\n            break\n\n        yield {\n            \"src\": sip, \"dst\": dip, \"sport\": sport, \"dport\": dport,\n            \"raw\": payload_from_raw(raw, linktype).encode(\"base64\"),\n            \"direction\": first_ft == ft,\n        }\n\ndef packets_for_stream(fobj, offset):\n    \"\"\"Open a PCAP, seek to a packet offset, then get all packets belonging to\n    the same connection.\"\"\"\n    pcap = dpkt.pcap.Reader(fobj)\n    pcapiter = iter(pcap)\n    ts, raw = pcapiter.next()\n\n    fobj.seek(offset)\n    for p in next_connection_packets(pcapiter, linktype=pcap.datalink()):\n        yield p\n"
  },
  {
    "path": "modules/processing/platform/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "modules/processing/platform/linux.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport logging\nimport datetime\nimport re\n\nimport dateutil.parser\n\nfrom lib.cuckoo.common.abstracts import BehaviorHandler\n\nlog = logging.getLogger(__name__)\n\nclass FilteredProcessLog(list):\n    def __init__(self, eventstream, **kwfilters):\n        self.eventstream = eventstream\n        self.kwfilters = kwfilters\n\n    def __iter__(self):\n        for event in self.eventstream:\n            for k, v in self.kwfilters.items():\n                if event[k] != v:\n                    continue\n\n                del event[\"type\"]\n                yield event\n\n    def __nonzero__(self):\n        return True\n\nclass LinuxSystemTap(BehaviorHandler):\n    \"\"\"Parses systemtap generated plaintext logs (see data/strace.stp).\"\"\"\n\n    key = \"processes\"\n\n    def __init__(self, *args, **kwargs):\n        super(LinuxSystemTap, self).__init__(*args, **kwargs)\n\n        self.processes = []\n        self.pids_seen = set()\n        self.forkmap = {}\n        self.matched = False\n\n        self._check_for_probelkm()\n\n    def _check_for_probelkm(self):\n        path_lkm = os.path.join(self.analysis.logs_path, \"all.lkm\")\n        if os.path.exists(path_lkm):\n            lines = open(path_lkm).readlines()\n\n            forks = [re.findall(\"task (\\d+)@0x[0-9a-f]+ forked to (\\d+)@0x[0-9a-f]+\", line) for line in lines]\n            self.forkmap = dict((j, i) for i, j in reduce(lambda x, y: x+y, forks, []))\n\n            # self.results[\"source\"].append(\"probelkm\")\n\n    def handles_path(self, path):\n        if path.endswith(\".stap\"):\n            self.matched = True\n            return True\n\n    def parse(self, path):\n        parser = StapParser(open(path))\n\n        for event in parser:\n            pid = event[\"pid\"]\n            if pid not in self.pids_seen:\n                self.pids_seen.add(pid)\n                ppid = self.forkmap.get(pid, -1)\n\n                process = {\n                    \"pid\": pid,\n                    \"ppid\": ppid,\n                    \"process_name\": event[\"process_name\"],\n                    \"first_seen\": event[\"time\"],\n                }\n\n                # create a process event as we don't have those with linux+systemtap\n                pevent = dict(process)\n                pevent[\"type\"] = \"process\"\n                yield pevent\n\n                process[\"calls\"] = FilteredProcessLog(parser, pid=pid)\n                self.processes.append(process)\n\n            yield event\n\n    def run(self):\n        if not self.matched:\n            return\n\n        self.processes.sort(key=lambda process: process[\"first_seen\"])\n        return self.processes\n\nclass StapParser(object):\n    \"\"\"Handle .stap logs from the Linux analyzer.\"\"\"\n\n    def __init__(self, fd):\n        self.fd = fd\n\n    def __iter__(self):\n        self.fd.seek(0)\n\n        for line in self.fd:\n            # 'Thu May  7 14:58:43 2015.390178 python@7f798cb95240[2114] close(6) = 0\\n'\n            # datetime is 31 characters\n            datetimepart, rest = line[:31], line[32:]\n\n            # incredibly sophisticated date time handling\n            dtms = datetime.timedelta(0, 0, int(datetimepart.split(\".\", 1)[1]))\n            dt = dateutil.parser.parse(datetimepart.split(\".\", 1)[0]) + dtms\n\n            parts = re.match(\"^(.+)@([a-f0-9]+)\\[(\\d+)\\] (\\w+)\\((.*)\\) = (\\S+){0,1}\\s{0,1}(\\(\\w+\\)){0,1}$\", rest)\n            if not parts:\n                log.warning(\"Could not parse syscall trace line: %s\", line)\n                continue\n\n            pname, ip, pid, fn, arguments, retval, ecode = parts.groups()\n            argsplit = arguments.split(\", \")\n            arguments = dict((\"p%u\" % pos, argsplit[pos]) for pos in range(len(argsplit)))\n\n            pid = int(pid) if pid.isdigit() else -1\n\n            yield {\n                \"time\": dt, \"process_name\": pname, \"pid\": pid,\n                \"instruction_pointer\": ip, \"api\": fn, \"arguments\": arguments,\n                \"return_value\": retval, \"status\": ecode,\n                \"type\": \"apicall\", \"raw\": line,\n            }\n"
  },
  {
    "path": "modules/processing/platform/windows.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport datetime\nimport logging\nimport re\n\nfrom lib.cuckoo.common.abstracts import BehaviorHandler\nfrom lib.cuckoo.common.netlog import BsonParser\nfrom lib.cuckoo.common.utils import guid_name, jsbeautify, htmlprettify\n\nlog = logging.getLogger(__name__)\n\nclass MonitorProcessLog(list):\n    \"\"\"Yields each API call event to the parent handler. Optionally it may\n    beautify certain API calls.\"\"\"\n\n    def __init__(self, eventstream):\n        self.eventstream = eventstream\n        self.first_seen = None\n        self.has_apicalls = False\n\n    def init(self):\n        self.services = {}\n        self.vbe6_ptrs = {}\n        self.vbe6_func = {}\n\n    def _api_COleScript_Compile(self, event):\n        event[\"raw\"] = \"script\",\n        event[\"arguments\"][\"script\"] = \\\n            jsbeautify(event[\"arguments\"][\"script\"])\n\n    def _api_CWindow_AddTimeoutCode(self, event):\n        event[\"raw\"] = \"code\",\n        event[\"arguments\"][\"code\"] = jsbeautify(event[\"arguments\"][\"code\"])\n\n    def _api_CElement_put_innerHTML(self, event):\n        event[\"raw\"] = \"html\",\n        event[\"arguments\"][\"html\"] = htmlprettify(event[\"arguments\"][\"html\"])\n\n    def _api_CDocument_write(self, event):\n        event[\"raw\"] = \"lines\",\n        for idx, line in enumerate(event[\"arguments\"][\"lines\"]):\n            event[\"arguments\"][\"lines\"][idx] = htmlprettify(line)\n\n    def _api_CIFrameElement_CreateElement(self, event):\n        \"\"\"Lowercases the attribute keys.\"\"\"\n        attrs = {}\n        for key, value in event[\"arguments\"][\"attributes\"].items():\n            attrs[key.lower()] = value\n\n        event[\"arguments\"][\"attributes\"] = attrs\n\n    def _remember_service_name(self, event):\n        \"\"\"Keep track of the name of this service.\"\"\"\n        service_name = event[\"arguments\"][\"service_name\"]\n        # We've added logging of the service_handle to the API signature in\n        # the Monitor, but for backwards compatibility we'll keep it as\n        # follows for now.\n        service_handle = \"0x%08x\" % event[\"return_value\"]\n        self.services[service_handle] = service_name\n\n    _api_OpenServiceA = _remember_service_name\n    _api_OpenServiceW = _remember_service_name\n    _api_CreateServiceA = _remember_service_name\n    _api_CreateServiceW = _remember_service_name\n\n    def _add_service_name(self, event):\n        service_name = self.services.get(event[\"arguments\"][\"service_handle\"])\n        event[\"arguments\"][\"service_name\"] = service_name\n\n    _api_StartServiceA = _add_service_name\n    _api_StartServiceW = _add_service_name\n    _api_ControlService = _add_service_name\n    _api_DeleteService = _add_service_name\n\n    # VBA Macro analysis stuff.\n\n    def _vbe6_newobject(self, event):\n        \"\"\"Keep track which instance pointers belong to which classes.\"\"\"\n        this = event[\"arguments\"][\"this\"]\n        object_name = event[\"arguments\"][\"object_name\"]\n\n        self.vbe6_ptrs[this] = object_name\n\n    _api_vbe6_CreateObject = _vbe6_newobject\n    _api_vbe6_GetObject = _vbe6_newobject\n\n    def _api_vbe6_StringConcat(self, event):\n        pass\n\n    def _api_vbe6_Import(self, event):\n        # TODO Move this logic to the monitor.\n        args = event[\"arguments\"]\n        if args[\"library\"] == \"VBE6.DLL\" and not args[\"function\"]:\n            return False\n\n    def _api_vbe6_GetIDFromName(self, event):\n        \"\"\"Keep track which function has which function index.\n        This informational call is omitted from the actual logs.\"\"\"\n        this = event[\"arguments\"][\"this\"]\n        funcidx = event[\"arguments\"][\"funcidx\"]\n        funcname = event[\"arguments\"][\"funcname\"]\n\n        class_ = self.vbe6_ptrs.get(this, this)\n        self.vbe6_func[class_, funcidx] = funcname\n        return False\n\n    def _api_vbe6_Invoke(self, event):\n        this = event[\"arguments\"][\"this\"]\n        funcidx = event[\"arguments\"][\"funcidx\"]\n\n        if this in self.vbe6_ptrs:\n            event[\"flags\"][\"this\"] = self.vbe6_ptrs[this]\n\n        class_ = self.vbe6_ptrs.get(this, this)\n        if class_ and (class_, funcidx) in self.vbe6_func:\n            event[\"arguments\"][\"funcname\"] = self.vbe6_func[class_, funcidx]\n\n        del event[\"arguments\"][\"funcidx\"]\n\n    # PDF document analysis.\n\n    def _api_pdf_eval(self, event):\n        event[\"raw\"] = \"script\",\n        event[\"arguments\"][\"script\"] = \\\n            jsbeautify(event[\"arguments\"][\"script\"])\n\n    def _api_pdf_unescape(self, event):\n        event[\"raw\"] = \"string\", \"unescaped\"\n\n        # \"%u1234\" => \"\\x34\\x12\"\n        # Strictly speaking this does not reflect what unescape() does, but\n        # in the end it's usually just about the in-memory representation.\n        event[\"arguments\"][\"unescaped\"] = re.sub(\n            \"%u([0-9a-fA-F]{4})\",\n            lambda x: x.group(1).decode(\"hex\").decode(\"latin-1\")[::-1],\n            event[\"arguments\"][\"string\"]\n        )\n\n        # \"%41\" => \"A\"\n        event[\"arguments\"][\"unescaped\"] = re.sub(\n            \"%([0-9a-fA-F]{2})\",\n            lambda x: x.group(1).decode(\"hex\").decode(\"latin-1\"),\n            event[\"arguments\"][\"unescaped\"]\n        )\n\n    def _api_modifier(self, event):\n        \"\"\"Adds flags field to CLSID and IID instances.\"\"\"\n        clsid = guid_name(event[\"arguments\"].get(\"clsid\"))\n        if clsid:\n            event[\"flags\"][\"clsid\"] = clsid\n\n        iid = event[\"arguments\"].get(\"iid\")\n        if isinstance(iid, (tuple, list)):\n            event[\"flags\"][\"iid\"] = [guid_name(x) for x in iid]\n        elif guid_name(iid):\n            event[\"flags\"][\"iid\"] = guid_name(iid)\n\n    def __iter__(self):\n        self.init()\n        for event in self.eventstream:\n            if event[\"type\"] == \"process\":\n                self.first_seen = event[\"first_seen\"]\n            elif event[\"type\"] == \"apicall\":\n                event[\"time\"] = self.first_seen + datetime.timedelta(0, 0, event[\"time\"] * 1000)\n\n                # Remove the event type for reporting output.\n                del event[\"type\"]\n\n                # Get rid of the pid (we're below the pid in the structure).\n                del event[\"pid\"]\n\n                # Get rid of the unique hash, this is only relevant\n                # for automation.\n                del event[\"uniqhash\"]\n\n                # If available, call a modifier function.\n                apiname = \"_api_%s\" % event[\"api\"]\n                r = getattr(self, apiname, lambda _: None)(event)\n\n                # Generic modifier for various functions.\n                self._api_modifier(event)\n\n                # Prevent this event from being passed along by returning\n                # False in a _api_() method.\n                if r is not False:\n                    yield event\n\n    def __nonzero__(self):\n        \"\"\"Required for the JSON reporting module as otherwise the on-demand\n        generated list of API calls would be seen as empty.\n\n        Note that the result structure is kept between processing and\n        reporting time which means that at reporting time, where this\n        functionality is actually needed, the has_apicalls will already have\n        been set while iterating through the BSON logs iterator in the parse()\n        function of the WindowsMonitor class. We use this knowledge to pass\n        along whether or not this log actually has API call events and thus\n        whether it's \"nonzero\" or not. (The correctness of this field is\n        required as otherwise the json.dump() function will fail - probably\n        due to buffering issues).\n        \"\"\"\n        return self.has_apicalls\n\nclass WindowsMonitor(BehaviorHandler):\n    \"\"\"Parses monitor generated logs.\"\"\"\n    key = \"processes\"\n\n    def __init__(self, *args, **kwargs):\n        super(WindowsMonitor, self).__init__(*args, **kwargs)\n        self.processes = []\n        self.reconstructors = {}\n        self.matched = False\n\n    def handles_path(self, path):\n        if path.endswith(\".bson\"):\n            self.matched = True\n            return True\n\n    def parse(self, path):\n        # Invoke parsing of current log file.\n        parser = BsonParser(open(path, \"rb\"))\n        parser.init()\n\n        for event in parser:\n            if event[\"type\"] == \"process\":\n                process = dict(event)\n                process[\"calls\"] = MonitorProcessLog(parser)\n                self.processes.append(process)\n\n                self.reconstructors[process[\"pid\"]] = BehaviorReconstructor()\n\n            # Create generic events out of the windows calls.\n            elif event[\"type\"] == \"apicall\":\n                reconstructor = self.reconstructors[event[\"pid\"]]\n                res = reconstructor.process_apicall(event)\n\n                if res and isinstance(res, tuple):\n                    res = [res]\n\n                if res:\n                    for category, arg in res:\n                        yield {\n                            \"type\": \"generic\",\n                            \"pid\": event[\"pid\"],\n                            \"category\": category,\n                            \"value\": arg,\n                        }\n\n                # Indicate that the process has API calls. For more\n                # information on this matter, see also the __nonzero__ above.\n                process[\"calls\"].has_apicalls = True\n\n            yield event\n\n    def run(self):\n        if not self.matched:\n            return\n\n        self.processes.sort(key=lambda process: process[\"first_seen\"])\n        return self.processes\n\ndef NT_SUCCESS(value):\n    return value % 2**32 < 0x80000000\n\nclass BehaviorReconstructor(object):\n    \"\"\"Reconstructs the behavior of behavioral API logs.\"\"\"\n    def __init__(self):\n        self.files = {}\n\n    def process_apicall(self, event):\n        fn = getattr(self, \"_api_%s\" % event[\"api\"], None)\n        if fn is not None:\n            return fn(event[\"return_value\"], event[\"arguments\"],\n                      event.get(\"flags\"))\n\n    # Generic file & directory stuff.\n\n    def _api_CreateDirectoryW(self, return_value, arguments, flags):\n        return (\"directory_created\", arguments[\"dirpath\"])\n\n    _api_CreateDirectoryExW = _api_CreateDirectoryW\n\n    def _api_RemoveDirectoryA(self, return_value, arguments, flags):\n        return (\"directory_removed\", arguments[\"dirpath\"])\n\n    _api_RemoveDirectoryW = _api_RemoveDirectoryA\n\n    def _api_MoveFileWithProgressW(self, return_value, arguments, flags):\n        return (\"file_moved\", (arguments[\"oldfilepath\"],\n                               arguments[\"newfilepath\"]))\n\n    def _api_CopyFileA(self, return_value, arguments, flags):\n        return (\"file_copied\", (arguments[\"oldfilepath\"],\n                                arguments[\"newfilepath\"]))\n\n    _api_CopyFileW = _api_CopyFileA\n    _api_CopyFileExW = _api_CopyFileA\n\n    def _api_DeleteFileA(self, return_value, arguments, flags):\n        return (\"file_deleted\", arguments[\"filepath\"])\n\n    _api_DeleteFileW = _api_DeleteFileA\n    _api_NtDeleteFile = _api_DeleteFileA\n\n    def _api_FindFirstFileExA(self, return_value, arguments, flags):\n        return (\"directory_enumerated\", arguments[\"filepath\"])\n\n    _api_FindFirstFileExW = _api_FindFirstFileExA\n\n    def _api_LdrLoadDll(self, return_value, arguments, flags):\n        return (\"dll_loaded\", arguments[\"module_name\"])\n\n    def _api_NtCreateFile(self, return_value, arguments, flags):\n        self.files[arguments[\"file_handle\"]] = arguments[\"filepath\"]\n        if NT_SUCCESS(return_value):\n            status_info = flags.get(\"status_info\", \"\").lower()\n            if status_info in (\"file_overwritten\", \"file_superseded\"):\n                return (\"file_recreated\", arguments[\"filepath\"])\n            elif status_info == \"file_exists\":\n                return (\"file_opened\", arguments[\"filepath\"])\n            elif status_info == \"file_does_not_exist\":\n                return (\"file_failed\", arguments[\"filepath\"])\n            elif status_info == \"file_created\":\n                return (\"file_created\", arguments[\"filepath\"])\n            else:\n                return (\"file_opened\", arguments[\"filepath\"])\n        else:\n            return (\"file_failed\", arguments[\"filepath\"])\n\n    _api_NtOpenFile = _api_NtCreateFile\n\n    def _api_NtReadFile(self, return_value, arguments, flags):\n        h = arguments[\"file_handle\"]\n        if NT_SUCCESS(return_value) and h in self.files:\n            return (\"file_read\", self.files[h])\n\n    def _api_NtWriteFile(self, return_value, arguments, flags):\n        h = arguments[\"file_handle\"]\n        if NT_SUCCESS(return_value) and h in self.files:\n            return (\"file_written\", self.files[h])\n\n    def _api_GetFileAttributesW(self, return_value, arguments, flags):\n        return (\"file_exists\", arguments[\"filepath\"])\n\n    _api_GetFileAttributesExW = _api_GetFileAttributesW\n\n    # Registry stuff.\n\n    def _api_RegOpenKeyExA(self, return_value, arguments, flags):\n        return (\"regkey_opened\", arguments[\"regkey\"])\n\n    _api_RegOpenKeyExW = _api_RegOpenKeyExA\n    _api_RegCreateKeyExA = _api_RegOpenKeyExA\n    _api_RegCreateKeyExW = _api_RegOpenKeyExA\n\n    def _api_RegDeleteKeyA(self, return_value, arguments, flags):\n        return (\"regkey_deleted\", arguments[\"regkey\"])\n\n    _api_RegDeleteKeyW = _api_RegDeleteKeyA\n    _api_RegDeleteValueA = _api_RegDeleteKeyA\n    _api_RegDeleteValueW = _api_RegDeleteKeyA\n    _api_NtDeleteValueKey = _api_RegDeleteKeyA\n\n    def _api_RegQueryValueExA(self, return_value, arguments, flags):\n        return (\"regkey_read\", arguments[\"regkey\"])\n\n    _api_RegQueryValueExW = _api_RegQueryValueExA\n    _api_NtQueryValueKey = _api_RegQueryValueExA\n\n    def _api_RegSetValueExA(self, return_value, arguments, flags):\n        return (\"regkey_written\", arguments[\"regkey\"])\n\n    _api_RegSetValueExW = _api_RegSetValueExA\n    _api_NtSetValueKey = _api_RegSetValueExA\n\n    def _api_NtClose(self, return_value, arguments, flags):\n        self.files.pop(arguments[\"handle\"], None)\n\n    # Network stuff.\n\n    def _api_URLDownloadToFileW(self, return_value, arguments, flags):\n        return [\n            (\"downloads_file\", arguments[\"url\"]),\n            (\"file_opened\", arguments[\"filepath\"]),\n            (\"file_written\", arguments[\"filepath\"]),\n        ]\n\n    def _api_InternetConnectA(self, return_value, arguments, flags):\n        return (\"connects_host\", arguments[\"hostname\"])\n\n    _api_InternetConnectW = _api_InternetConnectA\n\n    def _api_InternetOpenUrlA(self, return_value, arguments, flags):\n        return (\"fetches_url\", arguments[\"url\"])\n\n    _api_InternetOpenUrlW = _api_InternetOpenUrlA\n\n    def _api_DnsQuery_A(self, return_value, arguments, flags):\n        if arguments[\"hostname\"]:\n            return (\"resolves_host\", arguments[\"hostname\"])\n\n    _api_DnsQuery_W = _api_DnsQuery_A\n    _api_DnsQuery_UTF8 = _api_DnsQuery_A\n    _api_getaddrinfo = _api_DnsQuery_A\n    _api_GetAddrInfoW = _api_DnsQuery_A\n    _api_gethostbyname = _api_DnsQuery_A\n\n    def _api_connect(self, return_value, arguments, flags):\n        return (\"connects_ip\", arguments[\"ip_address\"])\n\n    # Mutex stuff\n\n    def _api_NtCreateMutant(self, return_value, arguments, flags):\n        if arguments[\"mutant_name\"]:\n            return (\"mutex\", arguments[\"mutant_name\"])\n\n    _api_ConnectEx = _api_connect\n\n    # Process stuff.\n\n    def _api_CreateProcessInternalW(self, return_value, arguments, flags):\n        if arguments.get(\"track\", True):\n            cmdline = arguments[\"command_line\"] or arguments[\"filepath\"]\n            return (\"command_line\", cmdline)\n\n    def _api_ShellExecuteExW(self, return_value, arguments, flags):\n        if arguments[\"parameters\"]:\n            cmdline = \"%s %s\" % (arguments[\"filepath\"], arguments[\"parameters\"])\n        else:\n            cmdline = arguments[\"filepath\"]\n        return (\"command_line\", cmdline)\n\n    def _api_system(self, return_value, arguments, flags):\n        return (\"command_line\", arguments[\"command\"])\n\n    # WMI stuff.\n\n    def _api_IWbemServices_ExecQuery(self, return_value, arguments, flags):\n        return (\"wmi_query\", arguments[\"query\"])\n\n    def _api_IWbemServices_ExecQueryAsync(self, return_value, arguments, flags):\n        return (\"wmi_query\", arguments[\"query\"])\n\n    # GUIDs.\n\n    def _api_CoCreateInstance(self, return_value, arguments, flags):\n        return [\n            (\"guid\", arguments[\"clsid\"]),\n            (\"guid\", arguments[\"iid\"]),\n        ]\n\n    def _api_CoCreateInstanceEx(self, return_value, arguments, flags):\n        ret = [\n            (\"guid\", arguments[\"clsid\"]),\n        ]\n        for iid in arguments[\"iid\"]:\n            ret.append((\"guid\", iid))\n        return ret\n\n    def _api_CoGetClassObject(self, return_value, arguments, flags):\n        return [\n            (\"guid\", arguments[\"clsid\"]),\n            (\"guid\", arguments[\"iid\"]),\n        ]\n\n    # SSLv3 & TLS Master Secrets.\n\n    def _api_Ssl3GenerateKeyMaterial(self, return_value, arguments, flags):\n        if arguments[\"client_random\"] and arguments[\"server_random\"]:\n            return [\n                (\"tls_master\", (\n                    arguments[\"client_random\"],\n                    arguments[\"server_random\"],\n                    arguments[\"master_secret\"],\n                ))\n            ]\n\n    def _api_PRF(self, return_value, arguments, flags):\n        if arguments[\"type\"] == \"key expansion\":\n            return [\n                (\"tls_master\", (\n                    arguments[\"client_random\"],\n                    arguments[\"server_random\"],\n                    arguments[\"master_secret\"],\n                )),\n            ]\n"
  },
  {
    "path": "modules/processing/procmemory.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport hashlib\nimport logging\nimport os\nimport re\nimport struct\n\nfrom lib.cuckoo.common.abstracts import Processing\nfrom lib.cuckoo.common.objects import File\n\ntry:\n    import pefile\n    HAVE_PEFILE = True\nexcept ImportError:\n    HAVE_PEFILE = False\n\nlog = logging.getLogger(__name__)\n\nPAGE_READONLY = 0x00000002\nPAGE_READWRITE = 0x00000004\nPAGE_WRITECOPY = 0x00000008\nPAGE_EXECUTE = 0x00000010\nPAGE_EXECUTE_READ = 0x00000020\nPAGE_EXECUTE_READWRITE = 0x00000040\nPAGE_EXECUTE_WRITECOPY = 0x00000080\n\npage_access = {\n    PAGE_READONLY: \"r\",\n    PAGE_READWRITE: \"rw\",\n    PAGE_WRITECOPY: \"rwc\",\n    PAGE_EXECUTE: \"rx\",\n    PAGE_EXECUTE_READ: \"rx\",\n    PAGE_EXECUTE_READWRITE: \"rwx\",\n    PAGE_EXECUTE_WRITECOPY: \"rwxc\",\n}\n\nclass ProcessMemory(Processing):\n    \"\"\"Analyze process memory dumps.\"\"\"\n    def read_dump(self, filepath):\n        f = open(filepath, \"rb\")\n\n        while True:\n            buf = f.read(24)\n            if not buf:\n                break\n\n            row = struct.unpack(\"QIIII\", buf)\n            addr, size, state, typ, protect = row\n\n            yield {\n                \"addr\": \"0x%08x\" % addr,\n                \"end\": \"0x%08x\" % (addr + size),\n                \"size\": size,\n                \"type\": typ,\n                \"protect\": page_access.get(protect),\n                \"offset\": f.tell(),\n            }\n\n            f.seek(size, 1)\n\n    def create_idapy(self, process):\n        i = open(process[\"file\"], \"rb\")\n        o = open(process[\"file\"].replace(\".dmp\", \".py\"), \"wb\")\n\n        print>>o, \"from idaapi import add_segm, mem2base, autoMark, AU_CODE\"\n        print>>o, \"from idaapi import set_processor_type, SETPROC_ALL\"\n        print>>o, \"set_processor_type('80386r', SETPROC_ALL)\"\n\n        for idx, region in enumerate(process[\"regions\"]):\n            i.seek(region[\"offset\"])\n\n            if not region[\"protect\"]:\n                section = \"unk_%d\" % idx\n                type_ = \"DATA\"\n            elif \"x\" in region[\"protect\"]:\n                section = \"text_%d\" % idx\n                type_ = \"CODE\"\n            elif \"w\" in region[\"protect\"]:\n                section = \"data_%d\" % idx\n                type_ = \"DATA\"\n            else:\n                section = \"rdata_%d\" % idx\n                type_ = \"DATA\"\n\n            print>>o, \"add_segm(0, %s, %s, '%s', '%s')\" % (\n                region[\"addr\"], region[\"end\"], section, type_\n            )\n            print>>o, \"mem2base('%s'.decode('base64'), %s)\" % (\n                i.read(region[\"size\"]).encode(\"base64\").replace(\"\\n\", \"\"),\n                region[\"addr\"]\n            )\n            if type_ == \"CODE\":\n                print>>o, \"autoMark(%s, AU_CODE)\" % region[\"addr\"]\n\n    def _fixup_pe_header(self, pe):\n        \"\"\"Fixes the PE header from an in-memory representation to an\n        on-disk representation.\"\"\"\n        for section in pe.sections:\n            section.PointerToRawData = section.VirtualAddress\n            section.SizeOfRawData = max(\n                section.Misc_VirtualSize, section.SizeOfRawData\n            )\n\n        reloc = pefile.DIRECTORY_ENTRY[\"IMAGE_DIRECTORY_ENTRY_BASERELOC\"]\n        if len(pe.OPTIONAL_HEADER.DATA_DIRECTORY) < reloc:\n            return\n\n        reloc = pe.OPTIONAL_HEADER.DATA_DIRECTORY[reloc]\n        if not reloc.VirtualAddress or not reloc.Size:\n            return\n\n        # Disable relocations as those have already been applied.\n        reloc.VirtualAddress = reloc.Size = 0\n        pe.FILE_HEADER.Characteristics |= \\\n            pefile.IMAGE_CHARACTERISTICS[\"IMAGE_FILE_RELOCS_STRIPPED\"]\n\n    def dump_images(self, process, drop_dlls=False):\n        \"\"\"Dump executable images from this process memory dump.\"\"\"\n        buf = open(process[\"file\"], \"rb\").read()\n\n        images, capture, regions, end, pe = [], False, [], None, None\n        for r in process[\"regions\"]:\n            off, size = r[\"offset\"], r[\"size\"]\n\n            if capture:\n                if int(r[\"end\"], 16) > end:\n                    images.append((pe, regions))\n                    capture = False\n                else:\n                    regions.append(r)\n                continue\n\n            # We're going to take a couple of assumptions for granted here.\n            # Namely, the PE header is fully intact, has not been tampered\n            # with, and the DOS header, the NT header, and the Optional header\n            # all remain in the first page/chunk of this PE file.\n            if buf[off:off+2] != \"MZ\":\n                continue\n\n            pe = pefile.PE(data=buf[off:off+size], fast_load=True)\n\n            # Enable the capture of memory regions.\n            capture, regions = True, [r]\n            end = int(r[\"addr\"], 16) + pe.OPTIONAL_HEADER.SizeOfImage\n\n        # If present, also process the last loaded executable.\n        if capture and regions:\n            images.append((pe, regions))\n\n        for pe, regions in images:\n            img = []\n\n            # Skip DLLs if requested to do so (the default).\n            if pe.is_dll() and not drop_dlls:\n                continue\n\n            self._fixup_pe_header(pe)\n\n            img.append(pe.write())\n            for r in regions:\n                img.append(buf[r[\"offset\"]:r[\"offset\"]+r[\"size\"]])\n\n            sha1 = hashlib.sha1(\"\".join(img)).hexdigest()\n\n            if pe.is_dll():\n                filename = \"%s-%s.dll_\" % (process[\"pid\"], sha1[:16])\n            elif pe.is_exe():\n                filename = \"%s-%s.exe_\" % (process[\"pid\"], sha1[:16])\n            else:\n                log.warning(\n                    \"Unknown injected executable for pid=%s\", process[\"pid\"]\n                )\n                continue\n\n            filepath = os.path.join(self.pmemory_path, filename)\n            open(filepath, \"wb\").write(\"\".join(img))\n\n            yield File(filepath).get_all()\n\n    def run(self):\n        \"\"\"Run analysis.\n\n        :return: structured results.\n        \"\"\"\n        self.key = \"procmemory\"\n        results = []\n\n        if self.options.get(\"extract_img\") and not HAVE_PEFILE:\n            log.warning(\n                \"In order to extract PE files from memory dumps it is \"\n                \"required to have pefile installed (`pip install pefile`).\"\n            )\n\n        if os.path.exists(self.pmemory_path):\n            for dmp in os.listdir(self.pmemory_path):\n                if not dmp.endswith(\".dmp\"):\n                    continue\n\n                dump_path = os.path.join(self.pmemory_path, dmp)\n                dump_file = File(dump_path)\n\n                pid, num = map(int, re.findall(\"(\\\\d+)\", dmp))\n\n                proc = dict(\n                    file=dump_path, pid=pid, num=num,\n                    yara=dump_file.get_yara(\"memory\"),\n                    urls=list(dump_file.get_urls()),\n                    regions=list(self.read_dump(dump_path)),\n                )\n\n                if self.options.get(\"idapro\"):\n                    self.create_idapy(proc)\n\n                if self.options.get(\"extract_img\") and HAVE_PEFILE:\n                    proc[\"extracted\"] = list(self.dump_images(proc))\n\n                if self.options.get(\"dump_delete\"):\n                    try:\n                        os.remove(dump_path)\n                    except OSError:\n                        log.error(\"Unable to delete memory dump file at path \\\"%s\\\"\", dump_path)\n\n                results.append(proc)\n\n        results.sort(key=lambda x: (x[\"pid\"], x[\"num\"]))\n        return results\n"
  },
  {
    "path": "modules/processing/screenshots.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport os\nimport subprocess\n\nfrom lib.cuckoo.common.abstracts import Processing\n\nlog = logging.getLogger(__name__)\n\nclass Screenshots(Processing):\n    \"\"\"Screenshot file OCR analysis.\"\"\"\n\n    def run(self):\n        \"\"\"Run analysis.\n\n        :return: list of screenshots with OCR content.\n        \"\"\"\n\n        self.key = \"screenshots\"\n        screenshots = []\n\n        tesseract = self.options.get(\"tesseract\", \"/usr/bin/tesseract\")\n        if not os.path.exists(tesseract):\n            log.error(\"Could not find tesseract binary, \"\n                      \"screenshot OCR aborted.\")\n            return []\n\n        if os.path.exists(self.shots_path):\n            # Walk through the files and select the JPGs.\n            for shot_file in sorted(os.listdir(self.shots_path)):\n                if not shot_file.endswith(\".jpg\"):\n                    continue\n\n                # Get path to the screenshot.\n                shot_path = os.path.join(self.shots_path, shot_file)\n\n                # Initialize the entry for the results dict.\n                shot_entry = dict(path=shot_path, ocr=\"\")\n\n                try:\n                    args = [tesseract, shot_path, \"stdout\"]\n                    shot_entry[\"ocr\"] = subprocess.check_output(args)\n                except subprocess.CalledProcessError as e:\n                    log.info(\"Error running tesseract: %s\", e)\n\n                # Append entry to list of screenshots.\n                screenshots.append(shot_entry)\n\n        return screenshots\n"
  },
  {
    "path": "modules/processing/snort.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport datetime\nimport logging\nimport os.path\nimport re\nimport subprocess\n\nfrom lib.cuckoo.common.abstracts import Processing\nfrom lib.cuckoo.common.exceptions import CuckooProcessingError\n\nlog = logging.getLogger(__name__)\n\nclass Snort(Processing):\n    \"\"\"Snort processing module.\"\"\"\n\n    # Thanks to Steve Handerson for the following regex query.\n    alert_re = re.compile(\n        r\"(?P<timestamp>\\d{2}/\\d{2}/\\d{2}-\\d{2}:\\d{2}:\\d{2}\\.\\d+)\\s+\"\n        r\"\\[\\*\\*\\]\\s+\\[\\d+:(?P<sid>\\d+):(?P<revision>\\d+)\\] \"\n        r\"(?P<message>.+) \\[\\*\\*\\]\\s+(\\[Classification: (?P<classtype>.+)\\] )?\"\n        r\"\\[Priority: (?P<priority>\\d+)\\] \\{(?P<protocol>[:a-zA-Z0-9_-]+)\\} \"\n        r\"(?P<src>.+) \\-\\> (?P<dest>.+)\"\n    )\n\n    def run(self):\n        self.key = \"snort\"\n\n        results = {\n            \"alerts\": [],\n        }\n\n        self.snort = self.options.get(\"snort\", \"/usr/local/bin/snort\")\n        self.config_path = self.options.get(\"conf\", \"/etc/snort/snort.conf\")\n\n        if not os.path.isfile(self.pcap_path):\n            log.warning(\"Unable to run Snort as no pcap is available\")\n            return self.results\n\n        if not os.path.isfile(self.snort):\n            raise CuckooProcessingError(\"Unable to locate Snort binary\")\n\n        if not os.path.isfile(self.config_path):\n            raise CuckooProcessingError(\n                \"Unable to locate Snort configuration\")\n\n        args = [\n            self.snort,\n            \"-c\", self.config_path,\n            \"-A\", \"console\",\n            \"-r\", self.pcap_path,\n            \"-q\", \"-y\",\n        ]\n\n        try:\n            output = subprocess.check_output(args)\n        except subprocess.CalledProcessError as e:\n            raise CuckooProcessingError(\n                \"Snort returned an error processing this pcap: %s\" % e)\n\n        for line in output.split(\"\\n\"):\n            if not line:\n                continue\n\n            x = self.alert_re.match(line)\n            if not x:\n                log.warning(\"Error matching Snort line: %r\", line)\n                continue\n\n            timestamp = datetime.datetime.strptime(\n                x.group(\"timestamp\"), \"%m/%d/%y-%H:%M:%S.%f\")\n\n            if \":\" in x.group(\"src\"):\n                src_ip, src_port = x.group(\"src\").rsplit(\":\", 1)\n            else:\n                src_ip = x.group(\"src\")\n                src_port = None\n\n            if \":\" in x.group(\"dest\"):\n                dst_ip, dst_port = x.group(\"dest\").rsplit(\":\", 1)\n            else:\n                dst_ip = x.group(\"dest\")\n                dst_port = None\n\n            results[\"alerts\"].append({\n                \"timestamp\": timestamp,\n                \"sid\": int(x.group(\"sid\")),\n                \"priority\": int(x.group(\"priority\")),\n                \"revision\": int(x.group(\"revision\")),\n                \"message\": x.group(\"message\"),\n                \"src_ip\": src_ip,\n                \"src_port\": int(src_port) if src_port else None,\n                \"dst_ip\": dst_ip,\n                \"dst_port\": int(dst_port) if dst_port else None,\n                \"protocol\": x.group(\"protocol\"),\n                \"classtype\": x.group(\"classtype\"),\n            })\n\n        return results\n"
  },
  {
    "path": "modules/processing/static.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport datetime\nimport logging\nimport os\nimport re\nimport struct\n\ntry:\n    import bs4\n    HAVE_BS4 = True\nexcept ImportError:\n    HAVE_BS4 = False\n\ntry:\n    import magic\n    HAVE_MAGIC = True\nexcept ImportError:\n    HAVE_MAGIC = False\n\ntry:\n    import pefile\n    import peutils\n    HAVE_PEFILE = True\nexcept ImportError:\n    HAVE_PEFILE = False\n\ntry:\n    import M2Crypto\n    HAVE_MCRYPTO = True\nexcept ImportError:\n    HAVE_MCRYPTO = False\n\ntry:\n    import oletools.olevba\n    HAVE_OLETOOLS = True\nexcept ImportError:\n    HAVE_OLETOOLS = False\n\nfrom lib.cuckoo.common.abstracts import Processing\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\nfrom lib.cuckoo.common.objects import File\nfrom lib.cuckoo.common.utils import convert_to_printable\nfrom lib.cuckoo.common.utils import to_unicode\n\nlog = logging.getLogger(__name__)\n\n# Partially taken from\n# http://malwarecookbook.googlecode.com/svn/trunk/3/8/pescanner.py\n\nclass PortableExecutable(object):\n    \"\"\"PE analysis.\"\"\"\n\n    def __init__(self, file_path):\n        \"\"\":param file_path: file path.\"\"\"\n        self.file_path = file_path\n        self.pe = None\n\n    def _get_filetype(self, data):\n        \"\"\"Gets filetype, uses libmagic if available.\n\n        :param data: data to be analyzed.\n        :return: file type or None.\n        \"\"\"\n        if not HAVE_MAGIC:\n            return None\n\n        try:\n            ms = magic.open(magic.MAGIC_NONE)\n            ms.load()\n            file_type = ms.buffer(data)\n        except:\n            try:\n                file_type = magic.from_buffer(data)\n            except Exception:\n                return None\n        finally:\n            try:\n                ms.close()\n            except:\n                pass\n\n        return file_type\n\n    def _get_peid_signatures(self):\n        \"\"\"Gets PEID signatures.\n\n        :return: matched signatures or None.\n        \"\"\"\n        try:\n            sig_path = os.path.join(CUCKOO_ROOT, \"data\",\n                                    \"peutils\", \"UserDB.TXT\")\n            signatures = peutils.SignatureDatabase(sig_path)\n            return signatures.match(self.pe, ep_only=True)\n        except:\n            return None\n\n    def _get_imported_symbols(self):\n        \"\"\"Gets imported symbols.\n\n        :return: imported symbols dict or None.\n        \"\"\"\n        imports = []\n\n        for entry in getattr(self.pe, \"DIRECTORY_ENTRY_IMPORT\", []):\n            try:\n                symbols = []\n                for imported_symbol in entry.imports:\n                    symbols.append({\n                        \"address\": hex(imported_symbol.address),\n                        \"name\": imported_symbol.name,\n                    })\n\n                imports.append({\n                    \"dll\": convert_to_printable(entry.dll),\n                    \"imports\": symbols,\n                })\n            except:\n                log.exception(\"Unable to parse imported symbols.\")\n\n        return imports\n\n    def _get_exported_symbols(self):\n        \"\"\"Gets exported symbols.\n\n        :return: exported symbols dict or None.\n        \"\"\"\n        exports = []\n\n        if hasattr(self.pe, \"DIRECTORY_ENTRY_EXPORT\"):\n            for exported_symbol in self.pe.DIRECTORY_ENTRY_EXPORT.symbols:\n                exports.append({\n                    \"address\": hex(self.pe.OPTIONAL_HEADER.ImageBase +\n                                   exported_symbol.address),\n                    \"name\": exported_symbol.name,\n                    \"ordinal\": exported_symbol.ordinal,\n                })\n\n        return exports\n\n    def _get_sections(self):\n        \"\"\"Gets sections.\n\n        :return: sections dict or None.\n        \"\"\"\n        sections = []\n\n        for entry in self.pe.sections:\n            try:\n                section = {}\n                section[\"name\"] = convert_to_printable(entry.Name.strip(\"\\x00\"))\n                section[\"virtual_address\"] = \"0x{0:08x}\".format(entry.VirtualAddress)\n                section[\"virtual_size\"] = \"0x{0:08x}\".format(entry.Misc_VirtualSize)\n                section[\"size_of_data\"] = \"0x{0:08x}\".format(entry.SizeOfRawData)\n                section[\"entropy\"] = entry.get_entropy()\n                sections.append(section)\n            except:\n                continue\n\n        return sections\n\n    def _get_resources(self):\n        \"\"\"Get resources.\n\n        :return: resources dict or None.\n        \"\"\"\n        resources = []\n\n        if hasattr(self.pe, \"DIRECTORY_ENTRY_RESOURCE\"):\n            for resource_type in self.pe.DIRECTORY_ENTRY_RESOURCE.entries:\n                try:\n                    resource = {}\n\n                    if resource_type.name is not None:\n                        name = str(resource_type.name)\n                    else:\n                        name = str(pefile.RESOURCE_TYPE.get(resource_type.struct.Id))\n\n                    if hasattr(resource_type, \"directory\"):\n                        for resource_id in resource_type.directory.entries:\n                            if hasattr(resource_id, \"directory\"):\n                                for resource_lang in resource_id.directory.entries:\n                                    data = self.pe.get_data(resource_lang.data.struct.OffsetToData, resource_lang.data.struct.Size)\n                                    filetype = self._get_filetype(data)\n                                    language = pefile.LANG.get(resource_lang.data.lang, None)\n                                    sublanguage = pefile.get_sublang_name_for_lang(resource_lang.data.lang, resource_lang.data.sublang)\n\n                                    resource[\"name\"] = name\n                                    resource[\"offset\"] = \"0x{0:08x}\".format(resource_lang.data.struct.OffsetToData)\n                                    resource[\"size\"] = \"0x{0:08x}\".format(resource_lang.data.struct.Size)\n                                    resource[\"filetype\"] = filetype\n                                    resource[\"language\"] = language\n                                    resource[\"sublanguage\"] = sublanguage\n                                    resources.append(resource)\n                except:\n                    continue\n\n        return resources\n\n    def _get_versioninfo(self):\n        \"\"\"Get version info.\n\n        :return: info dict or None.\n        \"\"\"\n        infos = []\n        if hasattr(self.pe, \"VS_VERSIONINFO\"):\n            if hasattr(self.pe, \"FileInfo\"):\n                for entry in self.pe.FileInfo:\n                    try:\n                        if hasattr(entry, \"StringTable\"):\n                            for st_entry in entry.StringTable:\n                                for str_entry in st_entry.entries.items():\n                                    entry = {}\n                                    entry[\"name\"] = convert_to_printable(str_entry[0])\n                                    entry[\"value\"] = convert_to_printable(str_entry[1])\n                                    infos.append(entry)\n                        elif hasattr(entry, \"Var\"):\n                            for var_entry in entry.Var:\n                                if hasattr(var_entry, \"entry\"):\n                                    entry = {}\n                                    entry[\"name\"] = convert_to_printable(var_entry.entry.keys()[0])\n                                    entry[\"value\"] = convert_to_printable(var_entry.entry.values()[0])\n                                    infos.append(entry)\n                    except:\n                        continue\n\n        return infos\n\n    def _get_imphash(self):\n        \"\"\"Gets imphash.\n\n        :return: imphash string or None.\n        \"\"\"\n        try:\n            return self.pe.get_imphash()\n        except AttributeError:\n            return None\n\n    def _get_timestamp(self):\n        \"\"\"Get compilation timestamp.\n\n        :return: timestamp or None.\n        \"\"\"\n        try:\n            pe_timestamp = self.pe.FILE_HEADER.TimeDateStamp\n        except AttributeError:\n            return None\n\n        dt = datetime.datetime.fromtimestamp(pe_timestamp)\n        return dt.strftime(\"%Y-%m-%d %H:%M:%S\")\n\n    def _get_pdb_path(self):\n        \"\"\"Get the path to any available debugging symbols.\"\"\"\n        try:\n            for entry in getattr(self.pe, \"DIRECTORY_ENTRY_DEBUG\", []):\n                raw_offset = entry.struct.PointerToRawData\n                size_data = entry.struct.SizeOfData\n                debug_data = self.pe.__data__[raw_offset:raw_offset+size_data]\n\n                if debug_data.startswith(\"RSDS\"):\n                    return debug_data[24:].strip(\"\\x00\")\n        except:\n            log.exception(\"Exception parsing PDB path\")\n\n    def _get_signature(self):\n        \"\"\"If this executable is signed, get its signature(s).\"\"\"\n        dir_index = pefile.DIRECTORY_ENTRY[\"IMAGE_DIRECTORY_ENTRY_SECURITY\"]\n        if len(self.pe.OPTIONAL_HEADER.DATA_DIRECTORY) < dir_index:\n            return []\n\n        dir_entry = self.pe.OPTIONAL_HEADER.DATA_DIRECTORY[dir_index]\n        if not dir_entry or not dir_entry.VirtualAddress or not dir_entry.Size:\n            return []\n\n        if not HAVE_MCRYPTO:\n            log.critical(\"You do not have the m2crypto library installed \"\n                         \"preventing certificate extraction: \"\n                         \"pip install m2crypto\")\n            return []\n\n        signatures = self.pe.write()[dir_entry.VirtualAddress+8:]\n        bio = M2Crypto.BIO.MemoryBuffer(signatures)\n        if not bio:\n            return []\n\n        pkcs7_obj = M2Crypto.m2.pkcs7_read_bio_der(bio.bio_ptr())\n        if not pkcs7_obj:\n            return []\n\n        ret = []\n        p7 = M2Crypto.SMIME.PKCS7(pkcs7_obj)\n        for cert in p7.get0_signers(M2Crypto.X509.X509_Stack()) or []:\n            subject = cert.get_subject()\n            ret.append({\n                \"serial_number\": \"%032x\" % cert.get_serial_number(),\n                \"common_name\": subject.CN,\n                \"country\": subject.C,\n                \"locality\": subject.L,\n                \"organization\": subject.O,\n                \"email\": subject.Email,\n                \"sha1\": \"%040x\" % int(cert.get_fingerprint(\"sha1\"), 16),\n                \"md5\": \"%032x\" % int(cert.get_fingerprint(\"md5\"), 16),\n            })\n\n            if subject.GN and subject.SN:\n                ret[-1][\"full_name\"] = \"%s %s\" % (subject.GN, subject.SN)\n            elif subject.GN:\n                ret[-1][\"full_name\"] = subject.GN\n            elif subject.SN:\n                ret[-1][\"full_name\"] = subject.SN\n\n        return ret\n\n    def run(self):\n        \"\"\"Run analysis.\n\n        :return: analysis results dict or None.\n        \"\"\"\n        if not os.path.exists(self.file_path):\n            return {}\n\n        try:\n            self.pe = pefile.PE(self.file_path)\n        except pefile.PEFormatError:\n            return {}\n\n        results = {}\n        results[\"peid_signatures\"] = self._get_peid_signatures()\n        results[\"pe_imports\"] = self._get_imported_symbols()\n        results[\"pe_exports\"] = self._get_exported_symbols()\n        results[\"pe_sections\"] = self._get_sections()\n        results[\"pe_resources\"] = self._get_resources()\n        results[\"pe_versioninfo\"] = self._get_versioninfo()\n        results[\"pe_imphash\"] = self._get_imphash()\n        results[\"pe_timestamp\"] = self._get_timestamp()\n        results[\"pdb_path\"] = self._get_pdb_path()\n        results[\"signature\"] = self._get_signature()\n        results[\"imported_dll_count\"] = len([x for x in results[\"pe_imports\"] if x.get(\"dll\")])\n        return results\n\nclass WindowsScriptFile(object):\n    \"\"\"Deobfuscates and interprets Windows Script Files.\"\"\"\n    encoding = [\n        1, 2, 0, 1, 2, 0, 2, 0, 0, 2, 0, 2, 1, 0, 2, 0,\n        1, 0, 2, 0, 1, 1, 2, 0, 0, 2, 1, 0, 2, 0, 0, 2,\n        1, 1, 0, 2, 0, 2, 0, 1, 0, 1, 1, 2, 0, 1, 0, 2,\n        1, 0, 2, 0, 1, 1, 2, 0, 0, 1, 1, 2, 0, 1, 0, 2,\n    ]\n\n    lookup = [\n        [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,\n         0x08, 0x7b, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,\n         0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,\n         0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,\n         0x32, 0x30, 0x21, 0x29, 0x5b, 0x38, 0x33, 0x3d,\n         0x58, 0x3a, 0x35, 0x65, 0x39, 0x5c, 0x56, 0x73,\n         0x66, 0x4e, 0x45, 0x6b, 0x62, 0x59, 0x78, 0x5e,\n         0x7d, 0x4a, 0x6d, 0x71, 0x00, 0x60, 0x00, 0x53,\n         0x00, 0x42, 0x27, 0x48, 0x72, 0x75, 0x31, 0x37,\n         0x4d, 0x52, 0x22, 0x54, 0x6a, 0x47, 0x64, 0x2d,\n         0x20, 0x7f, 0x2e, 0x4c, 0x5d, 0x7e, 0x6c, 0x6f,\n         0x79, 0x74, 0x43, 0x26, 0x76, 0x25, 0x24, 0x2b,\n         0x28, 0x23, 0x41, 0x34, 0x09, 0x2a, 0x44, 0x3f,\n         0x77, 0x3b, 0x55, 0x69, 0x61, 0x63, 0x50, 0x67,\n         0x51, 0x49, 0x4f, 0x46, 0x68, 0x7c, 0x36, 0x70,\n         0x6e, 0x7a, 0x2f, 0x5f, 0x4b, 0x5a, 0x2c, 0x57],\n        [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,\n         0x08, 0x57, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,\n         0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,\n         0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,\n         0x2e, 0x47, 0x7a, 0x56, 0x42, 0x6a, 0x2f, 0x26,\n         0x49, 0x41, 0x34, 0x32, 0x5b, 0x76, 0x72, 0x43,\n         0x38, 0x39, 0x70, 0x45, 0x68, 0x71, 0x4f, 0x09,\n         0x62, 0x44, 0x23, 0x75, 0x00, 0x7e, 0x00, 0x5e,\n         0x00, 0x77, 0x4a, 0x61, 0x5d, 0x22, 0x4b, 0x6f,\n         0x4e, 0x3b, 0x4c, 0x50, 0x67, 0x2a, 0x7d, 0x74,\n         0x54, 0x2b, 0x2d, 0x2c, 0x30, 0x6e, 0x6b, 0x66,\n         0x35, 0x25, 0x21, 0x64, 0x4d, 0x52, 0x63, 0x3f,\n         0x7b, 0x78, 0x29, 0x28, 0x73, 0x59, 0x33, 0x7f,\n         0x6d, 0x55, 0x53, 0x7c, 0x3a, 0x5f, 0x65, 0x46,\n         0x58, 0x31, 0x69, 0x6c, 0x5a, 0x48, 0x27, 0x5c,\n         0x3d, 0x24, 0x79, 0x37, 0x60, 0x51, 0x20, 0x36],\n        [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,\n         0x08, 0x6e, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,\n         0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,\n         0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,\n         0x2d, 0x75, 0x52, 0x60, 0x71, 0x5e, 0x49, 0x5c,\n         0x62, 0x7d, 0x29, 0x36, 0x20, 0x7c, 0x7a, 0x7f,\n         0x6b, 0x63, 0x33, 0x2b, 0x68, 0x51, 0x66, 0x76,\n         0x31, 0x64, 0x54, 0x43, 0x00, 0x3a, 0x00, 0x7e,\n         0x00, 0x45, 0x2c, 0x2a, 0x74, 0x27, 0x37, 0x44,\n         0x79, 0x59, 0x2f, 0x6f, 0x26, 0x72, 0x6a, 0x39,\n         0x7b, 0x3f, 0x38, 0x77, 0x67, 0x53, 0x47, 0x34,\n         0x78, 0x5d, 0x30, 0x23, 0x5a, 0x5b, 0x6c, 0x48,\n         0x55, 0x70, 0x69, 0x2e, 0x4c, 0x21, 0x24, 0x4e,\n         0x50, 0x09, 0x56, 0x73, 0x35, 0x61, 0x4b, 0x58,\n         0x3b, 0x57, 0x22, 0x6d, 0x4d, 0x25, 0x28, 0x46,\n         0x4a, 0x32, 0x41, 0x3d, 0x5f, 0x4f, 0x42, 0x65],\n    ]\n\n    unescape = {\n        \"#\": \"\\r\", \"&\": \"\\n\", \"!\": \"<\", \"*\": \">\", \"$\": \":\",\n    }\n\n    script_re = \"<\\\\s*script\\\\s*.*>.*?<\\\\s*/\\\\s*script\\\\s*>\"\n\n    def __init__(self, filepath):\n        self.filepath = filepath\n\n    def decode(self, source, start=\"#:~^\", end=\"^#~:\"):\n        if start not in source or end not in source:\n            return\n\n        o = source.index(start) + len(start) + 8\n        end = source.index(end) - 8\n\n        c, m, r = 0, 0, []\n\n        while o < end:\n            ch = ord(source[o])\n            if source[o] == \":\":\n                r.append(ord(self.unescape.get(source[o+1], \"?\")))\n                c += r[-1]\n                o, m = o + 1, m + 1\n            elif ch < 128:\n                r.append(self.lookup[self.encoding[m % 64]][ch])\n                c += r[-1]\n                m = m + 1\n            else:\n                r.append(ch)\n\n            o = o + 1\n\n        if (c % 2**32) != struct.unpack(\"I\", source[o:o+8].decode(\"base64\"))[0]:\n            log.info(\"Invalid checksum for JScript.Encoded WSF file!\")\n\n        return \"\".join(chr(ch) for ch in r)\n\n    def run(self):\n        ret = []\n        source = open(self.filepath, \"rb\").read()\n\n        # Get rid of superfluous comments.\n        source = re.sub(\"/\\\\*.*?\\\\*/\", \"\", source, flags=re.S)\n\n        for script in re.findall(self.script_re, source, re.I | re.S):\n            try:\n                x = bs4.BeautifulSoup(script, \"html.parser\")\n                language = x.script.attrs.get(\"language\", \"\").lower()\n            except:\n                language = None\n\n            # We can't rely on bs4 or any other HTML/XML parser to provide us\n            # with the raw content of the xml tag as they decode html entities\n            # and all that, leaving us with a corrupted string.\n            source = re.match(\"<.*>(.*)</.*>$\", script, re.S).group(0)\n\n            # Decode JScript.Encode encoding.\n            if language in (\"jscript.encode\", \"vbscript.encode\"):\n                source = self.decode(source)\n\n            ret.append(to_unicode(source))\n\n        return ret\n\nclass OfficeDocument(object):\n    \"\"\"Static analysis of Microsoft Office documents.\"\"\"\n    deobf = [\n        # [\n        #    # Chr(65) -> \"A\"\n        #    \"Chr\\\\(\\\\s*(?P<chr>[0-9]+)\\\\s*\\\\)\",\n        #    lambda x: '\"%c\"' % int(x.group(\"chr\")),\n        #    0,\n        # ],\n        [\n            # \"A\" & \"B\" -> \"AB\"\n            \"\\\\\\\"(?P<a>.*?)\\\\\\\"\\\\s+\\\\&\\\\s+\\\\\\\"(?P<b>.*?)\\\\\\\"\",\n            lambda x: '\"%s%s\"' % (x.group(\"a\"), x.group(\"b\")),\n            0,\n        ],\n    ]\n\n    def __init__(self, filepath):\n        self.filepath = filepath\n\n    def get_macros(self):\n        \"\"\"Get embedded Macros if this is an Office document.\"\"\"\n        try:\n            p = oletools.olevba.VBA_Parser(self.filepath)\n        except TypeError:\n            return\n\n        # We're not interested in plaintext.\n        if p.type == \"Text\":\n            return\n\n        try:\n            for f, s, v, c in p.extract_macros():\n                yield {\n                    \"stream\": s,\n                    \"filename\": v.decode(\"latin-1\"),\n                    \"orig_code\": c.decode(\"latin-1\"),\n                }\n        except ValueError as e:\n            log.warning(\n                \"Error extracting macros from office document (this is an \"\n                \"issue with oletools - please report upstream): %s\", e\n            )\n\n    def deobfuscate(self, code):\n        \"\"\"Bruteforce approach of regex-based deobfuscation.\"\"\"\n        changes = 1\n        while changes:\n            changes = 0\n\n            for pattern, repl, flags in self.deobf:\n                count = 1\n                while count:\n                    code, count = re.subn(pattern, repl, code, flags=flags)\n                    changes += count\n\n        return code\n\n    def run(self):\n        if not HAVE_OLETOOLS:\n            log.warning(\n                \"In order to do static analysis of Microsoft Word documents \"\n                \"we're going to require oletools (`pip install oletools`)\"\n            )\n            return\n\n        ret = []\n        for macro in self.get_macros():\n            macro[\"deobf\"] = self.deobfuscate(macro[\"orig_code\"])\n            ret.append(macro)\n        return ret\n\nclass Static(Processing):\n    \"\"\"Static analysis.\"\"\"\n    PUBKEY_RE = \"(-----BEGIN PUBLIC KEY-----[a-zA-Z0-9\\\\n\\\\+/]+-----END PUBLIC KEY-----)\"\n    PRIVKEY_RE = \"(-----BEGIN RSA PRIVATE KEY-----[a-zA-Z0-9\\\\n\\\\+/]+-----END RSA PRIVATE KEY-----)\"\n\n    office_ext = [\n        \"doc\", \"docm\", \"dotm\", \"docx\", \"ppt\", \"pptm\", \"pptx\", \"potm\",\n        \"ppam\", \"ppsm\", \"xls\", \"xlsm\", \"xlsx\",\n    ]\n\n    def run(self):\n        \"\"\"Run analysis.\n\n        :return: results dict.\n        \"\"\"\n        self.key = \"static\"\n        static = {}\n\n        # Does the target file still exist?\n        if self.task[\"category\"] != \"file\" or \\\n                not os.path.exists(self.file_path):\n            return\n\n        package = self.task.get(\"package\")\n\n        if self.task[\"category\"] == \"file\":\n            ext = os.path.splitext(self.task[\"target\"])[1].lstrip(\".\").lower()\n        else:\n            ext = None\n\n        if ext == \"exe\" or \"PE32\" in File(self.file_path).get_type():\n            if HAVE_PEFILE:\n                static.update(PortableExecutable(self.file_path).run())\n            static[\"keys\"] = self._get_keys()\n\n        if package == \"wsf\" or ext == \"wsf\":\n            static[\"wsf\"] = WindowsScriptFile(self.file_path).run()\n\n        if package in (\"doc\", \"ppt\", \"xls\") or ext in self.office_ext:\n            static[\"office\"] = OfficeDocument(self.file_path).run()\n\n        return static\n\n    def _get_keys(self):\n        \"\"\"Get any embedded plaintext public and/or private keys.\"\"\"\n        buf = open(self.file_path).read()\n        ret = set()\n        ret.update(re.findall(self.PUBKEY_RE, buf))\n        ret.update(re.findall(self.PRIVKEY_RE, buf))\n        return list(ret)\n"
  },
  {
    "path": "modules/processing/strings.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os.path\nimport re\n\nfrom lib.cuckoo.common.abstracts import Processing\nfrom lib.cuckoo.common.exceptions import CuckooProcessingError\n\nclass Strings(Processing):\n    \"\"\"Extract strings from analyzed file.\"\"\"\n\n    def run(self):\n        \"\"\"\n        Run extract of printable strings.\n\n        :return: list of printable strings.\n        \"\"\"\n        self.key = \"strings\"\n        strings = []\n\n        if self.task[\"category\"] == \"file\":\n            if not os.path.exists(self.file_path):\n                raise CuckooProcessingError(\"Sample file doesn't exist: \\\"%s\\\"\" % self.file_path)\n            try:\n                data = open(self.file_path, \"r\").read()\n            except (IOError, OSError) as e:\n                raise CuckooProcessingError(\"Error opening file %s\" % e)\n            strings = re.findall(\"[\\x1f-\\x7e]{6,}\", data)\n            strings += [str(ws.decode(\"utf-16le\")) for ws in re.findall(\"(?:[\\x1f-\\x7e][\\x00]){6,}\", data)]\n\n        return strings\n"
  },
  {
    "path": "modules/processing/suricata.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport json\nimport logging\nimport os\nimport shutil\nimport subprocess\nimport time\n\nfrom lib.cuckoo.common.abstracts import Processing\nfrom lib.cuckoo.common.exceptions import CuckooProcessingError\nfrom lib.cuckoo.common.utils import md5_file, sha1_file\n\ntry:\n    import suricatasc\n    HAVE_SURICATASC = True\nexcept ImportError:\n    HAVE_SURICATASC = False\n\nlog = logging.getLogger(__name__)\n\nclass Suricata(Processing):\n    \"\"\"Suricata processing module.\"\"\"\n\n    # List of Suricata Signatures IDs that should be ignored.\n    sid_blacklist = [\n        # SURICATA FRAG IPv6 Fragmentation overlap\n        2200074,\n\n        # ET INFO InetSim Response from External Source Possible SinkHole\n        2017363,\n\n        # SURICATA UDPv4 invalid checksum\n        2200075,\n    ]\n\n    def process_pcap_socket(self):\n        \"\"\"Process a PCAP file with Suricata in socket mode.\"\"\"\n        if not HAVE_SURICATASC:\n            raise CuckooProcessingError(\n                \"Suricata has been configured to run in socket mode but \"\n                \"suricatasc has not been installed, please re-install \"\n                \"Suricata or SuricataSC\"\n            )\n\n        if not os.path.exists(self.socket):\n            raise CuckooProcessingError(\n                \"Suricata has been configured to run in socket mode \"\n                \"but the socket is unavailable\"\n            )\n\n        suri = suricatasc.SuricataSC(self.socket)\n\n        try:\n            suri.connect()\n        except suricatasc.SuricataException as e:\n            raise CuckooProcessingError(\n                \"Error connecting to Suricata in socket mode: %s\" % e\n            )\n\n        # Submit the PCAP file.\n        ret = suri.send_command(\"pcap-file\", {\n            \"filename\": self.pcap_path,\n            \"output-dir\": self.suricata_path,\n        })\n\n        if not ret or ret[\"return\"] != \"OK\":\n            raise CuckooProcessingError(\n                \"Error submitting PCAP file to Suricata in socket mode, \"\n                \"return value: %s\" % ret\n            )\n\n        # TODO Should we add a timeout here? If we do so we should also add\n        # timeout logic to the binary mode.\n        while True:\n            ret = suri.send_command(\"pcap-current\")\n\n            # When the pcap file has been processed the \"current pcap\" file\n            # will be none.\n            if ret and ret[\"message\"] == \"None\":\n                break\n\n            time.sleep(1)\n\n    def process_pcap_binary(self):\n        \"\"\"Process a PCAP file with Suricata by running Suricata.\n\n        Using the socket mode is preferred as the plain binary mode requires\n        Suricata to load all its rules for every PCAP file and thus takes a\n        couple of performance heavy seconds to set itself up.\n        \"\"\"\n        if not os.path.isfile(self.suricata):\n            raise CuckooProcessingError(\"Unable to locate Suricata binary\")\n\n        if not os.path.isfile(self.config_path):\n            raise CuckooProcessingError(\n                \"Unable to locate Suricata configuration\"\n            )\n\n        args = [\n            self.suricata,\n            \"-c\", self.config_path,\n            \"-k\", \"none\",\n            \"-l\", self.suricata_path,\n            \"-r\", self.pcap_path,\n        ]\n\n        try:\n            subprocess.check_call(args)\n        except subprocess.CalledProcessError as e:\n            raise CuckooProcessingError(\n                \"Suricata returned an error processing this pcap: %s\" % e\n            )\n\n    def parse_eve_json(self):\n        \"\"\"Parse the eve.json file.\"\"\"\n        eve_log = os.path.join(self.suricata_path, self.eve_log)\n        if not os.path.isfile(eve_log):\n            log.warning(\"Unable to find the eve.json log file\")\n            return\n\n        for line in open(eve_log, \"rb\"):\n            event = json.loads(line)\n\n            if event[\"event_type\"] == \"alert\":\n                alert = event[\"alert\"]\n\n                if alert[\"signature_id\"] in self.sid_blacklist:\n                    log.debug(\n                        \"Ignoring alert with sid=%d, signature=%s\",\n                        alert[\"signature_id\"], alert[\"signature\"]\n                    )\n                    continue\n\n                if alert[\"signature\"].startswith(\"SURICATA STREAM\"):\n                    log.debug(\n                        \"Ignoring alert starting with \\\"SURICATA STREAM\\\"\"\n                    )\n                    continue\n\n                self.results[\"alerts\"].append({\n                    \"sid\": alert[\"signature_id\"],\n                    \"src_ip\": event[\"src_ip\"],\n                    \"src_port\": event[\"src_port\"],\n                    \"dst_ip\": event[\"dest_ip\"],\n                    \"dst_port\": event[\"dest_port\"],\n                    \"protocol\": event[\"proto\"],\n                    \"timestamp\": event[\"timestamp\"],\n                    \"category\": alert[\"category\"] or \"undefined\",\n                    \"signature\": alert[\"signature\"],\n                })\n\n            elif event[\"event_type\"] == \"http\":\n                http = event[\"http\"]\n\n                referer = http.get(\"http_referer\")\n                if referer == \"<unknown>\":\n                    referer = None\n\n                user_agent = http.get(\"http_user_agent\")\n                if user_agent == \"<unknown>\":\n                    user_agent = None\n\n                self.results[\"http\"].append({\n                    \"src_ip\": event[\"src_ip\"],\n                    \"src_port\": event[\"src_port\"],\n                    \"dst_ip\": event[\"dest_ip\"],\n                    \"dst_port\": event[\"dest_port\"],\n                    \"timestamp\": event[\"timestamp\"],\n                    \"method\": http.get(\"http_method\"),\n                    \"hostname\": http.get(\"hostname\"),\n                    \"url\": http.get(\"url\"),\n                    \"status\": \"%s\" % http.get(\"status\"),\n                    \"content_type\": http.get(\"http_content_type\"),\n                    \"user_agent\": user_agent,\n                    \"referer\": referer,\n                    \"length\": http.get(\"length\"),\n                })\n\n            elif event[\"event_type\"] == \"tls\":\n                tls = event[\"tls\"]\n\n                self.results[\"tls\"].append({\n                    \"src_ip\": event[\"src_ip\"],\n                    \"src_port\": event[\"src_port\"],\n                    \"dst_ip\": event[\"dest_ip\"],\n                    \"dst_port\": event[\"dest_port\"],\n                    \"timestamp\": event[\"timestamp\"],\n                    \"fingerprint\": tls[\"fingerprint\"],\n                    \"issuer\": tls[\"issuerdn\"],\n                    \"version\": tls[\"version\"],\n                    \"subject\": tls[\"subject\"],\n                })\n\n    def parse_files(self):\n        \"\"\"Parse the files-json.log file and its associated files.\"\"\"\n        files_log = os.path.join(self.suricata_path, self.files_log)\n        if not os.path.isfile(files_log):\n            log.warning(\"Unable to find the files-json.log log file\")\n            return\n\n        files = {}\n\n        # Index all the available files.\n        files_dir = os.path.join(self.suricata_path, self.files_dir)\n        if not os.path.exists(files_dir):\n            log.warning(\"Suricata files dir is not available. Maybe you forgot to enable Suricata file-store ?\")\n            return\n\n        for filename in os.listdir(files_dir):\n            filepath = os.path.join(files_dir, filename)\n            files[md5_file(filepath)] = filepath\n\n        for line in open(files_log, \"rb\"):\n            event = json.loads(line)\n\n            # Not entirely sure what's up, but some files are given just an\n            # ID, some files are given just an md5 hash (and maybe some get\n            # neither?) So take care of these situations.\n            if \"id\" in event:\n                filepath = os.path.join(files_dir, \"file.%s\" % event[\"id\"])\n            elif \"md5\" in event:\n                filepath = files.get(event[\"md5\"])\n            else:\n                filepath = None\n\n            if not filepath or not os.path.isfile(filepath):\n                log.warning(\n                    \"Suricata dropped file with id=%s and md5=%s not found, \"\n                    \"skipping it..\", event.get(\"id\"), event.get(\"md5\")\n                )\n                continue\n\n            referer = event.get(\"http_referer\")\n            if referer == \"<unknown>\":\n                referer = None\n\n            self.results[\"files\"].append({\n                \"id\": int(filepath.split(\".\", 1)[-1]),\n                \"filesize\": event[\"size\"],\n                \"filename\": os.path.basename(event[\"filename\"]),\n                \"hostname\": event.get(\"http_host\"),\n                \"uri\": event.get(\"http_uri\"),\n                \"md5\": md5_file(filepath),\n                \"sha1\": sha1_file(filepath),\n                \"magic\": event.get(\"magic\"),\n                \"referer\": referer,\n            })\n\n    def run(self):\n        self.key = \"suricata\"\n\n        self.results = {\n            \"alerts\": [],\n            \"tls\": [],\n            \"files\": [],\n            \"http\": [],\n        }\n\n        self.suricata = self.options.get(\"suricata\", \"/usr/bin/suricata\")\n        self.config_path = self.options.get(\"conf\", \"/etc/suricata/suricata.yaml\")\n        self.eve_log = self.options.get(\"eve_log\", \"eve.json\")\n        self.files_log = self.options.get(\"files_log\", \"files-json.log\")\n        self.files_dir = self.options.get(\"files_dir\", \"files\")\n\n        # Determines whether we're in socket more or binary mode.\n        self.socket = self.options.get(\"socket\")\n\n        if not os.path.isfile(self.pcap_path):\n            log.warning(\"Unable to run Suricata as no pcap is available\")\n            return self.results\n\n        # Remove any existing Suricata related log-files before we\n        # run Suricata again. I.e., prevent reprocessing an analysis from\n        # generating duplicate results.\n        if os.path.isdir(self.suricata_path):\n            shutil.rmtree(self.suricata_path)\n\n        os.mkdir(self.suricata_path)\n\n        if self.socket:\n            self.process_pcap_socket()\n        else:\n            self.process_pcap_binary()\n\n        self.parse_eve_json()\n        self.parse_files()\n\n        return self.results\n"
  },
  {
    "path": "modules/processing/targetinfo.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os.path\n\nfrom lib.cuckoo.common.abstracts import Processing\nfrom lib.cuckoo.common.objects import File\n\nclass TargetInfo(Processing):\n    \"\"\"General information about a file.\"\"\"\n\n    def run(self):\n        \"\"\"Run file information gathering.\n        \n        :return: information dict.\n        \"\"\"\n        self.key = \"target\"\n        if not self.task:\n            return {\"category\": \"unknown\", \"file\": {\"name\": \"unknown\"}}\n\n        target_info = {\"category\": self.task[\"category\"]}\n\n        # We have to deal with file or URL targets.\n        if self.task[\"category\"] == \"file\":\n            target_info[\"file\"] = {}\n\n            # et's try to get as much information as possible, i.e., the\n            # filename if the file is not available anymore.\n            if os.path.exists(self.file_path):\n                target_info[\"file\"] = File(self.file_path).get_all()\n\n            target_info[\"file\"][\"name\"] = File(self.task[\"target\"]).get_name()\n        elif self.task[\"category\"] == \"url\":\n            target_info[\"url\"] = self.task[\"target\"]\n\n        return target_info\n"
  },
  {
    "path": "modules/processing/virustotal.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport os\n\nfrom lib.cuckoo.common.abstracts import Processing\nfrom lib.cuckoo.common.exceptions import CuckooOperationalError\nfrom lib.cuckoo.common.exceptions import CuckooProcessingError\nfrom lib.cuckoo.common.virustotal import VirusTotalAPI\nfrom lib.cuckoo.common.virustotal import VirusTotalResourceNotScanned\n\nlog = logging.getLogger(__name__)\n\nclass VirusTotal(Processing):\n    \"\"\"Gets antivirus signatures from VirusTotal.com for various results.\n\n    :note: Currently obtains VirusTotal results for the target sample or URL and the\n    dropped files.\n    \"\"\"\n    order = 2\n\n    def run(self):\n        \"\"\"Runs VirusTotal processing\n\n        :return: full VirusTotal report.\n        \"\"\"\n        self.key = \"virustotal\"\n\n        apikey = self.options.get(\"key\")\n        timeout = int(self.options.get(\"timeout\", 60))\n        scan = int(self.options.get(\"scan\", 0))\n\n        if not apikey:\n            raise CuckooProcessingError(\"VirusTotal API key not \"\n                                        \"configured, skipping VirusTotal \"\n                                        \"processing module.\")\n\n        self.vt = VirusTotalAPI(apikey, timeout, scan)\n\n        # Scan the original sample or URL.\n        if self.task[\"category\"] == \"file\":\n            results = self.scan_file(self.file_path)\n        elif self.task[\"category\"] == \"url\":\n            results = self.scan_url(self.task[\"target\"])\n        elif self.task[\"category\"] == \"baseline\":\n            return\n        elif self.task[\"category\"] == \"service\":\n            return\n        else:\n            raise CuckooProcessingError(\"Unsupported task category: %s\" %\n                                        self.task[\"category\"])\n\n        # Scan any dropped files that have an interesting filetype.\n        for row in self.results.get(\"dropped\", []):\n            if not self.should_scan_file(row[\"type\"]):\n                continue\n\n            row[\"virustotal\"] = self.scan_file(row[\"path\"], summary=True)\n\n        return results\n\n    def scan_file(self, filepath, summary=False):\n        \"\"\"Retrieve VirusTotal results for a file.\n\n        :param filepath: file path\n        :param summary: if you want a summary report\n        \"\"\"\n        if not os.path.exists(filepath):\n            log.warning(\"Path \\\"%s\\\" could not be found for VirusTotal \"\n                        \"lookup, skipping it\", os.path.basename(filepath))\n            return\n\n        try:\n            return self.vt.file_report(filepath, summary=summary)\n        except VirusTotalResourceNotScanned:\n            return self.vt.file_scan(filepath)\n        except CuckooOperationalError as e:\n            log.warning(\"Error fetching results from VirusTotal for \"\n                        \"\\\"%s\\\": %s\", os.path.basename(filepath), e.message)\n\n    def scan_url(self, url, summary=False):\n        \"\"\"Retrieve VirusTotal results for a URL.\n\n        :param url: URL\n        :param summary: if you want a summary report\n        \"\"\"\n        try:\n            return self.vt.url_report(url, summary=summary)\n        except VirusTotalResourceNotScanned:\n            return self.vt.url_scan(url)\n        except CuckooOperationalError as e:\n            log.warning(\"Error fetching results from VirusTotal for \"\n                        \"\\\"%s\\\": %s\", url, e.message)\n\n    def should_scan_file(self, filetype):\n        \"\"\"Determines whether a certain filetype should be scanned on\n        VirusTotal. For example, we're not interested in scanning text\n        files.\n\n        :param filetype: file type\n        \"\"\"\n        return \"PE32\" in filetype or \"MS-DOS\" in filetype\n"
  },
  {
    "path": "modules/reporting/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n"
  },
  {
    "path": "modules/reporting/elasticsearch.py",
    "content": "# Copyright (C) 2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom __future__ import absolute_import\n\nimport logging\n\nfrom lib.cuckoo.common.abstracts import Report\nfrom lib.cuckoo.common.exceptions import CuckooDependencyError\nfrom lib.cuckoo.common.exceptions import CuckooReportError\n\nlogging.getLogger(\"elasticsearch\").setLevel(logging.WARNING)\nlogging.getLogger(\"elasticsearch.trace\").setLevel(logging.WARNING)\n\ntry:\n    from elasticsearch import (\n        Elasticsearch, ConnectionError, ConnectionTimeout\n    )\n    HAVE_ELASTIC = True\nexcept ImportError:\n    HAVE_ELASTIC = False\n\nlog = logging.getLogger(__name__)\n\nclass ElasticSearch(Report):\n    \"\"\"Stores report in Elasticsearch.\"\"\"\n\n    def connect(self):\n        \"\"\"Connect to Elasticsearch.\n\n        :raise CuckooReportError: if unable to connect.\n        \"\"\"\n        hosts = []\n        for host in self.options.get(\"hosts\", \"127.0.0.1:9200\").split(\",\"):\n            if host.strip():\n                hosts.append(host.strip())\n\n        self.index = self.options.get(\"index\", \"cuckoo\")\n        self.type_ = self.options.get(\"type\", \"cuckoo\")\n\n        try:\n            self.es = Elasticsearch(hosts)\n        except TypeError:\n            raise CuckooReportError(\n                \"Elasticsearch connection hosts must be host:port or host\"\n            )\n        except (ConnectionError, ConnectionTimeout) as e:\n            raise CuckooReportError(\"Cannot connect to Elasticsearch: %s\" % e)\n\n    def do_index(self, obj):\n        '''\n        Create results in ElasticSearch\n        '''\n        index = \"%s-%d\" % (self.index, self.task[\"id\"])\n\n        try:\n            self.es.create(index=index, doc_type=self.type_, body=obj)\n        except Exception as e:\n            raise CuckooReportError(\n                \"Failed to save results in ElasticSearch for \"\n                \"task #%d: %s\" % (self.task[\"id\"], e)\n            )\n\n        self.idx += 1\n\n    def process_behavior(self, results, paginate=100):\n        \"\"\"Index the behavioral data.\"\"\"\n        for process in results.get(\"behavior\", {}).get(\"processes\", []):\n            page, calls = 0, []\n            for call in process[\"calls\"]:\n                calls.append(call)\n\n                if len(calls) == paginate:\n                    self.do_index({\n                        \"process\": {\n                            \"pid\": process[\"pid\"],\n                            \"page\": page,\n                            \"calls\": calls,\n                        },\n                    })\n\n                    page += 1\n                    calls = []\n\n            if calls:\n                self.do_index({\n                    \"process\": {\n                        \"pid\": process[\"pid\"],\n                        \"page\": page,\n                        \"calls\": calls,\n                    },\n                })\n\n    def run(self, results):\n        \"\"\"Index the Cuckoo report into ElasticSearch.\n\n        :param results: analysis results dictionary.\n        :raise CuckooReportError: if the connection or reporting failed.\n        \"\"\"\n        if not HAVE_ELASTIC:\n            raise CuckooDependencyError(\n                \"Unable to import elasticsearch (install with \"\n                \"`pip install elasticsearch`)\"\n            )\n\n        self.connect()\n        self.idx = 0\n\n        # Index target information, the behavioral summary, and\n        # VirusTotal results.\n        self.do_index({\n            \"target\": results.get(\"target\"),\n            \"summary\": results.get(\"behavior\", {}).get(\"summary\"),\n            \"virustotal\": results.get(\"virustotal\"),\n        })\n\n        # Index the API calls.\n        if self.options.get(\"calls\"):\n            self.process_behavior(results)\n"
  },
  {
    "path": "modules/reporting/jsondump.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport json\nimport codecs\nimport calendar\nimport datetime\n\nfrom lib.cuckoo.common.abstracts import Report\nfrom lib.cuckoo.common.exceptions import CuckooReportError\n\ndef default(obj):\n    if isinstance(obj, datetime.datetime):\n        if obj.utcoffset() is not None:\n            obj = obj - obj.utcoffset()\n        return calendar.timegm(obj.timetuple()) + obj.microsecond / 1000000.0\n    raise TypeError(\"%r is not JSON serializable\" % obj)\n\nclass JsonDump(Report):\n    \"\"\"Saves analysis results in JSON format.\"\"\"\n\n    def erase_calls(self, results):\n        \"\"\"Temporarily removes calls from the report by replacing them with\n        empty lists.\"\"\"\n        if self.calls:\n            self.calls = None\n            return\n\n        self.calls = []\n        for process in results.get(\"behavior\", {}).get(\"processes\", []):\n            self.calls.append(process[\"calls\"])\n            process[\"calls\"] = []\n\n    def restore_calls(self, results):\n        \"\"\"Restores calls that were temporarily removed in the report by\n        replacing the calls with the original values.\"\"\"\n        if not self.calls:\n            return\n\n        for process in results.get(\"behavior\", {}).get(\"processes\", []):\n            process[\"calls\"] = self.calls.pop(0)\n\n    def run(self, results):\n        \"\"\"Writes report.\n\n        :param results: Cuckoo results dict.\n        :raise CuckooReportError: if fails to write report.\n        \"\"\"\n        indent = self.options.get(\"indent\", 4)\n        encoding = self.options.get(\"encoding\", \"utf-8\")\n\n        # Determine whether we want to include the behavioral data in the\n        # JSON report.\n        if \"json.calls\" in self.task[\"options\"]:\n            self.calls = int(self.task[\"options\"][\"json.calls\"])\n        else:\n            self.calls = self.options.get(\"calls\", True)\n\n        self.erase_calls(results)\n\n        try:\n            path = os.path.join(self.reports_path, \"report.json\")\n\n            with codecs.open(path, \"w\", \"utf-8\") as report:\n                json.dump(results, report, default=default, sort_keys=False,\n                          indent=int(indent), encoding=encoding)\n        except (UnicodeError, TypeError, IOError) as e:\n            raise CuckooReportError(\"Failed to generate JSON report: %s\" % e)\n        finally:\n            self.restore_calls(results)\n"
  },
  {
    "path": "modules/reporting/moloch.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport logging\nimport os.path\nimport subprocess\n\nfrom lib.cuckoo.common.abstracts import Report\nfrom lib.cuckoo.common.exceptions import CuckooProcessingError\n\nlog = logging.getLogger(__name__)\n\nclass Moloch(Report):\n    \"\"\"Moloch reporting module.\"\"\"\n\n    def run(self, results):\n        self.moloch_capture = \\\n            self.options.get(\"moloch_capture\", \"/data/moloch/bin/moloch-capture\")\n        self.config_path = self.options.get(\"conf\", \"/data/moloch/etc/config.ini\")\n        self.instance = self.options.get(\"instance\", \"cuckoo\")\n\n        if not os.path.isfile(self.pcap_path):\n            log.warning(\"Unable to run Moloch as no pcap is available\")\n            return\n\n        if not os.path.isfile(self.moloch_capture):\n            raise CuckooProcessingError(\"Unable to locate Moloch binary\")\n\n        if not os.path.isfile(self.config_path):\n            raise CuckooProcessingError(\n                \"Unable to locate Moloch configuration\"\n            )\n\n        args = [\n            self.moloch_capture,\n            \"-c\", self.config_path,\n            \"-r\", self.pcap_path,\n            \"-n\", self.instance,\n            \"-q\",\n        ]\n\n        tags = {}\n        tags[self.instance] = self.task[\"id\"]\n\n        if self.task[\"category\"] == \"file\":\n            # Tag file hashes.\n            f = results.get(\"target\", {}).get(\"file\", {})\n            for field in (\"md5\", \"sha1\", \"sha256\", \"sha512\"):\n                if field in f:\n                    tags[field] = f[field]\n\n            # Tag normalized VirusTotal results.\n            for variant in results.get(\"virustotal\", {}).get(\"normalized\", []):\n                tags[\"virustotal\"] = variant\n\n        for key, value in tags.items():\n            args += [\n                \"-t\", \"%s:%s\" % (key, value),\n            ]\n\n        try:\n            subprocess.check_call(args)\n        except subprocess.CalledProcessError as e:\n            raise CuckooProcessingError(\n                \"Error submitting PCAP to Moloch: %s\" % e)\n"
  },
  {
    "path": "modules/reporting/mongodb.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\n\nfrom lib.cuckoo.common.abstracts import Report\nfrom lib.cuckoo.common.exceptions import CuckooDependencyError\nfrom lib.cuckoo.common.exceptions import CuckooReportError\nfrom lib.cuckoo.common.objects import File\n\ntry:\n    from pymongo import MongoClient\n    from pymongo.errors import ConnectionFailure\n    from gridfs import GridFS\n    from gridfs.errors import FileExists\n    HAVE_MONGO = True\nexcept ImportError:\n    HAVE_MONGO = False\n\nclass MongoDB(Report):\n    \"\"\"Stores report in MongoDB.\"\"\"\n\n    # Mongo schema version, used for data migration.\n    SCHEMA_VERSION = \"1\"\n\n    def connect(self):\n        \"\"\"Connects to Mongo database, loads options and set connectors.\n\n        :raise CuckooReportError: if unable to connect.\n        \"\"\"\n        host = self.options.get(\"host\", \"127.0.0.1\")\n        port = int(self.options.get(\"port\", 27017))\n        db = self.options.get(\"db\", \"cuckoo\")\n\n        try:\n            self.conn = MongoClient(host, port)\n            self.db = self.conn[db]\n            self.fs = GridFS(self.db)\n        except TypeError:\n            raise CuckooReportError(\"Mongo connection port must be integer\")\n        except ConnectionFailure:\n            raise CuckooReportError(\"Cannot connect to MongoDB\")\n\n    def store_file(self, file_obj, filename=\"\"):\n        \"\"\"Store a file in GridFS.\n\n        :param file_obj: object to the file to store\n        :param filename: name of the file to store\n        :return: object id of the stored file\n        \"\"\"\n        if not filename:\n            filename = file_obj.get_name()\n\n        existing = self.db.fs.files.find_one({\"sha256\": file_obj.get_sha256()})\n\n        if existing:\n            return existing[\"_id\"]\n\n        new = self.fs.new_file(filename=filename,\n                               contentType=file_obj.get_content_type(),\n                               sha256=file_obj.get_sha256())\n\n        for chunk in file_obj.get_chunks():\n            new.write(chunk)\n\n        try:\n            new.close()\n            return new._id\n        except FileExists:\n            to_find = {\"sha256\": file_obj.get_sha256()}\n            return self.db.fs.files.find_one(to_find)[\"_id\"]\n\n    def run(self, results):\n        \"\"\"Writes report.\n\n        :param results: analysis results dictionary.\n        :raise CuckooReportError: if fails to connect or write to MongoDB.\n        \"\"\"\n        if not HAVE_MONGO:\n            raise CuckooDependencyError(\n                \"Unable to import pymongo (install with \"\n                \"`pip install pymongo`)\"\n            )\n\n        self.connect()\n\n        # Set mongo schema version.\n        # TODO: This is not optimal becuase it run each analysis. Need to run\n        # only one time at startup.\n        if \"cuckoo_schema\" in self.db.collection_names():\n            if self.db.cuckoo_schema.find_one()[\"version\"] != self.SCHEMA_VERSION:\n                CuckooReportError(\"Mongo schema version not expected, check data migration tool\")\n        else:\n            self.db.cuckoo_schema.save({\"version\": self.SCHEMA_VERSION})\n\n        # Set an unique index on stored files, to avoid duplicates.\n        # From pymongo docs:\n        #  Returns the name of the created index if an index is actually\n        #    created.\n        #  Returns None if the index already exists.\n        # TODO: This is not optimal because it run each analysis. Need to run\n        # only one time at startup.\n        self.db.fs.files.ensure_index(\"sha256\", unique=True,\n                                      sparse=True, name=\"sha256_unique\")\n\n        # Create a copy of the dictionary. This is done in order to not modify\n        # the original dictionary and possibly compromise the following\n        # reporting modules.\n        report = dict(results)\n        if \"network\" not in report:\n            report[\"network\"] = {}\n\n        # Store path of the analysis path.\n        report[\"info\"][\"analysis_path\"] = self.analysis_path\n\n        # Store the sample in GridFS.\n        if results.get(\"info\", {}).get(\"category\") == \"file\" and \"target\" in results:\n            sample = File(self.file_path)\n            if sample.valid():\n                fname = results[\"target\"][\"file\"][\"name\"]\n                sample_id = self.store_file(sample, filename=fname)\n                report[\"target\"] = {\"file_id\": sample_id}\n                report[\"target\"].update(results[\"target\"])\n\n        # Store the PCAP file in GridFS and reference it back in the report.\n        pcap_path = os.path.join(self.analysis_path, \"dump.pcap\")\n        pcap = File(pcap_path)\n        if pcap.valid():\n            pcap_id = self.store_file(pcap)\n            report[\"network\"][\"pcap_id\"] = pcap_id\n\n        sorted_pcap_path = os.path.join(self.analysis_path, \"dump_sorted.pcap\")\n        spcap = File(sorted_pcap_path)\n        if spcap.valid():\n            spcap_id = self.store_file(spcap)\n            report[\"network\"][\"sorted_pcap_id\"] = spcap_id\n\n        mitmproxy_path = os.path.join(self.analysis_path, \"dump.mitm\")\n        mitmpr = File(mitmproxy_path)\n        if mitmpr.valid():\n            mitmpr_id = self.store_file(mitmpr)\n            report[\"network\"][\"mitmproxy_id\"] = mitmpr_id\n\n        # Store the process memory dump file and extracted files in GridFS and\n        # reference it back in the report.\n        if \"procmemory\" in report and self.options.get(\"store_memdump\", False):\n            for idx, procmem in enumerate(report[\"procmemory\"]):\n                procmem_path = os.path.join(\n                    self.analysis_path, \"memory\", \"%s.dmp\" % procmem[\"pid\"]\n                )\n                procmem_file = File(procmem_path)\n                if procmem_file.valid():\n                    procmem_id = self.store_file(procmem_file)\n                    procmem[\"procmem_id\"] = procmem_id\n\n                for extracted in procmem.get(\"extracted\", []):\n                    f = File(extracted[\"path\"])\n                    if f.valid():\n                        extracted[\"extracted_id\"] = self.store_file(f)\n\n        # Walk through the dropped files, store them in GridFS and update the\n        # report with the ObjectIds.\n        new_dropped = []\n        if \"dropped\" in report:\n            for dropped in report[\"dropped\"]:\n                new_drop = dict(dropped)\n                drop = File(dropped[\"path\"])\n                if drop.valid():\n                    dropped_id = self.store_file(drop, filename=dropped[\"name\"])\n                    new_drop[\"object_id\"] = dropped_id\n\n                new_dropped.append(new_drop)\n\n        report[\"dropped\"] = new_dropped\n\n        # Add screenshots.\n        report[\"shots\"] = []\n        if os.path.exists(self.shots_path):\n            # Walk through the files and select the JPGs.\n            for shot_file in sorted(os.listdir(self.shots_path)):\n                if not shot_file.endswith(\".jpg\"):\n                    continue\n\n                shot_path = os.path.join(self.shots_path, shot_file)\n                shot = File(shot_path)\n                # If the screenshot path is a valid file, store it and\n                # reference it back in the report.\n                if shot.valid():\n                    shot_id = self.store_file(shot)\n                    report[\"shots\"].append(shot_id)\n\n        paginate = self.options.get(\"paginate\", 100)\n\n        # Store chunks of API calls in a different collection and reference\n        # those chunks back in the report. In this way we should defeat the\n        # issue with the oversized reports exceeding MongoDB's boundaries.\n        # Also allows paging of the reports.\n        if \"behavior\" in report and \"processes\" in report[\"behavior\"]:\n            new_processes = []\n            for process in report[\"behavior\"][\"processes\"]:\n                new_process = dict(process)\n\n                chunk = []\n                chunks_ids = []\n                # Loop on each process call.\n                for call in process[\"calls\"]:\n                    # If the chunk size is paginate or if the loop is\n                    # completed then store the chunk in MongoDB.\n                    if len(chunk) == paginate:\n                        to_insert = {\"pid\": process[\"pid\"], \"calls\": chunk}\n                        chunk_id = self.db.calls.insert(to_insert)\n                        chunks_ids.append(chunk_id)\n                        # Reset the chunk.\n                        chunk = []\n\n                    # Append call to the chunk.\n                    chunk.append(call)\n\n                # Store leftovers.\n                if chunk:\n                    to_insert = {\"pid\": process[\"pid\"], \"calls\": chunk}\n                    chunk_id = self.db.calls.insert(to_insert)\n                    chunks_ids.append(chunk_id)\n\n                # Add list of chunks.\n                new_process[\"calls\"] = chunks_ids\n                new_processes.append(new_process)\n\n            # Store the results in the report.\n            report[\"behavior\"] = dict(report[\"behavior\"])\n            report[\"behavior\"][\"processes\"] = new_processes\n\n        # Store the report and retrieve its object id.\n        self.db.analysis.save(report)\n        self.conn.close()\n"
  },
  {
    "path": "modules/reporting/reporthtml.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport codecs\nimport base64\n\nfrom lib.cuckoo.common.abstracts import Report\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\nfrom lib.cuckoo.common.exceptions import CuckooReportError\nfrom lib.cuckoo.common.objects import File\n\ntry:\n    from jinja2.environment import Environment\n    from jinja2.loaders import FileSystemLoader\n    HAVE_JINJA2 = True\nexcept ImportError:\n    HAVE_JINJA2 = False\n\nclass ReportHTML(Report):\n    \"\"\"Stores report in HTML format.\"\"\"\n\n    def run(self, results):\n        \"\"\"Writes report.\n\n        :param results: Cuckoo results dict.\n        :raise CuckooReportError: if fails to write report.\n        \"\"\"\n        if not HAVE_JINJA2:\n            raise CuckooReportError(\n                \"Failed to generate HTML report: Jinja2 library is not \"\n                \"installed (install `pip install jinja2`)\")\n\n        shots_path = os.path.join(self.analysis_path, \"shots\")\n        if os.path.exists(shots_path):\n            shots = []\n            counter = 1\n            for shot_name in os.listdir(shots_path):\n                if not shot_name.endswith(\".jpg\"):\n                    continue\n\n                shot_path = os.path.join(shots_path, shot_name)\n                if not os.path.getsize(shot_path):\n                    continue\n\n                shot = {}\n                shot[\"id\"] = os.path.splitext(File(shot_path).get_name())[0]\n                shot[\"data\"] = base64.b64encode(open(shot_path, \"rb\").read())\n                shots.append(shot)\n\n                counter += 1\n\n            shots.sort(key=lambda shot: shot[\"id\"])\n            results[\"screenshots\"] = shots\n        else:\n            results[\"screenshots\"] = []\n\n        env = Environment(autoescape=True)\n        env.loader = FileSystemLoader(os.path.join(CUCKOO_ROOT,\n                                                   \"data\", \"html\"))\n\n        processed = None\n        mapping = [\n            (\"file_read\", \"File\", \"Read\"),\n            (\"file_written\", \"File\", \"Written\"),\n            (\"file_deleted\", \"File\", \"Deleted\"),\n            (\"file_opened\", \"File\", \"Opened\"),\n            (\"file_copied\", \"File\", \"Copied\"),\n            (\"file_moved\", \"File\", \"Moved\"),\n            (\"connects_ip\", \"Network\", \"Connects IP\"),\n            (\"resolves_url\", \"Network\", \"Resolves URL\"),\n            (\"fetches_url\", \"Network\", \"Fetches URL\"),\n            (\"connects_host\", \"Network\", \"Connects Host\"),\n            (\"downloads_file_url\", \"Network\", \"Downloads File URL\"),\n            (\"directory_created\", \"Directory\", \"Created\"),\n            (\"directory_removed\", \"Directory\", \"Removed\"),\n            (\"directory_enumerated\", \"Directory\", \"Enumerated\"),\n            (\"regkey_opened\", \"Registry Key\", \"Opened\"),\n            (\"regkey_deleted\", \"Registry Key\", \"Deleted\"),\n            (\"regkey_read\", \"Registry Key\", \"Read\"),\n            (\"regkey_written\", \"Registry Key\", \"Written\"),\n            (\"mutex\", \"Mutex\", \"Accessed\"),\n        ]\n\n        processed = {}\n        for proc in results.get(\"behavior\", {}).get(\"generic\", []):\n            for orig, cat, subcat in mapping:\n                if cat not in processed:\n                    processed[cat] = {}\n\n                if subcat not in processed[cat]:\n                    processed[cat][subcat] = []\n\n                # Special handling required for file moved/copied.\n                if orig == \"file_moved\" or orig == \"file_copied\":\n                    for src, dst in proc.get(\"summary\", {}).get(orig, []):\n                        entry = \"%s -> %s\" % (src, dst)\n                        processed[cat][subcat].append(entry)\n                    continue\n\n                if \"summary\" in proc and orig in proc[\"summary\"]:\n                    for content in proc[\"summary\"][orig]:\n                        processed[cat][subcat].append(content)\n\n        try:\n            tpl = env.get_template(\"report.html\")\n            html = tpl.render({\"results\": results,\n                               \"processed\": processed,\n                               \"mapping\": mapping})\n        except Exception as e:\n            raise CuckooReportError(\"Failed to generate HTML report: %s\" % e)\n\n        try:\n            report_path = os.path.join(self.reports_path, \"report.html\")\n            with codecs.open(report_path, \"w\", encoding=\"utf-8\") as report:\n                report.write(html)\n        except (TypeError, IOError) as e:\n            raise CuckooReportError(\"Failed to write HTML report: %s\" % e)\n\n        return True\n"
  },
  {
    "path": "oldweb/.gitignore",
    "content": "tmp_uploads\n*.swp\n*.pyc\n"
  },
  {
    "path": "oldweb/analysis/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission."
  },
  {
    "path": "oldweb/analysis/forms.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom django import forms\n\nfrom submission.models import Comment, Tag\n\nclass CommentForm(forms.ModelForm):\n    class Meta:\n        model = Comment\n        fields = [\"message\"]\n\nclass TagForm(forms.ModelForm):\n    class Meta:\n        model = Tag\n        fields = [\"name\"]\n"
  },
  {
    "path": "oldweb/analysis/templatetags/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission."
  },
  {
    "path": "oldweb/analysis/templatetags/analysis_tags.py",
    "content": "from django.template.defaultfilters import register\n\n@register.filter\ndef mongo_id(value):\n    \"\"\"Retrieve _id value.\n    @todo: it will be removed in future.\n    \"\"\"\n    if isinstance(value, dict):\n        return value.get(\"_id\", value)\n\n    # Return value\n    return unicode(value)\n\n@register.filter\ndef is_dict(value):\n    \"\"\"Checks if value is an instance of dict\"\"\"\n    return isinstance(value, dict)\n\n@register.filter\ndef get_item(dictionary, key):\n    return dictionary.get(key, \"\")\n\n@register.filter\ndef filter_key_if_has(l, key):\n    ret = []\n    for x in l:\n        if key not in x or x[key]:\n            ret.append(x)\n    return ret\n\n@register.filter\ndef custom_length(dictionary, keys):\n    if not dictionary:\n        return 0\n\n    ret = 0\n    for key in keys.split():\n        ret += len(dictionary.get(key, []))\n    return ret\n\n@register.filter\ndef volsort(l):\n    \"\"\"Sort baselined Volatility results. Results with `class_` set have a\n    higher priority over the regular results.\"\"\"\n    if not l:\n        return\n\n    for x in l:\n        if x.get(\"class_\"):\n            yield x\n\n    for x in l:\n        if not x.get(\"class_\"):\n            yield x\n\n@register.filter\ndef isdeadip(ipaddr, analysis):\n    # It doesn't make much sense to report a dead IP address when the analysis\n    # didn't have internet access in the first place.\n    if analysis.get(\"info\", {}).get(\"route\") == \"none\":\n        return\n\n    for ip, port in analysis.get(\"network\", {}).get(\"dead_hosts\", []):\n        if ip == ipaddr:\n            return True\n\n@register.filter\ndef sigsort(l):\n    \"\"\"Sort signatures entries. Generic explanations come first, followed by\n    IOCs, followed by API calls.\"\"\"\n    if not l:\n        return\n\n    for x in l:\n        if x.get(\"type\", x.get(\"_type\")) == \"generic\":\n            yield x\n\n    for x in l:\n        if x.get(\"type\", x.get(\"_type\")) == \"ioc\":\n            yield x\n\n    first = True\n    for x in l:\n        if x.get(\"type\", x.get(\"_type\")) == \"call\":\n            if first:\n                x[\"first\"] = True\n                first = False\n            yield x\n\n@register.filter\ndef ensurelist(o):\n    if isinstance(o, (tuple, list)):\n        return o\n    return o,\n\n@register.filter\ndef sizeof_fmt(num):\n    suffix = \"B\"\n    for unit in [\"\", \"K\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\"]:\n        if abs(num) < 1024.0:\n            return \"%3.1f%s%s\" % (num, unit, suffix)\n        num /= 1024.0\n    return \"%.1f%s%s\" % (num, \"Yi\", suffix)\n\n@register.filter\ndef process_name(pid, analysis):\n    for proc in analysis.get(\"behavior\", {}).get(\"generic\", []):\n        if proc[\"pid\"] == pid:\n            return proc[\"process_name\"]\n"
  },
  {
    "path": "oldweb/analysis/urls.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file \"docs/LICENSE\" for copying permission.\n\nfrom . import views\nfrom django.conf.urls import url\n\nurlpatterns = [\n    url(r\"^$\", views.index),\n    url(r\"^(?P<task_id>\\d+)/$\", views.report),\n    url(r\"^latest/$\", views.latest_report),\n    url(r\"^remove/(?P<task_id>\\d+)/$\", views.remove),\n    url(r\"^chunk/(?P<task_id>\\d+)/(?P<pid>\\d+)/(?P<pagenum>\\d+)/$\", views.chunk),\n    url(r\"^filtered/(?P<task_id>\\d+)/(?P<pid>\\d+)/(?P<category>\\w+)/$\", views.filtered_chunk),\n    url(r\"^search/(?P<task_id>\\d+)/$\", views.search_behavior),\n    url(r\"^search/$\", views.search),\n    url(r\"^pending/$\", views.pending),\n    url(r\"^(?P<task_id>\\d+)/pcapstream/(?P<conntuple>[.,\\w]+)/$\", views.pcapstream),\n    url(r\"^moloch\"\n        r\"/(?P<ip>[\\d\\.]+)?/(?P<host>[a-zA-Z0-9-_\\.]+)?\"\n        r\"/(?P<src_ip>[a-zA-Z0-9\\.]+)?/(?P<src_port>\\d+|None)?\"\n        r\"/(?P<dst_ip>[a-zA-Z0-9\\.]+)?/(?P<dst_port>\\d+|None)?\"\n        r\"/(?P<sid>\\d+)?\",\n        views.moloch),\n    url(r\"^(?P<task_id>\\d+)/export/$\", views.export_analysis),\n    url(r\"^import/$\", views.import_analysis),\n]\n"
  },
  {
    "path": "oldweb/analysis/views.py",
    "content": "# coding=utf-8\n# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport sys\nimport re\nimport os\nimport json\nimport urllib\nimport zipfile\n\nfrom cStringIO import StringIO\n\nfrom django.conf import settings\nfrom django.http import HttpResponse\nfrom django.shortcuts import render, redirect\nfrom django.views.decorators.http import require_safe\nfrom django.views.decorators.csrf import csrf_exempt\n\nimport pymongo\nfrom bson.objectid import ObjectId\nfrom django.core.exceptions import PermissionDenied, ObjectDoesNotExist\nfrom gridfs import GridFS\n\nsys.path.append(settings.CUCKOO_PATH)\n\nfrom lib.cuckoo.core.database import Database, TASK_PENDING, TASK_COMPLETED\nfrom lib.cuckoo.common.utils import store_temp_file, versiontuple\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT, LATEST_HTTPREPLAY\nimport modules.processing.network as network\n\nresults_db = settings.MONGO\nfs = GridFS(results_db)\n\n@require_safe\ndef index(request):\n    db = Database()\n    tasks_files = db.list_tasks(limit=50, category=\"file\", not_status=TASK_PENDING)\n    tasks_urls = db.list_tasks(limit=50, category=\"url\", not_status=TASK_PENDING)\n\n    analyses_files = []\n    analyses_urls = []\n\n    if tasks_files:\n        for task in tasks_files:\n            new = task.to_dict()\n            new[\"sample\"] = db.view_sample(new[\"sample_id\"]).to_dict()\n\n            filename = os.path.basename(new[\"target\"])\n            new.update({\"filename\": filename})\n\n            if db.view_errors(task.id):\n                new[\"errors\"] = True\n\n            analyses_files.append(new)\n\n    if tasks_urls:\n        for task in tasks_urls:\n            new = task.to_dict()\n\n            if db.view_errors(task.id):\n                new[\"errors\"] = True\n\n            analyses_urls.append(new)\n\n    return render(request, \"analysis/index.html\", {\n        \"files\": analyses_files,\n        \"urls\": analyses_urls,\n    })\n\n@require_safe\ndef pending(request):\n    db = Database()\n    tasks = db.list_tasks(status=TASK_PENDING)\n\n    pending = []\n    for task in tasks:\n        pending.append(task.to_dict())\n\n    return render(request, \"analysis/pending.html\", {\n        \"tasks\": pending,\n    })\n\n@require_safe\ndef chunk(request, task_id, pid, pagenum):\n    try:\n        pid, pagenum = int(pid), int(pagenum)-1\n    except:\n        raise PermissionDenied\n\n    if not request.is_ajax():\n        raise PermissionDenied\n\n    record = results_db.analysis.find_one(\n        {\n            \"info.id\": int(task_id),\n            \"behavior.processes.pid\": pid\n        },\n        {\n            \"behavior.processes.pid\": 1,\n            \"behavior.processes.calls\": 1\n        }\n    )\n\n    if not record:\n        raise ObjectDoesNotExist\n\n    process = None\n    for pdict in record[\"behavior\"][\"processes\"]:\n        if pdict[\"pid\"] == pid:\n            process = pdict\n\n    if not process:\n        raise ObjectDoesNotExist\n\n    if pagenum >= 0 and pagenum < len(process[\"calls\"]):\n        objectid = process[\"calls\"][pagenum]\n        chunk = results_db.calls.find_one({\"_id\": ObjectId(objectid)})\n        for idx, call in enumerate(chunk[\"calls\"]):\n            call[\"id\"] = pagenum * 100 + idx\n    else:\n        chunk = dict(calls=[])\n\n    return render(request, \"analysis/behavior/_chunk.html\", {\n        \"chunk\": chunk,\n    })\n\n@require_safe\ndef filtered_chunk(request, task_id, pid, category):\n    \"\"\"Filters calls for call category.\n    @param task_id: cuckoo task id\n    @param pid: pid you want calls\n    @param category: call category type\n    \"\"\"\n    if not request.is_ajax():\n        raise PermissionDenied\n\n    # Search calls related to your PID.\n    record = results_db.analysis.find_one(\n        {\n            \"info.id\": int(task_id),\n            \"behavior.processes.pid\": int(pid),\n        },\n        {\n            \"behavior.processes.pid\": 1,\n            \"behavior.processes.calls\": 1,\n        }\n    )\n\n    if not record:\n        raise ObjectDoesNotExist\n\n    # Extract embedded document related to your process from response collection.\n    process = None\n    for pdict in record[\"behavior\"][\"processes\"]:\n        if pdict[\"pid\"] == int(pid):\n            process = pdict\n\n    if not process:\n        raise ObjectDoesNotExist\n\n    # Create empty process dict for AJAX view.\n    filtered_process = {\n        \"pid\": pid,\n        \"calls\": [],\n    }\n\n    # Populate dict, fetching data from all calls and selecting only appropriate category.\n    for call in process[\"calls\"]:\n        chunk = results_db.calls.find_one({\"_id\": call})\n        for call in chunk[\"calls\"]:\n            if call[\"category\"] == category:\n                filtered_process[\"calls\"].append(call)\n\n    return render(request, \"analysis/behavior/_chunk.html\", {\n        \"chunk\": filtered_process,\n    })\n\n@csrf_exempt\ndef search_behavior(request, task_id):\n    if request.method != \"POST\":\n        raise PermissionDenied\n\n    query = request.POST.get(\"search\")\n    query = re.compile(query, re.I)\n    results = []\n\n    # Fetch analysis report.\n    record = results_db.analysis.find_one(\n        {\n            \"info.id\": int(task_id),\n        }\n    )\n\n    # Loop through every process\n    for process in record[\"behavior\"][\"processes\"]:\n        process_results = []\n\n        chunks = results_db.calls.find({\n            \"_id\": {\"$in\": process[\"calls\"]}\n        })\n\n        index = -1\n        for chunk in chunks:\n            for call in chunk[\"calls\"]:\n                index += 1\n\n                if query.search(call[\"api\"]):\n                    call[\"id\"] = index\n                    process_results.append(call)\n                    continue\n\n                for key, value in call[\"arguments\"].items():\n                    if query.search(key):\n                        call[\"id\"] = index\n                        process_results.append(call)\n                        break\n\n                    if isinstance(value, basestring) and query.search(value):\n                        call[\"id\"] = index\n                        process_results.append(call)\n                        break\n\n                    if isinstance(value, (tuple, list)):\n                        for arg in value:\n                            if not isinstance(arg, basestring):\n                                continue\n\n                            if query.search(arg):\n                                call[\"id\"] = index\n                                process_results.append(call)\n                                break\n                        else:\n                            continue\n                        break\n\n        if process_results:\n            results.append({\n                \"process\": process,\n                \"signs\": process_results\n            })\n\n    return render(request, \"analysis/behavior/_search_results.html\", {\n        \"results\": results,\n    })\n\n@require_safe\ndef report(request, task_id):\n    report = results_db.analysis.find_one({\"info.id\": int(task_id)}, sort=[(\"_id\", pymongo.DESCENDING)])\n\n    if not report:\n        return render(request, \"error.html\", {\n            \"error\": \"The specified analysis does not exist\",\n        })\n\n    # Creating dns information dicts by domain and ip.\n    if \"network\" in report and \"domains\" in report[\"network\"]:\n        domainlookups = dict((i[\"domain\"], i[\"ip\"]) for i in report[\"network\"][\"domains\"])\n        iplookups = dict((i[\"ip\"], i[\"domain\"]) for i in report[\"network\"][\"domains\"])\n        for i in report[\"network\"][\"dns\"]:\n            for a in i[\"answers\"]:\n                iplookups[a[\"data\"]] = i[\"request\"]\n    else:\n        domainlookups = dict()\n        iplookups = dict()\n\n    if \"http_ex\" in report[\"network\"] or \"https_ex\" in report[\"network\"]:\n        HAVE_HTTPREPLAY = True\n    else:\n        HAVE_HTTPREPLAY = False\n\n    try:\n        import httpreplay\n        httpreplay_version = getattr(httpreplay, \"__version__\", None)\n    except ImportError:\n        httpreplay_version = None\n\n    # Is this version of httpreplay deprecated?\n    deprecated = httpreplay_version and \\\n        versiontuple(httpreplay_version) < versiontuple(LATEST_HTTPREPLAY)\n\n    return render(request, \"analysis/report.html\", {\n        \"analysis\": report,\n        \"domainlookups\": domainlookups,\n        \"iplookups\": iplookups,\n        \"httpreplay\": {\n            \"have\": HAVE_HTTPREPLAY,\n            \"deprecated\": deprecated,\n            \"current_version\": httpreplay_version,\n            \"latest_version\": LATEST_HTTPREPLAY,\n        },\n    })\n\n@require_safe\ndef latest_report(request):\n    rep = results_db.analysis.find_one({}, sort=[(\"_id\", pymongo.DESCENDING)])\n    return report(request, rep[\"info\"][\"id\"] if rep else 0)\n\n@require_safe\ndef file(request, category, object_id):\n    file_item = fs.get(ObjectId(object_id))\n\n    if file_item:\n        # Composing file name in format sha256_originalfilename.\n        file_name = file_item.sha256 + \"_\" + file_item.filename\n\n        # Managing gridfs error if field contentType is missing.\n        try:\n            content_type = file_item.contentType\n        except AttributeError:\n            content_type = \"application/octet-stream\"\n\n        response = HttpResponse(file_item.read(), content_type=content_type)\n        response[\"Content-Disposition\"] = \"attachment; filename=%s\" % file_name\n\n        return response\n    else:\n        return render(request, \"error.html\", {\n            \"error\": \"File not found\",\n        })\n\nmoloch_mapper = {\n    \"ip\": \"ip == %s\",\n    \"host\": \"host == %s\",\n    \"src_ip\": \"ip == %s\",\n    \"src_port\": \"port == %s\",\n    \"dst_ip\": \"ip == %s\",\n    \"dst_port\": \"port == %s\",\n    \"sid\": 'tags == \"sid:%s\"',\n}\n\n@require_safe\ndef moloch(request, **kwargs):\n    if not settings.MOLOCH_ENABLED:\n        return render(request, \"error.html\", {\n            \"error\": \"后续扩展:Moloch: 网络流量收集与分析系统\",\n        })\n\n    query = []\n    for key, value in kwargs.items():\n        if value and value != \"None\":\n            query.append(moloch_mapper[key] % value)\n\n    if \":\" in request.get_host():\n        hostname = request.get_host().split(\":\")[0]\n    else:\n        hostname = request.get_host()\n\n    url = \"https://%s:8005/?%s\" % (\n        settings.MOLOCH_HOST or hostname,\n        urllib.urlencode({\n            \"date\": \"-1\",\n            \"expression\": \" && \".join(query),\n        }),\n    )\n    return redirect(url)\n\n@require_safe\ndef full_memory_dump_file(request, analysis_number):\n    file_path = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\", str(analysis_number), \"memory.dmp\")\n    if os.path.exists(file_path):\n        content_type = \"application/octet-stream\"\n        response = HttpResponse(open(file_path, \"rb\").read(), content_type=content_type)\n        response[\"Content-Disposition\"] = \"attachment; filename=memory.dmp\"\n        return response\n    else:\n        return render(request, \"error.html\", {\n            \"error\": \"File not found\",\n        })\n\ndef _search_helper(obj, k, value):\n    r = []\n\n    if isinstance(obj, dict):\n        for k, v in obj.items():\n            r += _search_helper(v, k, value)\n\n    if isinstance(obj, (tuple, list)):\n        for v in obj:\n            r += _search_helper(v, k, value)\n\n    if isinstance(obj, basestring):\n        if re.search(value, obj, re.I):\n            r.append((k, obj))\n\n    return r\n\n@csrf_exempt\ndef search(request):\n    \"\"\"New Search API using ElasticSearch as backend.\"\"\"\n    if not settings.ELASTIC:\n        return render(request, \"error.html\", {\n            \"error\": \"ElasticSearch is not enabled and therefore it is \"\n                     \"not possible to do a global search.\",\n        })\n\n    if request.method == \"GET\":\n        return render(request, \"analysis/search.html\")\n\n    value = request.POST[\"search\"]\n\n    match_value = \".*\".join(re.split(\"[^a-zA-Z0-9]+\", value.lower()))\n\n    r = settings.ELASTIC.search(body={\n        \"query\": {\n            \"query_string\": {\n                \"query\": '\"%s\"*' % value,\n            },\n        },\n    })\n\n    analyses = []\n    for hit in r[\"hits\"][\"hits\"]:\n        # Find the actual matches in this hit and limit to 8 matches.\n        matches = _search_helper(hit, \"none\", match_value)\n        if not matches:\n            continue\n\n        analyses.append({\n            \"task_id\": hit[\"_index\"].split(\"-\")[-1],\n            \"matches\": matches[:16],\n            \"total\": max(len(matches)-16, 0),\n        })\n\n    if request.POST.get(\"raw\"):\n        return render(request, \"analysis/search_results.html\", {\n            \"analyses\": analyses,\n            \"term\": request.POST[\"search\"],\n        })\n\n    return render(request, \"analysis/search.html\", {\n        \"analyses\": analyses,\n        \"term\": request.POST[\"search\"],\n        \"error\": None,\n    })\n\n@require_safe\ndef remove(request, task_id):\n    \"\"\"Remove an analysis.\n    @todo: remove folder from storage.\n    \"\"\"\n    analyses = results_db.analysis.find({\"info.id\": int(task_id)})\n\n    # Checks if more analysis found with the same ID, like if process.py\n    # was run manually.\n    if analyses.count() > 1:\n        message = (\n            \"Multiple tasks with this ID deleted, thanks for all the fish \"\n            \"(the specified analysis was present multiple times in mongo).\"\n        )\n    elif analyses.count() == 1:\n        message = \"Task deleted, thanks for all the fish.\"\n\n    if not analyses.count():\n        return render(request, \"error.html\", {\n            \"error\": \"The specified analysis does not exist\",\n        })\n\n    for analysis in analyses:\n        # Delete sample if not used.\n        if \"file_id\" in analysis[\"target\"]:\n            if results_db.analysis.find({\"target.file_id\": ObjectId(analysis[\"target\"][\"file_id\"])}).count() == 1:\n                fs.delete(ObjectId(analysis[\"target\"][\"file_id\"]))\n\n        # Delete screenshots.\n        for shot in analysis[\"shots\"]:\n            if results_db.analysis.find({\"shots\": ObjectId(shot)}).count() == 1:\n                fs.delete(ObjectId(shot))\n\n        # Delete network pcap.\n        if \"pcap_id\" in analysis[\"network\"] and results_db.analysis.find({\"network.pcap_id\": ObjectId(analysis[\"network\"][\"pcap_id\"])}).count() == 1:\n            fs.delete(ObjectId(analysis[\"network\"][\"pcap_id\"]))\n\n        # Delete sorted pcap\n        if \"sorted_pcap_id\" in analysis[\"network\"] and results_db.analysis.find({\"network.sorted_pcap_id\": ObjectId(analysis[\"network\"][\"sorted_pcap_id\"])}).count() == 1:\n            fs.delete(ObjectId(analysis[\"network\"][\"sorted_pcap_id\"]))\n\n        # Delete mitmproxy dump.\n        if \"mitmproxy_id\" in analysis[\"network\"] and results_db.analysis.find({\"network.mitmproxy_id\": ObjectId(analysis[\"network\"][\"mitmproxy_id\"])}).count() == 1:\n            fs.delete(ObjectId(analysis[\"network\"][\"mitmproxy_id\"]))\n\n        # Delete dropped.\n        for drop in analysis[\"dropped\"]:\n            if \"object_id\" in drop and results_db.analysis.find({\"dropped.object_id\": ObjectId(drop[\"object_id\"])}).count() == 1:\n                fs.delete(ObjectId(drop[\"object_id\"]))\n\n        # Delete calls.\n        for process in analysis.get(\"behavior\", {}).get(\"processes\", []):\n            for call in process[\"calls\"]:\n                results_db.calls.remove({\"_id\": ObjectId(call)})\n\n        # Delete analysis data.\n        results_db.analysis.remove({\"_id\": ObjectId(analysis[\"_id\"])})\n\n    # Delete from SQL db.\n    db = Database()\n    db.delete_task(task_id)\n\n    return render(request, \"success.html\", {\n        \"message\": message,\n    })\n\n@require_safe\ndef pcapstream(request, task_id, conntuple):\n    \"\"\"Get packets from the task PCAP related to a certain connection.\n    This is possible because we sort the PCAP during processing and remember offsets for each stream.\n    \"\"\"\n    src, sport, dst, dport, proto = conntuple.split(\",\")\n    sport, dport = int(sport), int(dport)\n\n    conndata = results_db.analysis.find_one(\n        {\n            \"info.id\": int(task_id),\n        },\n        {\n            \"network.tcp\": 1,\n            \"network.udp\": 1,\n            \"network.sorted_pcap_id\": 1,\n        },\n        sort=[(\"_id\", pymongo.DESCENDING)])\n\n    if not conndata:\n        return render(request, \"standalone_error.html\", {\n            \"error\": \"The specified analysis does not exist\",\n        })\n\n    try:\n        if proto == \"udp\":\n            connlist = conndata[\"network\"][\"udp\"]\n        else:\n            connlist = conndata[\"network\"][\"tcp\"]\n\n        conns = filter(lambda i: (i[\"sport\"], i[\"dport\"], i[\"src\"], i[\"dst\"]) == (sport, dport, src, dst), connlist)\n        stream = conns[0]\n        offset = stream[\"offset\"]\n    except:\n        return render(request, \"standalone_error.html\", {\n            \"error\": \"Could not find the requested stream\",\n        })\n\n    try:\n        fobj = fs.get(conndata[\"network\"][\"sorted_pcap_id\"])\n        setattr(fobj, \"fileno\", lambda: -1)\n    except:\n        return render(request, \"standalone_error.html\", {\n            \"error\": \"The required sorted PCAP does not exist\",\n        })\n\n    packets = list(network.packets_for_stream(fobj, offset))\n    # TODO: starting from django 1.7 we should use JsonResponse.\n    return HttpResponse(json.dumps(packets), content_type=\"application/json\")\n\ndef export_analysis(request, task_id):\n    if request.method == \"POST\":\n        return export(request, task_id)\n\n    report = results_db.analysis.find_one(\n        {\"info.id\": int(task_id)}, sort=[(\"_id\", pymongo.DESCENDING)]\n    )\n    if not report:\n        return render(request, \"error.html\", {\n            \"error\": \"The specified analysis does not exist\",\n        })\n\n    if \"analysis_path\" not in report.get(\"info\", {}):\n        return render(request, \"error.html\", {\n            \"error\": \"The analysis was created before the export \"\n                     \"functionality was integrated with Cuckoo and is \"\n                     \"therefore not available for this task (in order to \"\n                     \"export this analysis, please reprocess its report).\"\n        })\n\n    analysis_path = report[\"info\"][\"analysis_path\"]\n\n    # Locate all directories/results available for this analysis.\n    dirs, files = [], []\n    for filename in os.listdir(analysis_path):\n        path = os.path.join(analysis_path, filename)\n        if os.path.isdir(path):\n            dirs.append((filename, len(os.listdir(path))))\n        else:\n            files.append(filename)\n\n    return render(request, \"analysis/export.html\", {\n        \"analysis\": report,\n        \"dirs\": dirs,\n        \"files\": files,\n    })\n\ndef export(request, task_id):\n    taken_dirs = request.POST.getlist(\"dirs\")\n    taken_files = request.POST.getlist(\"files\")\n    if not taken_dirs and not taken_files:\n        return render(request, \"error.html\", {\n            \"error\": \"Please select at least one directory or file to be exported.\"\n        })\n\n    report = results_db.analysis.find_one(\n        {\"info.id\": int(task_id)}, sort=[(\"_id\", pymongo.DESCENDING)]\n    )\n    if not report:\n        return render(request, \"error.html\", {\n            \"error\": \"The specified analysis does not exist\",\n        })\n\n    path = report[\"info\"][\"analysis_path\"]\n\n    # Creating an analysis.json file with basic information about this\n    # analysis. This information serves as metadata when importing a task.\n    analysis_path = os.path.join(path, \"analysis.json\")\n    with open(analysis_path, \"w\") as outfile:\n        report[\"target\"].pop(\"file_id\", None)\n        json.dump({\"target\": report[\"target\"]}, outfile, indent=4)\n\n    f = StringIO()\n\n    # Creates a zip file with the selected files and directories of the task.\n    zf = zipfile.ZipFile(f, \"w\", zipfile.ZIP_DEFLATED)\n\n    for dirname, subdirs, files in os.walk(path):\n        if os.path.basename(dirname) == task_id:\n            for filename in files:\n                if filename in taken_files:\n                    zf.write(os.path.join(dirname, filename), filename)\n        if os.path.basename(dirname) in taken_dirs:\n            for filename in files:\n                zf.write(os.path.join(dirname, filename),\n                         os.path.join(os.path.basename(dirname), filename))\n\n    zf.close()\n\n    response = HttpResponse(f.getvalue(), content_type=\"application/zip\")\n    response[\"Content-Disposition\"] = \"attachment; filename=%s.zip\" % task_id\n    return response\n\ndef import_analysis(request):\n    if request.method == \"GET\":\n        return render(request, \"analysis/import.html\")\n\n    db = Database()\n    task_ids = []\n    analyses = request.FILES.getlist(\"sample\")\n\n    for analysis in analyses:\n        if not analysis.size:\n            return render(request, \"error.html\", {\n                \"error\": \"You uploaded an empty analysis.\",\n            })\n\n        # if analysis.size > settings.MAX_UPLOAD_SIZE:\n            # return render(request, \"error.html\", {\n            #     \"error\": \"You uploaded a file that exceeds that maximum allowed upload size.\",\n            # })\n\n        if not analysis.name.endswith(\".zip\"):\n            return render(request, \"error.html\", {\n                \"error\": \"You uploaded an analysis that wasn't a .zip.\",\n            })\n\n        zf = zipfile.ZipFile(analysis)\n\n        # As per Python documentation we have to make sure there are no\n        # incorrect filenames.\n        for filename in zf.namelist():\n            if filename.startswith(\"/\") or \"..\" in filename or \":\" in filename:\n                return render(request, \"error.html\", {\n                    \"error\": \"The zip file contains incorrect filenames, \"\n                             \"please provide a legitimate .zip file.\",\n                })\n\n        if \"analysis.json\" in zf.namelist():\n            analysis_info = json.loads(zf.read(\"analysis.json\"))\n        elif \"binary\" in zf.namelist():\n            analysis_info = {\n                \"target\": {\n                    \"category\": \"file\",\n                },\n            }\n        else:\n            analysis_info = {\n                \"target\": {\n                    \"category\": \"url\",\n                    \"url\": \"unknown\",\n                },\n            }\n\n        category = analysis_info[\"target\"][\"category\"]\n\n        if category == \"file\":\n            binary = store_temp_file(zf.read(\"binary\"), \"binary\")\n\n            if os.path.isfile(binary):\n                task_id = db.add_path(file_path=binary,\n                                      package=\"\",\n                                      timeout=0,\n                                      options=\"\",\n                                      priority=0,\n                                      machine=\"\",\n                                      custom=\"\",\n                                      memory=False,\n                                      enforce_timeout=False,\n                                      tags=None)\n                if task_id:\n                    task_ids.append(task_id)\n\n        elif category == \"url\":\n            url = analysis_info[\"target\"][\"url\"]\n            if not url:\n                return render(request, \"error.html\", {\n                    \"error\": \"You specified an invalid URL!\",\n                })\n\n            task_id = db.add_url(url=url,\n                                 package=\"\",\n                                 timeout=0,\n                                 options=\"\",\n                                 priority=0,\n                                 machine=\"\",\n                                 custom=\"\",\n                                 memory=False,\n                                 enforce_timeout=False,\n                                 tags=None)\n            if task_id:\n                task_ids.append(task_id)\n\n        if not task_id:\n            continue\n\n        # Extract all of the files related to this analysis. This probably\n        # requires some hacks depending on the user/group the Web\n        # Interface is running under.\n        analysis_path = os.path.join(\n            CUCKOO_ROOT, \"storage\", \"analyses\", \"%d\" % task_id\n        )\n\n        if not os.path.exists(analysis_path):\n            os.mkdir(analysis_path)\n\n        zf.extractall(analysis_path)\n\n        # We set this analysis as completed so that it will be processed\n        # automatically (assuming process.py / process2.py is running).\n        db.set_status(task_id, TASK_COMPLETED)\n\n    if task_ids:\n        return render(request, \"submission/complete.html\", {\n            \"tasks\": task_ids,\n            \"baseurl\": request.build_absolute_uri(\"/\")[:-1],\n        })\n"
  },
  {
    "path": "oldweb/compare/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file \"docs/LICENSE\" for copying permission."
  },
  {
    "path": "oldweb/compare/urls.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file \"docs/LICENSE\" for copying permission.\n\nfrom . import views\nfrom django.conf.urls import url\n\nurlpatterns = [\n    url(r\"^(?P<left_id>\\d+)/$\", views.left),\n    url(r\"^(?P<left_id>\\d+)/(?P<right_id>\\d+)/$\", views.both),\n    url(r\"^(?P<left_id>\\d+)/(?P<right_hash>\\w+)/$\", views.hash),\n]\n"
  },
  {
    "path": "oldweb/compare/views.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport sys\n\nfrom django.conf import settings\nfrom django.shortcuts import render\nfrom django.views.decorators.http import require_safe\n\nsys.path.append(settings.CUCKOO_PATH)\n\nimport lib.cuckoo.common.compare as compare\n\nresults_db = settings.MONGO\n\n@require_safe\ndef left(request, left_id):\n    left = results_db.analysis.find_one({\"info.id\": int(left_id)}, {\"target\": 1, \"info\": 1})\n    if not left:\n        return render(request, \"error.html\", {\n            \"error\": \"No analysis found with specified ID\",\n        })\n\n    if left[\"target\"][\"category\"] == \"url\":\n        # Select all analyses for the same URL.\n        records = results_db.analysis.find(\n            {\n                \"$and\": [\n                    {\"target.url\": left[\"target\"][\"url\"]},\n                    {\"info.id\": {\"$ne\": int(left_id)}}\n                ]\n            },\n            {\"target\": 1, \"info\": 1}\n        )\n    else:\n        # Select all analyses with same file hash.\n        records = results_db.analysis.find(\n            {\n                \"$and\": [\n                    {\"target.file.md5\": left[\"target\"][\"file\"][\"md5\"]},\n                    {\"info.id\": {\"$ne\": int(left_id)}}\n                ]\n            },\n            {\"target\": 1, \"info\": 1}\n        )\n\n    return render(request, \"compare/left.html\", {\n        \"left\": left,\n        \"records\": records,\n    })\n\n@require_safe\ndef hash(request, left_id, right_hash):\n    left = results_db.analysis.find_one({\"info.id\": int(left_id)}, {\"target\": 1, \"info\": 1})\n    if not left:\n        return render(request, \"error.html\", {\n            \"error\": \"No analysis found with specified ID\",\n        })\n\n    # If the analysis is not of a file, but of a URL, we consider the hash\n    # to be a URL instead.\n    if left[\"target\"][\"category\"] == \"url\":\n        records = results_db.analysis.find(\n            {\n                \"$and\": [\n                    {\"target.url\": {\"$regex\": right_hash, \"$options\": \"-i\"}},\n                    {\"info.id\": {\"$ne\": int(left_id)}}\n                ]\n            },\n            {\"target\": 1, \"info\": 1}\n        )\n    else:\n        records = results_db.analysis.find(\n            {\n                \"$and\": [\n                    {\"target.file.md5\": right_hash},\n                    {\"info.id\": {\"$ne\": int(left_id)}}\n                ]\n            },\n            {\"target\": 1, \"info\": 1}\n        )\n\n    # Select all analyses with specified file hash.\n    return render(request, \"compare/hash.html\", {\n        \"left\": left,\n        \"records\": records,\n        \"hash\": right_hash,\n    })\n\n@require_safe\ndef both(request, left_id, right_id):\n    left = results_db.analysis.find_one({\"info.id\": int(left_id)}, {\"target\": 1, \"info\": 1})\n    right = results_db.analysis.find_one({\"info.id\": int(right_id)}, {\"target\": 1, \"info\": 1})\n\n    # Execute comparison.\n    counts = compare.helper_percentages_mongo(results_db, left_id, right_id)\n\n    return render(request, \"compare/both.html\", {\n        \"left\": left,\n        \"right\": right,\n        \"left_counts\": counts[left_id],\n        \"right_counts\": counts[right_id],\n    })\n"
  },
  {
    "path": "oldweb/dashboard/__init__.py",
    "content": ""
  },
  {
    "path": "oldweb/dashboard/urls.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file \"docs/LICENSE\" for copying permission.\n\nfrom . import views\nfrom django.conf.urls import url\n\nurlpatterns = [\n    url(r\"^$\", views.index),\n]\n"
  },
  {
    "path": "oldweb/dashboard/views.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport sys\nimport time\n\nfrom django.conf import settings\nfrom django.shortcuts import render\nfrom django.views.decorators.http import require_safe\n\nsys.path.append(settings.CUCKOO_PATH)\n\nfrom lib.cuckoo.core.database import Database, TASK_PENDING, TASK_RUNNING\nfrom lib.cuckoo.core.database import TASK_COMPLETED, TASK_RECOVERED, TASK_REPORTED\nfrom lib.cuckoo.core.database import TASK_FAILED_ANALYSIS, TASK_FAILED_PROCESSING, TASK_FAILED_REPORTING\n\ndef timestamp(dt):\n    \"\"\"Returns the timestamp of a datetime object.\"\"\"\n    if not dt:\n        return None\n    return time.mktime(dt.timetuple())\n\n@require_safe\ndef index(request):\n    db = Database()\n\n    report = dict(\n        total_samples=db.count_samples(),\n        total_tasks=db.count_tasks(),\n        states_count={},\n        estimate_hour=None,\n        estimate_day=None\n    )\n\n    states = (\n        TASK_PENDING,\n        TASK_RUNNING,\n        TASK_COMPLETED,\n        TASK_RECOVERED,\n        TASK_REPORTED,\n        TASK_FAILED_ANALYSIS,\n        TASK_FAILED_PROCESSING,\n        TASK_FAILED_REPORTING\n    )\n\n    for state in states:\n        report[\"states_count\"][state] = db.count_tasks(state)\n\n    offset = None\n\n    # For the following stats we're only interested in completed tasks.\n    tasks = db.list_tasks(offset=offset, status=TASK_COMPLETED)\n    tasks += db.list_tasks(offset=offset, status=TASK_REPORTED)\n\n    if tasks:\n        # Get the time when the first task started.\n        started = min(timestamp(task.started_on) for task in tasks)\n\n        # Get the time when the last task completed.\n        completed = max(timestamp(task.completed_on) for task in tasks)\n\n        # Get the amount of tasks that actually completed.\n        finished = len(tasks)\n\n        # It has happened that for unknown reasons completed and started were\n        # equal in which case an exception is thrown, avoid this.\n        if completed and started and int(completed - started):\n            hourly = 60 * 60 * finished / (completed - started)\n        else:\n            hourly = 0\n\n        report[\"estimate_hour\"] = int(hourly)\n        report[\"estimate_day\"] = int(24 * hourly)\n\n    return render(request, \"dashboard/index.html\", {\n        \"report\": report,\n    })\n"
  },
  {
    "path": "oldweb/manage.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport sys\n\nif __name__ == \"__main__\":\n    os.environ.setdefault(\"DJANGO_SETTINGS_MODULE\", \"web.settings\")\n\n    from django.core.management import execute_from_command_line\n\n    execute_from_command_line(sys.argv)\n"
  },
  {
    "path": "oldweb/static/css/lightbox.css",
    "content": "/* Preload images */\nbody:after {\n  content: url(../img/close.png) url(../img/loading.gif) url(../img/prev.png) url(../img/next.png);\n  display: none;\n}\n\n.lightboxOverlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 9999;\n  background-color: black;\n  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);\n  opacity: 0.8;\n  display: none;\n}\n\n.lightbox {\n  position: absolute;\n  left: 0;\n  width: 100%;\n  z-index: 10000;\n  text-align: center;\n  line-height: 0;\n  font-weight: normal;\n}\n\n.lightbox .lb-image {\n  display: block;\n  height: auto;\n  max-width: inherit;\n}\n\n.lightbox a img {\n  border: none;\n}\n\n.lb-outerContainer {\n  position: relative;\n  background-color: white;\n  *zoom: 1;\n  width: 250px;\n  height: 250px;\n  margin: 0 auto;\n  -webkit-border-radius: 4px;\n  -moz-border-radius: 4px;\n  -ms-border-radius: 4px;\n  -o-border-radius: 4px;\n  border-radius: 4px;\n}\n\n.lb-outerContainer:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n\n.lb-container {\n  padding: 4px;\n}\n\n.lb-loader {\n  position: absolute;\n  top: 43%;\n  left: 0;\n  height: 25%;\n  width: 100%;\n  text-align: center;\n  line-height: 0;\n}\n\n.lb-cancel {\n  display: block;\n  width: 32px;\n  height: 32px;\n  margin: 0 auto;\n  background: url(../img/loading.gif) no-repeat;\n}\n\n.lb-nav {\n  position: absolute;\n  top: 0;\n  left: 0;\n  height: 100%;\n  width: 100%;\n  z-index: 10;\n}\n\n.lb-container > .nav {\n  left: 0;\n}\n\n.lb-nav a {\n  outline: none;\n  background-image: url('data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==');\n}\n\n.lb-prev, .lb-next {\n  height: 100%;\n  cursor: pointer;\n  display: block;\n}\n\n.lb-nav a.lb-prev {\n  width: 34%;\n  left: 0;\n  float: left;\n  background: url(../img/prev.png) left 48% no-repeat;\n  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n  opacity: 0;\n  -webkit-transition: opacity 0.6s;\n  -moz-transition: opacity 0.6s;\n  -o-transition: opacity 0.6s;\n  transition: opacity 0.6s;\n}\n\n.lb-nav a.lb-prev:hover {\n  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n  opacity: 1;\n}\n\n.lb-nav a.lb-next {\n  width: 64%;\n  right: 0;\n  float: right;\n  background: url(../img/next.png) right 48% no-repeat;\n  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n  opacity: 0;\n  -webkit-transition: opacity 0.6s;\n  -moz-transition: opacity 0.6s;\n  -o-transition: opacity 0.6s;\n  transition: opacity 0.6s;\n}\n\n.lb-nav a.lb-next:hover {\n  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n  opacity: 1;\n}\n\n.lb-dataContainer {\n  margin: 0 auto;\n  padding-top: 5px;\n  *zoom: 1;\n  width: 100%;\n  -moz-border-radius-bottomleft: 4px;\n  -webkit-border-bottom-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n  -moz-border-radius-bottomright: 4px;\n  -webkit-border-bottom-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n\n.lb-dataContainer:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n\n.lb-data {\n  padding: 0 4px;\n  color: #ccc;\n}\n\n.lb-data .lb-details {\n  width: 85%;\n  float: left;\n  text-align: left;\n  line-height: 1.1em;\n}\n\n.lb-data .lb-caption {\n  font-size: 13px;\n  font-weight: bold;\n  line-height: 1em;\n}\n\n.lb-data .lb-number {\n  display: block;\n  clear: left;\n  padding-bottom: 1em;\n  font-size: 12px;\n  color: #999999;\n}\n\n.lb-data .lb-close {\n  display: block;\n  float: right;\n  width: 30px;\n  height: 30px;\n  background: url(../img/close.png) top right no-repeat;\n  text-align: right;\n  outline: none;\n  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70);\n  opacity: 0.7;\n  -webkit-transition: opacity 0.2s;\n  -moz-transition: opacity 0.2s;\n  -o-transition: opacity 0.2s;\n  transition: opacity 0.2s;\n}\n\n.lb-data .lb-close:hover {\n  cursor: pointer;\n  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n  opacity: 1;\n}\n"
  },
  {
    "path": "oldweb/static/css/style.css",
    "content": "html {\n    background: #1c1c1c;\n}\nbody {\n    padding-top: 70px;\n    /*background: #ffffff url('/static/graphic/background.png') repeat-x;*/\n}\n@media (max-width: 979px) {\n    body {\n        padding-top: 50px;\n        padding-bottom: 0px;\n    }\n}\n\npre {\n    font-stretch: ultra-condensed;\n    font-family: Consolas, monaco, monospace;\n    font-size: 0.8em;\n}\nfooter {\n    background: #e3e3e3;\n    margin: 40px 0 0;\n    padding: 20px 0 15px;\n    width: 100%;\n    color: #ccc;\n}\nfooter a:link, footer a:visited {\n    color: #000000;\n    text-decoration: none;\n}\nfooter a:hover {\n    color: #ccc;\n    text-decoration: underline;\n}\n#footer-extra {\n    background: #1c1c1c;\n    padding: 10px 0;\n    font-size: 11px;\n    color: #999;\n}\n#footer-extra a:link, #footer-extra a:visited {\n    color: #999;\n    font-weight: bold;\n    text-decoration: none;\n}\n#footer-extra a:hover {\n    color: #ccc;\n    text-decoration: underline;\n}\n.center {\n    text-align: center;\n}\n.mono {\n    font-family: monospace;\n}\n.content {\n    background-color: white;\n    padding: 40px;\n    padding-top: 15px;\n    -moz-border-radius-bottomleft: 15px;\n    -moz-border-radius-bottomright: 15px;\n    -webkit-border-bottom-left-radius: 15px;\n    -webkit-border-bottom-right-radius: 15px;\n}\n.section-title {\n    border-bottom: 1px solid #eee;\n    margin-bottom: 15px;\n    margin-top: 20px;\n    padding-bottom: 3px;\n}\nspan.block-title {\n    font-size: 18px;\n    font-weight: bold;\n}\nimg.opaque {\n    opacity: 0.3;\n    filter: alpha(opacity=30);\n}\nimg.opaque:hover {\n    opacity: 1.0;\n    filter: alpha(opacity=100);\n}\nimg.screenshot {\n    border: 1px solid #000000;\n    margin: 0px 1px 2px 1px;\n}\n.gray {\n    color: #666;\n}\n.table-centered {\n    margin: 0 auto !important;\n    float: none !important;\n}\na.tag-label {\n    color: white;\n}\n\n.file {\n    background-color: #ffe3c5;\n}\n.registry {\n    background-color: #ffc5c5;\n}\n.process {\n    background-color: #c5e0ff;\n}\n.services {\n    background-color: #ccc5ff;\n}\n.device {\n    background-color: #ccc5ff;\n}\n.network {\n    background-color: #d3ffc5;\n}\n.synchronisation {\n    background-color: #f9c5ff;\n}\n.system {\n    background-color: #fffcc5;\n}\n.windows {\n    background-color: #ffc5ee;\n}\n.iexplore {\n    background-color: #ccddbb;\n}\n.office {\n    background-color: #ccddbb;\n}\n.pdf {\n    background-color: #ccddbb;\n}\n.page-header {\n    margin-bottom: 10px;\n}\n\n/* Fix the icon tab override */\n.nav-tabs > .active > a > [class^=\"icon-\"],.nav-tabs>.active>a>[class*=\" icon-\"] { background-image:url(\"../img/glyphicons-halflings.png\") !important; }\n\ntd {\n    word-wrap: break-word;\n}\n\n.tab-content {\n    margin-top: 25px;\n}\n\n.row-active {\n    background-color: #d9edf7;\n}\n\n.tcp-flow {\n    list-style-type: none;\n}\n.tcp-flow li {\n    margin-bottom: 20px;\n}\n.tcp-out {\n}\n.tcp-out pre {\n    padding: 0;\n    border: 0;\n    background-color: white;\n    color: #d9534f;\n}\n.tcp-in {\n    padding-left: 100px;\n}\n.tcp-in pre {\n    padding: 0;\n    border: 0;\n    background-color: white;\n    color: #5bc0de;\n}\n\n.break-everywhere {\n    word-break: break-all;\n}\n.navbar-brand,\n.navbar-nav li a {\n    line-height: 60px;\n    height: 60px;\n    padding-top: 0;\n}\n"
  },
  {
    "path": "oldweb/static/js/app.js",
    "content": "$(document).ready(function() {\n    $(\"[data-toggle=popover]\").popover();\n});\n\n"
  },
  {
    "path": "oldweb/static/js/bootstrap-fileupload.js",
    "content": "/* ===========================================================\n * bootstrap-fileupload.js j2\n * http://jasny.github.com/bootstrap/javascript.html#fileupload\n * ===========================================================\n * Copyright 2012 Jasny BV, Netherlands.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\")\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n!function ($) {\n\n  \"use strict\"; // jshint ;_\n\n /* INPUTMASK PUBLIC CLASS DEFINITION\n  * ================================= */\n\n  var Fileupload = function (element, options) {\n    this.$element = $(element)\n    this.type = this.$element.data('uploadtype') || (this.$element.find('.thumbnail').length > 0 ? \"image\" : \"file\")\n      \n    this.$input = this.$element.find(':file')\n    if (this.$input.length === 0) return\n\n    this.name = this.$input.attr('name') || options.name\n\n    this.$hidden = this.$element.find(':hidden[name=\"'+this.name+'\"]')\n    if (this.$hidden.length === 0) {\n      this.$hidden = $('<input type=\"hidden\" />')\n      this.$element.prepend(this.$hidden)\n    }\n\n    this.$preview = this.$element.find('.fileupload-preview')\n    var height = this.$preview.css('height')\n    if (this.$preview.css('display') != 'inline' && height != '0px' && height != 'none') this.$preview.css('line-height', height)\n\n    this.$remove = this.$element.find('[data-dismiss=\"fileupload\"]')\n\n    this.$element.find('[data-trigger=\"fileupload\"]').on('click.fileupload', $.proxy(this.trigger, this))\n\n    this.listen()\n  }\n  \n  Fileupload.prototype = {\n    \n    listen: function() {\n      this.$input.on('change.fileupload', $.proxy(this.change, this))\n      if (this.$remove) this.$remove.on('click.fileupload', $.proxy(this.clear, this))\n    },\n    \n    change: function(e, invoked) {\n      var file = e.target.files !== undefined ? e.target.files[0] : (e.target.value ? { name: e.target.value.replace(/^.+\\\\/, '') } : null)\n      if (invoked === 'clear') return\n      \n      if (!file) {\n        this.clear()\n        return\n      }\n      \n      this.$hidden.val('')\n      this.$hidden.attr('name', '')\n      this.$input.attr('name', this.name)\n\n      if (this.type === \"image\" && this.$preview.length > 0 && (typeof file.type !== \"undefined\" ? file.type.match('image.*') : file.name.match('\\\\.(gif|png|jpe?g)$')) && typeof FileReader !== \"undefined\") {\n        var reader = new FileReader()\n        var preview = this.$preview\n        var element = this.$element\n\n        reader.onload = function(e) {\n          preview.html('<img src=\"' + e.target.result + '\" ' + (preview.css('max-height') != 'none' ? 'style=\"max-height: ' + preview.css('max-height') + ';\"' : '') + ' />')\n          element.addClass('fileupload-exists').removeClass('fileupload-new')\n        }\n\n        reader.readAsDataURL(file)\n      } else {\n        this.$preview.text(file.name)\n        this.$element.addClass('fileupload-exists').removeClass('fileupload-new')\n      }\n    },\n\n    clear: function(e) {\n      this.$hidden.val('')\n      this.$hidden.attr('name', this.name)\n      this.$input.attr('name', '')\n      this.$input.val('') // Doesn't work in IE, which causes issues when selecting the same file twice\n\n      this.$preview.html('')\n      this.$element.addClass('fileupload-new').removeClass('fileupload-exists')\n\n      if (e) {\n        this.$input.trigger('change', [ 'clear' ])\n        e.preventDefault()\n      }\n    },\n    \n    trigger: function(e) {\n      this.$input.trigger('click')\n      e.preventDefault()\n    }\n  }\n\n  \n /* INPUTMASK PLUGIN DEFINITION\n  * =========================== */\n\n  $.fn.fileupload = function (options) {\n    return this.each(function () {\n      var $this = $(this)\n      , data = $this.data('fileupload')\n      if (!data) $this.data('fileupload', (data = new Fileupload(this, options)))\n    })\n  }\n\n  $.fn.fileupload.Constructor = Fileupload\n\n\n /* INPUTMASK DATA-API\n  * ================== */\n\n  $(function () {\n    $('body').on('click.fileupload.data-api', '[data-provides=\"fileupload\"]', function (e) {\n      var $this = $(this)\n      if ($this.data('fileupload')) return\n      $this.fileupload($this.data())\n      \n      var $target = $(e.target).parents('[data-dismiss=fileupload],[data-trigger=fileupload]').first()\n      if ($target.length > 0) {\n          $target.trigger('click.fileupload')\n          e.preventDefault()\n      }\n    })\n  })\n\n}(window.jQuery)\n"
  },
  {
    "path": "oldweb/static/js/hexdump.js",
    "content": "\n/*\n * hexy js - https://github.com/a2800276/hexy.js\n *  modified for cuckoo/web\n*/\n\nvar hexy = function (buffer, config) {\n  var h = new Hexy(buffer, config)\n  return h.toString()\n}\n\nvar Hexy = function (buffer, config) {\n  var self = this\n\n  config = config || {}\n \n  self.buffer    = buffer // magic string conversion here?\n  self.width     = config.width || 16\n  self.numbering = config.numbering == \"none\"  ? \"none\" : \"hex_bytes\"\n   \n  switch (config.format) {\n    case \"none\":\n    case \"twos\":\n      self.format = config.format\n      break\n    default:\n      self.format = \"fours\"\n  }\n  \n  self.caps        = config.caps        == \"upper\" ? \"upper\" : \"lower\"\n  self.annotate    = config.annotate    == \"none\"  ? \"none\"  : \"ascii\"\n  self.prefix      = config.prefix      || \"\"\n  self.indent      = config.indent      || 0\n  self.html        = config.html        || false\n  self.offset      = config.offset      || 0\n  self.length      = config.length      || -1\n  \n  self.display_offset = config.display_offset || 0\n\n  if (self.offset) {\n    if (self.offset < self.buffer.length) {\n      self.buffer = self.buffer.slice(self.offset)\n    }\n  }\n\n  if (self.length !== -1) {\n    if (self.length <= self.buffer.length) {\n      self.buffer = self.buffer.slice(0,self.length)\n    }\n  }\n\n  for (var i = 0; i!=self.indent; ++i) {\n    self.prefix = \" \"+self.prefix\n  }\n\n  var pos = 0\n\n  this.toString = function () {\n    var str = \"\"\n    \n    if (self.html) { str += \"<div class='hexy'>\\n\"}\n    //split up into line of max `self.width`\n    var line_arr = lines()\n    \n    //lines().forEach(function(hex_raw, i)\n    for (var i = 0; i!= line_arr.length; ++i) {\n      var hex_raw = line_arr[i],\n          hex = hex_raw[0],\n          raw = hex_raw[1]\n      //insert spaces every `self.format.twos` or fours\n      var howMany = hex.length\n      if (self.format === \"fours\") {\n        howMany = 4\n      } else if (self.format === \"twos\") {\n        howMany = 2\n      }\n\n      var hex_formatted = \"\"\n\n\n      for (var j =0; j< hex.length; j+=howMany) {\n        var s = hex.substr(j, howMany)\n        hex_formatted += s + \" \"\n      } \n\n      var addr = (i*self.width)+self.offset+self.display_offset;\n      if (self.html) {\n        odd = i%2 == 0 ? \" even\" : \"  odd\"\n        str += \"<div class='\"+pad(addr, 8)+odd+\"'>\"\n      }\n      str += self.prefix \n\n      if (self.numbering === \"hex_bytes\") {\n        str += pad(addr, 8) // padding...\n        str += \": \"\n      }\n      \n      var padlen = 0\n      switch(self.format) {\n        case \"fours\":\n          padlen = self.width*2 + self.width/2\n          break\n        case \"twos\":\n          padlen = self.width*3 + 2\n          break\n        default:\n          padlen = self.width * 2 + 1\n      }\n\n      str += rpad(hex_formatted, padlen)\n      if (self.annotate === \"ascii\") {\n        str+=\" \"\n        var ascii = raw.replace(/[\\000-\\040\\177-\\377]/g, \".\")\n        str += escape(ascii)\n      }\n      if (self.html) {\n        str += \"</div>\\n\"\n      } else {\n      str += \"\\n\"\n      } \n    }\n    if (self.html) { str += \"</div>\\n\"}\n    return str\n  }\n\n  var lines = function() {\n    var hex_raw = []\n    for (var i = 0; i<self.buffer.length ; i+=self.width) {\n      var begin = i,\n          end   = i+self.width >= self.buffer.length ? self.buffer.length : i+self.width,\n          slice = self.buffer.slice(begin, end),\n          hex   = self.caps === \"upper\" ? hexu(slice) : hexl(slice),\n          raw   = slice.toString('ascii')\n\n      hex_raw.push([hex,raw])\n    }\n    return hex_raw\n\n  }\n\n  var hexl = function (buffer) {\n    var str = \"\"\n    for (var i=0; i!=buffer.length; ++i) {\n      if (buffer.constructor == String) {\n        str += pad(buffer.charCodeAt(i), 2)\n      } else {\n        str += pad(buffer[i], 2)\n      }\n    }\n    return str\n  }\n  var hexu = function (buffer) {\n    return hexl(buffer).toUpperCase()\n  }\n\n  var pad = function(b, len) {\n    var s = b.toString(16)\n    \n    while (s.length < len) {\n      s = \"0\" + s\n    }\n    return s\n  } \n  var rpad = function(s, len) {\n    for (var n = len - s.length; n!=0; --n) {\n      if (self.html) {\n        s += \"&nbsp;\"\n      } else {\n        s += \" \"\n      }\n    \n    }\n    return s\n  }\n\n  var escape = function (str) {\n    str = str.split(\"&\").join(\"&amp;\")\n    str = str.split(\"<\").join(\"&lt;\")\n    str = str.split(\">\").join(\"&gt;\")\n    return str\n  }\n  \n\n}\n\n/**\n * the following code is hacked up from the jquery base64 codec plugin\n *  removed 80% of its guts though...\n * jQuery Plugin - base64 codec\n * @lisence MIT License https://github.com/yatt/jquery.base64/blob/master/license.txt\n * @author yatt/brainfs http://d.hatena.ne.jp/yatt http://twitter.com/brainfs\n * @version 0.0.1\n * @info\n */\n\nvar base64 = new function()\n// \n{\n    var utfLibName  = \"utf\";\n    var b64char     = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n    var b64encTable = b64char.split(\"\");\n    var b64decTable = [];\n    for (var i=0; i<b64char.length; i++) b64decTable[b64char.charAt(i)] = i;\n    \n    this.decode = function(_b64, _strMode)\n    {\n        var tmp = decoder( _b64 );\n        var i, str = \"\";\n        for (i in tmp) str += String.fromCharCode(tmp[i]);\n        return str;\n    }\n    \n    var decoder = function(_b64)\n    {\n        _b64    = _b64.replace(/[^A-Za-z0-9\\+\\/]/g, \"\");\n        var md  = _b64.length % 4;\n        var j, i, tmp;\n        var dat = [];\n        \n        // replace 時 = も削っている。その = の代わりに 0x0 を補間\n        if (md) for (i=0; i<4-md; i++) _b64 += \"A\";\n        \n        for (j=i=0; i<_b64.length; i+=4, j+=3)\n        {\n            tmp = (b64decTable[_b64.charAt( i )] <<18)\n                | (b64decTable[_b64.charAt(i+1)] <<12)\n                | (b64decTable[_b64.charAt(i+2)] << 6)\n                |  b64decTable[_b64.charAt(i+3)];\n            dat[ j ]    = tmp >>> 16;\n            dat[j+1]    = (tmp >>> 8) & 0xff;\n            dat[j+2]    = tmp & 0xff;\n        }\n        // 補完された 0x0 分削る\n        if (md) dat.length -= [0,0,2,1][md];\n\n        return dat;\n    }\n\n}\n"
  },
  {
    "path": "oldweb/static/js/jquery.js",
    "content": "/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */\n!function(a,b){\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error(\"jQuery requires a window with a document\");return b(a)}:b(a)}(\"undefined\"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m=\"2.1.3\",n=function(a,b){return new n.fn.init(a,b)},o=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,p=/^-ms-/,q=/-([\\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:\"\",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for(\"boolean\"==typeof g&&(j=g,g=arguments[h]||{},h++),\"object\"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:\"jQuery\"+(m+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return\"function\"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return\"object\"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,\"isPrototypeOf\")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+\"\":\"object\"==typeof a||\"function\"==typeof a?h[i.call(a)]||\"object\":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf(\"use strict\")?(b=l.createElement(\"script\"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,\"ms-\").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?\"\":(a+\"\").replace(o,\"\")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,\"string\"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return\"string\"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),function(a,b){h[\"[object \"+b+\"]\"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return\"function\"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:\"array\"===c||0===b||\"number\"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u=\"sizzle\"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",L=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",M=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",N=M.replace(\"w\",\"w#\"),O=\"\\\\[\"+L+\"*(\"+M+\")(?:\"+L+\"*([*^$|!~]?=)\"+L+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+N+\"))|)\"+L+\"*\\\\]\",P=\":(\"+M+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+O+\")*)|.*)\\\\)|)\",Q=new RegExp(L+\"+\",\"g\"),R=new RegExp(\"^\"+L+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+L+\"+$\",\"g\"),S=new RegExp(\"^\"+L+\"*,\"+L+\"*\"),T=new RegExp(\"^\"+L+\"*([>+~]|\"+L+\")\"+L+\"*\"),U=new RegExp(\"=\"+L+\"*([^\\\\]'\\\"]*?)\"+L+\"*\\\\]\",\"g\"),V=new RegExp(P),W=new RegExp(\"^\"+N+\"$\"),X={ID:new RegExp(\"^#(\"+M+\")\"),CLASS:new RegExp(\"^\\\\.(\"+M+\")\"),TAG:new RegExp(\"^(\"+M.replace(\"w\",\"w*\")+\")\"),ATTR:new RegExp(\"^\"+O),PSEUDO:new RegExp(\"^\"+P),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+L+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+L+\"*(?:([+-]|)\"+L+\"*(\\\\d+)|))\"+L+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+K+\")$\",\"i\"),needsContext:new RegExp(\"^\"+L+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+L+\"*((?:-\\\\d)?\\\\d*)\"+L+\"*\\\\)|)(?=[^-]|$)\",\"i\")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\\d$/i,$=/^[^{]+\\{\\s*\\[native \\w/,_=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ab=/[+~]/,bb=/'|\\\\/g,cb=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+L+\"?|(\"+L+\")|.)\",\"ig\"),db=function(a,b,c){var d=\"0x\"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,\"string\"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&\"object\"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute(\"id\"))?s=r.replace(bb,\"\\\\$&\"):b.setAttribute(\"id\",s),s=\"[id='\"+s+\"'] \",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(\",\")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute(\"id\")}}}return i(a.replace(R,\"$1\"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+\" \")>d.cacheLength&&delete b[a.shift()],b[c+\" \"]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement(\"div\");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split(\"|\"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return\"input\"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return(\"input\"===c||\"button\"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&\"undefined\"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?\"HTML\"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener(\"unload\",eb,!1):e.attachEvent&&e.attachEvent(\"onunload\",eb)),p=!f(g),c.attributes=jb(function(a){return a.className=\"i\",!a.getAttribute(\"className\")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment(\"\")),!a.getElementsByTagName(\"*\").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(\"undefined\"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute(\"id\")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=\"undefined\"!=typeof a.getAttributeNode&&a.getAttributeNode(\"id\");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return\"undefined\"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if(\"*\"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML=\"<a id='\"+u+\"'></a><select id='\"+u+\"-\\f]' msallowcapture=''><option selected=''></option></select>\",a.querySelectorAll(\"[msallowcapture^='']\").length&&q.push(\"[*^$]=\"+L+\"*(?:''|\\\"\\\")\"),a.querySelectorAll(\"[selected]\").length||q.push(\"\\\\[\"+L+\"*(?:value|\"+K+\")\"),a.querySelectorAll(\"[id~=\"+u+\"-]\").length||q.push(\"~=\"),a.querySelectorAll(\":checked\").length||q.push(\":checked\"),a.querySelectorAll(\"a#\"+u+\"+*\").length||q.push(\".#.+[+~]\")}),jb(function(a){var b=g.createElement(\"input\");b.setAttribute(\"type\",\"hidden\"),a.appendChild(b).setAttribute(\"name\",\"D\"),a.querySelectorAll(\"[name=d]\").length&&q.push(\"name\"+L+\"*[*^$|!~]?=\"),a.querySelectorAll(\":enabled\").length||q.push(\":enabled\",\":disabled\"),a.querySelectorAll(\"*,:x\"),q.push(\",.*:\")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,\"div\"),s.call(a,\"[s!='']:x\"),r.push(\"!=\",P)}),q=q.length&&new RegExp(q.join(\"|\")),r=r.length&&new RegExp(r.join(\"|\")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,\"='$1']\"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error(\"Syntax error, unrecognized expression: \"+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c=\"\",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if(\"string\"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||\"\").replace(cb,db),\"~=\"===a[2]&&(a[3]=\" \"+a[3]+\" \"),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),\"nth\"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*(\"even\"===a[3]||\"odd\"===a[3])),a[5]=+(a[7]+a[8]||\"odd\"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||\"\":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(\")\",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return\"*\"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+\" \"];return b||(b=new RegExp(\"(^|\"+L+\")\"+a+\"(\"+L+\"|$)\"))&&y(a,function(a){return b.test(\"string\"==typeof a.className&&a.className||\"undefined\"!=typeof a.getAttribute&&a.getAttribute(\"class\")||\"\")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?\"!=\"===b:b?(e+=\"\",\"=\"===b?e===c:\"!=\"===b?e!==c:\"^=\"===b?c&&0===e.indexOf(c):\"*=\"===b?c&&e.indexOf(c)>-1:\"$=\"===b?c&&e.slice(-c.length)===c:\"~=\"===b?(\" \"+e.replace(Q,\" \")+\" \").indexOf(c)>-1:\"|=\"===b?e===c||e.slice(0,c.length+1)===c+\"-\":!1):!0}},CHILD:function(a,b,c,d,e){var f=\"nth\"!==a.slice(0,3),g=\"last\"!==a.slice(-4),h=\"of-type\"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?\"nextSibling\":\"previousSibling\",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p=\"only\"===a&&!o&&\"nextSibling\"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error(\"unsupported pseudo: \"+a);return e[u]?e(b):e.length>1?(c=[a,a,\"\",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,\"$1\"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||\"\")||gb.error(\"unsupported lang: \"+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute(\"xml:lang\")||b.getAttribute(\"lang\"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+\"-\");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&!!a.checked||\"option\"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&\"button\"===a.type||\"button\"===b},text:function(a){var b;return\"input\"===a.nodeName.toLowerCase()&&\"text\"===a.type&&(null==(b=a.getAttribute(\"type\"))||\"text\"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+\" \"];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R,\" \")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d=\"\";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&\"parentNode\"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||\"*\",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[\" \"],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:\" \"===a[i-2].type?\"*\":\"\"})).replace(R,\"$1\"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q=\"0\",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG(\"*\",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+\" \"];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n=\"function\"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&\"ID\"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split(\"\").sort(B).join(\"\")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement(\"div\"))}),jb(function(a){return a.innerHTML=\"<a href='#'></a>\",\"#\"===a.firstChild.getAttribute(\"href\")})||kb(\"type|href|height|width\",function(a,b,c){return c?void 0:a.getAttribute(b,\"type\"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML=\"<input/>\",a.firstChild.setAttribute(\"value\",\"\"),\"\"===a.firstChild.getAttribute(\"value\")})||kb(\"value\",function(a,b,c){return c||\"input\"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute(\"disabled\")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[\":\"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,w=/^.[^:#\\[\\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if(\"string\"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=\":not(\"+a+\")\"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if(\"string\"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+\" \"+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,\"string\"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if(\"string\"==typeof a){if(c=\"<\"===a[0]&&\">\"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?\"undefined\"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||\"string\"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?\"string\"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,\"parentNode\")},parentsUntil:function(a,b,c){return n.dir(a,\"parentNode\",c)},next:function(a){return D(a,\"nextSibling\")},prev:function(a){return D(a,\"previousSibling\")},nextAll:function(a){return n.dir(a,\"nextSibling\")},prevAll:function(a){return n.dir(a,\"previousSibling\")},nextUntil:function(a,b,c){return n.dir(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return n.dir(a,\"previousSibling\",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return\"Until\"!==a.slice(-5)&&(d=c),d&&\"string\"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a=\"string\"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);\"function\"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&\"string\"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[[\"resolve\",\"done\",n.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",n.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",n.Callbacks(\"memory\")]],c=\"pending\",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+\"With\"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+\"With\"](this===e?d:this,arguments),this},e[f[0]+\"With\"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler(\"ready\"),n(l).off(\"ready\"))))}});function I(){l.removeEventListener(\"DOMContentLoaded\",I,!1),a.removeEventListener(\"load\",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),\"complete\"===l.readyState?setTimeout(n.ready):(l.addEventListener(\"DOMContentLoaded\",I,!1),a.addEventListener(\"load\",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if(\"object\"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if(\"string\"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&\"string\"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d=\"data-\"+b.replace(O,\"-$1\").toLowerCase(),c=a.getAttribute(d),\"string\"==typeof c){try{c=\"true\"===c?!0:\"false\"===c?!1:\"null\"===c?null:+c+\"\"===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)\n},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,\"hasDataAttrs\"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf(\"data-\")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,\"hasDataAttrs\",!0)}return e}return\"object\"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf(\"-\")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||\"fx\")+\"queue\",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||\"fx\";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};\"inprogress\"===e&&(e=c.shift(),d--),e&&(\"fx\"===b&&c.unshift(\"inprogress\"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+\"queueHooks\";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks(\"once memory\").add(function(){L.remove(a,[b+\"queue\",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return\"string\"!=typeof a&&(b=a,a=\"fx\",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),\"fx\"===a&&\"inprogress\"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||\"fx\",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};\"string\"!=typeof a&&(b=a,a=void 0),a=a||\"fx\";while(g--)c=L.get(f[g],a+\"queueHooks\"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,R=[\"Top\",\"Right\",\"Bottom\",\"Left\"],S=function(a,b){return a=b||a,\"none\"===n.css(a,\"display\")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement(\"div\")),c=l.createElement(\"input\");c.setAttribute(\"type\",\"radio\"),c.setAttribute(\"checked\",\"checked\"),c.setAttribute(\"name\",\"t\"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML=\"<textarea>x</textarea>\",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U=\"undefined\";k.focusinBubbles=\"onfocusin\"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||\"\").match(E)||[\"\"],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||\"\").split(\".\").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(\".\")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||\"\").match(E)||[\"\"],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||\"\").split(\".\").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp(\"(^|\\\\.)\"+p.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&(\"**\"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,\"events\"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,\"type\")?b.type:b,r=j.call(b,\"namespace\")?b.namespace.split(\".\"):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(\".\")>=0&&(r=q.split(\".\"),q=r.shift(),r.sort()),k=q.indexOf(\":\")<0&&\"on\"+q,b=b[n.expando]?b:new n.Event(q,\"object\"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join(\".\"),b.namespace_re=b.namespace?new RegExp(\"(^|\\\\.)\"+r.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,\"events\")||{})[b.type]&&L.get(g,\"handle\"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,\"events\")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||\"click\"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||\"click\"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+\" \",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:\"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:\"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:\"focusin\"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:\"focusout\"},click:{trigger:function(){return\"checkbox\"===this.type&&this.click&&n.nodeName(this,\"input\")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,\"a\")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if(\"object\"==typeof a){\"string\"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&(\"string\"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+\".\"+d.namespace:d.origType,d.selector,d.handler),this;if(\"object\"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||\"function\"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,bb=/<([\\w:]+)/,cb=/<|&#?\\w+;/,db=/<(?:script|style|link)/i,eb=/checked\\s*(?:[^=]|=\\s*.checked.)/i,fb=/^$|\\/(?:java|ecma)script/i,gb=/^true\\/(.*)/,hb=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,ib={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,\"table\")&&n.nodeName(11!==b.nodeType?b:b.firstChild,\"tr\")?a.getElementsByTagName(\"tbody\")[0]||a.appendChild(a.ownerDocument.createElement(\"tbody\")):a}function kb(a){return a.type=(null!==a.getAttribute(\"type\"))+\"/\"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute(\"type\"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],\"globalEval\",!b||L.get(b[c],\"globalEval\"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||\"*\"):a.querySelectorAll?a.querySelectorAll(b||\"*\"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();\"input\"===c&&T.test(a.type)?b.checked=a.checked:(\"input\"===c||\"textarea\"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,\"script\"),g.length>0&&mb(g,!i&&ob(a,\"script\")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if(\"object\"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement(\"div\")),g=(bb.exec(e)||[\"\",\"\"])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,\"<$1></$2>\")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=\"\"}else l.push(b.createTextNode(e));k.textContent=\"\",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),\"script\"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||\"\")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,\"script\")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent=\"\");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if(\"string\"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||[\"\",\"\"])[1].toLowerCase()]){a=a.replace(ab,\"<$1></$2>\");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&\"string\"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,\"script\"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,\"script\"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||\"\")&&!L.access(h,\"globalEval\")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,\"\")))}return this}}),n.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],\"display\");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),\"none\"!==c&&c||(qb=(qb||n(\"<iframe frameborder='0' width='0' height='0'/>\")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp(\"^(\"+Q+\")(?!px)[a-z%]+$\",\"i\"),wb=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(\"\"!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+\"\":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement(\"div\"),f=l.createElement(\"div\");if(f.style){f.style.backgroundClip=\"content-box\",f.cloneNode(!0).style.backgroundClip=\"\",k.clearCloneStyle=\"content-box\"===f.style.backgroundClip,e.style.cssText=\"border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute\",e.appendChild(f);function g(){f.style.cssText=\"-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute\",f.innerHTML=\"\",d.appendChild(e);var g=a.getComputedStyle(f,null);b=\"1%\"!==g.top,c=\"4px\"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement(\"div\"));return c.style.cssText=f.style.cssText=\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0\",c.style.marginRight=c.style.width=\"0\",f.style.width=\"1px\",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp(\"^(\"+Q+\")(.*)$\",\"i\"),Bb=new RegExp(\"^([+-])=(\"+Q+\")\",\"i\"),Cb={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Db={letterSpacing:\"0\",fontWeight:\"400\"},Eb=[\"Webkit\",\"O\",\"Moz\",\"ms\"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||\"px\"):b}function Hb(a,b,c,d,e){for(var f=c===(d?\"border\":\"content\")?4:\"width\"===b?1:0,g=0;4>f;f+=2)\"margin\"===c&&(g+=n.css(a,c+R[f],!0,e)),d?(\"content\"===c&&(g-=n.css(a,\"padding\"+R[f],!0,e)),\"margin\"!==c&&(g-=n.css(a,\"border\"+R[f]+\"Width\",!0,e))):(g+=n.css(a,\"padding\"+R[f],!0,e),\"padding\"!==c&&(g+=n.css(a,\"border\"+R[f]+\"Width\",!0,e)));return g}function Ib(a,b,c){var d=!0,e=\"width\"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g=\"border-box\"===n.css(a,\"boxSizing\",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?\"border\":\"content\"),d,f)+\"px\"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,\"olddisplay\"),c=d.style.display,b?(f[g]||\"none\"!==c||(d.style.display=\"\"),\"\"===d.style.display&&S(d)&&(f[g]=L.access(d,\"olddisplay\",tb(d.nodeName)))):(e=S(d),\"none\"===c&&e||L.set(d,\"olddisplay\",e?c:n.css(d,\"display\"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&\"none\"!==d.style.display&&\"\"!==d.style.display||(d.style.display=b?f[g]||\"\":\"none\"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,\"opacity\");return\"\"===c?\"1\":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":\"cssFloat\"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&\"get\"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,\"string\"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f=\"number\"),null!=c&&c===c&&(\"number\"!==f||n.cssNumber[h]||(c+=\"px\"),k.clearCloneStyle||\"\"!==c||0!==b.indexOf(\"background\")||(i[b]=\"inherit\"),g&&\"set\"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&\"get\"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),\"normal\"===e&&b in Db&&(e=Db[b]),\"\"===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each([\"height\",\"width\"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,\"display\"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,\"border-box\"===n.css(a,\"boxSizing\",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:\"inline-block\"},xb,[a,\"marginRight\"]):void 0}),n.each({margin:\"\",padding:\"\",border:\"Width\"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f=\"string\"==typeof c?c.split(\" \"):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return\"boolean\"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||\"swing\",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?\"\":\"px\")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,\"\"),b&&\"auto\"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp(\"^(?:([+-])=|)(\"+Q+\")([a-z%]*)$\",\"i\"),Pb=/queueHooks$/,Qb=[Vb],Rb={\"*\":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?\"\":\"px\"),g=(n.cssNumber[a]||\"px\"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||\".5\",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e[\"margin\"+c]=e[\"padding\"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb[\"*\"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,\"fxshow\");c.queue||(h=n._queueHooks(a,\"fx\"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,\"fx\").length||h.empty.fire()})})),1===a.nodeType&&(\"height\"in b||\"width\"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,\"display\"),k=\"none\"===j?L.get(a,\"olddisplay\")||tb(a.nodeName):j,\"inline\"===k&&\"none\"===n.css(a,\"float\")&&(o.display=\"inline-block\")),c.overflow&&(o.overflow=\"hidden\",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||\"toggle\"===e,e===(p?\"hide\":\"show\")){if(\"show\"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))\"inline\"===(\"none\"===j?tb(a.nodeName):j)&&(o.display=j);else{q?\"hidden\"in q&&(p=q.hidden):q=L.access(a,\"fxshow\",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,\"fxshow\");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start=\"width\"===d||\"height\"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&\"expand\"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=[\"*\"]):a=a.split(\" \");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&\"object\"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:\"number\"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue=\"fx\"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css(\"opacity\",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,\"finish\"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return\"string\"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||\"fx\",[]),this.each(function(){var b=!0,e=null!=a&&a+\"queueHooks\",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||\"fx\"),this.each(function(){var b,c=L.get(this),d=c[a+\"queue\"],e=c[a+\"queueHooks\"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each([\"toggle\",\"show\",\"hide\"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||\"boolean\"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb(\"show\"),slideUp:Tb(\"hide\"),slideToggle:Tb(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||\"fx\",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement(\"input\"),b=l.createElement(\"select\"),c=b.appendChild(l.createElement(\"option\"));a.type=\"checkbox\",k.checkOn=\"\"!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement(\"input\"),a.value=\"t\",a.type=\"radio\",k.radioValue=\"t\"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&\"get\"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&\"set\"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+\"\"),c):void n.removeAttr(a,b))\n},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&\"radio\"===b&&n.nodeName(a,\"input\")){var c=a.value;return a.setAttribute(\"type\",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{\"for\":\"htmlFor\",\"class\":\"className\"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&\"set\"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&\"get\"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute(\"tabindex\")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\\t\\r\\n\\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=\"string\"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||\"\").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(\" \"+c.className+\" \").replace(ac,\" \"):\" \")){f=0;while(e=b[f++])d.indexOf(\" \"+e+\" \")<0&&(d+=e+\" \");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||\"string\"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||\"\").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(\" \"+c.className+\" \").replace(ac,\" \"):\"\")){f=0;while(e=b[f++])while(d.indexOf(\" \"+e+\" \")>=0)d=d.replace(\" \"+e+\" \",\" \");g=a?n.trim(d):\"\",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return\"boolean\"==typeof b&&\"string\"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if(\"string\"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||\"boolean\"===c)&&(this.className&&L.set(this,\"__className__\",this.className),this.className=this.className||a===!1?\"\":L.get(this,\"__className__\")||\"\")})},hasClass:function(a){for(var b=\" \"+a+\" \",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(\" \"+this[c].className+\" \").replace(ac,\" \").indexOf(b)>=0)return!0;return!1}});var bc=/\\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e=\"\":\"number\"==typeof e?e+=\"\":n.isArray(e)&&(e=n.map(e,function(a){return null==a?\"\":a+\"\"})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&\"set\"in b&&void 0!==b.set(this,e,\"value\")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&\"get\"in b&&void 0!==(c=b.get(e,\"value\"))?c:(c=e.value,\"string\"==typeof c?c.replace(bc,\"\"):null==c?\"\":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,\"value\");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f=\"select-one\"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute(\"disabled\"))||c.parentNode.disabled&&n.nodeName(c.parentNode,\"optgroup\"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each([\"radio\",\"checkbox\"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute(\"value\")?\"on\":a.value})}),n.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,\"**\"):this.off(b,a||\"**\",c)}});var cc=n.now(),dc=/\\?/;n.parseJSON=function(a){return JSON.parse(a+\"\")},n.parseXML=function(a){var b,c;if(!a||\"string\"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,\"text/xml\")}catch(d){b=void 0}return(!b||b.getElementsByTagName(\"parsererror\").length)&&n.error(\"Invalid XML: \"+a),b};var ec=/#.*$/,fc=/([?&])_=[^&]*/,gc=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,hc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ic=/^(?:GET|HEAD)$/,jc=/^\\/\\//,kc=/^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,lc={},mc={},nc=\"*/\".concat(\"*\"),oc=a.location.href,pc=kc.exec(oc.toLowerCase())||[];function qc(a){return function(b,c){\"string\"!=typeof b&&(c=b,b=\"*\");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])\"+\"===d[0]?(d=d.slice(1)||\"*\",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function rc(a,b,c,d){var e={},f=a===mc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return\"string\"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e[\"*\"]&&g(\"*\")}function sc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while(\"*\"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader(\"Content-Type\"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+\" \"+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function uc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if(\"*\"===f)f=i;else if(\"*\"!==i&&i!==f){if(g=j[i+\" \"+f]||j[\"* \"+f],!g)for(e in j)if(h=e.split(\" \"),h[1]===f&&(g=j[i+\" \"+h[0]]||j[\"* \"+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a[\"throws\"])b=g(b);else try{b=g(b)}catch(l){return{state:\"parsererror\",error:g?l:\"No conversion from \"+i+\" to \"+f}}}return{state:\"success\",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:oc,type:\"GET\",isLocal:hc.test(pc[1]),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":nc,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":n.parseJSON,\"text xml\":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sc(sc(a,n.ajaxSettings),b):sc(n.ajaxSettings,a)},ajaxPrefilter:qc(lc),ajaxTransport:qc(mc),ajax:function(a,b){\"object\"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks(\"once memory\"),q=k.statusCode||{},r={},s={},t=0,u=\"canceled\",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gc.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||oc)+\"\").replace(ec,\"\").replace(jc,pc[1]+\"//\"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||\"*\").toLowerCase().match(E)||[\"\"],null==k.crossDomain&&(h=kc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pc[1]&&h[2]===pc[2]&&(h[3]||(\"http:\"===h[1]?\"80\":\"443\"))===(pc[3]||(\"http:\"===pc[1]?\"80\":\"443\")))),k.data&&k.processData&&\"string\"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rc(lc,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger(\"ajaxStart\"),k.type=k.type.toUpperCase(),k.hasContent=!ic.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?\"&\":\"?\")+k.data,delete k.data),k.cache===!1&&(k.url=fc.test(d)?d.replace(fc,\"$1_=\"+cc++):d+(dc.test(d)?\"&\":\"?\")+\"_=\"+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader(\"If-Modified-Since\",n.lastModified[d]),n.etag[d]&&v.setRequestHeader(\"If-None-Match\",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader(\"Content-Type\",k.contentType),v.setRequestHeader(\"Accept\",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+(\"*\"!==k.dataTypes[0]?\", \"+nc+\"; q=0.01\":\"\"):k.accepts[\"*\"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u=\"abort\";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rc(mc,k,b,v)){v.readyState=1,i&&m.trigger(\"ajaxSend\",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort(\"timeout\")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,\"No Transport\");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||\"\",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tc(k,v,f)),u=uc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader(\"Last-Modified\"),w&&(n.lastModified[d]=w),w=v.getResponseHeader(\"etag\"),w&&(n.etag[d]=w)),204===a||\"HEAD\"===k.type?x=\"nocontent\":304===a?x=\"notmodified\":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x=\"error\",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+\"\",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?\"ajaxSuccess\":\"ajaxError\",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger(\"ajaxComplete\",[v,k]),--n.active||n.event.trigger(\"ajaxStop\")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,\"json\")},getScript:function(a,b){return n.get(a,void 0,b,\"script\")}}),n.each([\"get\",\"post\"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:\"GET\",dataType:\"script\",async:!1,global:!1,\"throws\":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,\"body\")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vc=/%20/g,wc=/\\[\\]$/,xc=/\\r?\\n/g,yc=/^(?:submit|button|image|reset|file)$/i,zc=/^(?:input|select|textarea|keygen)/i;function Ac(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wc.test(a)?d(a,e):Ac(a+\"[\"+(\"object\"==typeof e?b:\"\")+\"]\",e,c,d)});else if(c||\"object\"!==n.type(b))d(a,b);else for(e in b)Ac(a+\"[\"+e+\"]\",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?\"\":b,d[d.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ac(c,a[c],b,e);return d.join(\"&\").replace(vc,\"+\")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,\"elements\");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(\":disabled\")&&zc.test(this.nodeName)&&!yc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xc,\"\\r\\n\")}}):{name:b.name,value:c.replace(xc,\"\\r\\n\")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bc=0,Cc={},Dc={0:200,1223:204},Ec=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent(\"onunload\",function(){for(var a in Cc)Cc[a]()}),k.cors=!!Ec&&\"withCredentials\"in Ec,k.ajax=Ec=!!Ec,n.ajaxTransport(function(a){var b;return k.cors||Ec&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c[\"X-Requested-With\"]||(c[\"X-Requested-With\"]=\"XMLHttpRequest\");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cc[g],b=f.onload=f.onerror=null,\"abort\"===a?f.abort():\"error\"===a?d(f.status,f.statusText):d(Dc[f.status]||f.status,f.statusText,\"string\"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b(\"error\"),b=Cc[g]=b(\"abort\");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/(?:java|ecma)script/},converters:{\"text script\":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter(\"script\",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type=\"GET\")}),n.ajaxTransport(\"script\",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n(\"<script>\").prop({async:!0,charset:a.scriptCharset,src:a.url}).on(\"load error\",c=function(a){b.remove(),c=null,a&&e(\"error\"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fc=[],Gc=/(=)\\?(?=&|$)|\\?\\?/;n.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var a=Fc.pop()||n.expando+\"_\"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter(\"json jsonp\",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gc.test(b.url)?\"url\":\"string\"==typeof b.data&&!(b.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Gc.test(b.data)&&\"data\");return h||\"jsonp\"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gc,\"$1\"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?\"&\":\"?\")+b.jsonp+\"=\"+e),b.converters[\"script json\"]=function(){return g||n.error(e+\" was not called\"),g[0]},b.dataTypes[0]=\"json\",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Fc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),\"script\"):void 0}),n.parseHTML=function(a,b,c){if(!a||\"string\"!=typeof a)return null;\"boolean\"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hc=n.fn.load;n.fn.load=function(a,b,c){if(\"string\"!=typeof a&&Hc)return Hc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(\" \");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&\"object\"==typeof b&&(e=\"POST\"),g.length>0&&n.ajax({url:a,type:e,dataType:\"html\",data:b}).done(function(a){f=arguments,g.html(d?n(\"<div>\").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ic=a.document.documentElement;function Jc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,\"position\"),l=n(a),m={};\"static\"===k&&(a.style.position=\"relative\"),h=l.offset(),f=n.css(a,\"top\"),i=n.css(a,\"left\"),j=(\"absolute\"===k||\"fixed\"===k)&&(f+i).indexOf(\"auto\")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),\"using\"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return\"fixed\"===n.css(c,\"position\")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],\"html\")||(d=a.offset()),d.top+=n.css(a[0],\"borderTopWidth\",!0),d.left+=n.css(a[0],\"borderLeftWidth\",!0)),{top:b.top-d.top-n.css(c,\"marginTop\",!0),left:b.left-d.left-n.css(c,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ic;while(a&&!n.nodeName(a,\"html\")&&\"static\"===n.css(a,\"position\"))a=a.offsetParent;return a||Ic})}}),n.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(b,c){var d=\"pageYOffset\"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each([\"top\",\"left\"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+\"px\":c):void 0})}),n.each({Height:\"height\",Width:\"width\"},function(a,b){n.each({padding:\"inner\"+a,content:b,\"\":\"outer\"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||\"boolean\"!=typeof d),g=c||(d===!0||e===!0?\"margin\":\"border\");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement[\"client\"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body[\"scroll\"+a],e[\"scroll\"+a],b.body[\"offset\"+a],e[\"offset\"+a],e[\"client\"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return n});var Kc=a.jQuery,Lc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lc),b&&a.jQuery===n&&(a.jQuery=Kc),n},typeof b===U&&(a.jQuery=a.$=n),n});\n"
  },
  {
    "path": "oldweb/static/js/lightbox.js",
    "content": "/**\n * Lightbox v2.7.1\n * by Lokesh Dhakar - http://lokeshdhakar.com/projects/lightbox2/\n *\n * @license http://creativecommons.org/licenses/by/2.5/\n * - Free for use in both personal and commercial projects\n * - Attribution requires leaving author name, author link, and the license info intact\n */\n\n(function() {\n  // Use local alias\n  var $ = jQuery;\n\n  var LightboxOptions = (function() {\n    function LightboxOptions() {\n      this.fadeDuration                = 500;\n      this.fitImagesInViewport         = true;\n      this.resizeDuration              = 700;\n      this.positionFromTop             = 50;\n      this.showImageNumberLabel        = true;\n      this.alwaysShowNavOnTouchDevices = false;\n      this.wrapAround                  = false;\n    }\n    \n    // Change to localize to non-english language\n    LightboxOptions.prototype.albumLabel = function(curImageNum, albumSize) {\n      return \"Image \" + curImageNum + \" of \" + albumSize;\n    };\n\n    return LightboxOptions;\n  })();\n\n\n  var Lightbox = (function() {\n    function Lightbox(options) {\n      this.options           = options;\n      this.album             = [];\n      this.currentImageIndex = void 0;\n      this.init();\n    }\n\n    Lightbox.prototype.init = function() {\n      this.enable();\n      this.build();\n    };\n\n    // Loop through anchors and areamaps looking for either data-lightbox attributes or rel attributes\n    // that contain 'lightbox'. When these are clicked, start lightbox.\n    Lightbox.prototype.enable = function() {\n      var self = this;\n      $('body').on('click', 'a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]', function(event) {\n        self.start($(event.currentTarget));\n        return false;\n      });\n    };\n\n    // Build html for the lightbox and the overlay.\n    // Attach event handlers to the new DOM elements. click click click\n    Lightbox.prototype.build = function() {\n      var self = this;\n      $(\"<div id='lightboxOverlay' class='lightboxOverlay'></div><div id='lightbox' class='lightbox'><div class='lb-outerContainer'><div class='lb-container'><img class='lb-image' src='' /><div class='lb-nav'><a class='lb-prev' href='' ></a><a class='lb-next' href='' ></a></div><div class='lb-loader'><a class='lb-cancel'></a></div></div></div><div class='lb-dataContainer'><div class='lb-data'><div class='lb-details'><span class='lb-caption'></span><span class='lb-number'></span></div><div class='lb-closeContainer'><a class='lb-close'></a></div></div></div></div>\").appendTo($('body'));\n      \n      // Cache jQuery objects\n      this.$lightbox       = $('#lightbox');\n      this.$overlay        = $('#lightboxOverlay');\n      this.$outerContainer = this.$lightbox.find('.lb-outerContainer');\n      this.$container      = this.$lightbox.find('.lb-container');\n\n      // Store css values for future lookup\n      this.containerTopPadding = parseInt(this.$container.css('padding-top'), 10);\n      this.containerRightPadding = parseInt(this.$container.css('padding-right'), 10);\n      this.containerBottomPadding = parseInt(this.$container.css('padding-bottom'), 10);\n      this.containerLeftPadding = parseInt(this.$container.css('padding-left'), 10);\n      \n      // Attach event handlers to the newly minted DOM elements\n      this.$overlay.hide().on('click', function() {\n        self.end();\n        return false;\n      });\n\n      this.$lightbox.hide().on('click', function(event) {\n        if ($(event.target).attr('id') === 'lightbox') {\n          self.end();\n        }\n        return false;\n      });\n\n      this.$outerContainer.on('click', function(event) {\n        if ($(event.target).attr('id') === 'lightbox') {\n          self.end();\n        }\n        return false;\n      });\n\n      this.$lightbox.find('.lb-prev').on('click', function() {\n        if (self.currentImageIndex === 0) {\n          self.changeImage(self.album.length - 1);\n        } else {\n          self.changeImage(self.currentImageIndex - 1);\n        }\n        return false;\n      });\n\n      this.$lightbox.find('.lb-next').on('click', function() {\n        if (self.currentImageIndex === self.album.length - 1) {\n          self.changeImage(0);\n        } else {\n          self.changeImage(self.currentImageIndex + 1);\n        }\n        return false;\n      });\n\n      this.$lightbox.find('.lb-loader, .lb-close').on('click', function() {\n        self.end();\n        return false;\n      });\n    };\n\n    // Show overlay and lightbox. If the image is part of a set, add siblings to album array.\n    Lightbox.prototype.start = function($link) {\n      var self    = this;\n      var $window = $(window);\n\n      $window.on('resize', $.proxy(this.sizeOverlay, this));\n\n      $('select, object, embed').css({\n        visibility: \"hidden\"\n      });\n\n      this.sizeOverlay();\n\n      this.album = [];\n      var imageNumber = 0;\n\n      function addToAlbum($link) {\n        self.album.push({\n          link: $link.attr('href'),\n          title: $link.attr('data-title') || $link.attr('title')\n        });\n      }\n\n      // Support both data-lightbox attribute and rel attribute implementations\n      var dataLightboxValue = $link.attr('data-lightbox');\n      var $links;\n\n      if (dataLightboxValue) {\n        $links = $($link.prop(\"tagName\") + '[data-lightbox=\"' + dataLightboxValue + '\"]');\n        for (var i = 0; i < $links.length; i = ++i) {\n          addToAlbum($($links[i]));\n          if ($links[i] === $link[0]) {\n            imageNumber = i;\n          }\n        }\n      } else {\n        if ($link.attr('rel') === 'lightbox') {\n          // If image is not part of a set\n          addToAlbum($link);\n        } else {\n          // If image is part of a set\n          $links = $($link.prop(\"tagName\") + '[rel=\"' + $link.attr('rel') + '\"]');\n          for (var j = 0; j < $links.length; j = ++j) {\n            addToAlbum($($links[j]));\n            if ($links[j] === $link[0]) {\n              imageNumber = j;\n            }\n          }\n        }\n      }\n      \n      // Position Lightbox\n      var top  = $window.scrollTop() + this.options.positionFromTop;\n      var left = $window.scrollLeft();\n      this.$lightbox.css({\n        top: top + 'px',\n        left: left + 'px'\n      }).fadeIn(this.options.fadeDuration);\n\n      this.changeImage(imageNumber);\n    };\n\n    // Hide most UI elements in preparation for the animated resizing of the lightbox.\n    Lightbox.prototype.changeImage = function(imageNumber) {\n      var self = this;\n\n      this.disableKeyboardNav();\n      var $image = this.$lightbox.find('.lb-image');\n\n      this.$overlay.fadeIn(this.options.fadeDuration);\n\n      $('.lb-loader').fadeIn('slow');\n      this.$lightbox.find('.lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption').hide();\n\n      this.$outerContainer.addClass('animating');\n\n      // When image to show is preloaded, we send the width and height to sizeContainer()\n      var preloader = new Image();\n      preloader.onload = function() {\n        var $preloader, imageHeight, imageWidth, maxImageHeight, maxImageWidth, windowHeight, windowWidth;\n        $image.attr('src', self.album[imageNumber].link);\n\n        $preloader = $(preloader);\n\n        $image.width(preloader.width);\n        $image.height(preloader.height);\n        \n        if (self.options.fitImagesInViewport) {\n          // Fit image inside the viewport.\n          // Take into account the border around the image and an additional 10px gutter on each side.\n\n          windowWidth    = $(window).width();\n          windowHeight   = $(window).height();\n          maxImageWidth  = windowWidth - self.containerLeftPadding - self.containerRightPadding - 20;\n          maxImageHeight = windowHeight - self.containerTopPadding - self.containerBottomPadding - 120;\n\n          // Is there a fitting issue?\n          if ((preloader.width > maxImageWidth) || (preloader.height > maxImageHeight)) {\n            if ((preloader.width / maxImageWidth) > (preloader.height / maxImageHeight)) {\n              imageWidth  = maxImageWidth;\n              imageHeight = parseInt(preloader.height / (preloader.width / imageWidth), 10);\n              $image.width(imageWidth);\n              $image.height(imageHeight);\n            } else {\n              imageHeight = maxImageHeight;\n              imageWidth = parseInt(preloader.width / (preloader.height / imageHeight), 10);\n              $image.width(imageWidth);\n              $image.height(imageHeight);\n            }\n          }\n        }\n        self.sizeContainer($image.width(), $image.height());\n      };\n\n      preloader.src          = this.album[imageNumber].link;\n      this.currentImageIndex = imageNumber;\n    };\n\n    // Stretch overlay to fit the viewport\n    Lightbox.prototype.sizeOverlay = function() {\n      this.$overlay\n        .width($(window).width())\n        .height($(document).height());\n    };\n\n    // Animate the size of the lightbox to fit the image we are showing\n    Lightbox.prototype.sizeContainer = function(imageWidth, imageHeight) {\n      var self = this;\n      \n      var oldWidth  = this.$outerContainer.outerWidth();\n      var oldHeight = this.$outerContainer.outerHeight();\n      var newWidth  = imageWidth + this.containerLeftPadding + this.containerRightPadding;\n      var newHeight = imageHeight + this.containerTopPadding + this.containerBottomPadding;\n      \n      function postResize() {\n        self.$lightbox.find('.lb-dataContainer').width(newWidth);\n        self.$lightbox.find('.lb-prevLink').height(newHeight);\n        self.$lightbox.find('.lb-nextLink').height(newHeight);\n        self.showImage();\n      }\n\n      if (oldWidth !== newWidth || oldHeight !== newHeight) {\n        this.$outerContainer.animate({\n          width: newWidth,\n          height: newHeight\n        }, this.options.resizeDuration, 'swing', function() {\n          postResize();\n        });\n      } else {\n        postResize();\n      }\n    };\n\n    // Display the image and it's details and begin preload neighboring images.\n    Lightbox.prototype.showImage = function() {\n      this.$lightbox.find('.lb-loader').hide();\n      this.$lightbox.find('.lb-image').fadeIn('slow');\n    \n      this.updateNav();\n      this.updateDetails();\n      this.preloadNeighboringImages();\n      this.enableKeyboardNav();\n    };\n\n    // Display previous and next navigation if appropriate.\n    Lightbox.prototype.updateNav = function() {\n      // Check to see if the browser supports touch events. If so, we take the conservative approach\n      // and assume that mouse hover events are not supported and always show prev/next navigation\n      // arrows in image sets.\n      var alwaysShowNav = false;\n      try {\n        document.createEvent(\"TouchEvent\");\n        alwaysShowNav = (this.options.alwaysShowNavOnTouchDevices)? true: false;\n      } catch (e) {}\n\n      this.$lightbox.find('.lb-nav').show();\n\n      if (this.album.length > 1) {\n        if (this.options.wrapAround) {\n          if (alwaysShowNav) {\n            this.$lightbox.find('.lb-prev, .lb-next').css('opacity', '1');\n          }\n          this.$lightbox.find('.lb-prev, .lb-next').show();\n        } else {\n          if (this.currentImageIndex > 0) {\n            this.$lightbox.find('.lb-prev').show();\n            if (alwaysShowNav) {\n              this.$lightbox.find('.lb-prev').css('opacity', '1');\n            }\n          }\n          if (this.currentImageIndex < this.album.length - 1) {\n            this.$lightbox.find('.lb-next').show();\n            if (alwaysShowNav) {\n              this.$lightbox.find('.lb-next').css('opacity', '1');\n            }\n          }\n        }\n      }\n    };\n\n    // Display caption, image number, and closing button.\n    Lightbox.prototype.updateDetails = function() {\n      var self = this;\n\n      // Enable anchor clicks in the injected caption html.\n      // Thanks Nate Wright for the fix. @https://github.com/NateWr\n      if (typeof this.album[this.currentImageIndex].title !== 'undefined' && this.album[this.currentImageIndex].title !== \"\") {\n        this.$lightbox.find('.lb-caption')\n          .html(this.album[this.currentImageIndex].title)\n          .fadeIn('fast')\n          .find('a').on('click', function(event){\n            location.href = $(this).attr('href');\n          });\n      }\n    \n      if (this.album.length > 1 && this.options.showImageNumberLabel) {\n        this.$lightbox.find('.lb-number').text(this.options.albumLabel(this.currentImageIndex + 1, this.album.length)).fadeIn('fast');\n      } else {\n        this.$lightbox.find('.lb-number').hide();\n      }\n    \n      this.$outerContainer.removeClass('animating');\n    \n      this.$lightbox.find('.lb-dataContainer').fadeIn(this.options.resizeDuration, function() {\n        return self.sizeOverlay();\n      });\n    };\n\n    // Preload previous and next images in set.\n    Lightbox.prototype.preloadNeighboringImages = function() {\n      if (this.album.length > this.currentImageIndex + 1) {\n        var preloadNext = new Image();\n        preloadNext.src = this.album[this.currentImageIndex + 1].link;\n      }\n      if (this.currentImageIndex > 0) {\n        var preloadPrev = new Image();\n        preloadPrev.src = this.album[this.currentImageIndex - 1].link;\n      }\n    };\n\n    Lightbox.prototype.enableKeyboardNav = function() {\n      $(document).on('keyup.keyboard', $.proxy(this.keyboardAction, this));\n    };\n\n    Lightbox.prototype.disableKeyboardNav = function() {\n      $(document).off('.keyboard');\n    };\n\n    Lightbox.prototype.keyboardAction = function(event) {\n      var KEYCODE_ESC        = 27;\n      var KEYCODE_LEFTARROW  = 37;\n      var KEYCODE_RIGHTARROW = 39;\n\n      var keycode = event.keyCode;\n      var key     = String.fromCharCode(keycode).toLowerCase();\n      if (keycode === KEYCODE_ESC || key.match(/x|o|c/)) {\n        this.end();\n      } else if (key === 'p' || keycode === KEYCODE_LEFTARROW) {\n        if (this.currentImageIndex !== 0) {\n          this.changeImage(this.currentImageIndex - 1);\n        } else if (this.options.wrapAround && this.album.length > 1) {\n          this.changeImage(this.album.length - 1);\n        }\n      } else if (key === 'n' || keycode === KEYCODE_RIGHTARROW) {\n        if (this.currentImageIndex !== this.album.length - 1) {\n          this.changeImage(this.currentImageIndex + 1);\n        } else if (this.options.wrapAround && this.album.length > 1) {\n          this.changeImage(0);\n        }\n      }\n    };\n\n    // Closing time. :-(\n    Lightbox.prototype.end = function() {\n      this.disableKeyboardNav();\n      $(window).off(\"resize\", this.sizeOverlay);\n      this.$lightbox.fadeOut(this.options.fadeDuration);\n      this.$overlay.fadeOut(this.options.fadeDuration);\n      $('select, object, embed').css({\n        visibility: \"visible\"\n      });\n    };\n\n    return Lightbox;\n\n  })();\n\n  $(function() {\n    var options  = new LightboxOptions();\n    var lightbox = new Lightbox(options);\n  });\n\n}).call(this);\n"
  },
  {
    "path": "oldweb/submission/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission."
  },
  {
    "path": "oldweb/submission/urls.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom . import views\nfrom django.conf.urls import url\n\nurlpatterns = [\n    url(r\"^$\", views.index),\n    url(r\"status/(?P<task_id>\\d+)/$\", views.status),\n    url(r\"^(?P<task_id>\\d+)/$\", views.resubmit),\n    url(r\"^(?P<task_id>\\d+)/dropped/(?P<sha1>[a-f0-9]{40})/$\", views.submit_dropped),\n]\n"
  },
  {
    "path": "oldweb/submission/views.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport sys\n\nfrom django.conf import settings\nfrom django.shortcuts import redirect, render\nfrom django.core.exceptions import ObjectDoesNotExist\n\nsys.path.append(settings.CUCKOO_PATH)\n\nfrom lib.cuckoo.common.config import Config, parse_options, emit_options\nfrom lib.cuckoo.common.utils import store_temp_file\nfrom lib.cuckoo.core.database import Database\nfrom lib.cuckoo.core.rooter import vpns\n\nresults_db = settings.MONGO\ncfg = Config()\n\ndef force_int(value):\n    try:\n        value = int(value)\n    except:\n        value = 0\n    finally:\n        return value\n\ndef dropped_filepath(task_id, sha1):\n    record = results_db.analysis.find_one(\n        {\n            \"info.id\": int(task_id),\n            \"dropped.sha1\": sha1,\n        }\n    )\n\n    if not record:\n        raise ObjectDoesNotExist\n\n    for dropped in record[\"dropped\"]:\n        if dropped[\"sha1\"] == sha1:\n            return dropped[\"path\"]\n\n    raise ObjectDoesNotExist\n\ndef render_index(request, kwargs={}):\n    files = os.listdir(os.path.join(settings.CUCKOO_PATH, \"analyzer\", \"windows\", \"modules\", \"packages\"))\n\n    packages = []\n    for name in files:\n        name = os.path.splitext(name)[0]\n        if name == \"__init__\":\n            continue\n\n        packages.append(name)\n\n    # Prepare a list of VM names, description label based on tags.\n    machines = []\n    for machine in Database().list_machines():\n        tags = []\n        for tag in machine.tags:\n            tags.append(tag.name)\n\n        if tags:\n            label = machine.label + \": \" + \", \".join(tags)\n        else:\n            label = machine.label\n\n        machines.append((machine.label, label))\n\n    # Prepend ALL/ANY options.\n    machines.insert(0, (\"\", \"First available\"))\n    machines.insert(1, (\"all\", \"All\"))\n\n    values = {\n        \"packages\": sorted(packages),\n        \"machines\": machines,\n        \"vpns\": vpns.values(),\n        \"route\": cfg.routing.route,\n        \"internet\": cfg.routing.internet,\n    }\n\n    values.update(kwargs)\n    return render(request, \"submission/index.html\", values)\n\ndef index(request, task_id=None, sha1=None):\n    if request.method == \"GET\":\n        return render_index(request)\n\n    package = request.POST.get(\"package\", \"\")\n    timeout = force_int(request.POST.get(\"timeout\"))\n    options = request.POST.get(\"options\", \"\")\n    priority = force_int(request.POST.get(\"priority\"))\n    machine = request.POST.get(\"machine\", \"\")\n    custom = request.POST.get(\"custom\", \"\")\n    memory = bool(request.POST.get(\"memory\", False))\n    enforce_timeout = bool(request.POST.get(\"enforce_timeout\", False))\n    tags = request.POST.get(\"tags\", None)\n\n    options = parse_options(options)\n\n    # The following POST fields take precedence over the options field.\n    if request.POST.get(\"route\"):\n        options[\"route\"] = request.POST.get(\"route\")\n\n    if request.POST.get(\"free\"):\n        options[\"free\"] = \"yes\"\n\n    if request.POST.get(\"process_memory\"):\n        options[\"procmemdump\"] = \"yes\"\n\n    if request.POST.get(\"services\"):\n        options[\"services\"] = \"yes\"\n\n    if not request.POST.get(\"human\"):\n        options[\"human\"] = \"0\"\n\n    db = Database()\n    task_ids = []\n    task_machines = []\n\n    if machine.lower() == \"all\":\n        for entry in db.list_machines():\n            task_machines.append(entry.label)\n    else:\n        task_machines.append(machine)\n\n    # In case of resubmitting a file.\n    if request.POST.get(\"category\") == \"file\":\n        task = Database().view_task(task_id)\n\n        for entry in task_machines:\n            task_id = db.add_path(file_path=task.target,\n                                  package=package,\n                                  timeout=timeout,\n                                  options=emit_options(options),\n                                  priority=priority,\n                                  machine=entry,\n                                  custom=custom,\n                                  memory=memory,\n                                  enforce_timeout=enforce_timeout,\n                                  tags=tags)\n            if task_id:\n                task_ids.append(task_id)\n\n    elif request.FILES.getlist(\"sample\"):\n        samples = request.FILES.getlist(\"sample\")\n        for sample in samples:\n            # Error if there was only one submitted sample and it's empty.\n            # But if there are multiple and one was empty, just ignore it.\n            if not sample.size:\n                if len(samples) != 1:\n                    continue\n\n                return render(request, \"error.html\", {\n                    \"error\": \"You uploaded an empty file.\",\n                })\n            elif sample.size > settings.MAX_UPLOAD_SIZE:\n                return render(request, \"error.html\", {\n                    \"error\": \"You uploaded a file that exceeds that maximum allowed upload size.\",\n                })\n\n            # Moving sample from django temporary file to Cuckoo temporary\n            # storage to let it persist between reboot (if user like to\n            # configure it in that way).\n            path = store_temp_file(sample.read(), sample.name)\n\n            for entry in task_machines:\n                task_id = db.add_path(file_path=path,\n                                      package=package,\n                                      timeout=timeout,\n                                      options=emit_options(options),\n                                      priority=priority,\n                                      machine=entry,\n                                      custom=custom,\n                                      memory=memory,\n                                      enforce_timeout=enforce_timeout,\n                                      tags=tags)\n                if task_id:\n                    task_ids.append(task_id)\n\n    # When submitting a dropped file.\n    elif request.POST.get(\"category\") == \"dropped_file\":\n        filepath = dropped_filepath(task_id, sha1)\n\n        for entry in task_machines:\n            task_id = db.add_path(file_path=filepath,\n                                  package=package,\n                                  timeout=timeout,\n                                  options=emit_options(options),\n                                  priority=priority,\n                                  machine=entry,\n                                  custom=custom,\n                                  memory=memory,\n                                  enforce_timeout=enforce_timeout,\n                                  tags=tags)\n            if task_id:\n                task_ids.append(task_id)\n\n    else:\n        url = request.POST.get(\"url\").strip()\n        if not url:\n            return render(request, \"error.html\", {\n                \"error\": \"You specified an invalid URL!\",\n            })\n\n        for entry in task_machines:\n            task_id = db.add_url(url=url,\n                                 package=package,\n                                 timeout=timeout,\n                                 options=emit_options(options),\n                                 priority=priority,\n                                 machine=entry,\n                                 custom=custom,\n                                 memory=memory,\n                                 enforce_timeout=enforce_timeout,\n                                 tags=tags)\n            if task_id:\n                task_ids.append(task_id)\n\n    tasks_count = len(task_ids)\n    if tasks_count > 0:\n        return render(request, \"submission/complete.html\", {\n            \"tasks\": task_ids,\n            \"tasks_count\": tasks_count,\n            \"baseurl\": request.build_absolute_uri('/')[:-1],\n        })\n    else:\n        return render(request, \"error.html\", {\n            \"error\": \"Error adding task to Cuckoo's database.\",\n        })\n\ndef status(request, task_id):\n    task = Database().view_task(task_id)\n    if not task:\n        return render(request, \"error.html\", {\n            \"error\": \"The specified task doesn't seem to exist.\",\n        })\n\n    if task.status == \"reported\":\n        return redirect(\"analysis.views.report\", task_id=task_id)\n\n    return render(request, \"submission/status.html\", {\n        \"status\": task.status,\n        \"task_id\": task_id,\n    })\n\ndef resubmit(request, task_id):\n    task = Database().view_task(task_id)\n\n    if request.method == \"POST\":\n        return index(request, task_id)\n\n    if not task:\n        return render(request, \"error.html\", {\n            \"error\": \"No Task found with this ID\",\n        })\n\n    if task.category == \"file\":\n        return render_index(request, {\n            \"sample_id\": task.sample_id,\n            \"file_name\": os.path.basename(task.target),\n            \"resubmit\": \"file\",\n            \"options\": emit_options(task.options),\n        })\n    elif task.category == \"url\":\n        return render_index(request, {\n            \"url\": task.target,\n            \"resubmit\": \"URL\",\n            \"options\": emit_options(task.options),\n        })\n\ndef submit_dropped(request, task_id, sha1):\n    if request.method == \"POST\":\n        return index(request, task_id, sha1)\n\n    task = Database().view_task(task_id)\n    if not task:\n        return render(request, \"error.html\", {\n            \"error\": \"No Task found with this ID\",\n        })\n\n    filepath = dropped_filepath(task_id, sha1)\n    return render_index(request, {\n        \"file_name\": os.path.basename(filepath),\n        \"resubmit\": \"file\",\n        \"dropped_file\": True,\n        \"options\": emit_options(task.options),\n    })\n"
  },
  {
    "path": "oldweb/templates/analysis/admin/index.html",
    "content": "{% load analysis_tags %}\n<div class=\"panel panel-default\">\n    <table class=\"table table-striped\">\n        <tr>\n            <th>Task ID</th>\n            <td>{{analysis.info.id}}</td>\n        </tr>\n        <tr>\n            <th>Mongo ID</th>\n            <td>{{analysis|mongo_id}}</td>\n        </tr>\n        <tr>\n            <th>Cuckoo release</th>\n            <td>{{analysis.info.version}}</td>\n        </tr>\n        <tr>\n            <th></th>\n            <td><a href=\"{% url \"analysis.views.remove\" analysis.info.id %}\" class=\"btn btn-primary btn-small\">Delete</a></td>\n        </tr>\n    </table>\n</div>\n"
  },
  {
    "path": "oldweb/templates/analysis/behavior/_api_call.html",
    "content": "{% load analysis_tags %}\n<td>\n    {{call.time}}<br/>\n    <strong>{{call.api}}</strong>\n    {% if pid %}\n        <br />\n        <a href=\"#\" class=\"call-link\" data-pid=\"{{pid}}\" data-cid=\"{{cid}}\">\n            <span class=\"glyphicon glyphicon-circle-arrow-right\"></span>\n        </a>\n    {% endif %}\n</td>\n<td style=\"word-wrap: break-word;\">\n    {% for key, value in call.arguments.items %}\n        {% if value|is_dict %}\n            {% for k, v in value.items %}\n                <span class=\"gray\">{{key}}.{{k}}:</span>\n                <span class=\"mono\">{{v}}</span>\n                <br />\n            {% endfor %}\n        {% else %}\n            <span class=\"gray\">{{key}}:</span>\n            {% if key in call.raw %}\n                {% for v in value|ensurelist %}\n                    <pre>{{v}}</pre>\n                {% endfor %}\n            {% else %}\n                {% for v in value|ensurelist %}\n                    <span class=\"mono\">{{v}}</span>\n                {% endfor %}\n            {% endif %}\n            {% if key in call.flags %}\n                <span class=\"gray\">({{ call.flags|get_item:key }})</span>\n            {% endif %}\n            <br />\n        {% endif %}\n    {% endfor %}\n</td>\n<td>\n    {% if call.status %}\n        success\n    {% else %}\n        failed\n    {% endif %}\n</td>\n<td><span class=\"mono\">{{call.return_value}}</span></td>\n<td>\n    {% if call.repeated %}\n        {{call.repeated}}\n        {% if call.repeated > 1 %}\n            times\n        {% else %}\n            time\n        {% endif %}\n    {% else %}\n        0\n    {% endif %}\n</td>\n"
  },
  {
    "path": "oldweb/templates/analysis/behavior/_chunk.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th width=\"15%\">Time &amp; API</th>\n            <th width=\"65%\">Arguments</th>\n            <th width=\"5%\">Status</th>\n            <th width=\"10%\">Return</th>\n            <th width=\"5%\">Repeated</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for call in chunk.calls %}\n        <tr class=\"{{call.category}}\" id=\"call_{{call.id}}\">\n            {% include \"analysis/behavior/_api_call.html\" %}\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/behavior/_processes.html",
    "content": "<script type=\"text/javascript\">\nfunction paginationbar(pages, page) {\n    if (pages === 0) return \"\";\n\n    function alert_current_page (i, page) {\n        if (i == page) return \" class=\\\"active\\\"\";\n        return \"\";\n    }\n\n    var out = \"\";\n    out += \"<li\"+alert_current_page(1, page)+\"><a href=\\\"#\\\">1</a></li>\";\n\n    if (page-10 > 2) out += \"<li><span>...</span></li>\";\n\n    for (i = Math.max(2, page-10); i <= Math.min(pages-1, page+10); i++) {\n        out += \"<li\"+alert_current_page(i, page)+\"><a href=\\\"#\\\">\" + i + \"</a></li>\";\n    }\n\n    if (page+10 < pages-1) out += \"<li><span>...</span></li>\";\n\n    if (pages > 1)\n        out += \"<li\"+alert_current_page(pages, page)+\"><a href=\\\"#\\\">\"+pages+\"</a></li>\";\n    return out;\n}\nfunction load_chunk(pid, pagenum, callback) {\n    $(\"#process_\"+pid+\" div.calltable\").load(\"{% url \"analysis.views.index\" %}chunk/{{analysis.info.id}}/\"+pid+\"/\"+pagenum+\"/\", function(data, status, xhr){\n        if (status == \"error\") {\n            $(\"#process_\"+pid+\" div.calltable\").html(\"Error loading data. Please reload the page and if the error persists contact us.\");\n        }\n        else {\n            $(\"#process_\"+pid+\" div.pagination ul\").html(paginationbar(parseInt($(\"#process_\"+pid).data(\"length\")), pagenum));\n            $(\"#process_\"+pid+\" div.pagination a\").click(function(e) {\n                var t = $(e.target);\n                load_chunk(t.parents(\"#process_\"+pid).data(\"pid\"), parseInt(t.text()));\n            });\n            typeof callback === 'function' && callback();\n        }\n    });\n}\nfunction show_tab(id, callback) {\n    // First, see if tab is already active. If it is, just run the callback\n    if ($('#' + id).hasClass('active')) {\n        typeof callback === 'function' && callback();\n    }\n    // Else, show the tab and run the callback once the tab is shown\n    else {\n        // Wait for tab to be shown\n        $('a[data-toggle=\"tab\"]').on('shown.bs.tab', function (e) {\n            if ($(e.target).attr('href') == '#' + id) {\n                $('a[data-toggle=\"tab\"]').off('shown.bs.tab');\n                typeof callback === 'function' && callback();\n            }\n        });\n\n        // Show the tab\n        $('a[href=\"#' + id + '\"]').tab('show');\n    }\n}\nfunction go_to_api_call(pid, call_id) {\n    // Load corresponding chunk\n    pagenum = Math.floor(call_id / 100) + 1;\n    load_chunk(pid, pagenum, function () {\n        // Show behavior tab\n        show_tab('behavior', function () {\n            // Show process tab\n            show_tab('process_' + pid, function () {\n                // Scroll to call\n                $('#call_' + call_id).get(0).scrollIntoView(false);\n            });\n        });\n    });\n}\nfunction load_filtered_chunk(pid, category) {\n    $(\"#process_\"+pid+\" div.calltable\").load(\"{% url \"analysis.views.index\" %}filtered/{{analysis.info.id}}/\"+pid+\"/\"+category+\"/\", function(data, status, xhr){\n        if (status == \"error\") {\n            $(\"#process_\"+pid+\" div.calltable\").html(\"Error loading data. Please reload the page and if the error persists contact us.\");\n        }\n        else {\n            $(\"#process_\"+pid+\" div.pagination ul\").html(paginationbar(0, 0));\n            $(\"#process_\"+pid+\" div.pagination a\").click(function(e) {\n                var t = $(e.target);\n                load_chunk(t.parents(\"#process_\"+pid).data(\"pid\"), parseInt(t.text()));\n            });\n        }\n    });\n}\n</script>\n\n<div class=\"processes tabbable\">\n    <ul class=\"nav nav-tabs\">\n        <li><a href=\"#search\" data-toggle=\"tab\"><span class=\"glyphicon glyphicon-search\"></span> Search</a></li>\n    {% for process in analysis.behavior.processes|filter_key_if_has:\"track\" %}\n        <li class=\"{% if forloop.first %}active{% endif %}\"><a class=\"process\" href=\"#process_{{process.pid}}\" data-pid=\"{{process.pid}}\" data-toggle=\"tab\"><span class=\"glyphicon glyphicon-cog\"></span> {{process.process_name}} ({{process.pid}})</a></li>\n    {% endfor %}\n    </ul>\n    <div class=\"tab-content\">\n    {% include \"analysis/behavior/_search.html\" %}\n    {% for process in analysis.behavior.processes|filter_key_if_has:\"track\" %}\n        <div class=\"tab-pane {% if forloop.first %}active{% endif %}\" id=\"process_{{process.pid}}\" data-pid=\"{{process.pid}}\" data-length=\"{{process.calls|length}}\">\n            <div class=\"alert alert-info\" style=\"text-align: center;\"><b>{{process.process_name}}</b>, PID: <b>{{process.pid}}</b>, Parent PID: {{process.ppid}}</div>\n\n            <p style=\"text-align: center;\">\n                <a id=\"badge_default_{{process.pid}}\" class=\"badge default\" style=\"color:black;\">default</a>\n                <a id=\"badge_registry_{{process.pid}}\" class=\"badge registry\" style=\"color:black;\">registry</a>\n                <a id=\"badge_file_{{process.pid}}\" class=\"badge file\" style=\"color:black;\">file</a>\n                <a id=\"badge_network_{{process.pid}}\" class=\"badge network\" style=\"color:black;\">network</a>\n                <a id=\"badge_process_{{process.pid}}\" class=\"badge process\" style=\"color:black;\">process</a>\n                <a id=\"badge_services_{{process.pid}}\" class=\"badge services\" style=\"color:black;\">services</a>\n                <a id=\"badge_sync_{{process.pid}}\" class=\"badge synchronisation\" style=\"color:black;\">synchronisation</a>\n                <a id=\"badge_iexplore_{{process.pid}}\" class=\"badge iexplore\" style=\"color:black;\">iexplore</a>\n                <a id=\"badge_office_{{process.pid}}\" class=\"badge office\" style=\"color:black;\">office</a>\n                <a id=\"badge_pdf_{{process.pid}}\" class=\"badge pdf\" style=\"color:black;\">pdf</a>\n            </p>\n\n            <script type=\"text/javascript\">\n            $(document).ready(function()\n            {\n                $(\"#badge_default_{{process.pid}}\").click(function() { load_chunk({{process.pid}}, 1); });\n                $(\"#badge_network_{{process.pid}}\").click(function() { load_filtered_chunk({{process.pid}}, \"network\"); });\n                $(\"#badge_file_{{process.pid}}\").click(function() { load_filtered_chunk({{process.pid}}, \"file\"); });\n                $(\"#badge_registry_{{process.pid}}\").click(function() { load_filtered_chunk({{process.pid}}, \"registry\"); });\n                $(\"#badge_process_{{process.pid}}\").click(function() { load_filtered_chunk({{process.pid}}, \"process\"); });\n                $(\"#badge_services_{{process.pid}}\").click(function() { load_filtered_chunk({{process.pid}}, \"services\"); });\n                $(\"#badge_sync_{{process.pid}}\").click(function() { load_filtered_chunk({{process.pid}}, \"synchronisation\"); });\n                $(\"#badge_iexplore_{{process.pid}}\").click(function() { load_filtered_chunk({{process.pid}}, \"iexplore\"); });\n                $(\"#badge_office_{{process.pid}}\").click(function() { load_filtered_chunk({{process.pid}}, \"office\"); });\n                $(\"#badge_pdf_{{process.pid}}\").click(function() { load_filtered_chunk({{process.pid}}, \"pdf\"); });\n\n                $('.tab-content').on('click', '.call-link', function (event) {\n                    cid = $(this).attr('data-cid');\n                    pid = $(this).attr('data-pid');\n                    go_to_api_call(+pid, +cid);\n\n                    event.preventDefault();\n                });\n            });\n            </script>\n\n            <div class=\"pagination pagination-centered\">\n                <ul class=\"pagination\">\n                </ul>\n            </div>\n\n            <div class=\"calltable\"></div>\n            <div class=\"pagination pagination-centered pagination_{{process.pid}}\">\n                <ul class=\"pagination\">\n                </ul>\n            </div>\n        </div>\n        {% if forloop.first %}\n        <script type=\"text/javascript\">\n            load_chunk({{ process.pid }}, 1);\n        </script>\n        {% endif %}\n    {% endfor %}\n    </div>\n</div>\n<script type=\"text/javascript\">\n    $('div.processes a.process[data-toggle=\"tab\"]').on('show.bs.tab', function (e) {\n        var pid = $(e.target).data(\"pid\");\n        $(\"#process_\"+pid+\" div.calltable\").html(\"Loading..\");\n        load_chunk(pid, 1);\n    });\n</script>\n"
  },
  {
    "path": "oldweb/templates/analysis/behavior/_search.html",
    "content": "<script type=\"text/javascript\">\n$(function () {\n\t$('#search button[type=submit]').on('click', function(event) {\n\t\taction = $('form#search').attr('action');\n\t\tdata = $('form#search').serialize();\n\t\t\n\t\t$.post(action, data, function (data) {\n\t\t\t$('#search-results').html(data);\n\t\t});\n\n\t\tevent.preventDefault();\n\t});\n});\n</script>\n\n<div class=\"tab-pane\" id=\"search\">\n\t<form id='search' class=\"form-inline\" role=\"form\" action=\"{% url \"analysis.views.search_behavior\" analysis.info.id %}\">\n\t\t{% csrf_token %}\n    \t<div class=\"form-group\">\n        \t<label class=\"sr-only\" for=\"form_search\">Search term</label>\n        \t<input type=\"text\" class=\"form-control\" id=\"form_search\" name=\"search\" size=50 placeholder=\"Search term\" />\n    \t</div>\n\t\t<button type=\"submit\" class=\"btn btn-primary\">Search</button>\n\t</form>\n\n\t<div id=\"search-results\">\n\t</div>\n</div>\n"
  },
  {
    "path": "oldweb/templates/analysis/behavior/_search_results.html",
    "content": "\n<style type=\"text/css\">\n.search-process {\n    background-color: #d9edf7;\n    font-weight: bold;\n}\n</style>\n<section id=\"search-results-section\">\n    <h4>Results</h4>\n    <p style=\"text-align: center;\">\n        <span class=\"badge network\" style=\"color:black;\">network</span>\n        <span class=\"badge filesystem\" style=\"color:black;\">filesystem</span>\n        <span class=\"badge registry\" style=\"color:black;\">registry</span>\n        <span class=\"badge process\" style=\"color:black;\">process</span>\n        <span class=\"badge services\" style=\"color:black;\">services</span>\n        <span class=\"badge synchronization\" style=\"color:black;\">synchronization</span>\n    </p>\n    {% if results %}\n        <table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n            <thead>\n                <tr>\n                    <th width=\"15%\">Time &amp; API</th>\n                    <th width=\"65%\">Arguments</th>\n                    <th width=\"5%\">Status</th>\n                    <th width=\"10%\">Return</th>\n                    <th width=\"5%\">Repeated</th>\n                </tr>\n            </thead>\n            <tbody>\n            {% for match in results %}\n                <tr>\n                    <td colspan=\"7\" class=\"search-process\">\n                        Process: {{match.process.process_name}} ({{match.process.pid}})\n                    </td>\n                </tr>\n                {% for sign in match.signs %}\n                    <tr class=\"{{sign.category}}\">\n                        {% include \"analysis/behavior/_api_call.html\" with call=sign pid=match.process.pid cid=sign.id %}\n                    <tr>\n                {% endfor %}\n            {% endfor %}\n            </tbody>\n        </table>\n    {% else %}\n        <p>No results</p>\n    {% endif %}\n</section>\n"
  },
  {
    "path": "oldweb/templates/analysis/behavior/_tree.html",
    "content": "<h4>Process Tree</h4>\n<ul>\n{% for process in analysis.behavior.processtree|filter_key_if_has:\"track\" %}\n    {% include \"analysis/behavior/_tree_process.html\" %}\n{% endfor %}\n</ul>\n"
  },
  {
    "path": "oldweb/templates/analysis/behavior/_tree_process.html",
    "content": "<li>\n    <strong><a href=\"javascript:show_tab('process_{{process.pid}}');\">{{process.process_name}} ({{process.pid}})</a></strong>\n    <span class=\"mono\">{{ process.command_line }}</span>\n    {% if process.children %}\n        <ul>\n            {% for child in process.children %}\n                {% with process=child template_name=\"analysis/behavior/_tree_process.html\" %}\n                    {% include template_name %}\n                {% endwith %}\n            {% endfor %}\n        </ul>\n    {% endif %}\n</li>\n"
  },
  {
    "path": "oldweb/templates/analysis/behavior/index.html",
    "content": "{% include \"analysis/behavior/_tree.html\" %}\n<hr />\n{% include \"analysis/behavior/_processes.html\" %}"
  },
  {
    "path": "oldweb/templates/analysis/buffers/index.html",
    "content": "{% if analysis.buffer|length %}\n    {% for file in analysis.buffer %}\n        <div class=\"panel panel-default\">\n            <table class=\"table table-striped table-condensed\">\n                <tr>\n                    <th class=\"col-md-1 text-right\">Name</th>\n                    <td><b>{{file.name}}</b></td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">Size</th>\n                    <td>{{ file.size | sizeof_fmt }}</td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">Type</th>\n                    <td>{{file.type}}</td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">MD5</th>\n                    <td class=\"break-everwhere\"><tt>{{file.md5}}</tt></td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">SHA1</th>\n                    <td class=\"break-everwhere\"><tt>{{file.sha1}}</tt></td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">SHA256</th>\n                    <td class=\"break-everwhere\"><tt>{{file.sha256}}</tt></td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">CRC32</th>\n                    <td class=\"break-everwhere\"><tt>{{file.crc32}}</tt></td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">ssdeep</th>\n                    <td class=\"break-everwhere\"><tt>{{file.ssdeep}}</tt></td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">Yara</th>\n                    <td>\n                    {% if file.yara %}\n                        <ul style=\"margin-bottom: 0;\">\n                        {% for sign in file.yara %}\n                            <li>{{sign.name}} - {{sign.meta.description}}</li>\n                        {% endfor %}\n                        </ul>\n                    {% else %}\n                        None matched\n                    {% endif %}\n                    </td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">VirusTotal</th>\n                    <td><a href=\"https://www.virustotal.com/en/file/{{file.sha256}}/analysis/\">Search for analysis</a></td>\n                </tr>\n                {% if file.object_id %}\n                    <tr>\n                        <th class=\"text-right\"></th>\n                        <td><a href=\"{% url \"analysis.views.file\" \"buffer\" file.object_id %}\" class=\"btn btn-primary btn-small\">Download</a></td>\n                    </tr>\n                {% endif %}\n            </table>\n        </div>\n    {% endfor %}\n{% else %}\n    <div class=\"alert alert-info\"><b>Sorry!</b> No dropped buffers.</div>\n{% endif %}\n"
  },
  {
    "path": "oldweb/templates/analysis/dropped/index.html",
    "content": "{% if analysis.dropped|length > 0 %}\n    {% for file in analysis.dropped %}\n        <div class=\"panel panel-default\">\n            <table class=\"table table-striped table-condensed\">\n                <tr>\n                    <th class=\"col-md-1 text-right\">Name</th>\n                    <td>\n                        <b>{{file.name}}</b>\n                        {% if file.object_id %}\n                            <div class=\"pull-right\">\n                                <a href=\"{% url \"analysis.views.file\" \"dropped\" file.object_id %}\" class=\"btn btn-primary btn-xs\">\n                                <span class=\"glyphicon glyphicon-save\" aria-hidden=\"true\"></span> Download\n                                </a>\n                                <a href=\"{% url \"submission.views.submit_dropped\" analysis.info.id file.sha1 %}\" class=\"btn btn-warning btn-xs\">\n                                    <span class=\"glyphicon glyphicon-refresh\" aria-hidden=\"true\"></span> Submit file\n                                </a>\n                            </div>\n                        {% endif %}\n                    </td>\n                </tr>\n            </h4>\n                {% if file.filepath %}\n                <tr>\n                    <th class=\"text-right\">Filepath</th>\n                    <td>{{ file.filepath }}</td>\n                </tr>\n                {% endif %}\n                <tr>\n                    <th class=\"text-right\">Size</th>\n                    <td>{{ file.size | sizeof_fmt }}</td>\n                </tr>\n                {% if file.pids %}\n                <tr>\n                    <th class=\"text-right\">Processes</th>\n                    <td>\n                        {% for pid in file.pids %}\n                        {{ pid }} (<b>{{ pid|process_name:analysis }}</b>)\n                        {% endfor %}\n                    </td>\n                </tr>\n                {% endif %}\n                <tr>\n                    <th class=\"text-right\">Type</th>\n                    <td>{{file.type}}</td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">MD5</th>\n                    <td class=\"break-everywhere\"><tt>{{file.md5}}</tt></td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">SHA1</th>\n                    <td class=\"break-everywhere\"><tt>{{file.sha1}}</tt></td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">SHA256</th>\n                    <td class=\"break-everywhere\"><tt>{{file.sha256}}</tt></td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">CRC32</th>\n                    <td class=\"break-everywhere\"><tt>{{file.crc32}}</tt></td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">ssdeep</th>\n                    <td class=\"break-everywhere\"><tt>{{file.ssdeep}}</tt></td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">Yara</th>\n                    <td>\n                    {% if file.yara %}\n                        <ul style=\"margin-bottom: 0;\">\n                        {% for sign in file.yara %}\n                            <li>{{sign.name}} - {{sign.meta.description}}</li>\n                        {% endfor %}\n                        </ul>\n                    {% else %}\n                        None matched\n                    {% endif %}\n                    </td>\n                </tr>\n                <tr>\n                    <th class=\"text-right\">VirusTotal</th>\n                    <td><a href=\"https://www.virustotal.com/en/file/{{file.sha256}}/analysis/\">Search for analysis</a></td>\n                </tr>\n            </table>\n        </div>\n    {% endfor %}\n{% else %}\n    <div class=\"alert alert-info\"><b>Sorry!</b> No dropped files.</div>\n{% endif %}\n"
  },
  {
    "path": "oldweb/templates/analysis/export.html",
    "content": "{% extends \"base.html\" %}\n{% load staticfiles %}\n{% block content %}\n<style>\n.btn-file {\n    position: relative;\n    overflow: hidden;\n}\n.btn-file input[type=file] {\n    position: absolute;\n    top: 0;\n    right: 0;\n    min-width: 100%;\n    min-height: 100%;\n    font-size: 999px;\n    text-align: right;\n    filter: alpha(opacity=0);\n    opacity: 0;\n    background: red;\n    cursor: inherit;\n    display: block;\n}\ninput[readonly] {\n    background-color: white !important;\n    cursor: text !important;\n}\n</style>\n<div class=\"row\">\n    <div class=\"col-md-6 col-md-offset-3 center\">\n        <p style=\"margin-bottom: 10px;\"><img src=\"{% static \"graphic/cuckoo.png\" %}\" /></p>\n\n        <form role=\"form\" action=\"\" method=\"post\" enctype=\"multipart/form-data\">{% csrf_token %}\n            <div class=\"tabbable\">\n                <div class=\"tab-content\">\n                    <div class=\"tab-pane fade in active\" id=\"file\">\n                        <label style=\"display: flex; color: #337ab7;\">Chosen analysis nr.{{analysis.info.id}} to export </label>\n                        <div class=\"input-group col-md-6\">\n                            {% if analysis.info.category == \"file\" %}\n                            <input type=\"text\" class=\"form-control\" value=\"{{analysis.target.file.name}}\" disabled>\n                            {% elif analysis.info.category == \"url\" %}\n                            <input type=\"text\" class=\"form-control\" value=\"{{analysis.target.url}}\" disabled>\n                            <!-- This else is made only for testing purposes. Will be deleted when testing is done. -->\n                            {% else %}\n                            <input type=\"text\" class=\"form-control\" value=\"Unknown\" disabled>\n                            {% endif %}\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"panel\" id=\"accordion\" style=\"margin-top: 20px;\">\n                <div class=\"panel panel-default\">\n                    <div class=\"panel-heading\">\n                        <label class=accordion-toggle\" style=\"color: #337ab7;\">Select which files you want to include in the export</label>\n                    </div>\n                    <div id=\"options\" class=\"panel-collapse collapse in\" style=\"text-align: left;\">\n                        <div class=\"panel-body\">\n                            {% for dirname, count in dirs %}\n                            <div class=\"form-group\">\n                                <input type=\"checkbox\" name=\"dirs\" value=\"{{ dirname }}\" checked=\"checked\"> {{ dirname }} ({{ count }} files)\n                            </div>\n                            {% endfor %}\n                            {% for filename in files %}\n                            <div class=\"form-group\">\n                                <input type=\"checkbox\" name=\"files\" value=\"{{ filename }}\" checked=\"checked\"> {{ filename }}\n                            </div>\n                            {% endfor %}\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div style=\"margin-top: 20px;\">\n                <button type=\"submit\" class=\"btn btn-primary btn-lg\">Export</button>\n            </div>\n        </form>\n    </div>\n</div>\n{% endblock %}\n"
  },
  {
    "path": "oldweb/templates/analysis/import.html",
    "content": "{% extends \"base.html\" %}\n{% load staticfiles %}\n{% block content %}\n<style>\n.btn-file {\n    position: relative;\n    overflow: hidden;\n}\n.btn-file input[type=file] {\n    position: absolute;\n    top: 0;\n    right: 0;\n    min-width: 100%;\n    min-height: 100%;\n    font-size: 999px;\n    text-align: right;\n    filter: alpha(opacity=0);\n    opacity: 0;\n    background: red;\n    cursor: inherit;\n    display: block;\n}\ninput[readonly] {\n    background-color: white !important;\n    cursor: text !important;\n}\n</style>\n<script type='text/javascript'>\n$(document)\n    .on('change', '.btn-file :file', function() {\n        var input = $(this),\n        numFiles = input.get(0).files ? input.get(0).files.length : 1,\n        label = input.val().replace(/\\\\/g, '/').replace(/.*\\//, '');\n        input.trigger('fileselect', [numFiles, label]);\n});\n\n$(document).ready( function() {\n    $('.btn-file :file').on('fileselect', function(event, numFiles, label) {\n\n        var input = $(this).parents('.input-group').find(':text'),\n            log = numFiles > 1 ? numFiles + ' files selected' : label;\n\n        if( input.length ) {\n            input.val(log);\n        } else {\n            if( log ) alert(log);\n        }\n\n    });\n});\n</script>\n<div class=\"row\">\n    <div class=\"col-md-6 col-md-offset-3 center\">\n        <p style=\"margin-bottom: 10px;\"><img src=\"{% static \"graphic/test.png\" %}\" width=\"180\" height=\"120\"/></p>\n\n        <form role=\"form\" action=\"\" method=\"post\" enctype=\"multipart/form-data\">{% csrf_token %}\n            <div class=\"tabbable\">\n                <div class=\"tab-content\">\n                    <div class=\"tab-pane fade in active\" id=\"file\">\n                        \n                        <label style=\"display: flex; color: #337ab7;\">Choose analysis to import (Only .zip)</label>\n                        <input name=\"category\" type=\"text\" class=\"form-control hidden\" value=\"file\">\n                        <div class=\"input-group col-md-6\">\n                            <span class=\"input-group-btn\">\n                                <input type=\"text\" class=\"form-control\" readonly>\n                                <span class=\"btn btn-primary btn-file\">\n                                    Select <input type=\"file\" name=\"sample\" multiple=\"multiple\">\n                                </span>\n                            </span>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div style=\"margin-top: 20px;\"><button type=\"submit\" class=\"btn btn-primary btn-lg\">Import</button></div>\n        </form>\n    </div>\n</div>\n{% endblock %}\n"
  },
  {
    "path": "oldweb/templates/analysis/index.html",
    "content": "{% extends \"base.html\" %}\n{% load staticfiles %}\n{% block content %}\n<ul class=\"nav nav-tabs\">\n    <li class=\"active\"><a href=\"#files\" data-toggle=\"tab\">Files</a></li>\n    <li><a href=\"#urls\" data-toggle=\"tab\">URLs</a></li>\n</ul>\n\n<div class=\"tab-content\">\n    <div class=\"tab-pane fade in active\" id=\"files\">\n        <div class=\"panel panel-primary\">\n            <div class=\"panel-heading\">\n                <h3 class=\"panel-title\">Recent Files</h3>\n            </div>\n            {% if files %}\n            <table class=\"table table-striped\" style=\"table-layout: fixed;\">\n                <thead>\n                <tr>\n                    <th>Timestamp</th>\n                    <th>Filename</th>\n                    <th>MD5</th>\n                    <th>Status</th>\n                </tr>\n                </thead>\n                <tbody>\n                {% for analysis in files %}\n                    <tr>\n                        <td>\n                        {% if analysis.status == \"reported\" %}\n                            {{analysis.completed_on}}\n                        {% else %}\n                            <span class=\"muted\">{{analysis.added_on}} (added on)</span>\n                        {% endif %}\n                        </td>\n                        <td>\n                            {{analysis.filename}}\n                        </td>\n                        <td style=\"word-wrap: break-word;\">\n                            {% if analysis.status == \"reported\" or analysis.status == \"failed_analysis\" %}\n                                <a href=\"{% url \"analysis.views.report\" analysis.id %}\"><span class=\"mono\">{{analysis.sample.md5}}</span></a>\n                            {% else %}\n                                <span class=\"mono\">{{analysis.sample.md5}}</span>\n                            {% endif %}\n                        </td>\n                        <td>\n                            {% if analysis.status == \"pending\" %}\n                                <span class=\"text-muted\">pending</span>\n                            {% elif analysis.status == \"running\" %}\n                                <span class=\"text-warning\">running</span>\n                            {% elif analysis.status == \"completed\" %}\n                                <span class=\"text-info\">completed</span>\n                            {% elif analysis.status == \"reported\" %}\n                                {% if analysis.errors %}\n                                    <span class=\"text-danger\">\n                                {% else %}\n                                    <span class=\"text-success\">\n                                {% endif%}\n\n                                reported</span>\n                            {% else %}\n                                <span class=\"text-danger\">{{analysis.status}}</span>\n                            {% endif %}\n                        </td>\n                    </tr>\n                {% endfor %}\n                </tbody>\n            </table>\n            {% else %}\n            <div class=\"panel-body\">No files analyzed yet.</div>\n            {% endif %}\n        </div>\n    </div>\n\n    <div class=\"tab-pane fade\" id=\"urls\">\n        <div class=\"panel panel-primary\">\n            <div class=\"panel-heading\">\n                <h3 class=\"panel-title\">Recent URLs</h3>\n            </div>\n            {% if urls %}\n            <table class=\"table table-striped\" style=\"table-layout: fixed;\">\n                <thead>\n                <tr>\n                    <th>Timestamp</th>\n                    <th>URL</th>\n                    <th>Status</th>\n                </tr>\n                </thead>\n                <tbody>\n                {% for analysis in urls %}\n                    <tr>\n                        <td>\n                        {% if analysis.status == \"reported\" %}\n                            {{analysis.completed_on}}\n                        {% else %}\n                            <span class=\"muted\">{{analysis.added_on}} (added on)</span>\n                        {% endif %}\n                        </td>\n                        <td style=\"word-wrap: break-word;\">\n                            {% if analysis.status == \"reported\" %}\n                                <a href=\"{% url \"analysis.views.report\" analysis.id %}\"><span class=\"mono\">{{analysis.target}}</span></a></td>\n                            {% else %}\n                                <span class=\"mono\">{{analysis.target}}</span>\n                            {% endif %}\n                        <td>\n                            {% if analysis.status == \"pending\" %}\n                                <span class=\"text-muted\">pending</span>\n                            {% elif analysis.status == \"running\" %}\n                                <span class=\"text-warning\">running</span>\n                            {% elif analysis.status == \"completed\" %}\n                                <span class=\"text-info\">completed</span>\n                            {% elif analysis.status == \"reported\" %}\n                                <span class=\"text-success\">reported</span>\n                            {% else %}\n                                <span class=\"text-danger\">{{analysis.status}}</span>\n                            {% endif %}\n                        </td>\n                    </tr>\n                {% endfor %}\n                </tbody>\n            </table>\n            {% else %}\n            <div class=\"panel-body\">No URLs analyzed yet.</div>\n            {% endif %}\n        </div>\n    </div>\n</div>\n{% endblock %}\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/_apihooks.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th>PID</th>\n            <th>Process Name</th>\n            <th>Victim Function</th>\n            <th>Hook Type</th>\n            <th>Hooking Module</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for row in analysis.memory.apihooks.data|volsort %}\n        <tr>\n            <td class=\"{{ row.class_ }}\">{{row.process_id}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.process_name}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.victim_function}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.hook_type}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.hooking_module}}</td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/_callbacks.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th>Type</th>\n            <th>Callback</th>\n            <th>Module</th>\n            <th>Details</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for row in analysis.memory.callbacks.data|volsort %}\n        <tr>\n            <td class=\"{{ row.class_ }}\">{{row.type}}</td>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.callback}}</span></td>\n            <td class=\"{{ row.class_ }}\">{{row.module}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.details}}</td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/_devicetree.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th>Driver Name</th>\n            <th>Driver Offset</th>\n            <th>Devices</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for row in analysis.memory.devicetree.data|volsort %}\n        <tr>\n            <td class=\"{{ row.class_ }}\">{{row.driver_name}}</td>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.driver_offset}}</span></td>\n            <td class=\"{{ row.class_ }}\">\n            {% for device in row.devices %}\n                {% if device.device_name %}\n                    {{device.device_name}},\n                {% endif %}\n            {% endfor %}\n            </td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/_gdt.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th>CPU</th>\n            <th>Selector</th>\n            <th>Base</th>\n            <th>Limit</th>\n            <th>Type</th>\n            <th>Dpl</th>\n            <th>Granularity</th>\n            <th>Present</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for row in analysis.memory.gdt.data|volsort %}\n        <tr>\n            <td class=\"{{ row.class_ }}\">{{row.cpu_number}}</td>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.selector}}</span></td>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.base}}</span></td>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.limit}}</span></td>\n            <td class=\"{{ row.class_ }}\">{{row.type}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.dpl}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.granularity}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.present}}</td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/_idt.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th>CPU</th>\n            <th>Index</th>\n            <th>Selector</th>\n            <th>Address</th>\n            <th>Module</th>\n            <th>Section</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for row in analysis.memory.idt.data|volsort %}\n        <tr>\n            <td class=\"{{ row.class_ }}\">{{row.cpu_number}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.index}}</td>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.selector}}</span></td>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.address}}</span></td>\n            <td class=\"{{ row.class_ }}\">{{row.module}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.section}}</td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/_malfind.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th>PID</th>\n            <th>Process Name</th>\n            <th>Start</th>\n            <th>Tag</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for row in analysis.memory.malfind.data|volsort %}\n        <tr>\n            <td class=\"{{ row.class_ }}\">{{row.process_id}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.process_name}}</td>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.vad_start}}</span></td>\n            <td class=\"{{ row.class_ }}\">{{row.vad_tag}}</td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/_messagehooks.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th>Offset</th>\n            <th>Session</th>\n            <th>Desktop</th>\n            <th>Thread</th>\n            <th>Filter</th>\n            <th>Flags</th>\n            <th>Function</th>\n            <th>Module</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for row in analysis.memory.messagehooks.data|volsort %}\n        <tr>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.offset}}</span></td>\n            <td class=\"{{ row.class_ }}\">{{row.session}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.desktop}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.thread}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.filter}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.flags}}</td>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.function}}</span></td>\n            <td class=\"{{ row.class_ }}\">{{row.module}}</span></td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/_modscan.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th>Base Address</th>\n            <th>Offset</th>\n            <th>Name</th>\n            <th>File</th>\n            <th>Size</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for row in analysis.memory.modscan.data|volsort %}\n        <tr>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.kernel_module_base}}</span></td>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.kernel_module_offset}}</span></td>\n            <td class=\"{{ row.class_ }}\">{{row.kernel_module_name}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.kernel_module_file}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.kernel_module_size}}</td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/_netscan.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th>Offset</th>\n            <th>PID</th>\n            <th>Local Address</th>\n            <th>Local Port</th>\n            <th>Remote Address</th>\n            <th>Remote Port</th>\n            <th>Protocol</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for row in analysis.memory.netscan.data|volsort %}\n        <tr>\n            <td class=\"{{ row.class_ }}\">{{row.offset}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.process_id}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.local_address}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.local_port}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.remote_address}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.remote_port}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.protocol}}</td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/_pslist.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th>Parent PID</th>\n            <th>PID</th>\n            <th>Name</th>\n            <th>Create Time</th>\n            <th>Exit Time</th>\n            <th># Threads</th>\n            <th># Handles</th>\n            <th>Session ID</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for row in analysis.memory.pslist.data|volsort %}\n        <tr>\n            <td class=\"{{ row.class_ }}\">{{row.parent_id}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.process_id}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.process_name}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.create_time}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.exit_time}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.num_threads}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.num_handles}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.session_id}}</td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/_sockscan.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th>Offset</th>\n            <th>PID</th>\n            <th>Local Address</th>\n            <th>Local Port</th>\n            <th>Protocol</th>\n            <th>Creation Time</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for row in analysis.memory.sockscan.data|volsort %}\n        <tr>\n            <td class=\"{{ row.class_ }}\">{{row.offset}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.process_id}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.address}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.port}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.protocol}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.create_time}}</td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/_ssdt.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th>Index</th>\n            <th>Table</th>\n            <th>Entry</th>\n            <th>Syscall Name</th>\n            <th>Syscall Addr</th>\n            <th>Syscall Modname</th>\n            <th>Hook?</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for row in analysis.memory.ssdt.data|volsort %}\n        <tr>\n            <td class=\"{{ row.class_ }}\">{{row.index}}</td>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.table}}</span></td>\n            <td class=\"{{ row.class_ }}\">{{row.entry}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.syscall_name}}</td>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.syscall_addr}}</span></td>\n            <td class=\"{{ row.class_ }}\">{{row.syscall_modname}}</span></td>\n            <td class=\"{{ row.class_ }}\">{{row.hook_dest_addr}}: {{row.hook_name}}</td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/_svcscan.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th>Name</th>\n            <th>Display Name</th>\n            <th>Binary Path</th>\n            <th>PID</th>\n            <th>Type</th>\n            <th>Order</th>\n            <th>Offset</th>\n            <th>State</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for row in analysis.memory.svcscan.data|volsort %}\n        <tr>\n            <td class=\"{{ row.class_ }}\">{{row.service_name}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.service_display_name}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.service_binary_path}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.process_id}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.service_type}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.service_order}}</td>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.service_offset}}</span></td>\n            <td class=\"{{ row.class_ }}\">{{row.service_state}}</td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/_timers.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th>Offset</th>\n            <th>Due Time</th>\n            <th>Period</th>\n            <th>Signaled</th>\n            <th>Routine</th>\n            <th>Module</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for row in analysis.memory.timers.data|volsort %}\n        <tr>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.offset}}</span></td>\n            <td class=\"{{ row.class_ }}\">{{row.due_time}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.period}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.signaled}}</td>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\">{{row.routine}}</span></td>\n            <td class=\"{{ row.class_ }}\">{{row.module}}</span></td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/_yarascan.html",
    "content": "<table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n    <thead>\n        <tr>\n            <th>Owner</th>\n            <th>Rule</th>\n            <th>Hexdump</th>\n        </tr>\n    </thead>\n    <tbody>\n    {% for row in analysis.memory.yarascan.data|volsort %}\n        <tr>\n            <td class=\"{{ row.class_ }}\">{{row.owner}}</td>\n            <td class=\"{{ row.class_ }}\">{{row.rule}}</td>\n            <td class=\"{{ row.class_ }}\"><span class=\"mono\"><pre>{{row.hexdump}}</pre></span></td>\n        </tr>\n    {% endfor %}\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/analysis/memory/index.html",
    "content": "<div class=\"alert alert-info center\">\n    <a class=\"btn btn-primary btn-small\" href=\"{% url \"analysis.views.full_memory_dump_file\" analysis.info.id %}\">Download Full Memory Dump</a>\n</div>\n<div class=\"tabbable tabs\">\n    <ul class=\"nav nav-pills\" style=\"margin-bottom: 0;\">\n        <li class=\"active\"><a href=\"#memory_pslist\" data-toggle=\"tab\">Process List</a></li>\n        <li><a href=\"#memory_svcscan\" data-toggle=\"tab\">Services</a></li>\n        <li><a href=\"#memory_modscan\" data-toggle=\"tab\">Kernel Modules</a></li>\n        <li><a href=\"#memory_devicetree\" data-toggle=\"tab\">Device Tree</a></li>\n        <li><a href=\"#memory_malfind\" data-toggle=\"tab\">Code Injection</a></li>\n        <li><a href=\"#memory_timers\" data-toggle=\"tab\">Timers</a></li>\n        <li><a href=\"#memory_messagehooks\" data-toggle=\"tab\">Messagehooks</a></li>\n        <li><a href=\"#memory_apihooks\" data-toggle=\"tab\">API Hooks</a></li>\n        <li><a href=\"#memory_callbacks\" data-toggle=\"tab\">Callbacks</a></li>\n        <li><a href=\"#memory_yarascan\" data-toggle=\"tab\">Yarascan</a></li>\n        <li><a href=\"#memory_ssdt\" data-toggle=\"tab\">SSDT</a></li>\n        <li><a href=\"#memory_idt\" data-toggle=\"tab\">IDT</a></li>\n        <li><a href=\"#memory_gdt\" data-toggle=\"tab\">GDT</a></li>\n        <li><a href=\"#memory_sockets\" data-toggle=\"tab\">Sockets</a></li>\n    </ul>\n    <div class=\"tab-content\">\n        <div class=\"tab-pane fade in active\" id=\"memory_pslist\">\n            {% include \"analysis/memory/_pslist.html\" %}\n        </div>\n        <div class=\"tab-pane fade in\" id=\"memory_svcscan\">\n            {% include \"analysis/memory/_svcscan.html\" %}\n        </div>\n        <div class=\"tab-pane fade in\" id=\"memory_modscan\">\n            {% include \"analysis/memory/_modscan.html\" %}\n        </div>\n        <div class=\"tab-pane fade in\" id=\"memory_devicetree\">\n            {% include \"analysis/memory/_devicetree.html\" %}\n        </div>\n        <div class=\"tab-pane fade in\" id=\"memory_malfind\">\n            {% include \"analysis/memory/_malfind.html\" %}\n        </div>\n        <div class=\"tab-pane fade in\" id=\"memory_apihooks\">\n            {% include \"analysis/memory/_apihooks.html\" %}\n        </div>\n        <div class=\"tab-pane fade in\" id=\"memory_ssdt\">\n            {% include \"analysis/memory/_ssdt.html\" %}\n        </div>\n        <div class=\"tab-pane fade in\" id=\"memory_idt\">\n            {% include \"analysis/memory/_idt.html\" %}\n        </div>\n        <div class=\"tab-pane fade in\" id=\"memory_gdt\">\n            {% include \"analysis/memory/_gdt.html\" %}\n        </div>\n        <div class=\"tab-pane fade in\" id=\"memory_timers\">\n            {% include \"analysis/memory/_timers.html\" %}\n        </div>\n        <div class=\"tab-pane fade in\" id=\"memory_messagehooks\">\n            {% include \"analysis/memory/_messagehooks.html\" %}\n        </div>\n        <div class=\"tab-pane fade in\" id=\"memory_yarascan\">\n            {% include \"analysis/memory/_yarascan.html\" %}\n        </div>\n        <div class=\"tab-pane fade in\" id=\"memory_callbacks\">\n            {% include \"analysis/memory/_callbacks.html\" %}\n        </div>\n        <div class=\"tab-pane fade in\" id=\"memory_sockets\">\n            {% if analysis.memory.sockscan %}\n                {% include \"analysis/memory/_sockscan.html\" %}\n            {% elif analysis.memory.netscan %}\n                {% include \"analysis/memory/_netscan.html\" %}\n            {% endif %}\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "oldweb/templates/analysis/network/_dns.html",
    "content": "{% load analysis_tags %}\n<section id=\"domains\">\n    <h4>DNS</h4>\n    {% if analysis.network.dns %}\n        <table class=\"table table-striped table-bordered\">\n            <tr>\n                <th>Name</th>\n                <th>Response</th>\n                <th>Post-Analysis Lookup</th>\n            </tr>\n            {% for p in analysis.network.dns %}\n                <tr>\n                    <td>\n                        <a target=\"_blank\" href=\"{% url \"analysis.views.moloch\" host=p.request %}\">{{p.request}}</a>\n                    </td>\n                    <td>\n                        {% for a in p.answers %}\n                            {% if a.type == \"A\" %}\n                                {% if \":\" not in a.data %}\n                                    <a target=\"_blank\" href=\"{% url \"analysis.views.moloch\" ip=a.data %}\">\n                                        {{a.type}} {{a.data|linebreaksbr}}\n                                    </a>\n                                {% else %}\n                                    {{a.type}} {{a.data|linebreaksbr}}\n                                {% endif %}\n                                {% if not forloop.last %}<br/>{% endif %}\n                            {% elif a.type == \"CNAME\" %}\n                                <a target=\"_blank\" href=\"{% url \"analysis.views.moloch\" host=a.data %}\">\n                                    {{a.type}} {{a.data|linebreaksbr}}\n                                </a>\n                                {% if not forloop.last %}<br/>{% endif %}\n                            {% else %}\n                                {{a.type}} {{a.data|linebreaksbr}}{% if not forloop.last %}<br/>{% endif %}\n                            {% endif %}\n                        {% endfor %}\n                    </td>\n                    <td>\n                        {% if \":\" not in domainlookups|get_item:p.request %}\n                            <a target=\"_blank\" href=\"{% url \"analysis.views.moloch\" ip=domainlookups|get_item:p.request %}\">\n                                {{ domainlookups|get_item:p.request }}\n                            </a>\n                        {% else %}\n                            {{ domainlookups|get_item:p.request }}\n                        {% endif %}\n                    </td>\n                </tr>\n            {% endfor %}\n        </table>\n    {% else %}\n        <p>No domains contacted.</p>\n    {% endif %}\n</section>\n"
  },
  {
    "path": "oldweb/templates/analysis/network/_hosts.html",
    "content": "<section id=\"hosts\">\n    <h4>Hosts</h4>\n    {% if analysis.network.hosts %}\n        <table class=\"table table-striped table-bordered\">\n            <tr>\n                <th>IP</th>\n            </tr>\n            {% for host in analysis.network.hosts %}\n            <tr>\n                {% if host|slice:\":7\" != \"192.168\" and \":\" not in host %}\n                <td>\n                    <a target=\"_blank\" href=\"{% url \"analysis.views.moloch\" ip=host %}\">\n                        {{ host }}\n                        {% if host|isdeadip:analysis %}\n                            (dead IP/port - was unable to connect during analysis)\n                        {% endif %}\n                    </a>\n                </td>\n                {% endif %}\n            </tr>\n            {% endfor %}\n        </table>\n    {% else %}\n        <p>No hosts contacted.</p>\n    {% endif %}\n</section>\n"
  },
  {
    "path": "oldweb/templates/analysis/network/_http.html",
    "content": "<style>\npre {\n    /* Make the pre's in this page wrap to the next line instead of having\n    to move around with the cursor. */\n    white-space: pre-wrap;\n}\n</style>\n\n<h4>HTTP &amp; HTTPS Requests</h4>\n{% if analysis.network.http_ex or analysis.network.https_ex %}\n<table class=\"table table-striped table-bordered\" style=\"table-layout: fixed;\">\n    <tr>\n        <th>Request</th>\n        <th>Response</th>\n    </tr>\n    {% for http in analysis.network.http_ex %}\n    <tr>\n        <td style=\"word-wrap: break-word;\">\n            <pre>URL: http://{{http.host}}{{http.uri}}</pre>\n            <pre>{{http.request}}</pre>\n        </td>\n        <td style=\"word-wrap: break-word;\">\n            <pre>{{http.response}}</pre>\n        </td>\n    </tr>\n    {% endfor %}\n    {% for http in analysis.network.https_ex %}\n    <tr>\n        <td style=\"word-wrap: break-word;\">\n            <pre>URL: https://{{http.host}}{{http.uri}}</pre>\n            <pre>{{http.request}}</pre>\n        </td>\n        <td style=\"word-wrap: break-word;\">\n            <pre>{{http.response}}</pre>\n        </td>\n    </tr>\n    {% endfor %}\n</table>\n{% elif analysis.network.http %}\n<table class=\"table table-striped table-bordered\" style=\"table-layout: fixed;\">\n    <tr>\n        <th>URI</th>\n        <th>Data</th>\n    </tr>\n    {% for request in analysis.network.http %}\n    <tr>\n        <td style=\"word-wrap: break-word;\">{{request.uri}}</td>\n        <td style=\"word-wrap: break-word;\"><pre>{{request.data}}</pre></td>\n    </tr>\n    {% endfor %}\n</table>\n{% else %}\n<p>No HTTP requests performed.</p>\n{% endif %}\n"
  },
  {
    "path": "oldweb/templates/analysis/network/_icmp.html",
    "content": "<h4>ICMP traffic</h4>\n{% if analysis.network.icmp %}\n<table class=\"table table-striped table-bordered\" style=\"table-layout: fixed;\">\n    <tr>\n        <th>Source</th>\n        <th>Destination</th>\n        <th>ICMP Type</th>\n        <th>Data</th>\n    </tr>\n    {% for packet in analysis.network.icmp %}\n    <tr>\n        <td style=\"word-wrap: break-word;\">{{packet.src}}</td>\n        <td style=\"word-wrap: break-word;\">{{packet.dst}}</td>\n        <td style=\"word-wrap: break-word;\">{{packet.type}}</td>\n        <td style=\"word-wrap: break-word;\">{{packet.data}}</td>\n    </tr>\n    {% endfor %}\n</table>\n{% else %}\n<p>No ICMP traffic performed.</p>\n{% endif %}"
  },
  {
    "path": "oldweb/templates/analysis/network/_irc.html",
    "content": "<h4>IRC traffic</h4>\n{% if analysis.network.irc %}\n<table class=\"table table-striped table-bordered\" style=\"table-layout: fixed;\">\n    <tr>\n        <th>Command</th>\n        <th>Params</th>\n        <th>Type</th>\n    </tr>\n    {% for irc in analysis.network.irc %}\n    <tr>\n        <td style=\"word-wrap: break-word;\">{{irc.command}}</td>\n        <td style=\"word-wrap: break-word;\">{{irc.params}}</td>\n        <td style=\"word-wrap: break-word;\">{{irc.type}}</td>\n    </tr>\n    {% endfor %}\n</table>\n{% else %}\n<p>No IRC requests performed.</p>\n{% endif %}"
  },
  {
    "path": "oldweb/templates/analysis/network/_snort.html",
    "content": "<h4>Snort Alerts</h4>\n{% if analysis.snort.alerts %}\n    <table class=\"table table-striped table-bordered\">\n        <tr>\n            <th>Flow</th>\n            <th>SID</th>\n            <th>Message</th>\n        </tr>\n        {% for alert in analysis.snort.alerts %}\n        <tr>\n            <td>\n                {{alert.protocol}}\n                <a target=\"_blank\" href=\"{% url \"analysis.views.moloch\" src_ip=alert.src_ip src_port=alert.src_port %}\">{{alert.src_ip}}{% if alert.src_port %}:{{alert.src_port}}{% endif %}</a> -&gt;\n                <a target=\"_blank\" href=\"{% url \"analysis.views.moloch\" dst_ip=alert.dst_ip dst_port=alert.dst_port %}\">{{alert.dst_ip}}{% if alert.dst_port %}:{{alert.dst_port}}{% endif %}</a>\n            </td>\n            <td><a target=\"_blank\" href=\"{% url \"analysis.views.moloch\" sid=alert.sid %}\">{{alert.sid}}</a></td>\n            <td>{{alert.message}}</td>\n        </tr>\n        {% endfor %}\n    </table>\n{% else %}\n    <p>No Snort Alerts</p>\n{% endif %}\n"
  },
  {
    "path": "oldweb/templates/analysis/network/_suricata.html",
    "content": "<h4>Suricata Alerts</h4>\n{% if analysis.suricata.alerts %}\n    <table class=\"table table-striped table-bordered\">\n        <tr>\n            <th>Flow</th>\n            <th>SID</th>\n            <th>Signature</th>\n            <th>Category</th>\n        </tr>\n        {% for alert in analysis.suricata.alerts %}\n        <tr>\n            <td>\n                {{alert.protocol}}\n                <a target=\"_blank\" href=\"{% url \"analysis.views.moloch\" src_ip=alert.src_ip src_port=alert.src_port %}\">{{alert.src_ip}}:{{alert.src_port}}</a> -&gt;\n                <a target=\"_blank\" href=\"{% url \"analysis.views.moloch\" dst_ip=alert.dst_ip dst_port=alert.dst_port %}\">{{alert.dst_ip}}:{{alert.dst_port}}</a>\n            </td>\n            <td><a target=\"_blank\" href=\"{% url \"analysis.views.moloch\" sid=alert.sid %}\">{{alert.sid}}</a></td>\n            <td><a target=\"_blank\" href=\"{% url \"analysis.views.moloch\" sid=alert.sid %}\">{{alert.signature}}</a></td>\n            <td>{{alert.category}}</td>\n        </tr>\n        {% endfor %}\n    </table>\n{% else %}\n    <p>No Suricata Alerts</p>\n{% endif %}\n\n<h4>Suricata TLS</h4>\n{% if analysis.suricata.tls %}\n    <table class=\"table table-striped table-bordered\">\n        <tr>\n            <th>Flow</th>\n            <th>Issuer</th>\n            <th>Subject</th>\n            <th>Fingerprint</th>\n        </tr>\n        {% for tls in analysis.suricata.tls %}\n        <tr>\n            <td>\n                {{tls.version}} <br />\n                <a target=\"_blank\" href=\"{% url \"analysis.views.moloch\" src_ip=tls.src_ip src_port=tls.src_port %}\">{{tls.src_ip}}:{{tls.src_port}}</a> <br />\n                <a target=\"_blank\" href=\"{% url \"analysis.views.moloch\" dst_ip=tls.dst_ip dst_port=tls.dst_port %}\">{{tls.dst_ip}}:{{tls.dst_port}}</a>\n            </td>\n            <td>{{tls.issuer}}</td>\n            <td>{{tls.subject}}</td>\n            <td>{{tls.fingerprint}}</td>\n        </tr>\n        {% endfor %}\n    </table>\n\n{% else %}\n    <p>No Suricata TLS</p>\n{% endif %}\n"
  },
  {
    "path": "oldweb/templates/analysis/network/_tcp.html",
    "content": "{% load staticfiles %}\n{% load analysis_tags %}\n<script src=\"{% static \"js/hexdump.js\" %}\"></script>\n<section id=\"tcp\" class=\"tcpudp\">\n    <h4>TCP</h4>\n    {% if analysis.network.tcp %}\n        <div class=\"row\">\n            <div class=\"col-md-6\">\n                <table class=\"table table-bordered\">\n                    <tr>\n                        <th>Source</th>\n                        <th>Source Port</th>\n                        <th>Destination</th>\n                        <th>Destination Port</th>\n                    </tr>\n                    {% for p in analysis.network.tcp %}\n                        <tr class=\"connrow\" data=\"{{p.src}},{{p.sport}},{{p.dst}},{{p.dport}},tcp\">\n                            <td>{{p.src}}</td>\n                            <td>{{p.sport}}</td>\n                            <td>{{p.dst}} {{ iplookups|get_item:p.dst }}</td>\n                            <td>{{p.dport}}</td>\n                        </tr>\n                    {% endfor %}\n                </table>\n            </div>\n            <div class=\"stream col-md-6\"></div>\n        </div>\n    {% else %}\n        <p>No TCP connections recorded.</p>\n    {% endif %}\n</section>\n<script type='text/javascript'>\n$(function () {\n    $(\"section.tcpudp table tr.connrow\").click(function(e) {\n        var $section = $(this).closest(\"section\");\n\n        $section.find(\"table tr.connrow\").removeClass(\"row-active\");\n        $(this).addClass(\"row-active\"); \n\n        var choice = $(this).closest('tr').attr('data');\n\n        $.get(\"/analysis/{{analysis.info.id}}/pcapstream/\"+choice+\"/\", function(data, status, xhr) {\n            if (status == \"error\") {\n                $section.find(\"div.stream\").html(\"Error loading data. Please reload the page and if the error persists contact us.\");\n            } else {\n                var out = $(\"<ul class=\\\"tcp-flow\\\">\");\n                var first = undefined;\n                for (var i in data) {\n                    var p = data[i];\n                    var tuple = p.src + \":\" + p.sport + \" &rarr; \" + p.dst + \":\" + p.dport;\n\n                    if (first == undefined) first = tuple;\n                    if (first != tuple) { \n                        tcpclass = \"tcp-in\";\n                        icon = \"<i class=\\\"glyphicon glyphicon-chevron-down\\\" title=\\\"Inbound\\\"></i>\";\n                    } else {\n                        tcpclass = \"tcp-out\";\n                        icon = \"<i class=\\\"glyphicon glyphicon-chevron-up\\\" title=\\\"Outbound\\\"></i>\";\n                    }\n\n                    var li = $(\"<li class=\\\"\" + tcpclass + \"\\\">\" + icon + tuple + \"</li>\").append(\"<pre>\" + hexy(base64.decode(p.raw)) + \"</pre>\");\n                    out.append(li);\n                }\n                $section.find(\"div.stream\").html(out);\n            }\n        });\n    });\n    // autoload first one\n    var $row = $(\"section#tcp table tr.connrow\").first().click();\n    var $row = $(\"section#udp table tr.connrow\").first().click();\n})\n</script>\n"
  },
  {
    "path": "oldweb/templates/analysis/network/_udp.html",
    "content": "{% load staticfiles %}\n{% load analysis_tags %}\n<script src=\"{% static \"js/hexdump.js\" %}\"></script>\n<section id=\"udp\" class=\"tcpudp\">\n    <h4>UDP</h4>\n    {% if analysis.network.udp %}\n        <div class=\"row\">\n            <div class=\"col-md-6\">\n                <table class=\"table table-bordered\">\n                    <tr>\n                        <th>Source</th>\n                        <th>Source Port</th>\n                        <th>Destination</th>\n                        <th>Destination Port</th>\n                    </tr>\n                    {% for p in analysis.network.udp %}\n                        <tr class=\"connrow\" data=\"{{p.src}},{{p.sport}},{{p.dst}},{{p.dport}},udp\">\n                            <td>{{p.src}}</td>\n                            <td>{{p.sport}}</td>\n                            <td>{{p.dst}} {{ iplookups|get_item:p.dst }}</td>\n                            <td>{{p.dport}}</td>\n                        </tr>\n                    {% endfor %}\n                </table>\n            </div>\n            <div class=\"stream col-md-6\"></div>\n        </div>\n    {% else %}\n        <p>No UDP connections recorded.</p>\n    {% endif %}\n</section>\n"
  },
  {
    "path": "oldweb/templates/analysis/network/index.html",
    "content": "{% if not httpreplay.have %}\n<div class=\"alert alert-warning\">\n    <strong>Deprecation note:</strong>\n    While processing this analysis you did not have the httpreplay Python\n    library installed. Installing this library (i.e., pip install httpreplay)\n    will allow Cuckoo to do more proper PCAP analysis including but not\n    limited to showing full HTTP and HTTPS (!) requests and responses.\n    It is recommended that you install this library and possibly reprocess any\n    interesting analysis tasks.\n</div>\n{% elif httpreplay.deprecated %}\n<div class=\"alert alert-warning\">\n    <strong>Deprecation note:</strong>\n    You are using version {{ httpreplay.current_version }} of HTTPReplay,\n    rather than the latest version {{ httpreplay.latest_version }}, which may\n    not handle various corner cases and/or TLS cipher suites correctly. This\n    could result in not getting all the HTTP/HTTPS streams that are available\n    or corrupt some streams that were not handled correctly before. Please\n    upgrade it to the latest version (`pip install --upgrade httpreplay`).\n</div>\n{% endif %}\n\n<div class=\"tabbable tabs\">\n    <ul class=\"nav nav-pills\" style=\"margin-bottom: 0;\">\n        <li class=\"active\"><a href=\"#network_hosts_tab\" data-toggle=\"tab\">Hosts ({{ analysis.network.hosts|length }})</a></li>\n        <li><a href=\"#network_dns_tab\" data-toggle=\"tab\">DNS ({{ analysis.network.dns|length }})</a></li>\n        <li><a href=\"#network_tcp_tab\" data-toggle=\"tab\">TCP ({{ analysis.network.tcp|length }})</a></li>\n        <li><a href=\"#network_udp_tab\" data-toggle=\"tab\">UDP ({{ analysis.network.udp|length }})</a></li>\n        <li><a href=\"#network_http_tab\" data-toggle=\"tab\">\n            {% if analysis.network.http_ex %}\n                HTTP/HTTPS ({{ analysis.network.http_ex|add:analysis.network.https_ex|length }})\n            {% else %}\n                HTTP ({{ analysis.network.http|length }})\n            {% endif %}\n        </a></li>\n        <li><a href=\"#network_icmp_tab\" data-toggle=\"tab\">ICMP ({{ analysis.network.icmp|length }})</a></li>\n        <li><a href=\"#network_irc_tab\" data-toggle=\"tab\">IRC ({{ analysis.network.irc|length }})</a></li>\n        <li><a href=\"#network_suricata_tab\" data-toggle=\"tab\">Suricata ({{ analysis.suricata|custom_length:\"alerts tls\" }})</a></li>\n        <li><a href=\"#network_snort_tab\" data-toggle=\"tab\">Snort ({{ analysis.snort.alerts|length }})</a></li>\n        <li class=\"pull-right\">\n{% if analysis.network.pcap_id or analysis.network.mitmproxy_id %}\n    {% if analysis.network.pcap_id %}\n    <a class=\"btn btn-primary btn-small\" href=\"{% url \"analysis.views.file\" \"pcap\" analysis.network.pcap_id %}\">\n        <span class=\"glyphicon glyphicon-save\" aria-hidden=\"true\"></span>\n        Download PCAP\n    </a>\n    {% endif %}\n    {% if analysis.network.mitmproxy_id %}\n    <a class=\"btn btn-primary btn-small\" href=\"{% url \"analysis.views.file\" \"mitmproxy\" analysis.network.mitmproxy_id %}\">\n        <span class=\"glyphicon glyphicon-save\" aria-hidden=\"true\"></span>\n        Download mitmproxy dump\n     </a>\n    {% endif %}\n{% endif %}\n        </li>\n\n    </ul>\n    <div class=\"tab-content\">\n        <div class=\"tab-pane fade in active\" id=\"network_hosts_tab\">{% include \"analysis/network/_hosts.html\" %}</div>\n        <div class=\"tab-pane fade\" id=\"network_dns_tab\">{% include \"analysis/network/_dns.html\" %}</div>\n        <div class=\"tab-pane fade\" id=\"network_tcp_tab\">{% include \"analysis/network/_tcp.html\" %}</div>\n        <div class=\"tab-pane fade\" id=\"network_udp_tab\">{% include \"analysis/network/_udp.html\" %}</div>\n        <div class=\"tab-pane fade\" id=\"network_http_tab\">{% include \"analysis/network/_http.html\" %}</div>\n        <div class=\"tab-pane fade\" id=\"network_icmp_tab\">{% include \"analysis/network/_icmp.html\" %}</div>\n        <div class=\"tab-pane fade\" id=\"network_irc_tab\">{% include \"analysis/network/_irc.html\" %}</div>\n        <div class=\"tab-pane fade\" id=\"network_suricata_tab\">{% include \"analysis/network/_suricata.html\" %}</div>\n        <div class=\"tab-pane fade\" id=\"network_snort_tab\">{% include \"analysis/network/_snort.html\" %}</div>\n    </div>\n</div>\n"
  },
  {
    "path": "oldweb/templates/analysis/overview/_file.html",
    "content": "{% load analysis_tags %}\n<section id=\"file\">\n    <h4><span class=\"glyphicon glyphicon-file\" aria-hidden=\"true\"></span> File <i>{{analysis.target.file.name}}</i>\n    </h4>\n    <div class=\"panel panel-default\">\n        <table class=\"table table-striped\">\n            <tr>\n                <th class=\"text-right\">Size</th>\n                {% if analysis.target.file_id %}\n                    <td>{{ analysis.target.file.size | sizeof_fmt }}</td>\n                    <span class=\"pull-right\">\n                    <a class=\"btn btn-primary btn-xs\" href=\"{% url \"analysis.views.file\" \"sample\" analysis.target.file_id %}\">\n                        <span class=\"glyphicon glyphicon-save\" aria-hidden=\"true\"></span> Download\n                    </a>\n                    <a class=\"btn btn-info btn-xs\" href=\"{% url \"submission.views.resubmit\" analysis.info.id %}\">\n                        <span class=\"glyphicon glyphicon-refresh\" aria-hidden=\"true\"></span> Resubmit sample\n                    </a>\n                    </span>\n                {% endif %}\n                </td>\n            </tr>\n            <tr>\n                <th class=\"text-right\">Type</th>\n                <td>{{analysis.target.file.type}}</td>\n            </tr>\n            <tr>\n                <th class=\"text-right\">MD5</th>\n                <td class=\"break-everywhere\"><tt>{{analysis.target.file.md5}}</tt></td>\n            </tr>\n            <tr>\n                <th class=\"text-right\">SHA1</th>\n                <td class=\"break-everywhere\"><tt>{{analysis.target.file.sha1}}</tt></td>\n            </tr>\n            <tr>\n                <th class=\"text-right\">SHA256</th>\n                <td class=\"break-everywhere\"><tt>{{analysis.target.file.sha256}}</tt></td>\n            </tr>\n            <tr>\n                <th class=\"text-right\">SHA512</th>\n                <td class=\"break-everywhere\">\n                    <button class=\"btn btn-primary btn-xs\" type=\"button\" data-toggle=\"collapse\" data-target=\"#collapse-sha512\" aria-expanded=\"false\" aria-controls=\"collapseExample\">\n                    Show SHA512\n                    </button>\n                    <div class=\"collapse\" id=\"collapse-sha512\"><tt>{{analysis.target.file.sha512}}</tt></div>\n                </td>\n            </tr>\n            <tr>\n                <th class=\"text-right\">CRC32</th>\n                <td><tt>{{analysis.target.file.crc32}}</tt></td>\n            </tr>\n            <tr>\n                <th class=\"text-right\">ssdeep</th>\n                <td class=\"break-everywhere\"><tt>{{analysis.target.file.ssdeep}}</tt></td>\n            </tr>\n            {% if analysis.static.pdb_path %}\n            <tr>\n                <th class=\"text-right\">PDB Path</th>\n                <td>{{analysis.static.pdb_path}}</td>\n            </tr>\n            {% endif %}\n            <tr>\n                <th class=\"text-right\">Yara</th>\n                <td>\n                {% if analysis.target.file.yara %}\n                    <ul style=\"margin-bottom: 0;\">\n                    {% for sign in analysis.target.file.yara %}\n                        <li>{{sign.name}} - {{sign.meta.description}}</li>\n                    {% endfor %}\n                    </ul>\n                {% else %}\n                    None matched\n                {% endif %}\n                </td>\n            </tr>\n        </table>\n    </div>\n</section>\n"
  },
  {
    "path": "oldweb/templates/analysis/overview/_info.html",
    "content": "<h4><span class=\"glyphicon glyphicon-off\" aria-hidden-\"true\"></span> Information on Execution</h4>\n\n<div class=\"row\">\n    <div class=\"col-md-6\">\n        <section id=\"information\">\n            <div class=\"panel panel-primary\">\n                <div class=\"panel-heading\">\n                    <h4 class=\"panel-title\">Analysis\n                        <div class=\"pull-right\">\n                            <a class=\"btn btn-info btn-xs\" href=\"{% url \"compare.views.left\" analysis.info.id %}\">\n                                <span class=\"glyphicon glyphicon-transfer\" aria-hidden=\"true\"></span> Compare analysis to ...\n                            </a>\n                            <a class=\"btn btn-info btn-xs\" href=\"{% url \"analysis.views.export_analysis\" analysis.info.id %}\">\n                                <span class=\"glyphicon glyphicon-export\" aria-hidden=\"true\"></span> Export analysis\n                            </a>\n                        </div>\n                    </h4>\n                </div>\n                <table class=\"table table-striped\">\n                    <thead>\n                        <tr>\n                            <th>Category</th>\n                            <th>Started</th>\n                            <th>Completed</th>\n                            <th>Duration</th>\n                            <th>Log</th>\n                        </tr>\n                    </thead>\n                    <tbody>\n                        <tr>\n                            <td>{{analysis.info.category|upper}}</td>\n                            <td>{{analysis.info.started}}</td>\n                            <td>{{analysis.info.ended}}</td>\n                            <td>{{analysis.info.duration}} seconds</td>\n                            <td><a class=\"accordion-toggle\" data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#info-log\">Show Log</a></td>\n                        </tr>\n                    </tbody>\n                </table>\n            </div>\n\n            {% if analysis.debug.errors %}\n                <ul style=\"font-size: 16px;\">\n                {% for error in analysis.debug.errors %}\n                    <li class=\"text-danger\"><b>Error:</b> {{error}}</li>\n                {% endfor %}\n                </ul>\n            {% endif %}\n\n        </section>\n    </div>\n    <div class=\"col-md-6\">\n        {% if analysis.info.machine and analysis.info.machine.name %}\n            <section id=\"machine\">\n                <div class=\"panel panel-info\">\n                    <div class=\"panel-heading\">\n                        <h4 class=\"panel-title\">Machine</h4>\n                    </div>\n                    <table class=\"table table-striped\">\n                        <thead>\n                            <tr>\n                                <th>Name</th>\n                                <th>Label</th>\n                                <th>Started On</th>\n                                <th>Shutdown On</th>\n                            </tr>\n                        </thead>\n                        <tbody>\n                            <tr>\n                                <td>{{analysis.info.machine.name}}</td>\n                                <td>{{analysis.info.machine.label}}</td>\n                                <td>{{analysis.info.machine.started_on}}</td>\n                                <td>{{analysis.info.machine.shutdown_on}}</td>\n                            </tr>\n                        </tbody>\n                    </table>\n                    </div>\n            </section>\n        {% endif %}\n\n    </div>\n</div>\n\n<div class=\"row\">\n    <div class=\"col-md-12\">\n        <div id=\"info-log\" class=\"collapse\">\n            <h4><span class=\"glyphicon glyphicon-list\" aria-hidden=\"true\"></span> Activity Log</h4>\n            <pre>{{analysis.debug.log|join:\"\"}}</pre>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "oldweb/templates/analysis/overview/_screenshots.html",
    "content": "<section id=\"screenshots\">\n    <h4><span class=\"glyphicon glyphicon-camera\" aria-hidden=\"true\"></span> Screenshots</h4>\n    {% if analysis.shots %}\n        <div>\n        {% for shot in analysis.shots %}\n            <a data-lightbox=\"screenshot\" href=\"{% url \"analysis.views.file\" \"screenshot\" shot %}\">\n                <img class=\"opaque screenshot\" src=\"{% url \"analysis.views.file\" \"screenshot\" shot %}\" style=\"height: 120px;\" />\n            </a>\n        {% endfor %}\n        </div>\n    {% else %}\n        No screenshots available.\n    {% endif %}\n</section>\n"
  },
  {
    "path": "oldweb/templates/analysis/overview/_signatures.html",
    "content": "{% load analysis_tags %}\n\n<style type=\"text/css\">\n.signature {\n    padding: 5px;\n    padding-left: 10px;\n    margin-bottom: 5px;\n}\n\n.signature-process {\n    background-color: #d9edf7;\n    font-weight: bold;\n}\n\n.sign-key {\n    font-weight: bold;\n}\n</style>\n<section id=\"signatures\">\n    <h4><span class=\"glyphicon glyphicon-qrcode\" aria-hidden=\"true\"></span> Signatures</h4>\n    {% for signature in analysis.signatures %}\n        <a style=\"text-decoration: none;\" href=\"#signature_{{signature.name}}\" data-toggle=\"collapse\">\n        <div class=\"alert {% if signature.severity <= 1 %}alert-info{% elif signature.severity == 2 %}alert-warning{% else %}alert-danger{% endif %} signature\">\n        {{signature.description}}\n        {% if signature.marks %}\n            {% if signature.marks|length == 1 %}\n            (1 event)\n            {% elif signature.markcount == signature.marks|length %}\n            ({{ signature.marks|length }} events)\n            {% elif signature.markcount %}\n            ({{ signature.marks|length }} out of {{ signature.markcount }} events)\n            {% else %}\n            ({{ signature.marks|length }} events)\n            {% endif %}\n        {% endif %}\n        </div></a>\n\n        <div id=\"signature_{{signature.name}}\" class=\"collapse\">\n            <table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n                {% for mark in signature.marks|sigsort %}\n                    {% if mark.type == \"call\" %}\n                    {% if mark.first %}\n                        {# Close up the non-API call table #}\n                        {% if not forloop.first %}\n                        </table>\n                        <table class=\"table table-bordered\" style=\"table-layout: fixed;\">\n                        {% endif %}\n\n                        <thead>\n                            <tr>\n                                <th width=\"15%\">Time &amp; API</th>\n                                <th width=\"65%\">Arguments</th>\n                                <th width=\"5%\">Status</th>\n                                <th width=\"10%\">Return</th>\n                                <th width=\"5%\">Repeated</th>\n                            </tr>\n                        </thead>\n                    {% endif %}\n                    <tr>\n                        {% include \"analysis/behavior/_api_call.html\" with call=mark.call pid=mark.pid cid=mark.cid %}\n                    </tr>\n                    {% elif mark.type == \"ioc\" %}\n                    <tr>\n                        <td>{{ mark.category }}</td>\n                        <td>{{ mark.ioc }}</td>\n                        {% if mark.description %}\n                        <td>{{ mark.description }}</td>\n                        {% endif %}\n                    </tr>\n                    {% elif mark.type == \"generic\" %}\n                    <tr>\n                        {% for key, value in mark.items %}\n                            {% if key != \"type\" %}\n                                <td colspan=\"1\">{{ key }}</td>\n                                <td colspan=\"4\">{{ value }}</td>\n                            {% endif %}\n                        {% endfor %}\n                    </tr>\n                    {% endif %}\n                {% endfor %}\n            </table>\n        </div>\n    {% endfor %}\n    {% if not analysis.signatures %}\n        <p>No signatures</p>\n    {% endif %}\n</section>\n"
  },
  {
    "path": "oldweb/templates/analysis/overview/_summary.html",
    "content": "<section id=\"summary\">\n    <h4><span class=\"glyphicon glyphicon-list-alt\" aria-hidden=\"true\"></span> Summary</h4>\n    <div class=\"tabbable tabs\">\n        <ul class=\"nav nav-pills\" style=\"margin-bottom: 0;\">\n            <li class=\"active\"><a href=\"#summary_files\" data-toggle=\"tab\">Files</a></li>\n            <li><a href=\"#summary_keys\" data-toggle=\"tab\">Registry</a></li>\n            <li><a href=\"#summary_mutexes\" data-toggle=\"tab\">Mutexes</a></li>\n            <li><a href=\"#summary_directories\" data-toggle=\"tab\">Directories</a></li>\n            <li><a href=\"#summary_processes\" data-toggle=\"tab\">Processes</a></li>\n        </ul>\n        <div class=\"tab-content\">\n            <div class=\"tab-pane fade in active\" id=\"summary_files\">\n                {% for process in analysis.behavior.generic %}\n                    {% if process.summary %}\n                    <div class=\"panel panel-default\">\n                        <div class=\"panel-heading\"><h3 class=\"panel-title\">Process {{process.process_name}} ({{process.pid}})</h3></div>\n                        <ul class=\"list-group\">\n                        {% if process.summary.file_opened %}\n                            <li class=\"list-group-item\">\n                                <p><b>Opened files</b></p>\n                                <ul>\n                                {% for entry in process.summary.file_opened %}\n                                    <li>{{entry}}</li>\n                                {% endfor %}\n                                </ul>\n                            </li>\n                        {% endif %}\n\n                        {% if process.summary.file_written %}\n                            <li class=\"list-group-item\">\n                                <p><b>Written files</b></p>\n                                <ul>\n                                {% for entry in process.summary.file_written %}\n                                    <li>{{entry}}</li>\n                                {% endfor %}\n                                </ul>\n                            </li>\n                        {% endif %}\n\n                        {% if process.summary.file_read %}\n                            <li class=\"list-group-item\">\n                                <p><b>Files Read</b></p>\n                                <ul>\n                                {% for entry in process.summary.file_read %}\n                                    <li>{{entry}}</li>\n                                {% endfor %}\n                                </ul>\n                            </li>\n                        {% endif %}\n                        </ul>\n                    </div>\n                    {% endif %}\n                {% endfor %}\n            </div>\n            <div class=\"tab-pane fade\" id=\"summary_keys\">\n                {% for process in analysis.behavior.generic %}\n                    {% if process.summary %}\n                    <div class=\"panel panel-default\">\n                        <div class=\"panel-heading\"><h3 class=\"panel-title\">Process {{process.process_name}} ({{process.pid}})</h3></div>\n                        <ul class=\"list-group\">\n                        {% if process.summary.regkey_opened %}\n                            <li class=\"list-group-item\">\n                                <p><b>Registry keys opened</b></p>\n                                <ul>\n                                {% for entry in process.summary.regkey_opened %}\n                                    <li>{{entry}}</li>\n                                {% endfor %}\n                                </ul>\n                            </li>\n                        {% endif %}\n\n                        {% if process.summary.regkey_written %}\n                            <li class=\"list-group-item\">\n                                <p><b>Registry keys written</b></p>\n                                <ul>\n                                {% for entry in process.summary.regkey_written %}\n                                    <li>{{entry}}</li>\n                                {% endfor %}\n                                </ul>\n                            </li>\n                        {% endif %}\n\n                        {% if process.summary.regkey_read %}\n                            <li class=\"list-group-item\">\n                                <p><b>Registry keys read</b></p>\n                                <ul>\n                                {% for entry in process.summary.regkey_read %}\n                                    <li>{{entry}}</li>\n                                {% endfor %}\n                                </ul>\n                            </li>\n                        {% endif %}\n                        </ul>\n                    </div>\n                    {% endif %}\n                {% endfor %}\n            </div>\n            <div class=\"tab-pane fade\" id=\"summary_mutexes\">\n                {% for process in analysis.behavior.generic %}\n                    {% if process.summary %}\n                    <div class=\"panel panel-default\">\n                        <div class=\"panel-heading\"><h3 class=\"panel-title\">Process {{process.process_name}} ({{process.pid}})</h3></div>\n                        <ul class=\"list-group\">\n                        {% if process.summary.mutex %}\n                            <li class=\"list-group-item\">\n                                <p><b>Mutexes accessed</b></p>\n                                <ul>\n                                {% for entry in process.summary.mutex %}\n                                    <li>{{entry}}</li>\n                                {% endfor %}\n                                </ul>\n                            </li>\n                        {% endif %}\n                        </ul>\n                    </div>\n                    {% endif %}\n                {% endfor %}\n            </div>\n            <div class=\"tab-pane fade\" id=\"summary_directories\">\n                {% for process in analysis.behavior.generic %}\n                    {% if process.summary %}\n                    <div class=\"panel panel-default\">\n                        <div class=\"panel-heading\"><h3 class=\"panel-title\">Process {{process.process_name}} ({{process.pid}})</h3></div>\n                        <ul class=\"list-group\">\n                        {% if process.summary.directory_created %}\n                            <li class=\"list-group-item\">\n                                <p><b>Directories created</b></p>\n                                <ul>\n                                {% for entry in process.summary.directory_created %}\n                                    <li>{{entry}}</li>\n                                {% endfor %}\n                                </ul>\n                            </li>\n                        {% endif %}\n\n                        {% if process.summary.directory_removed %}\n                            <li class=\"list-group-item\">\n                                <p><b>Directories removed</b></p>\n                                <ul>\n                                {% for entry in process.summary.directory_removed %}\n                                    <li>{{entry}}</li>\n                                {% endfor %}\n                                </ul>\n                            </li>\n                        {% endif %}\n\n                        {% if process.summary.directory_enumerated %}\n                            <li class=\"list-group-item\">\n                                <p><b>Directories enumerated</b></p>\n                                <ul>\n                                {% for entry in process.summary.directory_enumerated %}\n                                    <li>{{entry}}</li>\n                                {% endfor %}\n                                </ul>\n                            </li>\n                        {% endif %}\n                        </ul>\n                    </div>\n                    {% endif %}\n                {% endfor %}\n            </div>\n            <div class=\"tab-pane fade\" id=\"summary_processes\">\n                {% for process in analysis.behavior.generic %}\n                    {% if process.summary %}\n                    <div class=\"panel panel-default\">\n                        <div class=\"panel-heading\"><h3 class=\"panel-title\">Process {{process.process_name}} ({{process.pid}})</h3></div>\n                        <ul class=\"list-group\">\n                        {% if process.summary.command_line %}\n                            <li class=\"list-group-item\">\n                                <p><b>Processes created</b></p>\n                                <ul>\n                                {% for entry in process.summary.command_line %}\n                                    <li>{{entry}}</li>\n                                {% endfor %}\n                                </ul>\n                            </li>\n                        {% endif %}\n\n                        {% if process.summary.dll_loaded %}\n                            <li class=\"list-group-item\">\n                                <p><b>DLLs Loaded</b></p>\n                                <ul>\n                                {% for entry in process.summary.dll_loaded %}\n                                    <li>{{entry}}</li>\n                                {% endfor %}\n                                </ul>\n                            </li>\n                        {% endif %}\n                        </ul>\n                    </div>\n                    {% endif %}\n                {% endfor %}\n            </div>\n        </div>\n    </div>\n</section>\n"
  },
  {
    "path": "oldweb/templates/analysis/overview/_url.html",
    "content": "<section id=\"url\">\n    <h4>URL Details</h4>\n    <div class=\"panel panel-default\">\n        <table class=\"table table-striped\">\n            <thead>\n                <tr>\n                    <th>URL</th>\n                </tr>\n            </thead>\n            <tbody>\n                <tr>\n                    <td><span class=\"mono\">{{analysis.target.url}}</span></td>\n                </tr>\n            </tbody>\n        </table>\n    </div>\n</section>\n"
  },
  {
    "path": "oldweb/templates/analysis/overview/index.html",
    "content": "<div class=\"row\">\n    <div class=\"col-md-8\">\n        {% if analysis.info.category == \"file\" and analysis.target %}\n            {% include \"analysis/overview/_file.html\" %}\n        {% elif analysis.info.category == \"url\" %}\n            {% include \"analysis/overview/_url.html\" %}\n        {% endif %}\n    </div>\n    <div class=\"col-md-4\">\n        <h4><span class=\"glyphicon glyphicon-fire\" aria-hidden=\"true\"></span> Score</h4>\n        {% if analysis.info.score < 1 %}\n        <div class=\"alert alert-success\">\n            This {{ analysis.info.category }} appears fairly benign with a score of <strong>{{ analysis.info.score }} out of 10.</strong>\n        </div>\n        {% elif analysis.info.score < 2 %}\n        <div class=\"alert alert-info\">\n            <p>This {{ analysis.info.category }} shows some signs of potential malicious behavior.</p>\n            <p>The score of this {{ analysis.info.category}} is <strong>{{ analysis.info.score }} out of 10.</strong></p>\n        </div>\n        {% elif analysis.info.score < 5 %}\n        <div class=\"alert alert-warning\">\n            This {{ analysis.info.category }} shows numerous signs of malicious behavior.\n            <br/><br/>\n            The score of this {{ analysis.info.category}} is <strong>{{ analysis.info.score }} out of 10.</strong>\n        </div>\n        {% else %}\n        <div class=\"alert alert-danger\">\n            <p>This {{ analysis.info.category }} is <b>very suspicious</b>, with a score of <strong>{{ analysis.info.score }} out of 10!</strong></p>\n        </div>\n        {% endif %}\n\n        <p>\n            <b>Please notice</b>: The scoring system is currently still in development and should be considered an <b><i>alpha</i></b> feature.\n        </p>\n    </div>\n    <div class=\"col-md-4\">\n        <h4><span class=\"glyphicon glyphicon-fire\" aria-hidden=\"true\"></span> Score</h4>\n        {% if analysis.info.score < 1 %}\n        <div class=\"alert alert-success\">\n            This {{ analysis.info.category }} appears fairly benign with a score of <strong>{{ analysis.info.score }} out of 10.</strong>\n        </div>\n        {% elif analysis.info.score < 2 %}\n        <div class=\"alert alert-info\">\n            <p>This {{ analysis.info.category }} shows some signs of potential malicious behavior.</p>\n            <p>The score of this {{ analysis.info.category}} is <strong>{{ analysis.info.score }} out of 10.</strong></p>\n        </div>\n        {% elif analysis.info.score < 5 %}\n        <div class=\"alert alert-warning\">\n            This {{ analysis.info.category }} shows numerous signs of malicious behavior.\n            <br/><br/>\n            The score of this {{ analysis.info.category}} is <strong>{{ analysis.info.score }} out of 10.</strong>\n        </div>\n        {% else %}\n        <div class=\"alert alert-danger\">\n            <p>This {{ analysis.info.category }} is <b>very suspicious</b>, with a score of <strong>{{ analysis.info.score }} out of 10!</strong></p>\n        </div>\n        {% endif %}\n        <p>\n            <b>Please notice</b>: The scoring system is currently still in development and should be considered an <b><i>alpha</i></b> feature.\n        </p>\n    </div>\n</div>\n\n{% include \"analysis/overview/_info.html\" %}\n\n<div class=\"row\">\n    <div class=\"col-md-12\">\n    {% include \"analysis/overview/_signatures.html\" %}\n    </div>\n    <div class=\"col-md-12\">\n    {% include \"analysis/overview/_screenshots.html\" %}\n    </div>\n</div>\n\n<div style=\"margin-top: 30px;\"></div>\n\n<h4><span class=\"glyphicon glyphicon-globe\" aria-hidden=\"true\"></span> Network</h4>\n<div class=\"row\">\n    <div class=\"col-xs-6\">{% include \"analysis/network/_dns.html\" %}</div>\n    <div class=\"col-xs-6\">{% include \"analysis/network/_hosts.html\" %}</div>\n</div>\n\n{% include \"analysis/overview/_summary.html\" %}\n"
  },
  {
    "path": "oldweb/templates/analysis/pending.html",
    "content": "{% extends \"base.html\" %}\n{% load staticfiles %}\n{% block content %}\n<div class=\"panel panel-primary\">\n    <div class=\"panel-heading\">\n        <h3 class=\"panel-title\">Pending Tasks</h3>\n    </div>\n    {% if tasks %}\n    <table class=\"table table-striped\" style=\"table-layout: fixed;\">\n        <thead>\n        <tr>\n            <th>Timestamp</th>\n            <th>Category</th>\n            <th>Target</th>\n            <th>Status</th>\n        </tr>\n        </thead>\n        <tbody>\n        {% for task in tasks %}\n            <tr>\n                <td>\n                {% if task.status == \"reported\" %}\n                    {{task.completed_on}}\n                {% else %}\n                    <span class=\"muted\">{{task.added_on}} (added on)</span>\n                {% endif %}\n                </td>\n                <td>{{task.category}}</td>\n                <td>{{task.target}}</td>\n                <td>\n                    {% if task.status == \"pending\" %}\n                        <span class=\"text-muted\">pending</span>\n                    {% elif task.status == \"running\" %}\n                        <span class=\"text-warning\">running</span>\n                    {% elif task.status == \"completed\" %}\n                        <span class=\"text-info\">completed</span>\n                    {% elif task.status == \"reported\" %}\n                        <span class=\"text-success\">reported</span>\n                    {% else %}\n                        <span class=\"text-danger\">{{task.status}}</span>\n                    {% endif %}\n                </td>\n            </tr>\n        {% endfor %}\n        </tbody>\n    </table>\n    {% else %}\n    <div class=\"panel-body\">No pending tasks.</div>\n    {% endif %}\n        </div>\n{% endblock %}\n"
  },
  {
    "path": "oldweb/templates/analysis/procmemory/index.html",
    "content": "{% if analysis.procmemory %}\n    {% for proc in analysis.procmemory %}\n        <div class=\"panel panel-default\">\n            <div class=\"panel-heading\"><h3 class=\"panel-title\">Process memory dump for PID <b>{{proc.pid}}</b> (dump {{proc.num}})</h3></div>\n            <div class=\"panel-body\">\n                {% if proc.procmem_id %}\n                    <a class=\"btn btn-primary btn-small\" href=\"{% url \"analysis.views.file\" \"memdump\" proc.procmem_id %}\">Download</a>\n                {% endif %}\n\n                {% if proc.extracted %}\n                    <b>Extracted/injected images (may contain unpacked executables)</b>\n                    <ul>\n                    {% for extracted in proc.extracted %}\n                        <li><a href=\"{% url \"analysis.views.file\" \"procmem_extracted\" extracted.extracted_id %}\" class=\"btn btn-primary btn-small\">Download</a></li>\n                    {% endfor %}\n                </ul>\n                {% endif %}\n\n                {% if proc.yara %}\n                    <b>Yara signatures matches on process memory</b>\n                    {% for match in proc.yara %}\n                        <p>Match: {{match.name}}\n                        <ul>\n                        {% for string in match.strings %}\n                            <li>{{string}}</li>\n                        {% endfor %}\n                        </ul></p>\n                    {% endfor %}\n                {% endif %}\n\n                {% if proc.urls %}\n                    <b>URLs found in process memory</b>\n                    <ul>\n                    {% for url in proc.urls %}\n                        <li>{{url}}</li>\n                    {% endfor %}\n                    </ul>\n                {% endif %}\n\n                {% if proc.procmem_id %}\n                <a href=\"{% url \"analysis.views.file\" \"procmem\" proc.procmem_id %}\" class=\"btn btn-primary btn-small\">Download</a>\n                {% endif %}\n            </div>\n        </div>\n    {% endfor %}\n{% endif %}\n"
  },
  {
    "path": "oldweb/templates/analysis/report.html",
    "content": "{% extends \"base.html\" %}\n{% load staticfiles %}\n{% load analysis_tags %}\n{% block content %}\n    <nav class=\"navbar navbar-default\" >\n        <ul class=\"nav nav-pills navbar-nav\">\n            <li class=\"active\"><a href=\"#overview\" data-toggle=\"tab\">\n                <span class=\"glyphicon glyphicon-list\" aria-hidden=\"true\"></span>\n                Summary</a>\n             </li>\n            <li><a href=\"#static\" data-toggle=\"tab\">\n                <span class=\"glyphicon glyphicon-stop\" aria-hidden=\"true\"></span>\n                Static Analysis</a>\n            </li>\n            {% if analysis.behavior.processes %}\n                <li><a href=\"#behavior\" data-toggle=\"tab\" id=\"graph_hook\">\n                    <span class=\"glyphicon glyphicon-play\" aria-hidden=\"true\"></span>\n                    Behavioral Analysis ({{ analysis.behavior.processes|filter_key_if_has:\"track\"|length }})</a>\n                </li>\n            {% endif %}\n            {% with suricata=analysis.suricata|custom_length:\"alerts tls\" snort=analysis.snort|custom_length:\"alerts\" %}\n                {% if analysis.network.http_ex or analysis.network.https_ex %}\n                    <li><a href=\"#network\" data-toggle=\"tab\">\n                        <span class=\"glyphicon glyphicon-cloud\" aria-hidden=\"true\"></span>\n                        Network Analysis ({{ analysis.network|custom_length:\"hosts dns tcp udp http_ex https_ex icmp irc\"|add:suricata|add:snort }})</a>\n                    </li>\n                {% else %}\n                    <li><a href=\"#network\" data-toggle=\"tab\">\n                        <span class=\"glyphicon glyphicon-cloud\" aria-hidden=\"true\"></span>\n                        Network Analysis ({{ analysis.network|custom_length:\"hosts dns tcp udp http icmp irc\"|add:suricata|add:snort }})</a>\n                    </li>\n                {% endif %}\n            {% endwith %}\n            {% if analysis.dropped %}\n                <li><a href=\"#dropped\" data-toggle=\"tab\">\n                   <span class=\"glyphicon glyphicon-file\" aria-hidden=\"true\"></span>\n                   Dropped Files ({{ analysis.dropped|length }})</a>\n                </li>\n            {% endif %}\n            {% if analysis.buffer %}\n                <li><a href=\"#buffer\" data-toggle=\"tab\">\n                    <span class=\"glyphicon glyphicon-th-large\" aria-hidden=\"true\"></span>\n                    Dropped Buffers ({{ analysis.buffer|length }})</a>\n                </li>\n            {% endif %}\n            {% if analysis.procmemory %}\n                <li><a href=\"#procmemory\" data-toggle=\"tab\">Process Memory ({{ analysis.procmemory|length }})</a></li>\n            {% endif %}\n            {% if analysis.memory %}\n                <li><a href=\"#memory\" data-toggle=\"tab\">Memory Analysis</a></li>\n            {% endif %}\n            <li><a href=\"#admin\" data-toggle=\"tab\">\n                <span class=\"glyphicon glyphicon-wrench\" aria-hidden=\"true\"></span>\n                Admin</a>\n            </li>\n        </ul>\n    </div>\n</div>\n\n<div class=\"tab-content content\" style=\"margin-top: -15px;\">\n    <div class=\"tab-pane fade in active\" id=\"overview\">\n        {% include \"analysis/overview/index.html\" %}\n    </div>\n    <div class=\"tab-pane fade\" id=\"static\">\n        {% include \"analysis/static/index.html\" %}\n    </div>\n    {% if analysis.behavior.processes %}\n        <div class=\"tab-pane fade\" id=\"behavior\">\n            {% include \"analysis/behavior/index.html\" %}\n        </div>\n    {% endif %}\n    <div class=\"tab-pane fade\" id=\"network\">\n        {% include \"analysis/network/index.html\" %}\n    </div>\n    <div class=\"tab-pane fade\" id=\"dropped\">\n        {% include \"analysis/dropped/index.html\" %}\n    </div>\n    <div class=\"tab-pane fade\" id=\"buffer\">\n        {% include \"analysis/buffers/index.html\" %}\n    </div>\n    {% if analysis.procmemory %}\n        <div class=\"tab-pane fade\" id=\"procmemory\">\n            {% include \"analysis/procmemory/index.html\" %}\n        </div>\n    {% endif %}\n    {% if analysis.memory %}\n        <div class=\"tab-pane fade\" id=\"memory\">\n            {% include \"analysis/memory/index.html\" %}\n        </div>\n    {% endif %}\n    <div class=\"tab-pane fade\" id=\"admin\">\n        {% include \"analysis/admin/index.html\" %}\n    </div>\n</div>\n{% endblock %}\n"
  },
  {
    "path": "oldweb/templates/analysis/search.html",
    "content": "{% extends \"base.html\" %}\n{% load staticfiles %}\n{% block content %}\n<div class=\"row\">\n    <div class=\"col-md-6 col-md-offset-3 center\">\n        <form class=\"form-inline\" role=\"form\" action=\"{% url \"analysis.views.search\" %}\" enctype=\"multipart/form-data\" method=\"post\">{% csrf_token %}\n            <p class=\"text-muted\" style=\"margin-top: 5px;\">For details on how to perform searches, get some <a href=\"#help\" data-toggle=\"collapse\">help</a>.</p>\n\n            <div class=\"form-group\">\n                <label class=\"sr-only\" for=\"form_search\">Search term</label>\n                <input type=\"text\" class=\"form-control\" id=\"form_search\" name=\"search\" size=50 placeholder=\"Search term\" />\n            </div>\n            <button type=\"submit\" class=\"btn btn-primary\">Search</button>\n        </form>\n    </div>\n</div>\n<div id=\"results\">\n    {% include \"analysis/search_results.html\" %}\n</div>\n\n<script type=\"text/javascript\">\n$(\"#form_search\").on(\"input\", function() {\n    $.post(\"{% url \"analysis.views.search\" %}\", {\n        raw: true,\n        search: $(\"#form_search\").val(),\n    }, function(data) {\n        $(\"#results\").html(data);\n    });\n});\n</script>\n{% endblock %}\n"
  },
  {
    "path": "oldweb/templates/analysis/search_results.html",
    "content": "{% if term %}\n    <h3>Term <span class=\"text-info\"><i>{{ term }}</i></span></h3>\n{% endif %}\n{% if analyses %}\n    <div class=\"panel panel-primary\">\n        <div class=\"panel-heading\">\n            <h3 class=\"panel-title\">Search Results</h3>\n        </div>\n        <table class=\"table table-striped\" style=\"table-layout: fixed;\">\n            <thead>\n            <tr>\n                <th style=\"width: 10%\">Task ID</th>\n                <th style=\"width: 90%\">Matches</th>\n            </tr>\n            </thead>\n            <tbody>\n            {% for analysis in analyses %}\n                <tr>\n                    <td><a href=\"{% url \"analysis.views.report\" analysis.task_id %}\">Analysis #{{ analysis.task_id }}</a></td>\n                    <td style=\"word-wrap: break-word;\">\n                        <table>\n                        {% for key, value in analysis.matches %}\n                            <tr>\n                                <td><span class=\"text-info\" style=\"font-family: monospace;\">{{ key }}:</span></td>\n                                <td><span style=\"font-family: monospace;padding-left: 15px;\">{{ value }}</span></td>\n                            </tr>\n                        {% endfor %}\n                        </table>\n                        {% if analysis.total %}<div>({{ analysis.total }} more matches)</div>{% endif %}\n                    </td>\n                </tr>\n            {% endfor %}\n            </tbody>\n        </table>\n    </div>\n{% elif analyses != None %}\n    <div class=\"alert alert-info\" style=\"text-align: center;\"><b>No results found.</b></div>\n{% else %}\n    {% if error %}\n        <div class=\"alert alert-error\" style=\"text-align: center;\"><b>{{ error }}</b></div>\n    {% endif %}\n{% endif %}\n"
  },
  {
    "path": "oldweb/templates/analysis/static/_antivirus.html",
    "content": "<section id=\"static_antivirus\">\n    {% if analysis.virustotal and analysis.virustotal.response_code %}\n    <table class=\"table table-striped table-bordered\">\n        <tr>\n            <th>Antivirus</th>\n            {% if analysis.info.category == \"file\" %}\n                <th>Signature</th>\n            {% else %}\n                <th>Result</th>\n            {% endif %}\n        </tr>\n        {% for av, values in analysis.virustotal.scans.items %}\n        <tr>\n            <td>{{av}}</td>\n            <td>\n                {% if analysis.info.category == \"file\" %}\n                    {% if not values.result %}\n                        <span class=\"text-muted\">Clean</span>\n                    {% else %}\n                        <span class=\"text-danger\">{{values.result}}</span>\n                    {% endif %}\n                {% else %}\n                    {% if not values.detected %}\n                        <span class=\"text-muted\">\n                    {% else %}\n                        <span class=\"text-danger\">\n                    {% endif %}\n                    {{ values.result|title }}\n                    </span>\n                {% endif %}\n            </td>\n        </tr>\n        {% endfor %}\n    </table>\n    {% else %}\n        {% if analysis.virustotal.summary.permalink %}\n            <a href=\"{{analysis.virustotal.summary.permalink}}\">Your file is being analysed</a>\n        {% else %}\n            No antivirus signatures available.\n        {% endif %}\n    {% endif %}\n</section>\n"
  },
  {
    "path": "oldweb/templates/analysis/static/_pe32.html",
    "content": "<section id=\"static_analysis\">\n    {% if analysis.static %}\n        {% if analysis.static.pe_timestamp %}\n            <div>\n                <h4><span class=\"glyphicon glyphicon-time\" aria-hidden=\"true\"></span> PE Compile Time</h4>\n                <div class=\"well\">{{analysis.static.pe_timestamp}}</div>\n            </div>\n            <hr />\n        {% endif %}\n        {% if analysis.static.pdb_path %}\n            <div>\n                <h4>PDB Path</h4>\n                <div class=\"well\">{{analysis.static.pdb_path}}</div>\n            </div>\n        {% endif %}\n        {% if analysis.static.pe_imphash %}\n            <div>\n                <h4>PE Imphash</h4>\n                <div class=\"well\">{{analysis.static.pe_imphash}}</div>\n            </div>\n            <hr />\n        {% endif %}\n        {% if analysis.static.signature %}\n            <div>\n                <h4>Signing Certificate</h4>\n                <div id=\"pe_signature\">\n                    {% for cert in analysis.static.signature %}\n                    <table class=\"table table-striped table-bordered\">\n                        <colgroup>\n                            <col width=\"150\" />\n                            <col width=\"*\" />\n                        </colgroup>\n                        <tr>\n                            <th>MD5</th>\n                            <td>{{cert.md5}}</td>\n                        </tr>\n                        <tr>\n                            <th>SHA1</th>\n                            <td>{{cert.sha1}}</td>\n                        </tr>\n                        <tr>\n                            <th>Serial Number</th>\n                            <td>{{cert.serial_number}}</td>\n                        </tr>\n                        <tr>\n                            <th>Common Name</th>\n                            <td>{{cert.common_name}}</td>\n                        </tr>\n                        <tr>\n                            <th>Country</th>\n                            <td>{{cert.country}}</td>\n                        </tr>\n                        <tr>\n                            <th>Locality</th>\n                            <td>{{cert.locality}}</td>\n                        </tr>\n                    </table>\n                    {% endfor %}\n                </div>\n            </div>\n            <hr />\n        {% endif %}\n        {% if analysis.static.pe_versioninfo %}\n            <div>\n                <h4>Version Infos</h4>\n                <div id=\"pe_versioninfo\">\n                    <table class=\"table table-striped table-bordered\">\n                        <colgroup>\n                            <col width=\"150\" />\n                            <col width=\"*\" />\n                        </colgroup>\n                        {% for info in analysis.static.pe_versioninfo %}\n                            <tr>\n                                <th>{{info.name}}</th>\n                                <td><span class=\"mono\">{{info.value}}</span></td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                </div>\n            </div>\n            <hr />\n        {% endif %}\n        {% if analysis.static.peid_signatures %}\n            <div>\n                <h4>PEiD Signatures</h4>\n                <div id=\"peid_signatures\">\n                    <table class=\"table table-striped table-bordered\">\n                    {% for sig in analysis.static.peid_signatures %}\n                        <tr><td>{{sig}}</td></tr>\n                    {% endfor %}\n                    </table>\n                </div>\n            </div>\n            <hr />\n        {% endif %}\n        {% if analysis.static.pe_sections %}\n            <div>\n                <h4>Sections</h4>\n                <div id=\"pe_sections\">\n                    <table class=\"table table-striped table-bordered\">\n                        <tr>\n                            <th>Name</th>\n                            <th>Virtual Address</th>\n                            <th>Virtual Size</th>\n                            <th>Size of Raw Data</th>\n                            <th>Entropy</th>\n                        </tr>\n                        {% for section in analysis.static.pe_sections %}\n                            <tr>\n                                <td>{{section.name}}</td>\n                                <td>{{section.virtual_address}}</td>\n                                <td>{{section.virtual_size}}</td>\n                                <td>{{section.size_of_data}}</td>\n                                <td>{{section.entropy}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                </div>\n            </div>\n            <hr />\n        {% endif %}\n\n        {% if analysis.static.pe_resources %}\n            <div>\n                <h4>Resources</h4>\n                <div id=\"pe_resources\">\n                    <table class=\"table table-striped table-bordered\">\n                        <tr>\n                            <th>Name</th>\n                            <th>Offset</th>\n                            <th>Size</th>\n                            <th>Language</th>\n                            <th>Sub-language</th>\n                            <th>File type</th>\n                        </tr>\n                        {% for section in analysis.static.pe_resources %}\n                            <tr>\n                                <td>{{section.name}}</td>\n                                <td>{{section.offset}}</td>\n                                <td>{{section.size}}</td>\n                                <td>{{section.language}}</td>\n                                <td>{{section.sublanguage}}</td>\n                                <td>{{section.filetype}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                </div>\n            </div>\n            <hr />\n        {% endif %}\n\n        {% if analysis.static.pe_imports %}\n            <div>\n                <h4>Imports</h4>\n                <div id=\"pe_imports\">\n                    {% for library in analysis.static.pe_imports %}\n                        <div class=\"well\">\n                            <div><strong>Library {{library.dll}}</strong>:</div>\n                            {% for function in library.imports %}\n                                <div>&bull; <span class=\"mono\">{{function.address}} <a href=\"http://social.msdn.microsoft.com/Search/en-US/windows/desktop?query={{function.name}}\">{{function.name}}</a></span></div>\n                            {% endfor %}\n                        </div>\n                    {% endfor %}\n                </div>\n            </div>\n            <hr />\n        {% endif %}\n\n        {% if analysis.static.pe_exports %}\n            <div>\n                <h4>Exports</h4>\n                <div id=\"pe_exports\">\n                    <table class=\"table table-striped table-bordered\">\n                        <tr>\n                            <th>Ordinal</th>\n                            <th>Address</th>\n                            <th>Name</th>\n                        </tr>\n                        {% for export in analysis.static.pe_exports %}\n                            <tr>\n                                <td>{{export.ordinal}}</td>\n                                <td>{{export.address}}</td>\n                                <td>{{export.name}}</td>\n                            </tr>\n                        {% endfor %}\n                    </table>\n                </div>\n            </div>\n        {% endif %}\n    {% else %}\n        Nothing to display.\n    {% endif %}\n</section>\n"
  },
  {
    "path": "oldweb/templates/analysis/static/_strings.html",
    "content": "<section id=\"static_strings\">\n    <div class=\"well\" style=\"font-family: monospace;\">\n        {% for string in analysis.strings %}\n            <div>{{string}}</div>\n        {% endfor %}\n    </div>\n</section>"
  },
  {
    "path": "oldweb/templates/analysis/static/index.html",
    "content": "<div class=\"tabbable tabs\">\n    <ul class=\"nav nav-pills\" style=\"margin-bottom: 0;\">\n        <li class=\"active\"><a href=\"#static_analysis_tab\" data-toggle=\"tab\">Static Analysis</a></li>\n        <li><a href=\"#static_strings_tab\" data-toggle=\"tab\">Strings</a></li>\n        <li><a href=\"#static_antivirus_tab\" data-toggle=\"tab\">Antivirus</a></li>\n    </ul>\n    <div class=\"tab-content\">\n        <div class=\"tab-pane fade in active\" id=\"static_analysis_tab\">\n            {% if \"PE32\" in analysis.target.file.type %}\n                {% include \"analysis/static/_pe32.html\" %}\n            {% else %}\n                No static analysis available.\n            {% endif %}\n        </div>\n        <div class=\"tab-pane fade\" id=\"static_strings_tab\">\n            {% include \"analysis/static/_strings.html\" %}\n        </div>\n        <div class=\"tab-pane fade\" id=\"static_antivirus_tab\">\n            {% include \"analysis/static/_antivirus.html\" %}\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "oldweb/templates/base.html",
    "content": "{%include \"header.html\" %}\n<div class=\"\" style=\"padding-left: 30px; padding-right: 30px; padding-top: 20px;\">\n{% autoescape on %}\n{% block content %}{% endblock %}\n{% endautoescape %}\n</div>\n{%include \"footer.html\" %}\n"
  },
  {
    "path": "oldweb/templates/compare/_info.html",
    "content": "<table class=\"table table-striped table-bordered\">\n    <thead>\n        <tr>\n            <th>ID</th>\n            <th>Category</th>\n            {% if record.target.category == \"url\" %}\n            <th>URL</th>\n            {% else %}\n            <th>Name</th>\n            <th>MD5</th>\n            {% endif %}\n            <th>Machine</th>\n            <th>Completed On</th>\n            <th>Duration</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td>{{record.info.id}}</td>\n            <td>{{record.info.category|upper}}</td>\n            {% if record.target.category == \"url\" %}\n            <td><a href=\"{% url \"analysis.views.report\" record.info.id %}\">{{record.target.url}}</a></td>\n            {% else %}\n            <td>{{record.target.file.name}}</td>\n            <td><a href=\"{% url \"analysis.views.report\" record.info.id %}\">{{record.target.file.md5}}</a></td>\n            {% endif %}\n            <td>{{record.info.machine.name}}</td>\n            <td>{{record.info.ended}}</td>\n            <td>{{record.info.duration}} seconds</td>\n        </tr>\n    </tbody>\n</table>\n"
  },
  {
    "path": "oldweb/templates/compare/_summary_table.html",
    "content": "<table class=\"table table-striped table-bordered\">\n    <thead>\n        <tr>\n            <th>ID</th>\n            <th>Target</th>\n            <th>Machine</th>\n            <th>Completed On</th>\n            <th>Duration</th>\n            <th>Select</th>\n        </tr>\n    </thead>\n    <tbody>\n        {% for record in records %}\n            <tr>\n                <td>{{record.info.id}}</td>\n                {% if record.target.category == \"url\" %}\n                <td>{{record.target.url}}</td>\n                {% else %}\n                <td>{{record.target.file.name}}</td>\n                {% endif %}\n                <td>{{record.info.machine.name}}</td>\n                <td>{{record.info.ended}}</td>\n                <td>{{record.info.duration}} seconds</td>\n                <td><a class=\"btn btn-primary btn-small\" href=\"{% url \"compare.views.both\" left.info.id record.info.id %}\">Select</a></td>\n            </tr>\n        {% endfor %}\n    </tbody>\n</table>"
  },
  {
    "path": "oldweb/templates/compare/both.html",
    "content": "{% extends \"base.html\" %}\n{% load staticfiles %}\n{% block content %}\n<p style=\"margin-bottom: 10px;\"><img src=\"{% static \"graphic/cuckoo.png\" %}\" /></p>\n\n<script type='text/javascript'>\n$(function () {\n  $('[data-toggle=\"tooltip\"]').tooltip()\n})\n</script>\n\n<div class=\"row\">\n    <div class=\"col-md-6\" style=\"border-right: 1px dashed #ddd;\">\n        <h2 style=\"text-align: center;\">Analysis 1</h2>\n\n        {% include \"compare/_info.html\" with record=left %}\n\n        <div class=\"col-md-8\">\n            <h4>Execution Graph</h4>\n\n            <p>This graph gives you an abstracted overview of the execution of the analyzer file. More specifically it represents the percentage of occurrences of behavioral events classified by category: the bigger the colored block, the higher is the count of events for the respective category performed by the analyzed malware</p>\n            <p>Comparing two graphs from different analyses can give you help estimate how much the behavior of the two files differ.</p>\n            <p>Following are the colored categories:</p>\n\n            <p style=\"text-align: center;\">\n                <span class=\"badge registry\" style=\"color:black;\">registry</span>\n                <span class=\"badge file\" style=\"color:black;\">file</span>\n                <span class=\"badge system\" style=\"color:black;\">system</span>\n                <span class=\"badge network\" style=\"color:black;\">network</span>                \n                <span class=\"badge process\" style=\"color:black;\">process</span>\n                <span class=\"badge services\" style=\"color:black;\">services</span>\n                <span class=\"badge synchronization\" style=\"color:black;\">synchronization</span>\n                <span class=\"badge windows\" style=\"color:black;\">windows</span>\n            </p>\n        </div>\n\n        <div class=\"col-md-4\">\n            <div style=\"height: 300px;border: 2px solid #666;\">\n                {% for cat, count in left_counts.items %}\n                    <div style=\"height: {{count}}%\" class=\"{{cat}}\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"{{count}}% {{cat}}\"></div>\n                {% endfor %}\n            </div>\n        </div>\n    </div>\n    <div class=\"col-md-6\">\n        <h2 style=\"text-align: center;\">Analysis 2</h2>\n\n        {% include \"compare/_info.html\" with record=right %}\n\n        <div class=\"col-md-4\">\n            <div style=\"height: 300px;border: 2px solid #666;\">\n                {% for cat, count in right_counts.items %}\n                    <div style=\"height: {{count}}%\" class=\"{{cat}}\" data-toggle=\"tooltip\" data-placement=\"top\" title=\"{{count}}% {{cat}}\"></div>\n                {% endfor %}\n            </div>\n        </div>\n\n        <div class=\"col-md-8\">\n        </div>\n    </div>\n</div>\n{% endblock %}\n"
  },
  {
    "path": "oldweb/templates/compare/hash.html",
    "content": "{% extends \"base.html\" %}\n{% load staticfiles %}\n{% block content %}\n<p style=\"margin-bottom: 10px;\"><img src=\"{% static \"graphic/cuckoo.png\" %}\" /></p>\n\n<div class=\"row\">\n    <div class=\"col-md-6\" style=\"border-right: 1px dashed #ddd;\">\n        <h2 style=\"text-align: center;\">Analysis 1</h2>\n\n        {% include \"compare/_info.html\" with record=left %}\n    </div>\n    <div class=\"col-md-6\">\n        <h2 style=\"text-align: center;\">Analysis 2</h2>\n\n        <p>You need to select the second analysis.</p>\n        {% if records.count > 0 %}\n            <p>Following are all the analyses of the file with provided MD5 or pattern <b>{{hash}}</b>:</p>\n            {% include \"compare/_summary_table.html\" %}\n        {% else %}\n            <p><b>There is no analysis for the specified file or you selected the same selected analysis.</b></p>\n        {% endif %}\n    </div>\n</div>\n{% endblock %}\n"
  },
  {
    "path": "oldweb/templates/compare/left.html",
    "content": "{% extends \"base.html\" %}\n{% load staticfiles %}\n{% block content %}\n<p style=\"margin-bottom: 10px;\"><img src=\"{% static \"graphic/cuckoo.png\" %}\" /></p>\n\n<script type='text/javascript'>\n$(function () {\n    $(\"#hash\").submit(function(e) {\n        e.preventDefault();\n        var $choice = $(this).find(\"input[name='hash']\");\n        if ($choice.length) {\n            window.location = $choice.val();\n        }\n    });\n})\n</script>\n\n<div class=\"row\">\n    <div class=\"col-md-6\" style=\"border-right: 1px dashed #ddd;\">\n        <h2 style=\"text-align: center;\">Analysis 1</h2>\n\n        {% include \"compare/_info.html\" with record=left %}\n    </div>\n    <div class=\"col-md-6\">\n        <h2 style=\"text-align: center;\">Analysis 2</h2>\n\n        <p>You need to select the second analysis.</p>\n        {% if records.count > 0 %}\n            <p>Following are all the other analyses of the same file or URL:</p>\n            {% include \"compare/_summary_table.html\" %}\n        {% else %}\n            <p><b>There is no other analysis for the same file or URL.</b></p>\n        {% endif %}\n\n        <p>If you want to compare to a different analysis, please provide an MD5 hash or a URL:</p>\n        <form class=\"form-inline\" action=\"#\" id=\"hash\">\n            <input class=\"form-control\" type=\"text\" name=\"hash\" /> <button type=\"submit\" class=\"btn btn-primary btn-small\">Search</button>\n        </form>\n    </div>\n</div>\n{% endblock %}\n"
  },
  {
    "path": "oldweb/templates/dashboard/index.html",
    "content": "{% extends \"base.html\" %}\n{% load staticfiles %}\n{% block content %}\n\n<div class=\"row\">\n    <div class=\"col-xs-6\">\n        <div class=\"jumbotron\" style=\"text-align: center;\">\n            <h1>{{report.total_tasks}}</h1>\n            Total tasks\n        </div>\n    </div>\n    <div class=\"col-xs-6\">\n        <div class=\"jumbotron\" style=\"text-align: center;\">\n            <h1>{{report.total_samples}}</h1>\n            Total samples\n        </div>\n    </div>\n</div>\n\n<div class=\"panel panel-primary\">\n    <div class=\"panel-heading\">\n        <h3 class=\"panel-title\">States</h3>\n    </div>\n    <table class=\"table table-striped\" style=\"table-layout: fixed;\">\n        <thead>\n        <tr>\n            <th>State</th>\n            <th>Count</th>\n        </tr>\n        </thead>\n        <tbody>\n        {% for state, count in report.states_count.items %}\n            <tr>\n                <td>{{state}}</td>\n                <td>{{count}}</td>\n            </tr>\n        {% endfor %}\n        </tbody>\n    </table>\n</div>\n\n\n{% endblock %}\n"
  },
  {
    "path": "oldweb/templates/error.html",
    "content": "{% extends \"base.html\" %}\n{% load staticfiles %}\n{% block content %}\n<div class=\"alert alert-danger\"><b>ERROR :-(</b><br />{{error}}</div>\n{% endblock %}\n"
  },
  {
    "path": "oldweb/templates/footer.html",
    "content": "{% load staticfiles %}\n    <!-- Footer\n    ================================================== -->\n    <footer>\n        <div class=\"container-fluid center\">\n            <a href=\"#\">Back to the top</a>\n        </div>\n    </footer>\n    <div id=\"footer-extra\">\n        <div class=\"container-fluid center\">\n            <div>&copy;2020-2021 <a href=\"https://github.com/PowerLZY/Bold-Falcon\" target=\"_blank\">Bold-Falocn Sandbox</a></div>\n        </div>\n    </div>\n    <script src=\"{% static \"js/bootstrap.min.js\" %}\"></script>\n    <script src=\"{% static \"js/bootstrap-fileupload.js\" %}\"></script>\n    <script src=\"{% static \"js/lightbox.js\" %}\"></script>\n    <script src=\"{% static \"js/app.js\" %}\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "oldweb/templates/header.html",
    "content": "{% load staticfiles %}\n<!DOCTYPE html>\n<html lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta charset=\"utf-8\">\n<title>Bold-Falcon Sandbox</title>\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<meta name=\"description\" content=\"Bold-Falcon\">\n<meta name=\"author\" content=\"Bold-Falcon\">\n\n<!-- Le styles -->\n<link href=\"{% static \"css/bootstrap.min.css\" %}\" rel=\"stylesheet\">\n<link href=\"{% static \"css/style.css\" %}\" rel=\"stylesheet\">\n<link href=\"{% static \"css/lightbox.css\" %}\" rel=\"stylesheet\">\n<script src=\"{% static \"js/jquery.js\" %}\"></script>\n</head>\n<body>\n<header>\n    <nav class=\"navbar navbar-default navbar-fixed-top\" role=\"navigation\">\n        <div class=\"navbar-header\">\n            <button class=\"navbar-toggle\" type=\"button\" data-toggle=\"collapse\" data-target=\".bs-navbar-collapse\">\n                <span class=\"sr-only\">Toggle navigation</span>\n                <span class=\"icon-bar\"></span>\n                <span class=\"icon-bar\"></span>\n                <span class=\"icon-bar\"></span>\n            </button>\n        </div>\n        <nav class=\"collapse navbar-collapse bs-navbar-collapse\" role=\"navigation\">\n            <ul class=\"nav navbar-nav\">\n                <li><img style=\"margin: 10px 10px -10px 30px; height: 46px;\" src=\"{% static \"graphic/test.png\" %}\" /></li>\n                <li><a href=\"{% url \"dashboard.views.index\" %}\"><span class=\"glyphicon glyphicon-globe\"></span> Homepage</a></li>\n                <li><a href=\"{% url \"analysis.views.index\" %}\"><span class=\"glyphicon glyphicon-tasks\"></span> Recent</a></li>\n                <li><a href=\"{% url \"analysis.views.pending\" %}\"><span class=\"glyphicon glyphicon-time\"></span> Pending</a></li>\n                <li><a href=\"{% url \"analysis.views.search\" %}\"><span class=\"glyphicon glyphicon-search\"></span> Search</a></li>\n                <li><a href=\"{% url \"submission.views.index\" %}\"><span class=\"glyphicon glyphicon-open\"></span> Submit</a></li>\n                <li><a href=\"{% url \"analysis.views.import_analysis\" %}\"><span class=\"glyphicon glyphicon-import\"></span> Import</a></li>\n            </ul>\n        </nav>\n    </nav>\n</header>\n"
  },
  {
    "path": "oldweb/templates/standalone_error.html",
    "content": "<div class=\"alert alert-danger\"><b>ERROR :-(</b><br />{{error}}</div>\n"
  },
  {
    "path": "oldweb/templates/submission/complete.html",
    "content": "{% extends \"base.html\" %}\n{% load staticfiles %}\n{% block content %}\n<div class=\"alert alert-success\"><h4>Submission complete!</h4>\nThe following tasks were added successfully:\n{% for task in tasks %}\n    <a href=\"{% url \"submission.views.status\" task %}\">{{task}}</a>\n{% endfor %}.\n<br /><br />\nClick on the links to monitor the status of the submission:<br />\n{% for task in tasks %}\n    <a href=\"{% url \"submission.views.status\" task %}\">{{ baseurl }}{% url \"submission.views.status\" task %}</a><br />\n{% endfor %}\n</div>\n{% endblock %}\n"
  },
  {
    "path": "oldweb/templates/submission/index.html",
    "content": "{% extends \"base.html\" %}\n{% load staticfiles %}\n{% block content %}\n<style>\n.btn-file {\n    position: relative;\n    overflow: hidden;\n}\n.btn-file input[type=file] {\n    position: absolute;\n    top: 0;\n    right: 0;\n    min-width: 100%;\n    min-height: 100%;\n    font-size: 999px;\n    text-align: right;\n    filter: alpha(opacity=0);\n    opacity: 0;\n    background: red;\n    cursor: inherit;\n    display: block;\n}\ninput[readonly] {\n    background-color: white !important;\n    cursor: text !important;\n}\n</style>\n<script type='text/javascript'>\n$(document)\n    .on('change', '.btn-file :file', function() {\n        var input = $(this),\n        numFiles = input.get(0).files ? input.get(0).files.length : 1,\n        label = input.val().replace(/\\\\/g, '/').replace(/.*\\//, '');\n        input.trigger('fileselect', [numFiles, label]);\n});\n\n$(document).ready( function() {\n    $('.btn-file :file').on('fileselect', function(event, numFiles, label) {\n\n        var input = $(this).parents('.input-group').find(':text'),\n            log = numFiles > 1 ? numFiles + ' files selected' : label;\n\n        if( input.length ) {\n            input.val(log);\n        } else {\n            if( log ) alert(log);\n        }\n\n    });\n});\n</script>\n<div class=\"row\">\n    <div class=\"col-md-6 col-md-offset-3 center\">\n\n        <form role=\"form\" action=\"\" method=\"post\" enctype=\"multipart/form-data\">{% csrf_token %}\n            <div class=\"tabbable\">\n                {% if not resubmit %}\n                <ul class=\"nav nav-tabs\">\n                    <li class=\"active\"><a href=\"#file\" data-toggle=\"tab\"><span class=\"glyphicon glyphicon-file\"></span> File</a></li>\n                    <li><a href=\"#url\" data-toggle=\"tab\"><span class=\"glyphicon glyphicon-globe\"></span> URL</a></li>\n                </ul>\n                {% endif %}\n                <div class=\"tab-content\">\n                    <div class=\"tab-pane fade {% if not resubmit or resubmit == \"file\" %}in active{% endif %}\" id=\"file\">\n                        {% if resubmit == \"file\" %}\n                        <label style=\"display: flex; color: #337ab7;\">Chosen file to resubmit</label>\n                        <input name=\"category\" type=\"text\" class=\"form-control hidden\" value=\"file\">\n                        {% if dropped_file %}\n                        <input name=\"category\" type=\"text\" class=\"form-control hidden\" value=\"dropped_file\">\n                        {% endif %}\n                        {% endif %}\n                        <div class=\"input-group col-md-6\">\n                            <span class=\"input-group-btn\">\n                            {% if resubmit %}\n                                <input type=\"text\" class=\"form-control\" disabled value=\"{{file_name}}\">\n                                <input name=\"sample_id\" type=\"text\" class=\"form-control hidden\" value=\"{{sample_id}}\">\n                            {% else %}\n                                <input type=\"text\" class=\"form-control\" readonly>\n                                <span class=\"btn btn-primary btn-file\">\n                                    Select <input type=\"file\" name=\"sample\" multiple=\"multiple\">\n                                </span>\n                            {% endif %}\n                            </span>\n                        </div>\n                    </div>\n                    <div class=\"tab-pane fade {% if resubmit == \"URL\" %}in active{% endif %}\" id=\"url\">\n                        {% if resubmit == \"URL\" %}\n                        <label style=\"display: flex; color: #337ab7;\">Chosen URL to resubmit</label>\n                        <input name=\"category\" type=\"text\" class=\"form-control hidden\" value=\"URL\">\n                        {% endif %}\n                        <div style=\"width: 100%;\" class=\"input-group\">\n                            <label class=\"sr-only\" form=\"form_url\">URL</label>\n                            <input type=\"text\" class=\"form-control\" id=\"form_url\" name=\"url\" placeholder=\"URL\" {% if url %} value=\"{{url}}\" {% endif %} />\n                        </div>\n                    </div>\n                </div>\n            </div>\n        <!--\n            <div class=\"panel\" id=\"accordion\" style=\"margin-top: 20px;\">\n                <div class=\"panel panel-default\">\n                    <div class=\"panel-heading\">\n                        <strong>Network routing through <i>dirty line</i> or VPN</strong>\n                    </div>\n                    <div class=\"panel-body\">\n                        <select class=\"form-control\" id=\"form_route\" name=\"route\">\n                            <option value=\"none\">None (no internet access)</option>\n                            {% if internet != \"none\" %}\n                                <option value=\"internet\"{% if route == \"internet\" %} selected{% endif %}>Internet (dirty line, {{ internet }})</option>\n                            {% endif %}\n                            {% for vpn in vpns %}\n                                <option value=\"{{ vpn.name }}\"{% if route == vpn.name %} selected{% endif %}>{{ vpn.description }} (VPN, {{ vpn.interface }})</option>\n                            {% endfor %}\n                        </select>\n                    </div>\n                </div>\n            </div>\n        -->\n            <div class=\"panel\" id=\"accordion\" style=\"margin-top: 20px;\">\n                <div class=\"panel panel-default\">\n                    <div class=\"panel-heading\">\n                        <a class=\"accordion-toggle\" data-toggle=\"collapse\" data-parent=\"#accordion\" href=\"#options\"><i class=\"icon icon-cog\"></i> Advanced Options</a>\n                    </div>\n                    <div id=\"options\" class=\"panel-collapse collapse {% if resubmit %}in{% endif %}\" style=\"text-align: left;\">\n                        <div class=\"panel-body\">\n                            <div class=\"form-group\">\n                                <label for=\"form_package\">Analysis Package</label>\n                                <select class=\"form-control\" id=\"form_package\" name=\"package\">\n                                    <option value=\"\" active>Detect Automatically</option>\n                                    {% for package in packages %}\n                                    <option value=\"{{package}}\">{{package}}</option>\n                                    {% endfor %}\n                                </select>\n                            </div>\n                            <div class=\"form-group\">\n                                <label for=\"form_timeout\">Timeout</label>\n                                <input type=\"text\" class=\"form-control\" id=\"form_timeout\" name=\"timeout\" />\n                            </div>\n                            <div class=\"form-group\">\n                                <label for=\"form_options\">Options</label>\n                                <input type=\"text\" class=\"form-control\" id=\"form_options\" name=\"options\" value=\"{{ options }}\" />\n                            </div>\n                            <div class=\"form-group\">\n                                <label for=\"form_priority\">Priority</label>\n                                <select class=\"form-control\" id=\"form_priority\" name=\"priority\">\n                                    <option value=\"1\">Low</option>\n                                    <option value=\"2\">Medium</option>\n                                    <option value=\"3\">High</option>\n                                </select>\n                            </div>\n                            <div class=\"form-group\">\n                                <label for=\"form_machine\">Machine</label>\n                                <select class=\"form-control\" id=\"form_machine\" name=\"machine\">\n                                {% for id,label in machines %}\n                                    <option value=\"{{id}}\">{{label}}</option>\n                                {% endfor %}\n                                </select>\n                            </div>\n                            <div class=\"form-group\">\n                                <label for=\"form_custom\">Custom</label>\n                                <input type=\"text\" class=\"form-control\" id=\"form_custom\" name=\"custom\" />\n                            </div>\n                            <div class=\"checkbox\">\n                                <label>\n                                    <input type=\"checkbox\" name=\"free\" /> No Injection <span class=\"text-muted\"><small>(disable behavioral analysis)</small></span>\n                                </label>\n                            </div>\n                            <div class=\"checkbox\">\n                                <label>\n                                    <input type=\"checkbox\" name=\"process_memory\" checked /> Process Memory Dump\n                                </label>\n                            </div>\n                            <div class=\"checkbox\">\n                                <label>\n                                    <input type=\"checkbox\" name=\"memory\" /> Full Memory Dump <span class=\"text-muted\"><small>(if the \"memory\" processing module is enabled, will launch a Volatility analysis)</small></span>\n                                </label>\n                            </div>\n                            <div class=\"checkbox\">\n                                <label>\n                                    <input type=\"checkbox\" name=\"enforce_timeout\" /> Enforce Timeout\n                                </label>\n                            </div>\n                            <div class=\"checkbox\">\n                                <label>\n                                    <input type=\"checkbox\" name=\"human\" checked />Enable Simulated Human Interaction</input>\n                                </label>\n                            </div>\n                            <div class=\"checkbox\">\n                                <label>\n                                    <input type=\"checkbox\" name=\"services\" />Enable Services <span class=\"text-muted\"><small>(enable simulated environment specified in the auxiliary configuration)</small></span>\n                                </label>\n                            </div>\n                            <div class=\"form-group\">\n                                <label for=\"form_tags\">Tags</label>\n                                <input type=\"text\" class=\"form-control\" id=\"form_tags\" name=\"tags\" />\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n            <div style=\"margin-top: 20px;\"><button type=\"submit\" class=\"btn btn-primary btn-lg\">Analyze</button></div>\n        </form>\n    </div>\n</div>\n{% endblock %}\n"
  },
  {
    "path": "oldweb/templates/submission/status.html",
    "content": "{% extends \"base.html\" %}\n{% load staticfiles %}\n{% block content %}\n<script type=\"text/JavaScript\">setTimeout(\"location.reload(true);\", 5000);</script>\n<div class=\"alert alert-info\">\n    <h4>Hang on...</h4>\n    <p>The analysis is not completed yet, it's still <b>{{status}}</b>. This page will refresh every 5 seconds.</p>\n    <div class=\"progress progress-striped active\" style=\"margin-top: 10px;\">\n        <div class=\"progress-bar progress-bar-info\" role=\"progressbar\" aria-valuenow=\"45\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width: 100%\"></div>\n    </div>\n</div>\n{% endblock %}\n"
  },
  {
    "path": "oldweb/templates/success.html",
    "content": "{% extends \"base.html\" %}\n{% load staticfiles %}\n{% block content %}\n<p style=\"margin-bottom: 10px;\"><img src=\"{% static \"graphic/cuckoo.png\" %}\" /></p>\n<div class=\"alert alert-success\"><b>Great! :-)</b><br />{{message}}</div>\n{% endblock %}\n"
  },
  {
    "path": "oldweb/web/__init__.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission."
  },
  {
    "path": "oldweb/web/headers.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport sys\n\nfrom django.conf import settings\n\nsys.path.append(settings.CUCKOO_PATH)\n\nfrom lib.cuckoo.common.constants import CUCKOO_VERSION\n\nclass CuckooHeaders(object):\n    \"\"\"Set Cuckoo custom response headers.\"\"\"\n\n    def process_response(self, request, response):\n        response[\"Server\"] = \"Machete Server\"\n        response[\"X-Cuckoo-Version\"] = CUCKOO_VERSION\n        response[\"X-Content-Type-Options\"] = \"nosniff\"\n        response[\"X-Frame-Options\"] = \"DENY\"\n        response[\"X-XSS-Protection\"] = \"1; mode=block\"\n        response[\"Pragma\"] = \"no-cache\"\n        response[\"Cache-Control\"] = \"no-cache\"\n        response[\"Expires\"] = \"0\"\n        return response\n"
  },
  {
    "path": "oldweb/web/local_settings.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nLOCAL_SETTINGS = True\nfrom settings import *\n\n# If you want to customize your cuckoo path set it here.\n# CUCKOO_PATH = \"/where/cuckoo/is/placed/\"\n\n# Maximum upload size.\nMAX_UPLOAD_SIZE = 26214400\n\n# Override default secret key stored in secret_key.py\n# Make this unique, and don't share it with anybody.\n# SECRET_KEY = \"YOUR_RANDOM_KEY\"\n\n# Language code for this installation. All choices can be found here:\n# http://www.i18nguy.com/unicode/language-identifiers.html\nLANGUAGE_CODE = \"en-us\"\n\nADMINS = (\n    # (\"Your Name\", \"your_email@example.com\"),\n)\n\nMANAGERS = ADMINS\n\n# Allow verbose debug error message in case of application fault.\n# It's strongly suggested to set it to False if you are serving the\n# web application from a web server front-end (i.e. Apache).\nDEBUG = True\n\n# A list of strings representing the host/domain names that this Django site\n# can serve.\n# Values in this list can be fully qualified names (e.g. 'www.example.com').\n# When DEBUG is True or when running tests, host validation is disabled; any\n# host will be accepted. Thus it's usually only necessary to set it in production.\nALLOWED_HOSTS = [\"*\"]"
  },
  {
    "path": "oldweb/web/secret_key.py",
    "content": "SECRET_KEY = \"=y=3o0-90v_h1fvyc1te!ou9(nz725f1rqg-+=6#z1$wj6hvuf\""
  },
  {
    "path": "oldweb/web/settings.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport pymongo\nimport sys\n\n# Cuckoo path.\nCUCKOO_PATH = os.path.join(os.getcwd(), \"..\")\nsys.path.append(CUCKOO_PATH)\n\nfrom lib.cuckoo.common.config import Config\n\ncfg = Config(\"reporting\")\n\n# Checks if mongo reporting is enabled in Cuckoo.\nif not cfg.mongodb.get(\"enabled\"):\n    raise Exception(\"Mongo reporting module is not enabled in cuckoo, aborting!\")\n\n# Get connection options from reporting.conf.\nMONGO_HOST = cfg.mongodb.get(\"host\", \"127.0.0.1\")\nMONGO_PORT = cfg.mongodb.get(\"port\", 27017)\nMONGO_DB = cfg.mongodb.get(\"db\", \"cuckoo\")\n\ntry:\n    MONGO = pymongo.MongoClient(MONGO_HOST, MONGO_PORT)[MONGO_DB]\nexcept Exception as e:\n    raise Exception(\"Unable to connect to Mongo: %s\" % e)\n\nif cfg.elasticsearch.get(\"enabled\"):\n    try:\n        import elasticsearch\n    except ImportError:\n        raise Exception(\"ElasticSearch is enabled but not installed, aborting!\")\n\n    hosts = []\n    for host in cfg.elasticsearch.get(\"hosts\", \"127.0.0.1:9200\").split(\",\"):\n        if host.strip():\n            hosts.append(host.strip())\n\n    ELASTIC = elasticsearch.Elasticsearch(hosts)\nelse:\n    ELASTIC = None\n\nMOLOCH_ENABLED = cfg.moloch.get(\"enabled\")\nMOLOCH_HOST = cfg.moloch.get(\"host\")\n\n# In case we have VPNs enabled we need to initialize through the following\n# two methods as they verify the interaction with VPNs as well as gather\n# which VPNs are available (for representation upon File/URL submission).\nfrom lib.cuckoo.core.startup import init_rooter, init_routing\n\ninit_rooter()\ninit_routing()\n\nDEBUG = True\n\n# Database settings. We don't need it.\nDATABASES = {}\n\nSITE_ID = 1\n\n# If you set this to False, Django will make some optimizations so as not\n# to load the internationalization machinery.\nUSE_I18N = True\n\n# If you set this to False, Django will not format dates, numbers and\n# calendars according to the current locale.\nUSE_L10N = True\n\n# Disabling time zone support and using local time for web interface and storage.\n# See: https://docs.djangoproject.com/en/1.5/ref/settings/#time-zone\nUSE_TZ = False\nTIME_ZONE = None\n\n# Unique secret key generator.\n# Secret key will be placed in secret_key.py file.\ntry:\n    from secret_key import *\nexcept ImportError:\n    SETTINGS_DIR=os.path.abspath(os.path.dirname(__file__))\n    # Using the same generation schema of Django startproject.\n    from django.utils.crypto import get_random_string\n    key = get_random_string(50, \"abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)\")\n\n    # Write secret_key.py\n    with open(os.path.join(SETTINGS_DIR, \"secret_key.py\"), \"w\") as key_file:\n        key_file.write(\"SECRET_KEY = \\\"{0}\\\"\".format(key))\n\n    # Reload key.\n    from secret_key import *\n\n# Absolute filesystem path to the directory that will hold user-uploaded files.\n# Example: \"/home/media/media.lawrence.com/media/\"\nMEDIA_ROOT = ''\n\n# URL that handles the media served from MEDIA_ROOT. Make sure to use a\n# trailing slash.\n# Examples: \"http://media.lawrence.com/media/\", \"http://example.com/media/\"\nMEDIA_URL = ''\n\n# Absolute path to the directory static files should be collected to.\n# Don't put anything in this directory yourself; store your static files\n# in apps' \"static/\" subdirectories and in STATICFILES_DIRS.\n# Example: \"/home/media/media.lawrence.com/static/\"\nSTATIC_ROOT = ''\n\n# URL prefix for static files.\n# Example: \"http://media.lawrence.com/static/\"\nSTATIC_URL = '/static/'\n\n# Additional locations of static files\nSTATICFILES_DIRS = (\n    os.path.join(os.getcwd(), 'static'),\n)\n\n# List of finder classes that know how to find static files in\n# various locations.\nSTATICFILES_FINDERS = (\n    'django.contrib.staticfiles.finders.FileSystemFinder',\n    'django.contrib.staticfiles.finders.AppDirectoriesFinder',\n    'django.contrib.staticfiles.finders.DefaultStorageFinder',\n)\n\nMIDDLEWARE_CLASSES = (\n    'django.middleware.common.CommonMiddleware',\n    'django.contrib.sessions.middleware.SessionMiddleware',\n    'django.middleware.csrf.CsrfViewMiddleware',\n    'django.contrib.auth.middleware.AuthenticationMiddleware',\n    'django.contrib.messages.middleware.MessageMiddleware',\n    # Cuckoo headers.\n    \"web.headers.CuckooHeaders\",\n)\n\nTEMPLATES = [\n    {\n        \"BACKEND\": \"django.template.backends.django.DjangoTemplates\",\n        \"DIRS\": [\n            \"templates\",\n        ],\n        \"APP_DIRS\": True,\n    },\n]\n\nROOT_URLCONF = 'web.urls'\n\n# Python dotted path to the WSGI application used by Django's runserver.\nWSGI_APPLICATION = 'web.wsgi.application'\n\nINSTALLED_APPS = (\n    'django.contrib.auth',\n    'django.contrib.contenttypes',\n    'django.contrib.sessions',\n    # 'django.contrib.sites',\n    # 'django.contrib.messages',\n    'django.contrib.staticfiles',\n    # Uncomment the next line to enable the admin:\n    'django.contrib.admin',\n    # Uncomment the next line to enable admin documentation:\n    # 'django.contrib.admindocs',\n    'analysis',\n    'compare',\n)\n\nLOGIN_REDIRECT_URL = \"/\"\n\n# Fix to avoid migration warning in django 1.7 about test runner (1_6.W001).\n# In future it could be removed: https://code.djangoproject.com/ticket/23469\nTEST_RUNNER = 'django.test.runner.DiscoverRunner'\n\n# A sample logging configuration. The only tangible logging\n# performed by this configuration is to send an email to\n# the site admins on every HTTP 500 error when DEBUG=False.\n# See http://docs.djangoproject.com/en/dev/topics/logging for\n# more details on how to customize your logging configuration.\nLOGGING = {\n    'version': 1,\n    'disable_existing_loggers': False,\n    'filters': {\n        'require_debug_false': {\n            '()': 'django.utils.log.RequireDebugFalse'\n        }\n    },\n    'handlers': {\n        'mail_admins': {\n            'level': 'ERROR',\n            'filters': ['require_debug_false'],\n            'class': 'django.utils.log.AdminEmailHandler'\n        },\n        # Log django request to log file. Uncomment to enable.\n        # 'log_file': {\n        #     'level': 'DEBUG',\n        #     'class': 'logging.handlers.RotatingFileHandler',\n        #     'filename': os.path.join(CUCKOO_PATH, \"log\", \"django.log\"),\n        #     'maxBytes': 1024*1024*16, # 16 megabytes\n        #     'backupCount': 3, # keep 3 copies\n        # },\n    },\n    'loggers': {\n        'django.request': {\n            'handlers': ['mail_admins'],\n            'level': 'ERROR',\n            'propagate': True,\n        },\n        # Log django request to log file. Uncomment to enable.\n        # 'django.request': {\n        #     'handlers': ['log_file'],\n        #     'level': 'DEBUG',\n        # },\n    }\n}\n\n# Hack to import local settings.\ntry:\n    LOCAL_SETTINGS\nexcept NameError:\n    try:\n        from local_settings import *\n    except ImportError:\n        pass\n"
  },
  {
    "path": "oldweb/web/urls.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport dashboard.views\nimport analysis.views\n\nfrom django.conf.urls import include, url\n\nurlpatterns = [\n    url(r\"^$\", dashboard.views.index),\n    url(r\"^analysis/\", include(\"analysis.urls\")),\n    url(r\"^compare/\", include(\"compare.urls\")),\n    url(r\"^submit/\", include(\"submission.urls\")),\n    url(r\"^file/(?P<category>\\w+)/(?P<object_id>\\w+)/$\", analysis.views.file),\n    url(r\"^full_memory/(?P<analysis_number>\\w+)/$\", analysis.views.full_memory_dump_file),\n    url(r\"^dashboard/\", include(\"dashboard.urls\")),\n]"
  },
  {
    "path": "oldweb/web/wsgi.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\n\"\"\"\nWSGI config for web project.\n\nThis module contains the WSGI application used by Django's development server\nand any production WSGI deployments. It should expose a module-level variable\nnamed ``application``. Django's ``runserver`` and ``runfcgi`` commands discover\nthis application via the ``WSGI_APPLICATION`` setting.\n\nUsually you will have the standard Django WSGI application here, but it also\nmight make sense to replace the whole Django WSGI application with a custom one\nthat later delegates to the Django one. For example, you could introduce WSGI\nmiddleware here, or combine a Django application with an application of another\nframework.\n\n\"\"\"\nimport os\n\nos.environ.setdefault(\"DJANGO_SETTINGS_MODULE\", \"web.settings\")\n\n# This application object is used by any WSGI server configured to use this\n# file. This includes Django's development server, if the WSGI_APPLICATION\n# setting points here.\nfrom django.core.wsgi import get_wsgi_application\napplication = get_wsgi_application()\n\n# Apply WSGI middleware here.\n# from helloworld.wsgi import HelloWorldApplication\n# application = HelloWorldApplication(application)\n"
  },
  {
    "path": "requirements.txt",
    "content": "alembic==0.8.0\nbeautifulsoup4==4.4.1\ncffi==1.2.1\nchardet==2.3.0\ncryptography==2.4.1\ncython==0.25.2\nDjango==1.8.4\ndpkt==1.8.6.2\necdsa==0.13\nelasticsearch==2.2.0\nenum34==1.0.4\nFlask==0.10.1\nhdbscan==0.8.1\nHTTPReplay==0.1.15\nidna==2.0\nipaddress==1.0.14\nitsdangerous==0.24\nJinja2==2.8\njsbeautifier==1.5.10\nmatplotlib==1.5.2\nMako==1.0.1\nMarkupSafe==0.23\nndg-httpsclient==0.4.0\nnumpy==1.16.6\noletools==0.42\npandas==0.24.1\nhttp://pefile.googlecode.com/files/pefile-1.2.10-139.tar.gz#egg=pefile\npyasn1==0.1.8\npycparser==2.14\npymongo==3.0.3\npyOpenSSL\npython-dateutil==2.4.2\npython-editor==0.3\npython-magic==0.4.6\nrequests==2.7.0\nscikit-learn==0.20.3\nseaborn==0.7.1\nsix==1.9.0\nSQLAlchemy==1.0.8\ntlslite-ng==0.6.0-alpha3\nwakeonlan==0.2.2\nWerkzeug==0.10.4\n"
  },
  {
    "path": "utils/api.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport sys\nimport socket\nimport tarfile\nimport argparse\nfrom datetime import datetime\nfrom StringIO import StringIO\nfrom zipfile import ZipFile, ZIP_STORED\n\ntry:\n    from flask import Flask, request, jsonify, make_response\nexcept ImportError:\n    sys.exit(\"ERROR: Flask library is missing (`pip install flask`)\")\n\nsys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), \"..\"))\n\nfrom lib.cuckoo.common.constants import CUCKOO_VERSION, CUCKOO_ROOT\nfrom lib.cuckoo.common.utils import store_temp_file, delete_folder\nfrom lib.cuckoo.core.database import Database, TASK_RUNNING, Task\nfrom lib.cuckoo.core.database import TASK_REPORTED, TASK_COMPLETED\nfrom lib.cuckoo.core.startup import drop_privileges\nfrom lib.cuckoo.core.rooter import rooter\n\n# Global Database object.\ndb = Database()\n\n# Initialize Flask app.\napp = Flask(__name__)\n\ndef json_error(status_code, message):\n    \"\"\"Return a JSON object with a HTTP error code.\"\"\"\n    r = jsonify(message=message)\n    r.status_code = status_code\n    return r\n\n@app.after_request\ndef custom_headers(response):\n    \"\"\"Set some custom headers across all HTTP responses.\"\"\"\n    response.headers[\"Server\"] = \"Machete Server\"\n    response.headers[\"X-Content-Type-Options\"] = \"nosniff\"\n    response.headers[\"X-Frame-Options\"] = \"DENY\"\n    response.headers[\"X-XSS-Protection\"] = \"1; mode=block\"\n    response.headers[\"Pragma\"] = \"no-cache\"\n    response.headers[\"Cache-Control\"] = \"no-cache\"\n    response.headers[\"Expires\"] = \"0\"\n    return response\n\n@app.route(\"/tasks/create/file\", methods=[\"POST\"])\n@app.route(\"/v1/tasks/create/file\", methods=[\"POST\"])\ndef tasks_create_file():\n    data = request.files[\"file\"]\n    package = request.form.get(\"package\", \"\")\n    timeout = request.form.get(\"timeout\", \"\")\n    priority = request.form.get(\"priority\", 1)\n    options = request.form.get(\"options\", \"\")\n    machine = request.form.get(\"machine\", \"\")\n    platform = request.form.get(\"platform\", \"\")\n    tags = request.form.get(\"tags\", None)\n    custom = request.form.get(\"custom\", \"\")\n    owner = request.form.get(\"owner\", \"\")\n    memory = request.form.get(\"memory\", False)\n    clock = request.form.get(\"clock\", None)\n\n    if memory:\n        memory = True\n    enforce_timeout = request.form.get(\"enforce_timeout\", False)\n\n    if enforce_timeout:\n        enforce_timeout = True\n\n    temp_file_path = store_temp_file(data.read(), data.filename)\n\n    task_id = db.add_path(\n        file_path=temp_file_path,\n        package=package,\n        timeout=timeout,\n        priority=priority,\n        options=options,\n        machine=machine,\n        platform=platform,\n        tags=tags,\n        custom=custom,\n        owner=owner,\n        memory=memory,\n        enforce_timeout=enforce_timeout,\n        clock=clock\n    )\n\n    return jsonify(task_id=task_id)\n\n@app.route(\"/tasks/create/url\", methods=[\"POST\"])\n@app.route(\"/v1/tasks/create/url\", methods=[\"POST\"])\ndef tasks_create_url():\n    url = request.form.get(\"url\")\n    package = request.form.get(\"package\", \"\")\n    timeout = request.form.get(\"timeout\", \"\")\n    priority = request.form.get(\"priority\", 1)\n    options = request.form.get(\"options\", \"\")\n    machine = request.form.get(\"machine\", \"\")\n    platform = request.form.get(\"platform\", \"\")\n    tags = request.form.get(\"tags\", None)\n    custom = request.form.get(\"custom\", \"\")\n    owner = request.form.get(\"owner\", \"\")\n\n    memory = request.form.get(\"memory\", False)\n    if memory:\n        memory = True\n\n    enforce_timeout = request.form.get(\"enforce_timeout\", False)\n    if enforce_timeout:\n        enforce_timeout = True\n\n    clock = request.form.get(\"clock\", None)\n\n    task_id = db.add_url(\n        url=url,\n        package=package,\n        timeout=timeout,\n        options=options,\n        priority=priority,\n        machine=machine,\n        platform=platform,\n        tags=tags,\n        custom=custom,\n        owner=owner,\n        memory=memory,\n        enforce_timeout=enforce_timeout,\n        clock=clock\n    )\n\n    return jsonify(task_id=task_id)\n\n@app.route(\"/tasks/list\")\n@app.route(\"/v1/tasks/list\")\n@app.route(\"/tasks/list/<int:limit>\")\n@app.route(\"/v1/tasks/list/<int:limit>\")\n@app.route(\"/tasks/list/<int:limit>/<int:offset>\")\n@app.route(\"/v1/tasks/list/<int:limit>/<int:offset>\")\ndef tasks_list(limit=None, offset=None):\n    response = {}\n\n    response[\"tasks\"] = []\n\n    completed_after = request.args.get(\"completed_after\")\n    if completed_after:\n        completed_after = datetime.fromtimestamp(int(completed_after))\n\n    owner = request.args.get(\"owner\")\n    status = request.args.get(\"status\")\n\n    for row in db.list_tasks(limit=limit, details=True, offset=offset,\n                             completed_after=completed_after, owner=owner,\n                             status=status, order_by=Task.completed_on.asc()):\n        task = row.to_dict()\n\n        # Sanitize the target in case it contains non-ASCII characters as we\n        # can't pass along an encoding to flask's jsonify().\n        task[\"target\"] = task[\"target\"].decode(\"latin-1\")\n\n        task[\"guest\"] = {}\n        if row.guest:\n            task[\"guest\"] = row.guest.to_dict()\n\n        task[\"errors\"] = []\n        for error in row.errors:\n            task[\"errors\"].append(error.message)\n\n        task[\"sample\"] = {}\n        if row.sample_id:\n            sample = db.view_sample(row.sample_id)\n            task[\"sample\"] = sample.to_dict()\n\n        response[\"tasks\"].append(task)\n\n    return jsonify(response)\n\n@app.route(\"/tasks/view/<int:task_id>\")\n@app.route(\"/v1/tasks/view/<int:task_id>\")\ndef tasks_view(task_id):\n    response = {}\n\n    task = db.view_task(task_id, details=True)\n    if task:\n        entry = task.to_dict()\n        entry[\"guest\"] = {}\n        if task.guest:\n            entry[\"guest\"] = task.guest.to_dict()\n\n        entry[\"errors\"] = []\n        for error in task.errors:\n            entry[\"errors\"].append(error.message)\n\n        entry[\"sample\"] = {}\n        if task.sample_id:\n            sample = db.view_sample(task.sample_id)\n            entry[\"sample\"] = sample.to_dict()\n\n        response[\"task\"] = entry\n    else:\n        r = jsonify(message=\"Task not found\")\n        r.status_code = 404\n        return r\n\n    return jsonify(response)\n\n@app.route(\"/tasks/reschedule/<int:task_id>\")\n@app.route(\"/tasks/reschedule/<int:task_id>/<int:priority>\")\n@app.route(\"/v1/tasks/reschedule/<int:task_id>\")\n@app.route(\"/v1/tasks/reschedule/<int:task_id>/<int:priority>\")\ndef tasks_reschedule(task_id, priority=None):\n    response = {}\n\n    if not db.view_task(task_id):\n        return json_error(404, \"There is no analysis with the specified ID\")\n\n    new_task_id = db.reschedule(task_id, priority)\n    if new_task_id:\n        response[\"status\"] = \"OK\"\n        response[\"task_id\"] = new_task_id\n    else:\n        return json_error(500, \"An error occurred while trying to \"\n                          \"reschedule the task\")\n\n    return jsonify(response)\n\n@app.route(\"/tasks/delete/<int:task_id>\")\n@app.route(\"/v1/tasks/delete/<int:task_id>\")\ndef tasks_delete(task_id):\n    response = {}\n\n    task = db.view_task(task_id)\n    if task:\n        if task.status == TASK_RUNNING:\n            return json_error(500, \"The task is currently being \"\n                              \"processed, cannot delete\")\n\n        if db.delete_task(task_id):\n            delete_folder(os.path.join(CUCKOO_ROOT, \"storage\",\n                                       \"analyses\", \"%d\" % task_id))\n            response[\"status\"] = \"OK\"\n        else:\n            return json_error(500, \"An error occurred while trying to \"\n                              \"delete the task\")\n    else:\n        return json_error(404, \"Task not found\")\n\n    return jsonify(response)\n\n@app.route(\"/tasks/report/<int:task_id>\")\n@app.route(\"/v1/tasks/report/<int:task_id>\")\n@app.route(\"/tasks/report/<int:task_id>/<report_format>\")\n@app.route(\"/v1/tasks/report/<int:task_id>/<report_format>\")\ndef tasks_report(task_id, report_format=\"json\"):\n    formats = {\n        \"json\": \"report.json\",\n        \"html\": \"report.html\",\n    }\n\n    bz_formats = {\n        \"all\": {\"type\": \"-\", \"files\": [\"memory.dmp\"]},\n        \"dropped\": {\"type\": \"+\", \"files\": [\"files\"]},\n        \"package_files\": {\"type\": \"+\", \"files\": [\"package_files\"]},\n    }\n\n    tar_formats = {\n        \"bz2\": \"w:bz2\",\n        \"gz\": \"w:gz\",\n        \"tar\": \"w\",\n    }\n\n    if report_format.lower() in formats:\n        report_path = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\",\n                                   \"%d\" % task_id, \"reports\",\n                                   formats[report_format.lower()])\n    elif report_format.lower() in bz_formats:\n        bzf = bz_formats[report_format.lower()]\n        srcdir = os.path.join(CUCKOO_ROOT, \"storage\",\n                              \"analyses\", \"%d\" % task_id)\n        s = StringIO()\n\n        # By default go for bz2 encoded tar files (for legacy reasons).\n        tarmode = tar_formats.get(request.args.get(\"tar\"), \"w:bz2\")\n\n        tar = tarfile.open(fileobj=s, mode=tarmode, dereference=True)\n        for filedir in os.listdir(srcdir):\n            filepath = os.path.join(srcdir, filedir)\n            if not os.path.exists(filepath):\n                continue\n            if bzf[\"type\"] == \"-\" and filedir not in bzf[\"files\"]:\n                tar.add(filepath, arcname=filedir)\n            if bzf[\"type\"] == \"+\" and filedir in bzf[\"files\"]:\n                tar.add(filepath, arcname=filedir)\n        tar.close()\n\n        response = make_response(s.getvalue())\n        response.headers[\"Content-Type\"] = \\\n            \"application/x-tar; charset=UTF-8\"\n        return response\n    else:\n        return json_error(400, \"Invalid report format\")\n\n    if os.path.exists(report_path):\n        if report_format == \"json\":\n            response = make_response(open(report_path, \"rb\").read())\n            response.headers[\"Content-Type\"] = \"application/json\"\n            return response\n        else:\n            return open(report_path, \"rb\").read()\n    else:\n        return json_error(404, \"Report not found\")\n\n@app.route(\"/tasks/screenshots/<int:task_id>\")\n@app.route(\"/v1/tasks/screenshots/<int:task_id>\")\n@app.route(\"/tasks/screenshots/<int:task_id>/<screenshot>\")\n@app.route(\"/v1/tasks/screenshots/<int:task_id>/<screenshot>\")\ndef task_screenshots(task_id=0, screenshot=None):\n    folder_path = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\", str(task_id), \"shots\")\n\n    if os.path.exists(folder_path):\n        if screenshot:\n            screenshot_name = \"{0}.jpg\".format(screenshot)\n            screenshot_path = os.path.join(folder_path, screenshot_name)\n            if os.path.exists(screenshot_path):\n                # TODO: Add content disposition.\n                response = make_response(open(screenshot_path, \"rb\").read())\n                response.headers[\"Content-Type\"] = \"image/jpeg\"\n                return response\n            else:\n                return json_error(404, \"Screenshot not found!\")\n        else:\n            zip_data = StringIO()\n            with ZipFile(zip_data, \"w\", ZIP_STORED) as zip_file:\n                for shot_name in os.listdir(folder_path):\n                    zip_file.write(os.path.join(folder_path, shot_name), shot_name)\n\n            # TODO: Add content disposition.\n            response = make_response(zip_data.getvalue())\n            response.headers[\"Content-Type\"] = \"application/zip\"\n            return response\n        return json_error(404, \"Task not found\")\n\n@app.route(\"/tasks/rereport/<int:task_id>\")\ndef rereport(task_id):\n    task = db.view_task(task_id)\n    if task:\n        if task.status == TASK_REPORTED:\n            db.set_status(task_id, TASK_COMPLETED)\n            return jsonify(success=True)\n\n        return jsonify(success=False)\n    else:\n        return json_error(404, \"Task not found\")\n\n@app.route(\"/files/view/md5/<md5>\")\n@app.route(\"/v1/files/view/md5/<md5>\")\n@app.route(\"/files/view/sha256/<sha256>\")\n@app.route(\"/v1/files/view/sha256/<sha256>\")\n@app.route(\"/files/view/id/<int:sample_id>\")\n@app.route(\"/v1/files/view/id/<int:sample_id>\")\ndef files_view(md5=None, sha256=None, sample_id=None):\n    response = {}\n\n    if md5:\n        sample = db.find_sample(md5=md5)\n    elif sha256:\n        sample = db.find_sample(sha256=sha256)\n    elif sample_id:\n        sample = db.view_sample(sample_id)\n    else:\n        return json_error(400, \"Invalid lookup term\")\n\n    if sample:\n        response[\"sample\"] = sample.to_dict()\n    else:\n        return json_error(404, \"File not found\")\n\n    return jsonify(response)\n\n@app.route(\"/files/get/<sha256>\")\n@app.route(\"/v1/files/get/<sha256>\")\ndef files_get(sha256):\n    file_path = os.path.join(CUCKOO_ROOT, \"storage\", \"binaries\", sha256)\n    if os.path.exists(file_path):\n        response = make_response(open(file_path, \"rb\").read())\n        response.headers[\"Content-Type\"] = \\\n            \"application/octet-stream; charset=UTF-8\"\n        return response\n    else:\n        return json_error(404, \"File not found\")\n\n@app.route(\"/pcap/get/<int:task_id>\")\n@app.route(\"/v1/pcap/get/<int:task_id>\")\ndef pcap_get(task_id):\n    file_path = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\",\n                             \"%d\" % task_id, \"dump.pcap\")\n    if os.path.exists(file_path):\n        try:\n            # TODO This could be a big file, so eventually we have to switch\n            # to app.send_static_file() instead.\n            response = make_response(open(file_path, \"rb\").read())\n            response.headers[\"Content-Type\"] = \\\n                \"application/octet-stream; charset=UTF-8\"\n            return response\n        except:\n            return json_error(500, \"An error occurred while reading PCAP\")\n    else:\n        return json_error(404, \"File not found\")\n\n@app.route(\"/machines/list\")\n@app.route(\"/v1/machines/list\")\ndef machines_list():\n    response = {}\n\n    machines = db.list_machines()\n\n    response[\"machines\"] = []\n    for row in machines:\n        response[\"machines\"].append(row.to_dict())\n\n    return jsonify(response)\n\n@app.route(\"/machines/view/<name>\")\n@app.route(\"/v1/machines/view/<name>\")\ndef machines_view(name=None):\n    response = {}\n\n    machine = db.view_machine(name=name)\n    if machine:\n        response[\"machine\"] = machine.to_dict()\n    else:\n        return json_error(404, \"Machine not found\")\n\n    return jsonify(response)\n\n@app.route(\"/cuckoo/status\")\n@app.route(\"/v1/cuckoo/status\")\ndef cuckoo_status():\n    # In order to keep track of the diskspace statistics of the temporary\n    # directory we create a temporary file so we can statvfs() on that.\n    temp_file = store_temp_file(\"\", \"status\")\n\n    paths = dict(\n        binaries=os.path.join(CUCKOO_ROOT, \"storage\", \"binaries\"),\n        analyses=os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\"),\n        temporary=temp_file,\n    )\n\n    diskspace = {}\n    for key, path in paths.items():\n        if hasattr(os, \"statvfs\") and os.path.isdir(path):\n            stats = os.statvfs(path)\n            diskspace[key] = dict(\n                free=stats.f_bavail * stats.f_frsize,\n                total=stats.f_blocks * stats.f_frsize,\n                used=(stats.f_blocks - stats.f_bavail) * stats.f_frsize,\n            )\n\n    # Now we remove the temporary file and its parent directory.\n    os.unlink(temp_file)\n    os.rmdir(os.path.dirname(temp_file))\n\n    # Get the CPU load.\n    if hasattr(os, \"getloadavg\"):\n        cpuload = os.getloadavg()\n    else:\n        cpuload = []\n\n    if os.path.isfile(\"/proc/meminfo\"):\n        values = {}\n        for line in open(\"/proc/meminfo\"):\n            key, value = line.split(\":\", 1)\n            values[key.strip()] = value.replace(\"kB\", \"\").strip()\n\n        if \"MemAvailable\" in values and \"MemTotal\" in values:\n            memory = 100.0 * int(values[\"MemFree\"]) / int(values[\"MemTotal\"])\n        else:\n            memory = None\n    else:\n        memory = None\n\n    response = dict(\n        version=CUCKOO_VERSION,\n        hostname=socket.gethostname(),\n        machines=dict(\n            total=len(db.list_machines()),\n            available=db.count_machines_available()\n        ),\n        tasks=dict(\n            total=db.count_tasks(),\n            pending=db.count_tasks(\"pending\"),\n            running=db.count_tasks(\"running\"),\n            completed=db.count_tasks(\"completed\"),\n            reported=db.count_tasks(\"reported\")\n        ),\n        diskspace=diskspace,\n        cpuload=cpuload,\n        memory=memory,\n    )\n\n    return jsonify(response)\n\n@app.route(\"/memory/list/<int:task_id>\")\ndef memorydumps_list(task_id):\n    folder_path = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\", str(task_id), \"memory\")\n\n    if os.path.exists(folder_path):\n        memory_files = []\n        memory_path = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\", str(task_id), \"memory\")\n        for subdir, dirs, files in os.walk(memory_path):\n            for filename in files:\n                memory_files.append(filename.replace(\".dmp\", \"\"))\n\n        if len(memory_files) == 0:\n            return json_error(404, \"Memory dump not found\")\n\n        return jsonify({\"dump_files\": memory_files})\n    else:\n        return json_error(404, \"Memory dump not found\")\n\n@app.route(\"/memory/get/<int:task_id>/<pid>\")\ndef memorydumps_get(task_id, pid=None):\n    folder_path = os.path.join(CUCKOO_ROOT, \"storage\", \"analyses\", str(task_id), \"memory\")\n\n    if os.path.exists(folder_path):\n        if pid:\n            pid_name = \"{0}.dmp\".format(pid)\n            pid_path = os.path.join(folder_path, pid_name)\n            if os.path.exists(pid_path):\n                response = make_response(open(pid_path, \"rb\").read())\n                response.headers[\"Content-Type\"] = \\\n                    \"application/octet-stream; charset=UTF-8\"\n                return response\n            else:\n                return json_error(404, \"Memory dump not found\")\n        else:\n            return json_error(404, \"Memory dump not found\")\n    else:\n        return json_error(404, \"Memory dump not found\")\n\n@app.route(\"/vpn/status\")\ndef vpn_status():\n    status = rooter(\"vpn_status\")\n    if status is None:\n        return json_error(500, \"Rooter not available\")\n\n    return jsonify({\"vpns\": status})\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"-H\", \"--host\", help=\"Host to bind the API server on\",\n                        default=\"localhost\", action=\"store\", required=False)\n    parser.add_argument(\"-p\", \"--port\", help=\"Port to bind the API server on\",\n                        default=8090, action=\"store\", required=False)\n    parser.add_argument(\"-u\", \"--user\", type=str,\n                        help=\"Drop user privileges to this user\")\n    args = parser.parse_args()\n\n    if args.user:\n        drop_privileges(args.user)\n\n    app.run(host=args.host, port=int(args.port))\n"
  },
  {
    "path": "utils/community.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# Copyright (C) 2020-2021 PowerLZY.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport sys\nimport shutil\nimport urllib2\nimport argparse\nimport tempfile\nfrom tarfile import TarFile\n\nsys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), \"..\"))\n\nimport lib.cuckoo.common.colors as colors\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\n\nURL = \"https://github.com/cuckoosandbox/community/archive/{0}.tar.gz\"\n\ndef download_archive():\n    print(\"Downloading modules from {0}\".format(URL))\n\n    try:\n        data = urllib2.urlopen(URL).read()\n    except Exception as e:\n        print(\"ERROR: Unable to download archive: %s\" % e)\n        sys.exit(-1)\n\n    return data\n\ndef extract_archive(data):\n    fd, filepath = tempfile.mkstemp()\n    os.write(fd, data)\n    os.close(fd)\n\n    archive = TarFile.open(filepath, mode=\"r:gz\")\n    temp_dir = tempfile.mkdtemp()\n    archive.extractall(temp_dir)\n    archive.close()\n    os.unlink(filepath)\n    final_dir = os.path.join(temp_dir, os.listdir(temp_dir)[0])\n\n    return temp_dir, final_dir\n\ndef installdir(src, dst, force, rewrite, origin=[]):\n    for file_name in os.listdir(src):\n        if file_name == \".gitignore\":\n            continue\n\n        destination = os.path.join(dst, file_name)\n\n        if not rewrite:\n            if os.path.exists(destination):\n                print(\"File \\\"{0}\\\" already exists, \"\n                      \"{1}\".format(file_name, colors.yellow(\"skipped\")))\n                continue\n\n        install = False\n\n        if not force:\n            while 1:\n                choice = raw_input(\"Do you want to install file \"\n                                   \"\\\"{0}\\\"? [yes/no] \".format(file_name))\n                if choice.lower() == \"yes\":\n                    install = True\n                    break\n                elif choice.lower() == \"no\":\n                    break\n                else:\n                    continue\n        else:\n            install = True\n\n        if install:\n            srcpath = os.path.join(src, file_name)\n            if os.path.islink(srcpath):\n                if os.path.lexists(destination):\n                    try:\n                        shutil.rmtree(destination)\n                    except OSError:\n                        os.unlink(destination)\n                os.symlink(os.readlink(srcpath), destination)\n                print \"Symbolic link \\\"%s/%s\\\" -> \\\"%s\\\" %s\" % (\n                    \"/\".join(origin), file_name, os.readlink(srcpath),\n                    colors.green(\"installed\"))\n\n            elif os.path.isdir(srcpath):\n                installdir(srcpath, destination, force, rewrite,\n                           origin + [file_name])\n            else:\n                if not os.path.isdir(os.path.dirname(destination)):\n                    os.makedirs(os.path.dirname(destination))\n\n                shutil.copy(srcpath, destination)\n                print \"File \\\"%s/%s\\\" %s\" % (\n                    \"/\".join(origin), file_name, colors.green(\"installed\"))\n\n\ndef install(enabled, force, rewrite, archive):\n    if archive:\n        if not os.path.isfile(archive):\n            print(\"ERROR: Provided archive not found!\")\n            sys.exit(-1)\n\n        data = open(archive, \"rb\").read()\n    else:\n        data = download_archive()\n\n    temp, source = extract_archive(data)\n\n    folders = {\n        \"signatures\": os.path.join(\"modules\", \"signatures\"),\n        \"processing\": os.path.join(\"modules\", \"processing\"),\n        \"reporting\": os.path.join(\"modules\", \"reporting\"),\n        \"machinery\": os.path.join(\"modules\", \"machinery\"),\n        \"analyzer\": os.path.join(\"analyzer\"),\n        \"monitor\": os.path.join(\"data\", \"monitor\"),\n        \"agent\": os.path.join(\"agent\"),\n    }\n\n    for category in enabled:\n        folder = folders[category]\n\n        print(\"\\nInstalling {0}\".format(colors.cyan(category.upper())))\n\n        origin = os.path.join(source, folder)\n        if not os.path.isdir(origin):\n            print \"  No candidates available, continuing.\"\n            continue\n\n        installdir(origin, os.path.join(CUCKOO_ROOT, folder), force, rewrite)\n\n    shutil.rmtree(temp)\n\ndef main():\n    global URL\n\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"-a\", \"--all\", help=\"Download everything\", action=\"store_true\", required=False)\n    parser.add_argument(\"-s\", \"--signatures\", help=\"Download Cuckoo signatures\", action=\"store_true\", required=False)\n    parser.add_argument(\"-p\", \"--processing\", help=\"Download processing modules\", action=\"store_true\", required=False)\n    parser.add_argument(\"-m\", \"--machinery\", help=\"Download machine managers\", action=\"store_true\", required=False)\n    parser.add_argument(\"-n\", \"--analyzer\", help=\"Download analyzer modules\", action=\"store_true\", required=False)\n    parser.add_argument(\"-M\", \"--monitor\", help=\"Download monitoring binaries\", action=\"store_true\", required=False)\n    parser.add_argument(\"-g\", \"--agent\", help=\"Download agent modules\", action=\"store_true\", required=False)\n    parser.add_argument(\"-r\", \"--reporting\", help=\"Download reporting modules\", action=\"store_true\", required=False)\n    parser.add_argument(\"-f\", \"--force\", help=\"Install files without confirmation\", action=\"store_true\", required=False)\n    parser.add_argument(\"-w\", \"--rewrite\", help=\"Rewrite existing files\", action=\"store_true\", required=False)\n    parser.add_argument(\"-b\", \"--branch\", help=\"Specify a different branch\", action=\"store\", default=\"master\", required=False)\n    parser.add_argument(\"archive\", help=\"Install a stored archive\", nargs=\"?\")\n    args = parser.parse_args()\n\n    enabled = []\n    force = False\n    rewrite = False\n\n    if args.all:\n        enabled.append(\"processing\")\n        enabled.append(\"signatures\")\n        enabled.append(\"reporting\")\n        enabled.append(\"machinery\")\n        enabled.append(\"analyzer\")\n        enabled.append(\"monitor\")\n        enabled.append(\"agent\")\n    else:\n        if args.signatures:\n            enabled.append(\"signatures\")\n        if args.processing:\n            enabled.append(\"processing\")\n        if args.reporting:\n            enabled.append(\"reporting\")\n        if args.machinery:\n            enabled.append(\"machinery\")\n        if args.analyzer:\n            enabled.append(\"analyzer\")\n        if args.agent:\n            enabled.append(\"agent\")\n\n    if not enabled:\n        print(colors.red(\"You need to enable some category!\\n\"))\n        parser.print_help()\n        return\n\n    if args.force:\n        force = True\n    if args.rewrite:\n        rewrite = True\n\n    URL = URL.format(args.branch)\n\n    install(enabled, force, rewrite, args.archive)\n\nif __name__ == \"__main__\":\n    try:\n        main()\n    except KeyboardInterrupt:\n        pass\n"
  },
  {
    "path": "utils/darwin/bootstrap_guest.sh",
    "content": "#!/usr/bin/env bash\n# Copyright (C) 2015 Dmitry Rodionov\n# This software may be modified and distributed under the terms\n# of the MIT license. See the LICENSE file for details.\n\n# Abstract\n# ---------\n# This is a bootstrap script for an OS X guest machine. It's able to:\n#   0) Update network settings (Ethernet)\n#   1) Install the anti-antitracing kernel module (aka `pt_deny_attach` kext)\n#   2) Patch /etc/sudoers to allow the user to launch `dtrace` and `date`\n#      without a password\n#   3) Load and launch the Cuckoo guest agent (agent.py)\n#\n# Usage\n# ---------\n# The first two steps are optional, so by default this script will only download\n# and execute the arent.py. To install the kernel module or to patch the sudoers\n# file, use -k and -s flags respectively:\n#\n# ./bootstrap_guest.sh -k      -- for loading the kext\n# ./bootstrap_guest.sh -s      -- for patching /etc/sudoers\n# ./bootstrap_guest.sh -k -s   -- for both actions\n#\n\n# Network settings\nIP_ADDRESS=\"192.168.56.101\"\nSUBNET_MASK=\"255.255.255.0\"\nROUTER_ADDRESS=\"192.168.56.1\"\nDNS_SERVERS=(\"208.67.220.220\" \"208.67.222.222\")\n# Cuckoo agent locations\nAGENT_DIR=\"/Users/Shared\"\nAGENT_URL=\"https://raw.githubusercontent.com/cuckoosandbox/cuckoo/master/agent/agent.py\"\n\nopt_patch_sudoers=false; opt_install_kext=false;\nwhile getopts \":sk\" opt; do\n  case $opt in\n    s) opt_patch_sudoers=true ;;\n    k) opt_install_kext=true ;;\n    \\?) echo \"Invalid option -$OPTARG\" >&2 ;;\n  esac\ndone\n\n# [0] Setup network\nsudo networksetup -setmanual Ethernet $IP_ADDRESS $SUBNET_MASK $ROUTER_ADDRESS\nsudo networksetup -setdnsservers Ethernet \"${DNS_SERVERS[@]}\"\n\n# [1] Install `pt_deny_attach` kext.\nif [ \"$opt_install_kext\" == true ]; then\n    # echo \"[INFO]: Downloading 'pt_deny_attach' kext\"\n    # echo \"[INFO]: Loading the kext into the kernel\"\n    # TODO(rodionovd): download and load the kext\n    echo \"[WARNING]: pt_deny_attach kext loading is not implemented yet.\"\nfi\n\n# [2] Patch /etc/sudoers to enable passwordless sudo for `dtrace` and `date`\nif [ \"$opt_patch_sudoers\" == true ]; then\n    echo \"[INFO]: Patching /etc/sudoers to enable passwordless dtrace for current user\"\n    user=$(whoami)\n    if [ -z \"$user\" ]; then\n        echo \"[ERROR]: $(whoami) failed. /etc/sudoers wasn't patched.\"\n    else\n        # Since `>>` redirect is done by the shell itself and it drops all privileges,\n        # we must run this command in a subshell.\n        sudo sh -c \"echo \\\"$user\\tALL=(root) NOPASSWD: /usr/sbin/dtrace\\\" >> /etc/sudoers\"\n        sudo sh -c \"echo \\\"$user\\tALL=(root) NOPASSWD: /bin/date\\\" >> /etc/sudoers\"\n    fi\nfi\n\n# [3] Download agent.py into /Users/Shared\necho \"[INFO]: Downloading the Cuckoo guest agent\"\ncurl -o \"$AGENT_DIR\"/agent.py \"$AGENT_URL\"\n# [3.1] Install dependencies\nsudo easy_install pip\n(cd \"$(dirname \"$0\")/..\" && sudo -H pip install -r requirements.txt)\n# [4] and run it\necho \"[INFO]: Launching the Cuckoo guest agent\"\npython \"$AGENT_DIR\"/agent.py\n"
  },
  {
    "path": "utils/darwin/bootstrap_host.sh",
    "content": "#!/usr/bin/env bash\n# Copyright (C) 2015 Dmitry Rodionov\n# This software may be modified and distributed under the terms\n# of the MIT license. See the LICENSE file for details.\n\n# Abstract\n# ---------\n# A bootstrap script for an OS X host.\n#\n# Usage\n# ---------\n# Launch this script with -i flag to create a host-only network interface\n# and assign it to the given VirtualBox guest machine:\n# ./bootstrap_host.sh -i MyOSXVirtualMachine\n#\n# Or just launch it without any arguments to enable traffic forwarding\n# for vboxnet0 host-only interface:\n# ./bootstrap_host.sh\n\nGUEST_IP=\"192.168.56.1\"\nINTERFACE=\"vboxnet0\"\n\nopt_create_interface=false; vmname=\"\";\nwhile getopts \":i:\" opt; do\n    case $opt in\n        i) opt_create_interface=true; vmname=\"$OPTARG\" ;;\n        \\?) echo \"Invalid option -$OPTARG\" >&2 ;;\n    esac\ndone\n\n# [1] Setup a host-only network interface (vboxnet0)\nif [ \"$opt_create_interface\" == true ]; then\n    if [[ ! -f $(which vboxmanage) ]]; then\n        echo -e \"[Error] Could not locate vboxmanage. Please, install Virtual Box first.\"\n        exit 1\n    fi\n    # Let's also verify that a VM with this name actually exists\n    # Note: `vboxmanage list vms` outputs data in the following format:\n    #   \"SandboxXP\" {2b96015e-42e0-4662-b792-c738c2de155f}\n    vm_exists=$(vboxmanage list vms | grep -c \"\\\"$vmname\\\" {[0-9a-z\\-]*}\")\n    if [ \"$vm_exists\" -ne 1 ]; then\n        echo -e \"[Error] Could not find a VM named \\\"$vmname\\\".\"\n        exit 1\n    fi\n    vboxmanage hostonlyif create\n    # 192.168.56.1 is the default IP from `cuckoo.conf`\n    vboxmanage hostonlyif ipconfig $INTERFACE --ip $GUEST_IP\n    vboxmanage modifyvm \"$vmname\" --hostonlyadapter1 $INTERFACE\n    vboxmanage modifyvm \"$vmname\" --nic1 hostonly\nfi\n\n# [2.1] Make sure vboxnet0 is up before doing anything with it\nvboxmanage hostonlyif ipconfig $INTERFACE --ip $GUEST_IP\nif [ \"$(uname -s)\" != \"Darwin\" ]; then\n    echo \"I can't setup traffic forwarding for your OS, sorry :(\"\nelse\n    # [2.2] Enable traffic forwarding for vboxnet0 interface (for OS X only)\n    sudo sysctl -w net.inet.ip.forwarding=1 &> /dev/null\n    rules=\"nat on en1 from vboxnet0:network to any -> (en1)\n    pass inet proto icmp all\n    pass in on vboxnet0 proto udp from any to any port domain keep state\n    pass quick on en1 proto udp from any to any port domain keep state\"\n    echo \"$rules\" > ./pfrules\n    sudo pfctl -e -f ./pfrules\n    rm -f ./pfrules\nfi\n"
  },
  {
    "path": "utils/db_migration/alembic.ini",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\n# A generic, single database configuration.\n\n[alembic]\n# path to migration scripts\nscript_location = .\n\n# template used to generate migration files\nfile_template = %%(slug)s\n\n# max length of characters to apply to the\n# \"slug\" field\n#truncate_slug_length = 40\n\n# set to 'true' to run the environment during\n# the 'revision' command, regardless of autogenerate\n# revision_environment = false\n\n# Logging configuration\n[loggers]\nkeys = root,sqlalchemy,alembic\n\n[handlers]\nkeys = console\n\n[formatters]\nkeys = generic\n\n[logger_root]\nlevel = WARN\nhandlers = console\nqualname =\n\n[logger_sqlalchemy]\nlevel = WARN\nhandlers =\nqualname = sqlalchemy.engine\n\n[logger_alembic]\nlevel = INFO\nhandlers =\nqualname = alembic\n\n[handler_console]\nclass = StreamHandler\nargs = (sys.stderr,)\nlevel = NOTSET\nformatter = generic\n\n[formatter_generic]\nformat = %(levelname)-5.5s [%(name)s] %(message)s\ndatefmt = %H:%M:%S\n"
  },
  {
    "path": "utils/db_migration/env.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nfrom __future__ import with_statement\n\nimport os.path\nimport sys\n\nfrom alembic import context\nfrom sqlalchemy import create_engine, pool\nfrom logging.config import fileConfig\n\n# This is the Alembic Config object, which provides access to the values within\n# the .ini file in use.\nconfig = context.config\n\n# Interpret the config file for Python logging.\n# This line sets up loggers basically.\nfileConfig(config.config_file_name)\n\n# Get cuckoo root path.\ncurdir = os.path.abspath(os.path.dirname(__file__))\nsys.path.append(os.path.join(curdir, \"..\", \"..\"))\n\nfrom lib.cuckoo.core.database import Base, Database\n\n# Get database connection string from cuckoo configuration.\nurl = Database(schema_check=False).engine.url.__to_string__(hide_password=False)\ntarget_metadata = Base.metadata\n\ndef run_migrations_offline():\n    \"\"\"Run migrations in 'offline' mode.\n    This configures the context with just a URL\n    and not an Engine, though an Engine is acceptable\n    here as well.  By skipping the Engine creation\n    we don't even need a DBAPI to be available.\n    Calls to context.execute() here emit the given string to the\n    script output.\n    \"\"\"\n    context.configure(url=url)\n\n    with context.begin_transaction():\n        context.run_migrations()\n\ndef run_migrations_online():\n    \"\"\"Run migrations in 'online' mode.\n    In this scenario we need to create an Engine\n    and associate a connection with the context.\n    \"\"\"\n    engine = create_engine(url, poolclass=pool.NullPool)\n\n    connection = engine.connect()\n    context.configure(connection=connection, target_metadata=target_metadata)\n\n    try:\n        with context.begin_transaction():\n            context.run_migrations()\n    finally:\n        connection.close()\n\nif context.is_offline_mode():\n    run_migrations_offline()\nelse:\n    run_migrations_online()\n"
  },
  {
    "path": "utils/db_migration/script.py.mako",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\n\"\"\"${message}\n\nRevision ID: ${up_revision}\nRevises: ${down_revision}\nCreate Date: ${create_date}\n\n\"\"\"\n\n# revision identifiers, used by Alembic.\nrevision = ${repr(up_revision)}\ndown_revision = ${repr(down_revision)}\n\nfrom alembic import op\nimport sqlalchemy as sa\n${imports if imports else \"\"}\n\ndef upgrade():\n    ${upgrades if upgrades else \"pass\"}\n\n\ndef downgrade():\n    ${downgrades if downgrades else \"pass\"}\n"
  },
  {
    "path": "utils/db_migration/versions/from_0_6_to_1_1.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\n\"\"\"Database migration from Cuckoo 0.6 to Cuckoo 1.1.\n\nRevision ID: 263a45963c72\nRevises: None\nCreate Date: 2014-03-23 23:30:36.756792\n\n\"\"\"\n\n# Revision identifiers, used by Alembic.\nrevision = \"263a45963c72\"\nmongo_revision = \"1\"\ndown_revision = None\n\nimport os\nimport sys\nimport sqlalchemy as sa\n\nfrom datetime import datetime\n\ntry:\n    from dateutil.parser import parse\nexcept ImportError:\n    print \"Unable to import dateutil.parser\",\n    print \"(install with `pip install python-dateutil`)\"\n    sys.exit()\n\ntry:\n    from alembic import op\nexcept ImportError:\n    print \"Unable to import alembic (install with `pip install alembic`)\"\n    sys.exit()\n\nsys.path.append(os.path.join(\"..\", \"..\"))\n\nimport lib.cuckoo.core.database as db\nfrom lib.cuckoo.common.config import Config\n\ndef upgrade():\n    # BEWARE: be prepared to really spaghetti code. To deal with SQLite limitations in Alembic we coded some workarounds.\n\n    # Migrations are supported starting form Cuckoo 0.6 and Cuckoo 1.0; I need a way to figure out if from which release\n    # it will start because both schema are missing alembic release versioning.\n    # I check for tags table to distinguish between Cuckoo 0.6 and 1.0.\n    conn = op.get_bind()\n\n    if conn.engine.dialect.has_table(conn.engine.connect(), \"machines_tags\"):\n        # If this table exist we are on Cuckoo 1.0 or above.\n        # So skip SQL migration.\n        pass\n    else:\n        # We are on Cuckoo < 1.0, hopefully 0.6.\n        # So run SQL migration.\n\n        # Create table used by Tag.\n        op.create_table(\n            \"tags\",\n            sa.Column(\"id\", sa.Integer(), primary_key=True),\n            sa.Column(\"name\", sa.String(length=255), nullable=False, unique=True),\n        )\n\n        # Create secondary table used in association Machine - Tag.\n        op.create_table(\n            \"machines_tags\",\n            sa.Column(\"machine_id\", sa.Integer, sa.ForeignKey(\"machines.id\")),\n            sa.Column(\"tag_id\", sa.Integer, sa.ForeignKey(\"tags.id\")),\n        )\n\n        # Add columns to Machine.\n        op.add_column(\"machines\", sa.Column(\"interface\", sa.String(length=255), nullable=True))\n        op.add_column(\"machines\", sa.Column(\"snapshot\", sa.String(length=255), nullable=True))\n        # TODO: change default value, be aware sqlite doesn't support that kind of ALTER statement.\n        op.add_column(\"machines\", sa.Column(\"resultserver_ip\", sa.String(length=255), server_default=\"192.168.56.1\", nullable=False))\n        # TODO: change default value, be aware sqlite doesn't support that kind of ALTER statement.\n        op.add_column(\"machines\", sa.Column(\"resultserver_port\", sa.String(length=255), server_default=\"2042\", nullable=False))\n\n        # Deal with Alembic shit.\n        # Alembic is so ORMish that it was impossible to write code which works on different DBMS.\n        if conn.engine.driver == \"psycopg2\":\n            # We don\"t provide a default value and leave the column as nullable because o further data migration.\n            op.add_column(\"tasks\", sa.Column(\"clock\", sa.DateTime(timezone=False),nullable=True))\n            # NOTE: We added this new column so we force clock time to the added_on for old analyses.\n            conn.execute(\"update tasks set clock=added_on\")\n            # Add the not null constraint.\n            op.alter_column(\"tasks\", \"clock\", nullable=False, existing_nullable=True)\n            # Altering status ENUM.\n            # This shit of raw SQL is here because alembic doesn't deal well with alter_colum of ENUM type.\n            op.execute('COMMIT') # Commit because SQLAlchemy doesn't support ALTER TYPE in a transaction.\n            conn.execute(\"ALTER TYPE status_type ADD VALUE 'completed'\")\n            conn.execute(\"ALTER TYPE status_type ADD VALUE 'reported'\")\n            conn.execute(\"ALTER TYPE status_type ADD VALUE 'recovered'\")\n            conn.execute(\"ALTER TYPE status_type ADD VALUE 'running'\")\n            conn.execute(\"ALTER TYPE status_type RENAME ATTRIBUTE success TO completed\")\n            conn.execute(\"ALTER TYPE status_type DROP ATTRIBUTE IF EXISTS failure\")\n        elif conn.engine.driver == \"mysqldb\":\n            # We don\"t provide a default value and leave the column as nullable because o further data migration.\n            op.add_column(\"tasks\", sa.Column(\"clock\", sa.DateTime(timezone=False),nullable=True))\n            # NOTE: We added this new column so we force clock time to the added_on for old analyses.\n            conn.execute(\"update tasks set clock=added_on\")\n            # Add the not null constraint.\n            op.alter_column(\"tasks\", \"clock\", nullable=False, existing_nullable=True, existing_type=sa.DateTime(timezone=False))\n            # NOTE: To workaround limitations in Alembic and MySQL ALTER statement (cannot remove item from ENUM).\n            # Read data.\n            tasks_data = []\n            old_tasks = conn.execute(\"select id, target, category, timeout, priority, custom, machine, package, options, platform, memory, enforce_timeout, added_on, started_on, completed_on, status, sample_id from tasks\").fetchall()\n            for item in old_tasks:\n                d = {}\n                d[\"id\"] = item[0]\n                d[\"target\"] = item[1]\n                d[\"category\"] = item[2]\n                d[\"timeout\"] = item[3]\n                d[\"priority\"] = item[4]\n                d[\"custom\"] = item[5]\n                d[\"machine\"] = item[6]\n                d[\"package\"] = item[7]\n                d[\"options\"] = item[8]\n                d[\"platform\"] = item[9]\n                d[\"memory\"] = item[10]\n                d[\"enforce_timeout\"] = item[11]\n                if isinstance(item[12], datetime):\n                    d[\"added_on\"] = item[12]\n                else:\n                    d[\"added_on\"] = parse(item[12])\n                if isinstance(item[13], datetime):\n                    d[\"started_on\"] = item[13]\n                else:\n                    d[\"started_on\"] = parse(item[13])\n                if isinstance(item[14], datetime):\n                    d[\"completed_on\"] = item[14]\n                else:\n                    d[\"completed_on\"] = parse(item[14])\n                d[\"status\"] = item[15]\n                d[\"sample_id\"] = item[16]\n\n                # Force clock.\n                # NOTE: We added this new column so we force clock time to the added_on for old analyses.\n                d[\"clock\"] = d[\"added_on\"]\n                # Enum migration, \"success\" isn\"t a valid state now.\n                if d[\"status\"] == \"success\":\n                    d[\"status\"] = \"completed\"\n                tasks_data.append(d)\n\n            # Rename original table.\n            op.rename_table(\"tasks\", \"old_tasks\")\n            # Drop old table.\n            op.drop_table(\"old_tasks\")\n            # Drop old Enum.\n            sa.Enum(name=\"status_type\").drop(op.get_bind(), checkfirst=False)\n            # Create new table with 1.0 schema.\n            op.create_table(\n                \"tasks\",\n                sa.Column(\"id\", sa.Integer(), nullable=False),\n                sa.Column(\"target\", sa.String(length=255), nullable=False),\n                sa.Column(\"category\", sa.String(length=255), nullable=False),\n                sa.Column(\"timeout\", sa.Integer(), server_default=\"0\", nullable=False),\n                sa.Column(\"priority\", sa.Integer(), server_default=\"1\", nullable=False),\n                sa.Column(\"custom\", sa.String(length=255), nullable=True),\n                sa.Column(\"machine\", sa.String(length=255), nullable=True),\n                sa.Column(\"package\", sa.String(length=255), nullable=True),\n                sa.Column(\"options\", sa.String(length=255), nullable=True),\n                sa.Column(\"platform\", sa.String(length=255), nullable=True),\n                sa.Column(\"memory\", sa.Boolean(), nullable=False, default=False),\n                sa.Column(\"enforce_timeout\", sa.Boolean(), nullable=False, default=False),\n                sa.Column(\"clock\", sa.DateTime(timezone=False), server_default=sa.func.now(), nullable=False),\n                sa.Column(\"added_on\", sa.DateTime(timezone=False), nullable=False),\n                sa.Column(\"started_on\", sa.DateTime(timezone=False), nullable=True),\n                sa.Column(\"completed_on\", sa.DateTime(timezone=False), nullable=True),\n                sa.Column(\"status\", sa.Enum(\"pending\", \"running\", \"completed\", \"reported\", \"recovered\", name=\"status_type\"), server_default=\"pending\", nullable=False),\n                sa.Column(\"sample_id\", sa.Integer, sa.ForeignKey(\"samples.id\"), nullable=True),\n                sa.PrimaryKeyConstraint(\"id\")\n            )\n\n            # Insert data.\n            op.bulk_insert(db.Task.__table__, tasks_data)\n        elif conn.engine.driver == \"pysqlite\":\n            # Edit task status enumeration in Task.\n            # NOTE: To workaround limitations in SQLite we have to create a temporary table, create the new schema and copy data.\n            # Read data.\n            tasks_data = []\n            old_tasks = conn.execute(\"select id, target, category, timeout, priority, custom, machine, package, options, platform, memory, enforce_timeout, added_on, started_on, completed_on, status, sample_id from tasks\").fetchall()\n            for item in old_tasks:\n                d = {}\n                d[\"id\"] = item[0]\n                d[\"target\"] = item[1]\n                d[\"category\"] = item[2]\n                d[\"timeout\"] = item[3]\n                d[\"priority\"] = item[4]\n                d[\"custom\"] = item[5]\n                d[\"machine\"] = item[6]\n                d[\"package\"] = item[7]\n                d[\"options\"] = item[8]\n                d[\"platform\"] = item[9]\n                d[\"memory\"] = item[10]\n                d[\"enforce_timeout\"] = item[11]\n                if isinstance(item[12], datetime):\n                    d[\"added_on\"] = item[12]\n                else:\n                    d[\"added_on\"] = parse(item[12])\n                if isinstance(item[13], datetime):\n                    d[\"started_on\"] = item[13]\n                else:\n                    d[\"started_on\"] = parse(item[13])\n                if isinstance(item[14], datetime):\n                    d[\"completed_on\"] = item[14]\n                else:\n                    d[\"completed_on\"] = parse(item[14])\n                d[\"status\"] = item[15]\n                d[\"sample_id\"] = item[16]\n\n                # Force clock.\n                # NOTE: We added this new column so we force clock time to the added_on for old analyses.\n                d[\"clock\"] = d[\"added_on\"]\n                # Enum migration, \"success\" isn\"t a valid state now.\n                if d[\"status\"] == \"success\":\n                    d[\"status\"] = \"completed\"\n                tasks_data.append(d)\n\n            # Rename original table.\n            op.rename_table(\"tasks\", \"old_tasks\")\n            # Drop old table.\n            op.drop_table(\"old_tasks\")\n            # Drop old Enum.\n            sa.Enum(name=\"status_type\").drop(op.get_bind(), checkfirst=False)\n            # Create new table with 1.0 schema.\n            op.create_table(\n                \"tasks\",\n                sa.Column(\"id\", sa.Integer(), nullable=False),\n                sa.Column(\"target\", sa.String(length=255), nullable=False),\n                sa.Column(\"category\", sa.String(length=255), nullable=False),\n                sa.Column(\"timeout\", sa.Integer(), server_default=\"0\", nullable=False),\n                sa.Column(\"priority\", sa.Integer(), server_default=\"1\", nullable=False),\n                sa.Column(\"custom\", sa.String(length=255), nullable=True),\n                sa.Column(\"machine\", sa.String(length=255), nullable=True),\n                sa.Column(\"package\", sa.String(length=255), nullable=True),\n                sa.Column(\"options\", sa.String(length=255), nullable=True),\n                sa.Column(\"platform\", sa.String(length=255), nullable=True),\n                sa.Column(\"memory\", sa.Boolean(), nullable=False, default=False),\n                sa.Column(\"enforce_timeout\", sa.Boolean(), nullable=False, default=False),\n                sa.Column(\"clock\", sa.DateTime(timezone=False), server_default=sa.func.now(), nullable=False),\n                sa.Column(\"added_on\", sa.DateTime(timezone=False), nullable=False),\n                sa.Column(\"started_on\", sa.DateTime(timezone=False), nullable=True),\n                sa.Column(\"completed_on\", sa.DateTime(timezone=False), nullable=True),\n                sa.Column(\"status\", sa.Enum(\"pending\", \"running\", \"completed\", \"reported\", \"recovered\", name=\"status_type\"), server_default=\"pending\", nullable=False),\n                sa.Column(\"sample_id\", sa.Integer, sa.ForeignKey(\"samples.id\"), nullable=True),\n                sa.PrimaryKeyConstraint(\"id\")\n            )\n\n            # Insert data.\n            op.bulk_insert(db.Task.__table__, tasks_data)\n\n    # Migrate mongo.\n    mongo_upgrade()\n\ndef mongo_upgrade():\n    \"\"\"Migrate mongodb schema and data.\"\"\"\n    # Read reporting.conf to fetch mongo configuration.\n    config = Config(cfg=os.path.join(\"..\", \"..\", \"conf\", \"reporting.conf\"))\n    # Run migration only if mongo is enabled as reporting module.\n    if config.mongodb.enabled:\n        host = config.mongodb.get(\"host\", \"127.0.0.1\")\n        port = config.mongodb.get(\"port\", 27017)\n        database = config.mongodb.get(\"db\", \"cuckoo\")\n        print \"Mongo reporting is enabled, strarting mongo data migration.\"\n\n        if not port.isnumber():\n            print \"Port must be an integer\"\n            sys.exit()\n\n        # Support old Mongo.\n        try:\n            from pymongo.connection import Connection\n            from pymongo.errors import ConnectionFailure\n\n            conn = Connection(host, port)\n            db = conn.cuckoo\n            done = True\n        except ImportError:\n            print \"Unable to import pymongo (install with `pip install pymongo`)\"\n            done = False\n        except ConnectionFailure:\n            print \"Cannot connect to MongoDB\"\n            sys.exit()\n\n        try:\n            if not done:\n                import pymongo\n\n                try:\n                    db = pymongo.MongoClient(host, port)[database]\n                except pymongo.errors.ConnectionFailure:\n                    print \"Cannot connect to MongoDB\"\n                    sys.exit()\n        except ImportError:\n            print \"Unable to import pymongo (install with `pip install pymongo`)\"\n            sys.exit()\n\n        # Check for schema version and create it.\n        if \"cuckoo_schema\" in db.collection_names():\n            print \"Mongo schema version not expected\"\n            sys.exit()\n        else:\n            db.cuckoo_schema.save({\"version\": mongo_revision})\n\n    else:\n        print \"Mongo reporting module not enabled, skipping mongo migration.\"\n\ndef downgrade():\n    # We don\"t support downgrade.\n    pass\n"
  },
  {
    "path": "utils/db_migration/versions/from_1_1_to_1_2-added_states.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\n\"\"\"Database migration from Cuckoo 1.1 to Cuckoo 1.2.\nAdded failed statuses to tasks.\n\nRevision ID: 495d5a6edef3\nRevises: 18eee46c6f81\nCreate Date: 2015-02-28 19:08:29.284111\n\n\"\"\"\n# Spaghetti as a way of life.\n\n# Revision identifiers, used by Alembic.\nrevision = \"495d5a6edef3\"\ndown_revision = \"18eee46c6f81\"\n\nimport os.path\nimport sqlalchemy as sa\nimport sys\nfrom datetime import datetime\n\ntry:\n    from dateutil.parser import parse\nexcept ImportError:\n    print \"Unable to import dateutil.parser\",\n    print \"(install with `pip install python-dateutil`)\"\n    sys.exit()\n\ntry:\n    from alembic import op\nexcept ImportError:\n    print \"Unable to import alembic (install with `pip install alembic`)\"\n    sys.exit()\n\ncurdir = os.path.abspath(os.path.dirname(__file__))\nsys.path.append(os.path.join(curdir, \"..\", \"..\"))\n\nimport lib.cuckoo.core.database as db\n\ndef _perform(upgrade):\n    conn = op.get_bind()\n\n    # Deal with Alembic shit.\n    # Alembic is so ORMish that it was impossible to write code which works on different DBMS.\n    if conn.engine.driver == \"psycopg2\":\n        # Altering status ENUM.\n        # This shit of raw SQL is here because alembic doesn't deal well with alter_colum of ENUM type.\n        # Commit because SQLAlchemy doesn't support ALTER TYPE in a transaction.\n        op.execute('COMMIT')\n        if upgrade:\n            conn.execute(\"ALTER TYPE status_type ADD VALUE 'failed_reporting'\")\n        else:\n            conn.execute(\"ALTER TYPE status_type DROP ATTRIBUTE IF EXISTS failed_reporting\")\n    else:\n        # Read data.\n        tasks_data = []\n        old_tasks = conn.execute(\"select id, target, category, timeout, priority, custom, machine, package, options, platform, memory, enforce_timeout, clock, added_on, started_on, completed_on, status, sample_id from tasks\").fetchall()\n        for item in old_tasks:\n            d = {}\n            d[\"id\"] = item[0]\n            d[\"target\"] = item[1]\n            d[\"category\"] = item[2]\n            d[\"timeout\"] = item[3]\n            d[\"priority\"] = item[4]\n            d[\"custom\"] = item[5]\n            d[\"machine\"] = item[6]\n            d[\"package\"] = item[7]\n            d[\"options\"] = item[8]\n            d[\"platform\"] = item[9]\n            d[\"memory\"] = item[10]\n            d[\"enforce_timeout\"] = item[11]\n\n            if isinstance(item[12], datetime):\n                d[\"clock\"] = item[12]\n            elif item[12]:\n                d[\"clock\"] = parse(item[12])\n            else:\n                d[\"clock\"] = None\n\n            if isinstance(item[13], datetime):\n                d[\"added_on\"] = item[13]\n            elif item[13]:\n                d[\"added_on\"] = parse(item[13])\n            else:\n                d[\"added_on\"] = None\n\n            if isinstance(item[14], datetime):\n                d[\"started_on\"] = item[14]\n            elif item[14]:\n                d[\"started_on\"] = parse(item[14])\n            else:\n                d[\"started_on\"] = None\n\n            if isinstance(item[15], datetime):\n                d[\"completed_on\"] = item[15]\n            elif item[15]:\n                d[\"completed_on\"] = parse(item[15])\n            else:\n                d[\"completed_on\"] = None\n\n            d[\"status\"] = item[16]\n            d[\"sample_id\"] = item[17]\n\n            tasks_data.append(d)\n        if conn.engine.driver == \"mysqldb\":\n            # Disable foreign key checking to migrate table avoiding checks.\n            op.execute('SET foreign_key_checks = 0')\n\n            # Drop old table.\n            op.drop_table(\"tasks\")\n\n            # Drop old Enum.\n            sa.Enum(name=\"status_type\").drop(op.get_bind(), checkfirst=False)\n            # Create table with 1.2 schema.\n            if upgrade:\n                op.create_table(\n                    \"tasks\",\n                    sa.Column(\"id\", sa.Integer(), nullable=False),\n                    sa.Column(\"target\", sa.String(length=255), nullable=False),\n                    sa.Column(\"category\", sa.String(length=255), nullable=False),\n                    sa.Column(\"timeout\", sa.Integer(), server_default=\"0\", nullable=False),\n                    sa.Column(\"priority\", sa.Integer(), server_default=\"1\", nullable=False),\n                    sa.Column(\"custom\", sa.String(length=255), nullable=True),\n                    sa.Column(\"machine\", sa.String(length=255), nullable=True),\n                    sa.Column(\"package\", sa.String(length=255), nullable=True),\n                    sa.Column(\"options\", sa.String(length=255), nullable=True),\n                    sa.Column(\"platform\", sa.String(length=255), nullable=True),\n                    sa.Column(\"memory\", sa.Boolean(), nullable=False, default=False),\n                    sa.Column(\"enforce_timeout\", sa.Boolean(), nullable=False, default=False),\n                    sa.Column(\"clock\", sa.DateTime(timezone=False), default=datetime.now, nullable=False),\n                    sa.Column(\"added_on\", sa.DateTime(timezone=False), nullable=False),\n                    sa.Column(\"started_on\", sa.DateTime(timezone=False), nullable=True),\n                    sa.Column(\"completed_on\", sa.DateTime(timezone=False), nullable=True),\n                    sa.Column(\"status\", sa.Enum(\"pending\", \"running\", \"completed\", \"reported\", \"recovered\", \"failed_analysis\", \"failed_processing\", \"failed_reporting\", name=\"status_type\"), server_default=\"pending\", nullable=False),\n                    sa.Column(\"sample_id\", sa.Integer, sa.ForeignKey(\"samples.id\"), nullable=True),\n                    sa.PrimaryKeyConstraint(\"id\")\n                )\n            else:\n                op.create_table(\n                    \"tasks\",\n                    sa.Column(\"id\", sa.Integer(), nullable=False),\n                    sa.Column(\"target\", sa.String(length=255), nullable=False),\n                    sa.Column(\"category\", sa.String(length=255), nullable=False),\n                    sa.Column(\"timeout\", sa.Integer(), server_default=\"0\", nullable=False),\n                    sa.Column(\"priority\", sa.Integer(), server_default=\"1\", nullable=False),\n                    sa.Column(\"custom\", sa.String(length=255), nullable=True),\n                    sa.Column(\"machine\", sa.String(length=255), nullable=True),\n                    sa.Column(\"package\", sa.String(length=255), nullable=True),\n                    sa.Column(\"options\", sa.String(length=255), nullable=True),\n                    sa.Column(\"platform\", sa.String(length=255), nullable=True),\n                    sa.Column(\"memory\", sa.Boolean(), nullable=False, default=False),\n                    sa.Column(\"enforce_timeout\", sa.Boolean(), nullable=False, default=False),\n                    sa.Column(\"clock\", sa.DateTime(timezone=False), default=datetime.now, nullable=False),\n                    sa.Column(\"added_on\", sa.DateTime(timezone=False), nullable=False),\n                    sa.Column(\"started_on\", sa.DateTime(timezone=False), nullable=True),\n                    sa.Column(\"completed_on\", sa.DateTime(timezone=False), nullable=True),\n                    sa.Column(\"status\", sa.Enum(\"pending\", \"running\", \"completed\", \"reported\", \"recovered\", \"failed_analysis\", \"failed_processing\", name=\"status_type\"), server_default=\"pending\", nullable=False),\n                    sa.Column(\"sample_id\", sa.Integer, sa.ForeignKey(\"samples.id\"), nullable=True),\n                    sa.PrimaryKeyConstraint(\"id\")\n                )\n            op.execute('COMMIT')\n\n            # Insert data.\n            op.bulk_insert(db.Task.__table__, tasks_data)\n            # Enable foreign key.\n            op.execute('SET foreign_key_checks = 1')\n\n        else:\n            op.drop_table(\"tasks\")\n\n            # Create table with 1.2 schema.\n            if upgrade:\n                op.create_table(\n                    \"tasks\",\n                    sa.Column(\"id\", sa.Integer(), nullable=False),\n                    sa.Column(\"target\", sa.String(length=255), nullable=False),\n                    sa.Column(\"category\", sa.String(length=255), nullable=False),\n                    sa.Column(\"timeout\", sa.Integer(), server_default=\"0\", nullable=False),\n                    sa.Column(\"priority\", sa.Integer(), server_default=\"1\", nullable=False),\n                    sa.Column(\"custom\", sa.String(length=255), nullable=True),\n                    sa.Column(\"machine\", sa.String(length=255), nullable=True),\n                    sa.Column(\"package\", sa.String(length=255), nullable=True),\n                    sa.Column(\"options\", sa.String(length=255), nullable=True),\n                    sa.Column(\"platform\", sa.String(length=255), nullable=True),\n                    sa.Column(\"memory\", sa.Boolean(), nullable=False, default=False),\n                    sa.Column(\"enforce_timeout\", sa.Boolean(), nullable=False, default=False),\n                    sa.Column(\"clock\", sa.DateTime(timezone=False), default=datetime.now, nullable=False),\n                    sa.Column(\"added_on\", sa.DateTime(timezone=False), nullable=False),\n                    sa.Column(\"started_on\", sa.DateTime(timezone=False), nullable=True),\n                    sa.Column(\"completed_on\", sa.DateTime(timezone=False), nullable=True),\n                    sa.Column(\"status\", sa.Enum(\"pending\", \"running\", \"completed\", \"reported\", \"recovered\", \"failed_analysis\", \"failed_processing\", \"failed_reporting\", name=\"status_type\"), server_default=\"pending\", nullable=False),\n                    sa.Column(\"sample_id\", sa.Integer, sa.ForeignKey(\"samples.id\"), nullable=True),\n                    sa.PrimaryKeyConstraint(\"id\")\n                )\n            else:\n                op.create_table(\n                    \"tasks\",\n                    sa.Column(\"id\", sa.Integer(), nullable=False),\n                    sa.Column(\"target\", sa.String(length=255), nullable=False),\n                    sa.Column(\"category\", sa.String(length=255), nullable=False),\n                    sa.Column(\"timeout\", sa.Integer(), server_default=\"0\", nullable=False),\n                    sa.Column(\"priority\", sa.Integer(), server_default=\"1\", nullable=False),\n                    sa.Column(\"custom\", sa.String(length=255), nullable=True),\n                    sa.Column(\"machine\", sa.String(length=255), nullable=True),\n                    sa.Column(\"package\", sa.String(length=255), nullable=True),\n                    sa.Column(\"options\", sa.String(length=255), nullable=True),\n                    sa.Column(\"platform\", sa.String(length=255), nullable=True),\n                    sa.Column(\"memory\", sa.Boolean(), nullable=False, default=False),\n                    sa.Column(\"enforce_timeout\", sa.Boolean(), nullable=False, default=False),\n                    sa.Column(\"clock\", sa.DateTime(timezone=False), default=datetime.now, nullable=False),\n                    sa.Column(\"added_on\", sa.DateTime(timezone=False), nullable=False),\n                    sa.Column(\"started_on\", sa.DateTime(timezone=False), nullable=True),\n                    sa.Column(\"completed_on\", sa.DateTime(timezone=False), nullable=True),\n                    sa.Column(\"status\", sa.Enum(\"pending\", \"running\", \"completed\", \"reported\", \"recovered\", \"failed_analysis\", \"failed_processing\", name=\"status_type\"), server_default=\"pending\", nullable=False),\n                    sa.Column(\"sample_id\", sa.Integer, sa.ForeignKey(\"samples.id\"), nullable=True),\n                    sa.PrimaryKeyConstraint(\"id\")\n                )\n\n            # Insert data.\n            op.bulk_insert(db.Task.__table__, tasks_data)\n\ndef upgrade():\n    _perform(upgrade=True)\n\ndef downgrade():\n    _perform(upgrade=False)\n"
  },
  {
    "path": "utils/db_migration/versions/from_1_1_to_1_2-extend_file_type.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\n\"\"\"Database migration from Cuckoo 0.6 to Cuckoo 1.1.\nExtend sample's file-type field.\n\nRevision ID: 18eee46c6f81\nRevises: 263a45963c72\nCreate Date: 2014-08-21 12:41:30.863956\n\n\"\"\"\n\n# Revision identifiers, used by Alembic.\nrevision = \"18eee46c6f81\"\ndown_revision = \"263a45963c72\"\n\nfrom alembic import op\nimport os.path\nimport sqlalchemy as sa\nimport sys\n\ncurdir = os.path.abspath(os.path.dirname(__file__))\nsys.path.append(os.path.join(curdir, \"..\", \"..\", \"..\"))\n\nimport lib.cuckoo.core.database as db\n\ndef _perform(upgrade):\n    conn = op.get_bind()\n\n    sample_list = conn.execute(\"SELECT id, file_size, file_type, md5, crc32, \"\n                               \"sha1, sha256, sha512, ssdeep FROM samples\")\n\n    samples = []\n    for sample in sample_list:\n        samples.append({\n            \"id\": sample[0],\n            \"file_size\": sample[1],\n            \"file_type\": sample[2],\n            \"md5\": sample[3],\n            \"crc32\": sample[4],\n            \"sha1\": sample[5],\n            \"sha256\": sample[6],\n            \"sha512\": sample[7],\n            \"ssdeep\": sample[8],\n        })\n\n    # PostgreSQL and MySQL have different names for the foreign key of\n    # Task.sample_id -> Sample.id; for SQLite we don't drop/recreate the\n    # foreign key.\n    fkey_name = {\n        \"mysql\": \"tasks_ibfk_1\",\n        \"postgresql\": \"tasks_sample_id_fkey\",\n    }\n\n    fkey = fkey_name.get(db.Database(schema_check=False).engine.name)\n\n    # First drop the foreign key.\n    if fkey:\n        op.drop_constraint(fkey, \"tasks\", type_=\"foreignkey\")\n\n    # Rename original table.\n    op.rename_table(\"samples\", \"old_samples\")\n\n    # Drop old table.\n    op.drop_table(\"old_samples\")\n\n    if upgrade:\n        file_type = sa.Text()\n    else:\n        file_type = sa.String(255)\n\n        # As downgrading implies trimming file_type's to 255 bytes we force\n        # this for every available record.\n        for sample in samples:\n            sample[\"file_type\"] = sample[\"file_type\"][:255]\n\n    # Create the new table with 1.2 schema.\n    # Changelog:\n    # * file_type changed its type from String(255) to Text().\n    op.create_table(\n        \"samples\",\n        sa.Column(\"id\", sa.Integer(), nullable=False),\n        sa.Column(\"file_size\", sa.Integer(), nullable=False),\n        sa.Column(\"file_type\", file_type, nullable=False),\n        sa.Column(\"md5\", sa.String(32), nullable=False),\n        sa.Column(\"crc32\", sa.String(8), nullable=False),\n        sa.Column(\"sha1\", sa.String(40), nullable=False),\n        sa.Column(\"sha256\", sa.String(64), nullable=False),\n        sa.Column(\"sha512\", sa.String(128), nullable=False),\n        sa.Column(\"ssdeep\", sa.Text(), nullable=True),\n        sa.PrimaryKeyConstraint(\"id\")\n    )\n\n    # Insert data.\n    op.bulk_insert(db.Sample.__table__, samples)\n\n    # Restore the indices.\n    op.create_index(\"hash_index\", \"samples\",\n                    [\"md5\", \"crc32\", \"sha1\", \"sha256\", \"sha512\"],\n                    unique=True)\n\n    # Create the foreign key.\n    if fkey:\n        op.create_foreign_key(fkey, \"tasks\", \"samples\", [\"sample_id\"], [\"id\"])\n\ndef upgrade():\n    _perform(upgrade=True)\n\ndef downgrade():\n    _perform(upgrade=False)\n"
  },
  {
    "path": "utils/db_migration/versions/from_1_2_to_1_3-add_task_owner.py",
    "content": "# Copyright (C) 2010-2014 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\n\"\"\"Database migration from Cuckoo 1.2 to Cuckoo 1.3.\nAdded task owner used by the Distributed API.\n\nRevision ID: 3aa42d870199\nRevises: 18eee46c6f81\nCreate Date: 2014-12-04 11:19:49.388410\n\"\"\"\n\n# Revision identifiers, used by Alembic.\nrevision = \"3aa42d870199\"\ndown_revision = \"495d5a6edef3\"\n\nfrom alembic import op\nimport sqlalchemy as sa\n\n\ndef upgrade():\n    op.add_column(\"tasks\", sa.Column(\"owner\", sa.String(length=64), nullable=True))\n\n\ndef downgrade():\n    op.drop_column(\"tasks\", \"owner\")\n"
  },
  {
    "path": "utils/db_migration/versions/from_1_2_to_2_0-guest_status.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\n\"\"\"guest status\n\nRevision ID: 1583656cb935\nRevises: 1070cd314621\nCreate Date: 2015-12-15 14:25:27.379967\n\n\"\"\"\n\n# revision identifiers, used by Alembic.\nrevision = \"1583656cb935\"\ndown_revision = \"1070cd314621\"\n\nfrom alembic import op\nimport sqlalchemy as sa\n\ndef upgrade():\n    op.add_column(\"guests\", sa.Column(\"status\", sa.String(length=16), nullable=False, server_default=\"stopped\"))\n\ndef downgrade():\n    op.drop_column(\"guests\", \"status\")\n"
  },
  {
    "path": "utils/db_migration/versions/from_1_2_to_2_0-machine_options.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\n\"\"\"machine options\n\nRevision ID: cd31654d187\nRevises: 1583656cb935\nCreate Date: 2015-12-16 11:07:59.948819\n\n\"\"\"\n\n# revision identifiers, used by Alembic.\nrevision = \"cd31654d187\"\ndown_revision = \"1583656cb935\"\n\nfrom alembic import op\nimport sqlalchemy as sa\n\ndef upgrade():\n    op.add_column(\"machines\", sa.Column(\"options\", sa.String(length=255), nullable=True))\n\ndef downgrade():\n    op.drop_column(\"machines\", \"options\")\n"
  },
  {
    "path": "utils/db_migration/versions/from_1_2_to_2_0-processing-column.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\n\"\"\"processing column\n\nRevision ID: 4a04f40d4ab4\nRevises: 3aa42d870199\nCreate Date: 2015-11-15 00:57:32.068872\n\n\"\"\"\n\n# revision identifiers, used by Alembic.\nrevision = \"4a04f40d4ab4\"\ndown_revision = \"3aa42d870199\"\n\nfrom alembic import op\nimport sqlalchemy as sa\n\ndef upgrade():\n    op.add_column(\"tasks\", sa.Column(\"processing\", sa.String(length=16), nullable=True))\n\ndef downgrade():\n    op.drop_column(\"tasks\", \"processing\")\n"
  },
  {
    "path": "utils/db_migration/versions/from_1_2_to_2_0-taken-route.py",
    "content": "# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\n\"\"\"taken route\n\nRevision ID: 1070cd314621\nRevises: 4a04f40d4ab4\nCreate Date: 2015-11-21 23:10:04.724813\n\n\"\"\"\n\n# revision identifiers, used by Alembic.\nrevision = \"1070cd314621\"\ndown_revision = \"4a04f40d4ab4\"\n\nfrom alembic import op\nimport sqlalchemy as sa\n\ndef upgrade():\n    op.add_column(\"tasks\", sa.Column(\"route\", sa.String(length=16), nullable=True))\n\ndef downgrade():\n    op.drop_column(\"tasks\", \"route\")\n"
  },
  {
    "path": "utils/dnsserve.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport argparse\nimport logging\nimport socket\nimport sys\n\ntry:\n    from scapy.layers.dns import DNS, DNSQR, DNSRR\nexcept ImportError:\n    sys.exit(\"ERROR: Scapy library is missing (`pip install scapy`)\")\n\ndef dns_serve(args):\n    udps = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\n    udps.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)\n    udps.bind((args.bind, args.port))\n\n    while True:\n        data, addr = udps.recvfrom(1024)\n\n        p = DNS(data)\n        rp = DNS(id=p.id, qr=1, qdcount=p.qdcount, ancount=1, rcode=0)\n        rp.qd = p[DNSQR]\n\n        # IN A, actually look the domain up.\n        if p.opcode == 0 and p[DNSQR].qtype == 1 and p[DNSQR].qclass == 1:\n            if args.hardcode:\n                answer_ip = args.hardcode\n            else:\n                try:\n                    answer_ip = socket.gethostbyname(p.qd[0].qname)\n                except:\n                    if args.nxdomain:\n                        answer_ip = args.nxdomain\n                    else:\n                        rp.ancount = 0\n                        rp.rcode = 3\n                        answer_ip = None\n\n            if answer_ip:\n                rp.an = DNSRR(\n                    rrname=p.qd[0].qname, ttl=60, rdlen=4, rdata=answer_ip\n                )\n\n                log.debug(\"IN A %s -> %s.\", p.qd[0].qname, answer_ip)\n        # IN PTR, we reply with NXDOMAIN.\n        elif p.opcode == 0 and p[DNSQR].qtype == 12 and p[DNSQR].qclass == 1:\n            rp.ancount = 0\n            rp.rcode = 3\n            log.info(\"IN PTR %s -> NXDOMAIN.\", p.qd[0].qname)\n        else:\n            rp.ancount = 0\n            rp.rcode = 2\n            log.warn(\n                \"Unhandled query %s for %s/%s,%s - answering with servfail.\",\n                p.opcode, p.qd[0].qname, p[DNSQR].qtype, p[DNSQR].qclass\n            )\n\n        udps.sendto(rp.build(), addr)\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(description=\"Small DNS server\")\n    parser.add_argument(\"--bind\", help=\"IP address to bind for DNS and services.\", default=\"0.0.0.0\")\n    parser.add_argument(\"--port\", help=\"UDP port to bind for DNS and services.\", default=53, type=int)\n    parser.add_argument(\"--nxdomain\", help=\"IP address to return instead of NXDOMAIN\")\n    parser.add_argument(\"--hardcode\", help=\"Hardcoded IP address to return rather than actually doing DNS lookups\")\n    parser.add_argument(\"-v\", \"--verbose\", action=\"store_true\")\n    args = parser.parse_args()\n\n    logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)\n    log = logging.getLogger(\"dnsserve\")\n\n    dns_serve(args)\n"
  },
  {
    "path": "utils/machine.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport argparse\nimport logging\nimport os.path\nimport sys\n\nsys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), \"..\"))\n\nfrom lib.cuckoo.common.config import Config\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\nfrom lib.cuckoo.core.database import Database\n\ndef update_conf(machinery, args, action=None):\n    \"\"\"Writes the new machine to the relevant configuration file.\"\"\"\n    path = os.path.join(CUCKOO_ROOT, \"conf\", \"%s.conf\" % machinery)\n\n    lines = []\n    for line in open(path, \"rb\"):\n        line = line.strip()\n\n        if \"=\" in line and line.split(\"=\")[0].strip() == \"machines\":\n            # Parse all existing labels.\n            labels = line.split(\"=\", 1)[1]\n            labels = [label.strip() for label in labels.split(\",\")]\n\n            if action == \"add\":\n                labels.append(args.vmname)\n            elif action == \"delete\":\n                if args.vmname in labels:\n                    labels.remove(args.vmname)\n\n            line = \"machines = %s\" % \", \".join(labels)\n\n        lines.append(line)\n\n    if action == \"add\":\n        lines += [\n            \"\",\n            \"[%s]\" % args.vmname,\n            \"label = %s\" % args.vmname,\n            \"platform = %s\" % args.platform,\n            \"ip = %s\" % args.ip,\n        ]\n\n    if args.options:\n        lines.append(\"options = %s\" % args.options)\n\n    if args.snapshot:\n        lines.append(\"snapshot = %s\" % args.snapshot)\n\n    if args.interface:\n        lines.append(\"interface = %s\" % args.interface)\n\n    if args.resultserver:\n        ip, port = args.resultserver.split(\":\")\n        lines.append(\"resultserver_ip = %s\" % ip)\n        lines.append(\"resultserver_port = %s\" % port)\n\n    if args.tags:\n        lines.append(\"tags = %s\" % args.tags)\n\n    open(path, \"wb\").write(\"\\n\".join(lines))\n\ndef main():\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"vmname\", type=str, help=\"Name of the Virtual Machine.\")\n    parser.add_argument(\"--debug\", action=\"store_true\", help=\"Debug log in case of errors.\")\n    parser.add_argument(\"--add\", action=\"store_true\", help=\"Add a Virtual Machine.\")\n    parser.add_argument(\"--delete\", action=\"store_true\", help=\"Delete a Virtual Machine.\")\n    parser.add_argument(\"--ip\", type=str, help=\"Static IP Address.\")\n    parser.add_argument(\"--platform\", type=str, default=\"windows\", help=\"Guest Operating System.\")\n    parser.add_argument(\"--options\", type=str, help=\"Machine options.\")\n    parser.add_argument(\"--tags\", type=str, help=\"Tags for this Virtual Machine.\")\n    parser.add_argument(\"--interface\", type=str, help=\"Sniffer interface for this machine.\")\n    parser.add_argument(\"--snapshot\", type=str, help=\"Specific Virtual Machine Snapshot to use.\")\n    parser.add_argument(\"--resultserver\", type=str, help=\"IP:Port of the Result Server.\")\n    args = parser.parse_args()\n\n    logging.basicConfig()\n    log = logging.getLogger()\n\n    if args.debug:\n        log.setLevel(logging.DEBUG)\n\n    db = Database()\n    conf = Config()\n\n    if args.resultserver:\n        resultserver_ip, resultserver_port = args.resultserver.split(\":\")\n    else:\n        resultserver_ip = conf.resultserver.ip\n        resultserver_port = conf.resultserver.port\n\n    if args.add:\n        if db.view_machine(args.vmname):\n            sys.exit(\"A Virtual Machine with this name already exists!\")\n\n        db.add_machine(args.vmname, args.vmname, args.ip, args.platform,\n                       args.options, args.tags, args.interface, args.snapshot,\n                       resultserver_ip, int(resultserver_port))\n        db.unlock_machine(args.vmname)\n\n        update_conf(conf.cuckoo.machinery, args, action=\"add\")\n\n    if args.delete:\n        # TODO Add a db.del_machine() function for runtime modification.\n        update_conf(conf.cuckoo.machinery, args, action=\"delete\")\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "utils/process.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport sys\nimport time\nimport logging\nimport argparse\nimport signal\nimport multiprocessing\nimport traceback\n\nsys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), \"..\"))\n\nfrom lib.cuckoo.common.config import Config\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\nfrom lib.cuckoo.core.database import Database, TASK_REPORTED, TASK_COMPLETED\nfrom lib.cuckoo.core.database import Task, TASK_FAILED_PROCESSING\nfrom lib.cuckoo.core.plugins import RunProcessing, RunSignatures, RunReporting\nfrom lib.cuckoo.core.startup import init_modules, drop_privileges\n\nlog = None\n\n# We keep a reporting queue with at most a few hundred entries.\nQUEUE_THRESHOLD = 128\n\ndef process(target=None, copy_path=None, task=None, report=False, auto=False):\n    results = RunProcessing(task=task).run()\n    RunSignatures(results=results).run()\n\n    if report:\n        RunReporting(task=task, results=results).run()\n\n        if auto:\n            if cfg.cuckoo.delete_original and os.path.exists(target):\n                os.unlink(target)\n\n            if cfg.cuckoo.delete_bin_copy and copy_path and \\\n                    os.path.exists(copy_path):\n                os.unlink(copy_path)\n\ndef process_wrapper(*args, **kwargs):\n    try:\n        process(*args, **kwargs)\n    except Exception as e:\n        e.traceback = traceback.format_exc()\n        raise e\n\ndef init_worker():\n    signal.signal(signal.SIGINT, signal.SIG_IGN)\n\ndef autoprocess(parallel=1):\n    maxcount = cfg.cuckoo.max_analysis_count\n    count = 0\n    db = Database()\n    pending_results = {}\n\n    # Respawn a worker process every 1000 tasks just in case we\n    # have any memory leaks.\n    pool = multiprocessing.Pool(processes=parallel, initializer=init_worker,\n                                maxtasksperchild=1000)\n\n    try:\n        while True:\n            # Pending results maintenance.\n            for tid, ar in pending_results.items():\n                if not ar.ready():\n                    continue\n\n                if ar.successful():\n                    log.info(\"Task #%d: reports generation completed\", tid)\n                    db.set_status(tid, TASK_REPORTED)\n                else:\n                    try:\n                        ar.get()\n                    except Exception as e:\n                        log.critical(\"Task #%d: exception in reports generation: %s\", tid, e)\n                        if hasattr(e, \"traceback\"):\n                            log.info(e.traceback)\n\n                    db.set_status(tid, TASK_FAILED_PROCESSING)\n\n                pending_results.pop(tid)\n                count += 1\n\n            # Make sure our queue has plenty of tasks in it.\n            if len(pending_results) >= QUEUE_THRESHOLD:\n                time.sleep(1)\n                continue\n\n            # End of processing?\n            if maxcount and count == maxcount:\n                break\n\n            # No need to submit further tasks for reporting as we've already\n            # gotten to our maximum.\n            if maxcount and count + len(pending_results) == maxcount:\n                time.sleep(1)\n                continue\n\n            # Get at most queue threshold new tasks. We skip the first N tasks\n            # where N is the amount of entries in the pending results list.\n            # Given we update a tasks status right before we pop it off the\n            # pending results list it is guaranteed that we skip over all of\n            # the pending tasks in the database and no further.\n            if maxcount:\n                limit = maxcount - count - len(pending_results)\n            else:\n                limit = QUEUE_THRESHOLD\n\n            tasks = db.list_tasks(status=TASK_COMPLETED,\n                                  offset=len(pending_results),\n                                  limit=min(limit, QUEUE_THRESHOLD),\n                                  order_by=Task.completed_on)\n\n            # No new tasks, we can wait a small while before we query again\n            # for new tasks.\n            if not tasks:\n                time.sleep(5)\n                continue\n\n            for task in tasks:\n                # Ensure that this task is not already in the pending list.\n                # This is really mostly for debugging and should never happen.\n                assert task.id not in pending_results\n\n                log.info(\"Task #%d: queueing for reporting\", task.id)\n\n                if task.category == \"file\":\n                    sample = db.view_sample(task.sample_id)\n\n                    copy_path = os.path.join(CUCKOO_ROOT, \"storage\",\n                                             \"binaries\", sample.sha256)\n                else:\n                    copy_path = None\n\n                args = task.target, copy_path\n                kwargs = {\n                    \"report\": True,\n                    \"auto\": True,\n                    \"task\": dict(task.to_dict()),\n                }\n                result = pool.apply_async(process_wrapper, args, kwargs)\n                pending_results[task.id] = result\n    except KeyboardInterrupt:\n        pool.terminate()\n        raise\n    except:\n        log.exception(\"Caught unknown exception\")\n    finally:\n        pool.join()\n\ndef main():\n    global log\n\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"id\", type=str, help=\"ID of the analysis to process (auto for continuous processing of unprocessed tasks).\")\n    parser.add_argument(\"-d\", \"--debug\", help=\"Display debug messages\", action=\"store_true\", required=False)\n    parser.add_argument(\"-r\", \"--report\", help=\"Re-generate report\", action=\"store_true\", required=False)\n    parser.add_argument(\"-p\", \"--parallel\", help=\"Number of parallel threads to use (auto mode only).\", type=int, required=False, default=1)\n    parser.add_argument(\"-u\", \"--user\", type=str, help=\"Drop user privileges to this user\")\n    parser.add_argument(\"-m\", \"--modules\", help=\"Path to signature and reporting modules - overrides default modules path.\", type=str, required=False)\n\n    args = parser.parse_args()\n\n    if args.user:\n        drop_privileges(args.user)\n\n    if args.debug:\n        logging.basicConfig(level=logging.DEBUG)\n    else:\n        logging.basicConfig(level=logging.INFO)\n\n    log = logging.getLogger(\"cuckoo.process\")\n\n    if args.modules:\n        sys.path.insert(0, args.modules)\n\n    init_modules(machinery=False)\n\n    if args.id == \"auto\":\n        autoprocess(parallel=args.parallel)\n    else:\n        task = Database().view_task(int(args.id))\n        if not task:\n            task = {\n                \"id\": int(args.id),\n                \"category\": \"file\",\n                \"target\": \"\",\n                \"options\": \"\",\n            }\n            process(task=task, report=args.report)\n        else:\n            process(task=task.to_dict(), report=args.report)\n\nif __name__ == \"__main__\":\n    cfg = Config()\n\n    try:\n        main()\n    except KeyboardInterrupt:\n        pass\n"
  },
  {
    "path": "utils/process2.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os\nimport sys\nimport time\nimport logging\nimport argparse\n\nlogging.basicConfig(level=logging.INFO)\nlog = logging.getLogger()\n\nsys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), \"..\"))\n\nfrom lib.cuckoo.common.config import Config\nfrom lib.cuckoo.common.constants import CUCKOO_ROOT\nfrom lib.cuckoo.core.database import Database\nfrom lib.cuckoo.core.database import TASK_FAILED_PROCESSING, TASK_REPORTED\nfrom lib.cuckoo.core.plugins import RunProcessing, RunSignatures, RunReporting\nfrom lib.cuckoo.core.startup import init_modules, drop_privileges\n\ndef process(target=None, copy_path=None, task=None):\n    results = RunProcessing(task=task).run()\n    RunSignatures(results=results).run()\n    RunReporting(task=task, results=results).run()\n\n    if cfg.cuckoo.delete_original and os.path.exists(target):\n        os.unlink(target)\n\n    if cfg.cuckoo.delete_bin_copy and copy_path and os.path.exists(copy_path):\n        os.unlink(copy_path)\n\ndef instance(instance):\n    maxcount = cfg.cuckoo.max_analysis_count\n    count = 0\n    db = Database()\n\n    # There's a good chance MySQL also works, though.\n    if db.engine.name != \"postgresql\":\n        sys.exit(\"Due to SQL limitations utils/process2.py currently only \"\n                 \"supports PostgreSQL.\")\n\n    try:\n        while not maxcount or count != maxcount:\n            task_id = db.processing_get_task(instance)\n\n            # Wait a small while before trying to fetch a new task.\n            if task_id is None:\n                time.sleep(1)\n                continue\n\n            task = db.view_task(task_id)\n\n            log.info(\"Task #%d: reporting task\", task.id)\n\n            if task.category == \"file\":\n                sample = db.view_sample(task.sample_id)\n\n                copy_path = os.path.join(\n                    CUCKOO_ROOT, \"storage\", \"binaries\", sample.sha256\n                )\n            else:\n                copy_path = None\n\n            try:\n                process(task.target, copy_path, task=task.to_dict())\n                db.set_status(task.id, TASK_REPORTED)\n            except Exception as e:\n                log.exception(\"Task #%d: error reporting: %s\", task.id, e)\n                db.set_status(task.id, TASK_FAILED_PROCESSING)\n    except Exception as e:\n        log.exception(\"Caught unknown exception: %s\", e)\n\ndef main():\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"instance\", type=str, help=\"Task processing instance.\")\n    parser.add_argument(\"-d\", \"--debug\", help=\"Display debug messages\", action=\"store_true\", required=False)\n    parser.add_argument(\"-u\", \"--user\", type=str, help=\"Drop user privileges to this user\")\n    parser.add_argument(\"-m\", \"--modules\", help=\"Path to signature and reporting modules - overrides default modules path.\", type=str, required=False)\n    args = parser.parse_args()\n\n    if args.user:\n        drop_privileges(args.user)\n\n    if args.debug:\n        log.setLevel(logging.DEBUG)\n\n    if args.modules:\n        sys.path.insert(0, args.modules)\n\n    init_modules()\n\n    try:\n        # Run the instance.\n        instance(args.instance)\n    except KeyboardInterrupt:\n        log.info(\"Interrupted by ^C.\")\n    except Exception:\n        log.exception(\"Unknown exception!\")\n\nif __name__ == \"__main__\":\n    cfg = Config()\n\n    try:\n        main()\n    except KeyboardInterrupt:\n        pass\n"
  },
  {
    "path": "utils/rawdb.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport IPython\nimport os.path\nimport sys\n\nsys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), \"..\"))\n\nfrom lib.cuckoo.core.database import *\n\nif __name__ == \"__main__\":\n    db = Database(echo=True)\n    s = db.Session()\n\n    IPython.start_ipython(user_ns=locals())\n"
  },
  {
    "path": "utils/rooter.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport argparse\nimport grp\nimport json\nimport logging\nimport os.path\nimport re\nimport socket\nimport stat\nimport subprocess\nimport sys\n\ndef run(*args):\n    \"\"\"Wrapper to Popen.\"\"\"\n    p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n    stdout, stderr = p.communicate()\n    return stdout, stderr\n\ndef nic_available(interface):\n    \"\"\"Check if specified network interface is available.\"\"\"\n    try:\n        subprocess.check_call([settings.ifconfig, interface],\n                              stdout=subprocess.PIPE,\n                              stderr=subprocess.PIPE)\n        return True\n    except subprocess.CalledProcessError:\n        return False\n\ndef rt_available(rt_table):\n    \"\"\"Check if specified routing table is defined.\"\"\"\n    try:\n        subprocess.check_call([settings.ip, \"route\", \"list\", \"table\", rt_table],\n                              stdout=subprocess.PIPE,\n                              stderr=subprocess.PIPE)\n        return True\n    except subprocess.CalledProcessError:\n        return False\n\ndef vpn_status():\n    \"\"\"Gets current VPN status.\"\"\"\n    ret = {}\n    for line in run(settings.service, \"openvpn\", \"status\")[0].split(\"\\n\"):\n        x = re.search(\"'(?P<vpn>\\\\w+)'\\\\ is\\\\ (?P<running>not)?\", line)\n        if x:\n            ret[x.group(\"vpn\")] = x.group(\"running\") != \"not\"\n\n    return ret\n\ndef vpn_enable(name):\n    \"\"\"Start a VPN.\"\"\"\n    run(settings.service, \"openvpn\", \"start\", name)\n\ndef vpn_disable(name):\n    \"\"\"Stop a running VPN.\"\"\"\n    run(settings.service, \"openvpn\", \"stop\", name)\n\ndef forward_drop():\n    \"\"\"Disable any and all forwarding unless explicitly said so.\"\"\"\n    run(settings.iptables, \"-P\", \"FORWARD\", \"DROP\")\n\ndef enable_nat(interface):\n    \"\"\"Enable NAT on this interface.\"\"\"\n    run(settings.iptables, \"-t\", \"nat\", \"-A\", \"POSTROUTING\",\n        \"-o\", interface, \"-j\", \"MASQUERADE\")\n\ndef disable_nat(interface):\n    \"\"\"Disable NAT on this interface.\"\"\"\n    run(settings.iptables, \"-t\", \"nat\", \"-D\", \"POSTROUTING\",\n        \"-o\", interface, \"-j\", \"MASQUERADE\")\n\ndef init_rttable(rt_table, interface):\n    \"\"\"Initialise routing table for this interface using routes\n    from main table.\"\"\"\n    if rt_table in [\"local\", \"main\", \"default\"]:\n        return\n\n    stdout, _ = run(settings.ip, \"route\", \"list\", \"dev\", interface)\n    for line in stdout.split(\"\\n\"):\n        args = [\"route\", \"add\"] + [x for x in line.split(\" \") if x]\n        args += [\"dev\", interface, \"table\", rt_table]\n        run(settings.ip, *args)\n\ndef flush_rttable(rt_table):\n    \"\"\"Flushes specified routing table entries.\"\"\"\n    if rt_table in [\"local\", \"main\", \"default\"]:\n        return\n\n    run(settings.ip, \"route\", \"flush\", \"table\", rt_table)\n\ndef forward_enable(src, dst, ipaddr):\n    \"\"\"Enable forwarding a specific IP address from one interface into\n    another.\"\"\"\n    run(settings.iptables, \"-A\", \"FORWARD\", \"-i\", src, \"-o\", dst,\n        \"--source\", ipaddr, \"-j\", \"ACCEPT\")\n\n    run(settings.iptables, \"-A\", \"FORWARD\", \"-i\", dst, \"-o\", src,\n        \"--destination\", ipaddr, \"-j\", \"ACCEPT\")\n\ndef forward_disable(src, dst, ipaddr):\n    \"\"\"Disable forwarding of a specific IP address from one interface into\n    another.\"\"\"\n    run(settings.iptables, \"-D\", \"FORWARD\", \"-i\", src, \"-o\", dst,\n        \"--source\", ipaddr, \"-j\", \"ACCEPT\")\n\n    run(settings.iptables, \"-D\", \"FORWARD\", \"-i\", dst, \"-o\", src,\n        \"--destination\", ipaddr, \"-j\", \"ACCEPT\")\n\ndef srcroute_enable(rt_table, ipaddr):\n    \"\"\"Enable routing policy for specified source IP address.\"\"\"\n    run(settings.ip, \"rule\", \"add\", \"from\", ipaddr, \"table\", rt_table)\n    run(settings.ip, \"route\", \"flush\", \"cache\")\n\ndef srcroute_disable(rt_table, ipaddr):\n    \"\"\"Disable routing policy for specified source IP address.\"\"\"\n    run(settings.ip, \"rule\", \"del\", \"from\", ipaddr, \"table\", rt_table)\n    run(settings.ip, \"route\", \"flush\", \"cache\")\n\nhandlers = {\n    \"nic_available\": nic_available,\n    \"rt_available\": rt_available,\n    \"vpn_status\": vpn_status,\n    \"vpn_enable\": vpn_enable,\n    \"vpn_disable\": vpn_disable,\n    \"forward_drop\": forward_drop,\n    \"enable_nat\": enable_nat,\n    \"disable_nat\": disable_nat,\n    \"init_rttable\": init_rttable,\n    \"flush_rttable\": flush_rttable,\n    \"forward_enable\": forward_enable,\n    \"forward_disable\": forward_disable,\n    \"srcroute_enable\": srcroute_enable,\n    \"srcroute_disable\": srcroute_disable,\n}\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"socket\", nargs=\"?\", default=\"/tmp/cuckoo-rooter\",\n                        help=\"Unix socket path\")\n    parser.add_argument(\"-g\", \"--group\", default=\"cuckoo\",\n                        help=\"Unix socket group\")\n    parser.add_argument(\"--ifconfig\", default=\"/sbin/ifconfig\",\n                        help=\"Path to ifconfig\")\n    parser.add_argument(\"--service\", default=\"/usr/sbin/service\",\n                        help=\"Service wrapper script for invoking OpenVPN\")\n    parser.add_argument(\"--iptables\", default=\"/sbin/iptables\",\n                        help=\"Path to iptables\")\n    parser.add_argument(\"--ip\", default=\"/sbin/ip\", help=\"Path to ip\")\n    parser.add_argument(\"-v\", \"--verbose\", action=\"store_true\",\n                        help=\"Enable verbose logging\")\n    settings = parser.parse_args()\n\n    logging.basicConfig(level=logging.INFO)\n    log = logging.getLogger(\"cuckoo-rooter\")\n\n    if not settings.service or not os.path.exists(settings.service):\n        sys.exit(\n            \"The service binary is not available, please configure it!\\n\"\n            \"Note that on CentOS you should provide --service /sbin/service, \"\n            \"rather than using the Ubuntu/Debian default /usr/sbin/service.\"\n        )\n\n    if not settings.ifconfig or not os.path.exists(settings.ifconfig):\n        sys.exit(\"The `ifconfig` binary is not available, eh?!\")\n\n    if not settings.iptables or not os.path.exists(settings.iptables):\n        sys.exit(\"The `iptables` binary is not available, eh?!\")\n\n    if os.getuid():\n        sys.exit(\"This utility is supposed to be ran as root.\")\n\n    if os.path.exists(settings.socket):\n        os.remove(settings.socket)\n\n    server = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)\n    server.bind(settings.socket)\n\n    # Provide the correct file ownership and permission so Cuckoo can use it\n    # from an unprivileged process, based on Sean Whalen's routetor.\n    try:\n        gr = grp.getgrnam(settings.group)\n    except KeyError:\n        sys.exit(\n            \"The group (`%s`) does not exist. Please define the group / user \"\n            \"through which Cuckoo will connect to the rooter, e.g., \"\n            \"./utils/rooter.py -g myuser\" % settings.group\n        )\n\n    os.chown(settings.socket, 0, gr.gr_gid)\n    os.chmod(settings.socket, stat.S_IRUSR | stat.S_IWUSR | stat.S_IWGRP)\n\n    while True:\n        command, addr = server.recvfrom(4096)\n\n        try:\n            obj = json.loads(command)\n        except:\n            log.info(\"Received invalid request: %r\", command)\n            continue\n\n        command = obj.get(\"command\")\n        args = obj.get(\"args\", [])\n        kwargs = obj.get(\"kwargs\", {})\n\n        if not isinstance(command, basestring) or command not in handlers:\n            log.info(\"Received incorrect command: %r\", command)\n            continue\n\n        if not isinstance(args, (tuple, list)):\n            log.info(\"Invalid arguments type: %r\", args)\n            continue\n\n        if not isinstance(kwargs, dict):\n            log.info(\"Invalid keyword arguments: %r\", kwargs)\n            continue\n\n        for arg in args + kwargs.keys() + kwargs.values():\n            if not isinstance(arg, basestring):\n                log.info(\"Invalid argument detected: %r\", arg)\n                break\n        else:\n            if settings.verbose:\n                log.info(\n                    \"Processing command: %s %s %s\", command,\n                    \" \".join(args),\n                    \" \".join(\"%s=%s\" % (k, v) for k, v in kwargs.items())\n                )\n\n            output = e = None\n            try:\n                output = handlers[command](*args, **kwargs)\n            except Exception as e:\n                log.exception(\"Error executing command\")\n\n            server.sendto(json.dumps({\n                \"output\": output,\n                \"exception\": str(e) if e else None,\n            }), addr)\n"
  },
  {
    "path": "utils/service.sh",
    "content": "#!/bin/sh\nset -e\n\necho \"### NOTICE ###\" >&2\necho \"This script is a work-in-progress, has not been yet documented, \" >&2\necho \"and may not work as expected.\" >&2\necho \"### END OF NOTICE ###\" >&2\n\n# TODO Load Virtual Machines into tmpfs, if enabled.\n\n_about_upstart() {\n    echo \"Using Upstart technique..\"\n}\n\n_install_configuration() {\n    if [ -f \"/etc/default/cuckoo\" ]; then\n        # TODO Ask yes/no to force overwrite.\n        echo \"Not overwriting existing configuration..\"\n        return\n    fi\n\n    cat > /etc/default/cuckoo << EOF\n# Configuration file for the Cuckoo Sandbox service(s).\n\n# It is possible to allow the virtual machines to connect to the entire\n# internet through the vmcloak-iptables script. Enable by uncommenting and\n# setting the following value. Give the network interface(s) that can allow\n# internet access to the virtual machines.\n# VMINTERNET=\"eth0 wlan0\"\n\n# IP address and port of the Cuckoo API. Cuckoo API is by default\n# turned *OFF*. Enable by uncommenting and setting the value.\n# APIADDR=\"127.0.0.1\"\n# APIPORT=8090\n\n# IP address and port of the Cuckoo Web Interface. The Cuckoo Web Interface\n# is by default turned *OFF*. Enable by uncommenting and setting the value.\n# WEBADDR=\"127.0.0.1\"\n# WEBPORT=8000\n\n# Run Suricata in the background?\nSURICATA=\"0\"\n\n# Start Cuckoo in verbose mode. Toggle to 1 to enable verbose mode.\nVERBOSE=\"0\"\nEOF\n}\n\n_remove_configuration() {\n    rm -f /etc/default/cuckoo\n}\n\n_install_upstart() {\n    cat > /etc/init/cuckoo.conf << EOF\n# Cuckoo daemon service.\n\ndescription \"cuckoo daemon\"\nstart on runlevel [2345]\nchdir \"$CUCKOO\"\n\n# Give Cuckoo time to cleanup.\nkill signal SIGINT\nkill timeout 600\n\n# Restart Cuckoo if it exits.\nrespawn\n\n# Upstart ignores limits found in /etc/security/limits.conf.\nlimit nofile 499999 999999\n\nenv CONFFILE=\"$CONFFILE\"\nenv VMINTERNET=\"\"\nenv CHECKVMS=\"/etc/default/cuckoo-setup\"\n\npre-start script\n    . \"\\$CONFFILE\"\n\n    vmcloak-vboxnet0\n\n    if [ -n \"\\$VMINTERNET\" ]; then\n        vmcloak-iptables 192.168.56.1/24 \"\\$VMINTERNET\"\n    fi\n\n    # Check up on all VMs and fix any if required.\n    if [ -f \"\\$CHECKVMS\" ]; then\n        ./utils/setup.sh -S \"\\$CHECKVMS\" -V\n    fi\nend script\n\nscript\n    . \"\\$CONFFILE\"\n\n    if [ \"\\$VERBOSE\" -eq 0 ]; then\n        exec ./cuckoo.py -u \"$USERNAME\"\n    else\n        exec ./cuckoo.py -u \"$USERNAME\" -d\n    fi\nend script\nEOF\n\n    cat > /etc/init/cuckoo-process.conf << EOF\n# Cuckoo results processing service.\n\ndescription \"start cuckoo results processing\"\nstart on started cuckoo\nstop on stopped cuckoo\n\nenv PROCESSES=4\n\npre-start script\n    echo STARTING\n    for i in \\$(seq 1 \\$PROCESSES); do\n        start cuckoo-process2 INSTANCE=process\\$i\n    done\nend script\nEOF\n\n    cat > /etc/init/cuckoo-process2.conf << EOF\n# Cuckoo results processing service.\n\ndescription \"cuckoo results processing\"\nstop on stopping cuckoo-process\nsetuid \"$USERNAME\"\nchdir \"$CUCKOO\"\ninstance \\$INSTANCE\n\n# Restart Cuckoo report processing if it exits unexpectedly.\nrespawn\n\nenv CONFFILE=\"$CONFFILE\"\n\nscript\n    . \"\\$CONFFILE\"\n\n    exec ./utils/process2.py \"\\$INSTANCE\"\nend script\nEOF\n\n    cat > /etc/init/cuckoo-api.conf << EOF\n# Cuckoo API server service.\n\ndescription \"cuckoo api server\"\nstart on started cuckoo\nstop on stopped cuckoo\nsetuid \"$USERNAME\"\nchdir \"$CUCKOO\"\n\nenv CONFFILE=\"$CONFFILE\"\nenv APIADDR=\"\"\nenv APIPORT=8090\n\nscript\n    . \"\\$CONFFILE\"\n\n    if [ -n \"\\$APIADDR\" ]; then\n        exec ./utils/api.py -H \"\\$APIADDR\" -p \"\\$APIPORT\"\n    fi\nend script\nEOF\n\n    cat > /etc/init/cuckoo-distributed-instance.conf << EOF\n# Cuckoo distributed API node instance service.\n\ndescription \"cuckoo distributed api node instance service\"\nsetuid \"$USERNAME\"\nchdir \"$CUCKOO/distributed\"\ninstance \\$INSTANCE\nrespawn\n\nenv CONFFILE=\"$CONFFILE\"\n\nscript\n    . \"\\$CONFFILE\"\n\n    if [ \"\\$VERBOSE\" -eq 0 ]; then\n        exec ./instance.py \"\\$INSTANCE\"\n    else\n        exec ./instance.py \"\\$INSTANCE\" -v\n    fi\nend script\nEOF\n\n    cat > /etc/uwsgi/apps-available/cuckoo-distributed.ini << EOF\n[uwsgi]\nplugins = python\nchdir = $CUCKOO/distributed\nfile = app.py\nuid = $USERNAME\ngid = $USERNAME\nEOF\n\n    ln -s /etc/uwsgi/apps-available/cuckoo-distributed.ini \\\n        /etc/uwsgi/apps-enabled/cuckoo-distributed.ini\n\n    cat > /etc/nginx/sites-available/cuckoo-distributed << EOF\nupstream _uwsgi_cuckoo_distributed {\n    server unix:/run/uwsgi/app/cuckoo-distributed/socket;\n}\n\nserver {\n    # If required, prepend a listening IP address.\n    listen 9003;\n\n    location / {\n        client_max_body_size 100M;\n        uwsgi_pass _uwsgi_cuckoo_distributed;\n        include uwsgi_params;\n    }\n}\nEOF\n\n    ln -s /etc/nginx/sites-available/cuckoo-distributed \\\n        /etc/nginx/sites-enabled/cuckoo-distributed\n\n    cat > /etc/init/cuckoo-web.conf << EOF\n# Cuckoo Web Interface server.\n\ndescription \"cuckoo web interface service\"\nstart on started cuckoo\nstop on stopped cuckoo\nsetuid \"$USERNAME\"\nchdir \"$(readlink -f \"$CUCKOO/web/\")\"\n\nenv CONFFILE=\"$CONFFILE\"\nenv WEBADDR=\"\"\nenv WEBPORT=8000\n\nscript\n    . \"\\$CONFFILE\"\n\n    if [ -n \"\\$WEBADDR\" ]; then\n        exec ./manage.py runserver \"\\$WEBADDR:\\$WEBPORT\"\n    fi\nend script\nEOF\n    echo \"Cuckoo Service scripts installed!\"\n}\n\n_remove_upstart() {\n    rm -f /etc/init/cuckoo.conf\n    rm -f /etc/init/cuckoo-api.conf\n    rm -f /etc/init/cuckoo-process.conf\n    rm -f /etc/init/cuckoo-process2.conf\n    rm -f /etc/init/cuckoo-distributed-instance.conf\n    rm -f /etc/init/cuckoo-web.conf\n}\n\n_reload_upstart() {\n    initctl reload-configuration\n}\n\n_start_upstart() {\n    initctl start cuckoo\n}\n\n_stop_upstart() {\n    initctl stop cuckoo\n}\n\n_restart_upstart() {\n    initctl restart cuckoo\n}\n\ncase \"$(lsb_release -is)\" in\n    Ubuntu)\n        alias _about=_about_upstart\n        alias _install=_install_upstart\n        alias _remove=_remove_upstart\n        alias _reload=_reload_upstart\n        alias _start=_start_upstart\n        alias _stop=_stop_upstart\n        alias _restart=_restart_upstart\n        ;;\n\n    *)\n        echo \"Unsupported Linux distribution..\"\n        exit 1\nesac\n\nif [ \"$#\" -eq 0 ]; then\n    echo \"Usage: $0 <install|remove|start|stop>\"\n    echo \"-u --username: Username from which to run Cuckoo.\"\n    echo \"-c --cuckoo:   Directory where Cuckoo is located.\"\n    exit 1\nfi\n\nif [ \"$(id -u)\" -ne 0 ]; then\n    echo \"This script should be run as root.\"\n    exit 1\nfi\n\nUSERNAME=\"cuckoo\"\nCONFFILE=\"/etc/default/cuckoo\"\nCUCKOO=\"/home/cuckoo/cuckoo/\"\n\n# Note that this way the variables have to be set before the\n# actions are invoked.\nwhile [ \"$#\" -ne 0 ]; do\n    ACTION=\"$1\"\n    shift\n\n    case \"$ACTION\" in\n        install)\n            _about\n            _install\n            _install_configuration\n            _reload\n            ;;\n\n        remove)\n            _remove\n            _remove_configuration\n            _reload\n            ;;\n\n        start)\n            _start\n            ;;\n\n        stop)\n            _stop\n            ;;\n\n        restart)\n            _restart\n            ;;\n\n        -u|--username)\n            USERNAME=\"$1\"\n            shift\n            ;;\n\n        -c|--cuckoo)\n            CUCKOO=\"$1\"\n            shift\n            ;;\n\n        *)\n            echo \"Requested invalid action.\"\n            exit 1\n    esac\ndone\n"
  },
  {
    "path": "utils/setup.sh",
    "content": "#!/bin/bash\n\necho \"### NOTICE ###\" >&2\necho \"This script is a work-in-progress, has not been yet documented, \" >&2\necho \"and may not work as expected.\" >&2\necho \"### END OF NOTICE ###\" >&2\n\n# Default values.\nWIN7=\"0\"\nVMCOUNT=\"40\"\nISOFILE=\"\"\nSERIALKEY=\"\"\nTMPFS=\"0\"\nTAGS=\"\"\nINTERFACES=\"eth0 wlan0\"\nCLEAN=\"0\"\nDEPENDENCIES=\"\"\nBASEDIR=\"/home/cuckoo\"\nVMCHECKUP=\"0\"\nLONGTERM=\"0\"\nCPUCOUNT=\"1\"\n\nusage() {\n    echo \"Usage: $0 [options...]\"\n    echo \"-S --settings:     Load configuration from a file.\"\n    echo \"-7 --win7:         Create Windows 7 x64 Virtual Machines.\"\n    echo \"   --win7x86:      Create Windows 7 x86 Virtual Machines.\"\n    echo \"-c --vmcount:      Amount of Virtual Machines to be created.\"\n    echo \"-i --iso:          Path to the Windows Installer ISO.\"\n    echo \"-s --serial-key:   Serial Key for the given Windows XP version.\"\n    echo \"-t --tmpfs:        Indicate tmpfs should be used for snapshots.\"\n    echo \"-T --tags:         Tags for the Virtual Machines.\"\n    echo \"-I --interfaces:   Interfaces to route Virtual Machine internet\"\n    echo \"                   through. Defaults to eth0 wlan0.\"\n    echo \"-C --clean:        Clean the Cuckoo setup.\"\n    echo \"-d --dependencies: Dependencies to install in the Virtual Machine.\"\n    echo \"-b --basedir:      Base directory for Virtual Machine files.\"\n    echo \"-V --vms:          Only check Virtual Machines, don't re-setup.\"\n    echo \"-l --longterm:     Indicate this is a longterm analysis setup.\"\n    echo \"-u --cpucount:     Amount of CPUs per Virtual Machine.\"\n    exit 1\n}\n\nEGGNAME=\"winxp\"\nMOUNTOS=\"winxp\"\nWINOS=\"--winxp\"\n\nwhile [ \"$#\" -gt 0 ]; do\n    option=\"$1\"\n    shift\n\n    case \"$option\" in\n        -h|--help)\n            usage\n            ;;\n\n        -7|--win7)\n            WIN7=\"1\"\n            EGGNAME=\"win7x64\"\n            MOUNTOS=\"win7\"\n            WINOS=\"--win7x64\"\n            ;;\n\n        --win7x86)\n            WIN7=\"1\"\n            EGNNAME=\"win7x86\"\n            MOUNTOS=\"win7\"\n            WINOS=\"--win7\"\n            ;;\n\n        -c|--vmcount)\n            VMCOUNT=\"$1\"\n            shift\n            ;;\n\n        -i|--iso)\n            ISOFILE=\"$1\"\n            shift\n            ;;\n\n        -s|--serial-key)\n            SERIALKEY=\"$1\"\n            shift\n            ;;\n\n        -t|--tmpfs)\n            TMPFS=\"1\"\n            ;;\n\n        -T|--tags)\n            TAGS=\"$1\"\n            shift\n            ;;\n\n        -I|--interfaces)\n            INTERFACES=\"$1\"\n            shift\n            ;;\n\n        -C|--clean)\n            CLEAN=\"1\"\n            ;;\n\n        -d|--dependencies)\n            DEPENDENCIES=\"$1\"\n            shift\n            ;;\n\n        -b|--basedir)\n            BASEDIR=\"$1\"\n            shift\n            ;;\n\n        -S|--settings)\n            SETTINGS=\"$1\"\n            shift\n            ;;\n\n        -V|--vms)\n            VMCHECKUP=\"1\"\n            ;;\n\n        -l|--longterm)\n            LONGTERM=\"1\"\n            ;;\n\n        -u|--cpucount)\n            CPUCOUNT=\"$1\"\n            shift\n            ;;\n\n        *)\n            echo \"$0: Invalid argument.. $1\" >&2\n            usage\n            exit 1\n            ;;\n    esac\ndone\n\nif [ \"$(id -u)\" -ne 0 ]; then\n    echo \"You'll probably want to run this script as root.\"\n    exit 1\nfi\n\nif [ \"$CLEAN\" -ne 0 ]; then\n    yes|sudo -u cuckoo -i vmcloak-removevms\n    umount /home/cuckoo/vmmount\n    rm -rf /home/cuckoo/{.config,.vmcloak,vmmount}\n    rm -rf /home/cuckoo/{cuckoo,cuckoo.git}\n    rm -rf \"$BASEDIR/vms\" \"$BASEDIR/vmbackup\"\n    rm -rf /opt/cuckoo\n    exit 0\nfi\n\n# Load configuration settings from a file if one has been provided.\n# Note that any values in the configuration file will overwrite\n# settings provided on the command-line.\nif [ -n \"$SETTINGS\" ]; then\n    . \"$SETTINGS\"\nfi\n\nif [ -z \"$ISOFILE\" ]; then\n    echo \"Please specify the path to a Windows XP or Windows 7 Installer ISO.\"\n    exit 1\nfi\n\nif [ \"$WIN7\" -eq 0 ] && [ -z \"$SERIALKEY\" ]; then\n    echo \"Please specify a working serial key.\"\n    exit 1\nfi\n\nif [ \"$TMPFS\" -ne 0 ] && [ \"$LONGTERM\" -ne 0 ]; then\n    echo \"It is not recommended to use tmpfs in a longterm setup.\"\n    echo \"Please update your settings or remove this check.\"\n    exit 1\nfi\n\nif [ \"$LONGTERM\" -ne 0 ] && [ \"$VMCOUNT\" -ne 0 ]; then\n    echo \"In longterm mode virtual machines should not be created through the\"\n    echo \"setup.sh script - this is handled by the vm cronjob.\"\n    exit 1\nfi\n\n_clone_cuckoo() {\n    local gitrepo=\"\"\n\n    # Fetch Cuckoo or in the case of a longterm setup, longcuckoo.\n    if [ \"$LONGTERM\" -eq 0 ]; then\n        sudo -u cuckoo -i \\\n            git clone --bare https://github.com/cuckoosandbox/cuckoo.git\n\n        gitrepo=\"cuckoo.git\"\n    else\n        sudo -u cuckoo -i \\\n            git clone --bare https://github.com/jbremer/longcuckoo.git\n\n        gitrepo=\"longcuckoo.git\"\n    fi\n\n    sudo -u cuckoo -i tee \"$gitrepo/hooks/post-receive\" << EOF\n#!/bin/bash\n\nread commit\n\nif ! echo \\$commit|grep production$; then\n    echo -e \"\\\\e[31mWe only check out changes to the production branch.\\\\e[0m\"\n    exit\nfi\n\nGIT_WORK_TREE=/opt/cuckoo git checkout -f production\nEOF\n\n    mkdir -p \"/opt/cuckoo\"\n    chown cuckoo:cuckoo \"/opt/cuckoo\"\n    chmod 755 \"/home/cuckoo/\" \"/opt/cuckoo\"\n    sudo -u cuckoo -i chmod +x \"$gitrepo/hooks/post-receive\"\n\n    # Checkout master branch of the repository (if this was not done already).\n    if [ -z \"$(ls -A /opt/cuckoo)\" ]; then\n        sudo -u cuckoo -i \\\n            git --work-tree /opt/cuckoo --git-dir \"$gitrepo\" checkout -f master\n    fi\n\n    # Add the Suricata reboot crontab entry.\n    if ! grep suricata.sh <(crontab -l); then\n        (crontab -l ; echo @reboot /opt/cuckoo/utils/suricata.sh)|crontab -\n    fi\n\n    # Delete the cuckoo1 machine that is included in the VirtualBox\n    # configuration by default.\n    sudo -u cuckoo -i \"/opt/cuckoo/utils/machine.py\" --delete cuckoo1\n}\n\n_setup() {\n    # All functionality related to setting up the machine - this is not\n    # required when doing a Virtual Machine checkup.\n\n    # Add the VirtualBox apt repository.\n    if [ ! -e /etc/apt/sources.list.d/virtualbox.list ]; then\n        # Update our apt repository with VirtualBox \"contrib\".\n        DEBVERSION=\"$(lsb_release -cs)\"\n        echo \"deb http://download.virtualbox.org/virtualbox/debian\" \\\n            \"$DEBVERSION contrib\" >> /etc/apt/sources.list.d/virtualbox.list\n\n        # Add the VirtualBox public key to our apt repository.\n        wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- \\\n            | apt-key add -\n    fi\n\n    # Add the ElasticSearch apt repository.\n    if [ ! -e /etc/apt/sources.list.d/elasticsearch.list ]; then\n        echo \"deb http://packages.elastic.co/elasticsearch/2.x/debian\" \\\n            \"stable main\" >> /etc/apt/sources.list.d/elasticsearch.list\n\n        wget -q https://packages.elastic.co/GPG-KEY-elasticsearch -O- \\\n            | sudo apt-key add -\n    fi\n\n    # Update apt repository and install required packages.\n    apt-get update -y --force-yes\n    apt-get install -y --force-yes sudo git python-dev python-pip postgresql \\\n        libpq-dev python-dpkt vim tcpdump libcap2-bin genisoimage pwgen \\\n        htop tig mosh mongodb uwsgi uwsgi-plugin-python nginx virtualbox-4.3 \\\n        libffi-dev libxml2-dev libxslt1-dev libjpeg-dev samba-common-bin \\\n        ethtool elasticsearch linux-headers-$(uname -r)\n\n    # Create the main postgresql cluster. In recent versions of Ubuntu Server\n    # 14.04 you have to do this manually. If it already exists this command\n    # will simply fail.\n    pg_createcluster 9.3 main --start\n\n    # Install the VirtualBox Extension Pack for VRDE support.\n    VBOXVERSION=\"$(VBoxManage --version|sed s/r/\\-/)\"\n    PRETTYNAME=\"Oracle_VM_VirtualBox_Extension_Pack-$VBOXVERSION\"\n    wget \"http://cuckoo.sh/vmcloak-files/${PRETTYNAME}.vbox-extpack\"\n    VBoxManage extpack install --replace \"${PRETTYNAME}.vbox-extpack\"\n    rm -f \"${PRETTYNAME}.vbox-extpack\"\n\n    # Allow tcpdump to dump packet captures when executed as a normal user.\n    setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump\n\n    # Setup a Cuckoo user.\n    useradd cuckoo -d /home/cuckoo -s /bin/bash\n    mkdir -p /home/cuckoo\n    chown cuckoo:cuckoo /home/cuckoo\n\n    # Copy any authorized keys from the current user to the cuckoo user.\n    mkdir -p /home/cuckoo/.ssh\n    cp ~/.ssh/authorized_keys /home/cuckoo/.ssh/authorized_keys\n    chown cuckoo:cuckoo /home/cuckoo/.ssh/authorized_keys\n\n    # Add the www-data user to the cuckoo group.\n    adduser www-data cuckoo\n\n    # TODO Somehow vmtemp is not properly propagated into the vmcloak\n    # configuration thing, having to run the setup.sh script twice to\n    # actually start creating the bird.\n    VMTEMP=\"$(mktemp -d \"/home/cuckoo/tempXXXXXX\")\"\n\n    chown cuckoo:cuckoo \"/home/cuckoo/\"\n    chown -R cuckoo:cuckoo \"$VMTEMP\"\n    chmod 755 \"/home/cuckoo/\" \"$VMTEMP\"\n\n    # Install required packages part two.\n    pip install --upgrade mitmproxy psycopg2 vmcloak\n\n    # Clone the Cuckoo repository and initialize it.\n    _clone_cuckoo\n\n    # Install required packages part three.\n    pip install -r \"/opt/cuckoo/requirements.txt\"\n\n    # Create a random password.\n    # PASSWORD=\"$(pwgen -1 16)\"\n    PASSWORD=\"cuckoo\"\n\n    sql_query() {\n        echo \"$1\"|sudo -u postgres psql\n    }\n\n    sql_query \"DROP DATABASE cuckoo\"\n    sql_query \"CREATE DATABASE cuckoo\"\n\n    sql_query \"DROP USER cuckoo\"\n    sql_query \"CREATE USER cuckoo WITH PASSWORD '$PASSWORD'\"\n\n    # Install the Upstart/SystemV scripts.\n    /opt/cuckoo/utils/service.sh -c /opt/cuckoo install\n\n    # Fetch the community signatures and monitoring binaries.\n    sudo -u cuckoo -i /opt/cuckoo/utils/community.py -wafb master\n\n    # Add \"nmi_watchdog=0\" to the GRUB commandline if it's not in there already.\n    if ! grep nmi_watchdog /etc/default/grub; then\n        cat >> /etc/default/grub << EOF\n\n# Add nmi_watchdog=0 to the GRUB commandline to prevent\n# VirtualBox from kernel panicing when the load increases.\nGRUB_CMDLINE_LINUX_DEFAULT=\"\\$GRUB_CMDLINE_LINUX_DEFAULT nmi_watchdog=0\"\nEOF\n    fi\n\n    # Recreate the GRUB configuration.\n    grub-mkconfig -o /boot/grub/grub.cfg\n\n    # Increase the file descriptor limits. TODO How to set it for just the cuckoo\n    # user? Doesn't seem to work when using 'cuckoo' instead of '*'.\n    if ! grep \"* soft nofile\" /etc/security/limits.conf; then\n        cat >> /etc/security/limits.conf << EOF\n\n# Set the file descriptor limit fairly high.\n* soft nofile 499999\n* hard nofile 999999\nEOF\n    fi\n\n    # For longterm setups we install the VM provisioning script and cronjob.\n    if [ \"$LONGTERM\" -ne 0 ]; then\n        CRONJOB=\"/home/cuckoo/vmprovision.sh\"\n\n        # Install the machine cronjob.\n        \"/opt/cuckoo/utils/experiment.py\" machine-cronjob install \\\n            \"cpucount=$CPUCOUNT\" \"path=$CRONJOB\" \"basedir=$BASEDIR\"\n        chown cuckoo:cuckoo \"$CRONJOB\"\n        chmod +x \"$CRONJOB\"\n\n        # We want to run the vm provisioning cronjob every five minutes.\n        # Ensure that we only install the cronjob entry once.\n        CRONTAB=\"$(crontab -u cuckoo -l)\"\n        if [[ ! \"$CRONTAB\" =~ \"vmprovision.sh\" ]]; then\n            (echo \"$CRONTAB\" ; echo \"*/5 * * * * $CRONJOB\")|crontab -u cuckoo -\n        fi\n    fi\n\n    # TODO Should be automated away.\n    echo \"PostgreSQL connection string:  \" \\\n        \"postgresql://cuckoo:$PASSWORD@localhost/cuckoo\"\n}\n\n_create_virtual_machines() {\n    # Prepare the machine for virtual machines and actually create them.\n\n    # Ensure that vboxnet0 is up and running.\n    vmcloak-vboxnet0\n\n    # Kill all VirtualBox processes as otherwise the listening port for\n    # vmcloak-clone might still be in use.. TODO This can probably be removed.\n    vmcloak-killvbox\n\n    if [ -z \"$SERIALKEY\" ]; then\n        serial=\"\"\n    else\n        serial=\"--serial-key $SERIALKEY\"\n    fi\n\n    options=\"$serial --cpus $CPUCOUNT\"\n\n    # Attempt to create a new image if one does not already exist.\n    sudo -u cuckoo -i vmcloak init \"${EGGNAME}_bird\" \"$WINOS\" $options\n    if [ \"$?\" -eq 0 ]; then\n        sudo -u cuckoo -i vmcloak install \"${EGGNAME}_bird\" $DEPENDENCIES\n    fi\n\n    # Create various Virtual Machine eggs.\n    for i in $(seq 1 \"$VMCOUNT\"); do\n        name=\"${EGGNAME}_egg$i\"\n\n        # Ensure this Virtual Machine has not already been created.\n        if grep '\"'$name'\"' <(sudo -u cuckoo -i VBoxManage list vms); then\n            continue\n        fi\n\n        # As vmcloak-clone will add an entry for this node we remove it just\n        # in case it did already exist.\n        \"/opt/cuckoo/utils/machine.py\" --delete \"$name\"\n\n        # Delete any remaining files for this Virtual Machine just in case\n        # they were still present.\n        rm -rf \"$VMBACKUP/$name\"\n\n        echo \"Creating Virtual Machine $name..\"\n        sudo -u cuckoo -i vmcloak snapshot \"${EGGNAME}_bird\" \\\n            \"$name\" \"192.168.56.$((2+$i))\"\n\n        echo \"Registering Virtual Machine $name..\"\n        sudo -u cuckoo -i vmcloak register \"$name\" /opt/cuckoo\n    done\n\n    rm -rf \"$VMCLOAKCONF\" \"$VMTEMP\"\n\n    # In longterm modes we have a different script that provides VMs for us.\n    if [ \"$LONGTERM\" -ne 0 ]; then\n        sudo -u cuckoo -i sh \"$CRONJOB\"\n    fi\n\n    # Remove all Virtual Machine related logfiles, we're not interested\n    # in keeping those.\n    rm -f $(find \"$VMBACKUP\" -type f|grep \"\\.log\")\n}\n\n_setup_vms() {\n    # Create directories in the target directory for each directory found in\n    # the source directory. Then create a symlink for all .vdi and .sav files\n    # and copy over all .vbox files.\n    if [ ! -d \"$1\" ] || [ ! -d \"$2\" ]; then\n        echo \"Missing parameter(s) for setup-vms..\"\n        exit 1\n    fi\n\n    local source=\"$1\" target=\"$2\"\n\n    # Create each directory.\n    for dirname in $(cd \"$source\" && find * -type d); do\n        sudo -u cuckoo mkdir -p \"$target/$dirname\"\n    done\n\n    # Make symlinks of all files .vdi and .sav files, these are considered\n    # readonly files by VirtualBox due to the immutable disk property.\n    for filename in $(cd \"$source\" && find bird*.vdi */*/*.vdi */*/*.sav); do\n        sudo -u cuckoo ln -fs \"$source/$filename\" \"$target/$filename\"\n    done\n\n    # Copy all .vbox files, these may be modified by VirtualBox. In the case\n    # that somehow we end up with out of diskspace issues and the updated\n    # .vbox files can not be written to disk, then the virtual machine is\n    # essentially bricked. These files are only a couple of kilobytes anyway.\n    for filename in $(cd \"$source\" && find */*.vbox); do\n        sudo -u cuckoo cp \"$source/$filename\" \"$target/$filename\"\n    done\n}\n\n_setup_vmmount() {\n    if [ ! -d \"$1\" ] || [ ! -d \"$2\" ]; then\n        echo \"Missing parameter(s) for setup-vmmount..\"\n        exit 1\n    fi\n\n    local source=\"$1\" target=\"$2\"\n\n    # Unmount just in case it was mounted.\n    umount \"$target\"\n\n    # Calculate the required size for the tmpfs mount. Round up to megabytes.\n    REQSIZE=\"$(du -s \"$source\"|cut -f1)\"\n    REQSIZE=\"$(($REQSIZE/1024+1))M\"\n\n    mount -o \"size=$REQSIZE,uid=cuckoo,gid=cuckoo\" -t tmpfs tmpfs \"$target\"\n\n    # Copy all files from the backup to the mount.\n    sudo -u cuckoo cp -rf \"$source/.\" \"$target\"\n}\n\n_initialize_from_backup() {\n    # Initialize our setup from our backup, if available.\n    local tmpfs=\"$1\"\n\n    if [ \"$tmpfs\" -ne 0 ]; then\n        # Initialize a mount with all the files from the backup directory.\n        _setup_vmmount \"$VMBACKUP\" \"$VMMOUNT\"\n\n        # Initialize vms to point to the mount directory.\n        _setup_vms \"$VMMOUNT\" \"$VMS\"\n    else\n        # Initialize vms to point to the backup directory.\n        _setup_vms \"$VMBACKUP\" \"$VMS\"\n    fi\n}\n\n# Initialize various variables.\nMOUNT=\"/mnt/$MOUNTOS/\"\nVMS=\"$BASEDIR/vms/\"\nVMBACKUP=\"$BASEDIR/vmbackup/\"\nVMMOUNT=\"/home/cuckoo/vmmount/\"\n\n# In Upstart scripts the $HOME variable may not have been set. If so, set it.\nif [ -z \"$HOME\" ]; then\n    export HOME=\"/home/cuckoo\"\nfi\n\n# If $LC_ALL is not set then we force it to en_US.UTF-8, otherwise PostgreSQL\n# and possibly others will complain about a missing language.\nif [ -z \"$LC_ALL\" ]; then\n    export LC_ALL=\"en_US.UTF-8\"\nfi\n\n# First of all, setup the machine with all required packages etc\n# if asked to do so. (Or, actually, if not asked to not do).\nif [ \"$VMCHECKUP\" -eq 0 ]; then\n    _setup\n\n    # We store this exact configuration so that we can later on recreate\n    # the cluster in case that's required. E.g., when VMs break or after\n    # a reboot when using tmpfs support (which is actually an instance of\n    # VMs breaking).\n    cat > /etc/default/cuckoo-setup << EOF\n# Direct configuration values.\nWIN7=\"$WIN7\"\nVMCOUNT=\"$VMCOUNT\"\nISOFILE=\"$ISOFILE\"\nSERIALKEY=\"$SERIALKEY\"\nTMPFS=\"$TMPFS\"\nTAGS=\"$TAGS\"\nINTERFACES=\"$INTERFACES\"\nDEPENDENCIES=\"$DEPENDENCIES\"\nBASEDIR=\"$BASEDIR\"\nLONGTERM=\"$LONGTERM\"\nCPUCOUNT=\"$CPUCOUNT\"\n\n# Values set based on configuration values.\nEGGNAME=\"$EGGNAME\"\nMOUNTOS=\"$MOUNTOS\"\nWINOS=\"$WINOS\"\nEOF\nfi\n\n# The mount directory must exist and it must not be empty.\nif [ ! -d \"$MOUNT\" ] || [ -z \"$(ls -A \"$MOUNT\")\" ]; then\n    mkdir -p \"$MOUNT\"\n    mount -o loop,ro \"$ISOFILE\" \"$MOUNT\"\nfi\n\n# Remove the vms directory as we don't want broken remainders\n# in there later on such as symbolic links.\nrm -rf \"$VMS\"\n\nmkdir -p \"$VMS\" \"$VMBACKUP\" \"$VMMOUNT\"\nchown cuckoo:cuckoo \"$VMS\" \"$VMBACKUP\" \"$VMMOUNT\"\n\n# In the case of tmpfs support we first setup the vmmount and all that so to\n# recover any VMs that were not actually broken, but were just missing\n# symbolic links and some files copied over. At this point, however, we do not\n# setup the entire tmpfs thing yet, though, as that would just require a lot\n# of file copying even though we might have to do this right again after\n# creating new VMs.\n_initialize_from_backup 0\n\n# We then create new VMs if required.\n_create_virtual_machines\n\n# Initialize all VMs.\n_initialize_from_backup \"$TMPFS\"\n"
  },
  {
    "path": "utils/smtp_sinkhole.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport asyncore\nimport argparse\nimport os\n\nfrom datetime import datetime\nfrom smtpd import SMTPServer\n\nclass SmtpSink(SMTPServer):\n    \"\"\"SMTP Sinkhole server.\"\"\"\n\n    # Where mails should be saved.\n    mail_dir = None\n\n    def process_message(self, peer, mailfrom, rcpttos, data):\n        \"\"\"Custom mail processing used to save mails to disk.\"\"\"\n        # Save message to disk only if path is passed.\n        if self.mail_dir:\n            file_name = \"%s\" % datetime.now().strftime(\"%Y%m%d%H%M%S\")\n\n            # Duplicate check.\n            i = 0\n            while os.path.exists(os.path.join(self.mail_dir, file_name + str(i))):\n                i += 1\n\n            file_name = file_name + str(i)\n            with open(os.path.join(self.mail_dir, file_name), \"w\") as mail:\n                mail.write(data)\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser(prog=\"smtp_sinkhole.py\",\n                                     usage=\"%(prog)s [host [port]]\",\n                                     description=\"SMTP Sinkhole\")\n    parser.add_argument(\"host\", nargs=\"?\", default=\"127.0.0.1\")\n    parser.add_argument(\"port\", nargs=\"?\", type=int, default=1025)\n    parser.add_argument(\"--dir\", default=None,\n                        help=\"Directory used to dump emails.\")\n\n    args = parser.parse_args()\n\n    s = SmtpSink((args.host, args.port), None)\n    s.mail_dir = args.dir\n\n    try:\n        asyncore.loop()\n    except KeyboardInterrupt:\n        pass\n"
  },
  {
    "path": "utils/start-distributed.sh",
    "content": "#!/bin/sh\n\nDISTADDR=\"127.0.0.1\"\n. /etc/default/cuckoo\n\nsudo service uwsgi start cuckoo-distributed\nsudo service nginx start\n\nsudo start cuckoo-distributed-instance INSTANCE=dist.status\nsudo start cuckoo-distributed-instance INSTANCE=dist.scheduler\n\nfor worker in $(curl -s \"$DISTADDR:9003/api/node?mode=workers\"); do\n    sudo start cuckoo-distributed-instance \"INSTANCE=$worker\"\ndone\n"
  },
  {
    "path": "utils/stats.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport os.path\nimport sys\nimport time\n\nsys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), \"..\"))\n\nfrom lib.cuckoo.core.database import Database, TASK_PENDING, TASK_RUNNING\nfrom lib.cuckoo.core.database import TASK_COMPLETED, TASK_RECOVERED, TASK_REPORTED\nfrom lib.cuckoo.core.database import TASK_FAILED_ANALYSIS, TASK_FAILED_PROCESSING, TASK_FAILED_REPORTING\n\ndef timestamp(dt):\n    \"\"\"Returns the timestamp of a datetime object.\"\"\"\n    return time.mktime(dt.timetuple())\n\ndef main():\n    db = Database()\n\n    print(\"%d samples in db\" % db.count_samples())\n    print(\"%d tasks in db\" % db.count_tasks())\n\n    states = (\n        TASK_PENDING, TASK_RUNNING,\n        TASK_COMPLETED, TASK_RECOVERED, TASK_REPORTED,\n        TASK_FAILED_ANALYSIS, TASK_FAILED_PROCESSING, TASK_FAILED_REPORTING\n    )\n\n    for state in states:\n        print(\"%s %d tasks\" % (state, db.count_tasks(state)))\n\n    # Later on we might be interested in only calculating stats for all\n    # tasks starting at a certain offset, because the Cuckoo daemon may\n    # have been restarted at some point in time.\n    offset = None\n\n    # For the following stats we're only interested in completed tasks.\n    tasks = db.list_tasks(offset=offset, status=TASK_COMPLETED)\n    tasks += db.list_tasks(offset=offset, status=TASK_REPORTED)\n\n    if tasks:\n        # Get the time when the first task started.\n        started = min(timestamp(task.started_on) for task in tasks)\n\n        # Get the time when the last task completed.\n        stamps = []\n        for task in tasks:\n            try:\n                stamps.append(timestamp(task.completed_on))\n            except AttributeError:\n                pass\n\n        completed = max(stamps)\n\n        # Get the amount of tasks that actually completed.\n        finished = len(tasks)\n\n        hourly = 60 * 60 * finished / (completed - started)\n\n        print(\"roughly %d tasks an hour\" % int(hourly))\n        print(\"roughly %d tasks a day\" % int(24 * hourly))\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "utils/stop-distributed.sh",
    "content": "#!/bin/sh\n\nDISTADDR=\"127.0.0.1\"\n. /etc/default/cuckoo\n\nfor worker in $(curl -s \"$DISTADDR:9003/api/node?mode=workers\"); do\n    sudo stop cuckoo-distributed-instance \"INSTANCE=$worker\"\ndone\n\nsudo stop cuckoo-distributed-instance INSTANCE=dist.status\nsudo stop cuckoo-distributed-instance INSTANCE=dist.scheduler\n\nsudo service uwsgi stop cuckoo-distributed\nsudo service nginx stop\n"
  },
  {
    "path": "utils/submit.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2010-2013 Claudio Guarnieri.\n# Copyright (C) 2014-2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport argparse\nimport fnmatch\nimport logging\nimport os\nimport random\nimport sys\n\ntry:\n    import requests\n    HAVE_REQUESTS = True\nexcept ImportError:\n    HAVE_REQUESTS = False\n\nsys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), \"..\"))\n\nfrom lib.cuckoo.common.colors import bold, green, red, yellow\nfrom lib.cuckoo.common.objects import File\nfrom lib.cuckoo.common.utils import to_unicode\nfrom lib.cuckoo.core.database import Database\n\ndef main():\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"target\", type=str, nargs=\"?\", help=\"URL, path to the file or folder to analyze\")\n    parser.add_argument(\"-d\", \"--debug\", action=\"store_true\", help=\"Enable debug logging\")\n    parser.add_argument(\"--remote\", type=str, action=\"store\", default=None, help=\"Specify IP:port to a Cuckoo API server to submit remotely\", required=False)\n    parser.add_argument(\"--url\", action=\"store_true\", default=False, help=\"Specify whether the target is an URL\", required=False)\n    parser.add_argument(\"--package\", type=str, action=\"store\", default=\"\", help=\"Specify an analysis package\", required=False)\n    parser.add_argument(\"--custom\", type=str, action=\"store\", default=\"\", help=\"Specify any custom value\", required=False)\n    parser.add_argument(\"--owner\", type=str, action=\"store\", default=\"\", help=\"Specify the task owner\", required=False)\n    parser.add_argument(\"--timeout\", type=int, action=\"store\", default=0, help=\"Specify an analysis timeout\", required=False)\n    parser.add_argument(\"-o\", \"--options\", type=str, action=\"store\", default=\"\", help=\"Specify options for the analysis package (e.g. \\\"name=value,name2=value2\\\")\", required=False)\n    parser.add_argument(\"--priority\", type=int, action=\"store\", default=1, help=\"Specify a priority for the analysis represented by an integer\", required=False)\n    parser.add_argument(\"--machine\", type=str, action=\"store\", default=\"\", help=\"Specify the identifier of a machine you want to use\", required=False)\n    parser.add_argument(\"--platform\", type=str, action=\"store\", default=\"\", help=\"Specify the operating system platform you want to use (windows/darwin/linux)\", required=False)\n    parser.add_argument(\"--memory\", action=\"store_true\", default=False, help=\"Enable to take a memory dump of the analysis machine\", required=False)\n    parser.add_argument(\"--enforce-timeout\", action=\"store_true\", default=False, help=\"Enable to force the analysis to run for the full timeout period\", required=False)\n    parser.add_argument(\"--clock\", type=str, action=\"store\", default=None, help=\"Set virtual machine clock\", required=False)\n    parser.add_argument(\"--tags\", type=str, action=\"store\", default=None, help=\"Specify tags identifier of a machine you want to use\", required=False)\n    parser.add_argument(\"--baseline\", action=\"store_true\", default=None, help=\"Run a baseline analysis\", required=False)\n    parser.add_argument(\"--max\", type=int, action=\"store\", default=None, help=\"Maximum samples to add in a row\", required=False)\n    parser.add_argument(\"--pattern\", type=str, action=\"store\", default=None, help=\"Pattern of files to submit\", required=False)\n    parser.add_argument(\"--shuffle\", action=\"store_true\", default=False, help=\"Shuffle samples before submitting them\", required=False)\n    parser.add_argument(\"--unique\", action=\"store_true\", default=False, help=\"Only submit new samples, ignore duplicates\", required=False)\n    parser.add_argument(\"--quiet\", action=\"store_true\", default=False, help=\"Only print text on failure\", required=False)\n\n    try:\n        args = parser.parse_args()\n    except IOError as e:\n        parser.error(e)\n        return False\n\n    if not args.baseline and not args.target:\n        print \"No file or URL has been specified!\"\n        exit(1)\n\n    # If the quiet flag has been set, then we also disable the \"warning\"\n    # level of the logging module. (E.g., when pydeep has not been installed,\n    # there will be a warning message, because Cuckoo can't resolve the\n    # ssdeep hash of this particular sample.)\n    if args.debug:\n        logging.basicConfig(level=logging.DEBUG)\n    else:\n        logging.basicConfig()\n\n    if args.quiet:\n        logging.disable(logging.WARNING)\n\n    db = Database()\n\n    if args.url:\n        target = to_unicode(args.target)\n        if args.remote:\n            if not HAVE_REQUESTS:\n                print(bold(red(\"Error\")) + \": you need to install python-requests (`pip install requests`)\")\n                return False\n\n            url = \"http://{0}/tasks/create/url\".format(args.remote)\n\n            data = dict(\n                url=target,\n                package=args.package,\n                timeout=args.timeout,\n                options=args.options,\n                priority=args.priority,\n                machine=args.machine,\n                platform=args.platform,\n                memory=args.memory,\n                enforce_timeout=args.enforce_timeout,\n                custom=args.custom,\n                owner=args.owner,\n                tags=args.tags\n            )\n\n            try:\n                response = requests.post(url, data=data)\n            except Exception as e:\n                print(bold(red(\"Error\")) + \": unable to send URL: {0}\".format(e))\n                return False\n\n            json = response.json()\n            task_id = json[\"task_id\"]\n        else:\n            task_id = db.add_url(target,\n                                 package=args.package,\n                                 timeout=args.timeout,\n                                 options=args.options,\n                                 priority=args.priority,\n                                 machine=args.machine,\n                                 platform=args.platform,\n                                 custom=args.custom,\n                                 owner=args.owner,\n                                 memory=args.memory,\n                                 enforce_timeout=args.enforce_timeout,\n                                 clock=args.clock,\n                                 tags=args.tags)\n\n        if task_id:\n            if not args.quiet:\n                print(bold(green(\"Success\")) + u\": URL \\\"{0}\\\" added as task with ID {1}\".format(target, task_id))\n        else:\n            print(bold(red(\"Error\")) + \": adding task to database\")\n    elif args.baseline:\n        if args.remote:\n            print \"Remote baseline support has not yet been implemented.\"\n            exit(1)\n\n        task_id = db.add_baseline(args.timeout, args.owner, args.machine,\n                                  args.memory)\n        if task_id:\n            if not args.quiet:\n                print(bold(green(\"Success\")) + u\": Baseline analysis added as task with ID {0}\".format(task_id))\n        else:\n            print(bold(red(\"Error\")) + \": adding task to database\")\n    else:\n        target = to_unicode(args.target)\n\n        # Get absolute path to deal with relative.\n        path = to_unicode(os.path.abspath(target))\n\n        if not os.path.exists(path):\n            print(bold(red(\"Error\")) + u\": the specified file/folder does not exist at path \\\"{0}\\\"\".format(path))\n            return False\n\n        files = []\n        if os.path.isdir(path):\n            for dirname, dirnames, filenames in os.walk(path):\n                for file_name in filenames:\n                    file_path = os.path.join(dirname, file_name)\n\n                    if os.path.isfile(file_path):\n                        if args.pattern:\n                            if fnmatch.fnmatch(file_name, args.pattern):\n                                files.append(to_unicode(file_path))\n                        else:\n                            files.append(to_unicode(file_path))\n        else:\n            files.append(path)\n\n        if args.shuffle:\n            random.shuffle(files)\n        else:\n            files = sorted(files)\n\n        for file_path in files:\n            if not File(file_path).get_size():\n                if not args.quiet:\n                    print(bold(yellow(\"Empty\") + \": sample {0} (skipping file)\".format(file_path)))\n\n                continue\n\n            if args.max is not None:\n                # Break if the maximum number of samples has been reached.\n                if not args.max:\n                    break\n\n                args.max -= 1\n\n            if args.remote:\n                if not HAVE_REQUESTS:\n                    print(bold(red(\"Error\")) + \": you need to install python-requests (`pip install requests`)\")\n                    return False\n\n                url = \"http://{0}/tasks/create/file\".format(args.remote)\n\n                files = dict(\n                    file=open(file_path, \"rb\"),\n                    filename=os.path.basename(file_path)\n                )\n\n                data = dict(\n                    package=args.package,\n                    timeout=args.timeout,\n                    options=args.options,\n                    priority=args.priority,\n                    machine=args.machine,\n                    platform=args.platform,\n                    memory=args.memory,\n                    enforce_timeout=args.enforce_timeout,\n                    custom=args.custom,\n                    owner=args.owner,\n                    tags=args.tags\n                )\n\n                try:\n                    response = requests.post(url, files=files, data=data)\n                except Exception as e:\n                    print(bold(red(\"Error\")) + \": unable to send file: {0}\".format(e))\n                    return False\n\n                json = response.json()\n                task_id = json[\"task_id\"]\n            else:\n                if args.unique:\n                    sha256 = File(file_path).get_sha256()\n                    if not db.find_sample(sha256=sha256) is None:\n                        msg = \": Sample {0} (skipping file)\".format(file_path)\n                        if not args.quiet:\n                            print(bold(yellow(\"Duplicate\")) + msg)\n                        continue\n\n                task_id = db.add_path(file_path=file_path,\n                                      package=args.package,\n                                      timeout=args.timeout,\n                                      options=args.options,\n                                      priority=args.priority,\n                                      machine=args.machine,\n                                      platform=args.platform,\n                                      custom=args.custom,\n                                      owner=args.owner,\n                                      memory=args.memory,\n                                      enforce_timeout=args.enforce_timeout,\n                                      clock=args.clock,\n                                      tags=args.tags)\n\n            if task_id:\n                if not args.quiet:\n                    print(bold(green(\"Success\")) + u\": File \\\"{0}\\\" added as task with ID {1}\".format(file_path, task_id))\n            else:\n                print(bold(red(\"Error\")) + \": adding task to database\")\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "utils/suricata.sh",
    "content": "#!/bin/sh\n\n# Install Suricata.\n# $ sudo apt-get install software-properties-common\n# $ sudo add-apt-repository ppa:oisf/suricata-stable\n# $ sudo apt-get update\n# $ sudo apt-get install suricata\n#\n# Setup Suricata configuration.\n#\n# In /etc/default/suricata, set RUN to \"no\".\n#\n# In /etc/suricata/suricata.yaml apply the following changes;\n# * Set \"unix-command.enabled\" to \"yes\".\n# * Set \"unix-command.filename\" to \"cuckoo.socket\".\n# * Set \"outputs.eve-log.enabled\" to \"yes\".\n# * Set \"run-as.user to \"your cuckoo user\"\n# * Set \"run-as.group to \"your cuckoo user group\"\n# * TODO More items.\n#\n# Add \"@reboot /opt/cuckoo/utils/suricata.sh\" to the root crontab.\n\n. /etc/default/cuckoo\n\n# Do we want to run Suricata in the background?\nif [ \"$SURICATA\" -eq 0 ]; then\n    exit\nfi\n\nmkdir /var/run/suricata\nchown cuckoo:cuckoo /var/run/suricata\n\nsuricata --unix-socket -D\n\nwhile [ ! -e /var/run/suricata/cuckoo.socket ]; do\n    sleep 1\ndone\n"
  },
  {
    "path": "utils/vpncheck.py",
    "content": "#!/usr/bin/env python\n# Copyright (C) 2016 Cuckoo Foundation.\n# This file is part of Cuckoo Sandbox - http://www.cuckoosandbox.org\n# See the file 'docs/LICENSE' for copying permission.\n\nimport argparse\nimport fcntl\nimport os\nimport socket\nimport struct\nimport sys\n\nsys.path.append(os.path.join(os.path.abspath(os.path.dirname(__file__)), \"..\"))\n\nfrom lib.cuckoo.core.rooter import rooter, vpns\nfrom lib.cuckoo.core.startup import init_rooter, init_routing\n\nSIOCGIFADDR = 0x8915\n\ndef get_ip_address(interface):\n    \"\"\"Retrieves the local IP address of a network interface.\"\"\"\n    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)\n    buf = fcntl.ioctl(s.fileno(), SIOCGIFADDR, struct.pack(\"256s\", interface))\n    return socket.inet_ntoa(buf[20:24])\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"server\", nargs=\"?\", default=\"/tmp/cuckoo-rooter\", help=\"Unix socket path of the server\")\n    parser.add_argument(\"client\", nargs=\"?\", default=\"/tmp/cuckoo-vpncheck\", help=\"Unix socket path of this client\")\n    parser.add_argument(\"-v\", \"--verbose\", action=\"store_true\", help=\"Enable verbose logging\")\n    args = parser.parse_args()\n\n    if os.path.exists(args.client):\n        os.unlink(args.client)\n\n    init_rooter()\n    init_routing()\n\n    error = 0\n    for vpn, status in rooter(\"vpn_status\").items():\n        if vpn not in vpns:\n            print \"Not a configured VPN\", vpn\n            continue\n\n        if not rooter(\"nic_available\", vpns[vpn].interface):\n            print>>sys.stderr, \"VPN is no longer available\", vpn\n            error = 1\n            continue\n\n        ipaddr = get_ip_address(vpns[vpn].interface)\n\n        rooter(\"forward_enable\", vpns[vpn].interface, vpns[vpn].interface, ipaddr)\n        rooter(\"srcroute_enable\", vpns[vpn].rt_table, ipaddr)\n\n        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n\n        try:\n            sock.bind((ipaddr, 0))\n            sock.connect((\"myip.cuckoo.sh\", 80))\n            sock.send(\"GET / HTTP/1.0\\r\\nHost: myip.cuckoo.sh\\r\\n\\r\\n\")\n            ret = sock.recv(4096).split(\"\\r\\n\\r\\n\", 1)[-1]\n\n            if args.verbose:\n                print vpns[vpn].name, ipaddr, ret\n        except socket.error:\n            print>>sys.stderr, \"Unable to connect through VPN\", vpn\n            error = 1\n\n        rooter(\"forward_disable\", vpns[vpn].interface, vpns[vpn].interface, ipaddr)\n        rooter(\"srcroute_disable\", vpns[vpn].rt_table, ipaddr)\n\n    exit(error)\n"
  }
]